Authors:

Custom Fencing

Here are detailed instructions how to add a custom agent:

Pre oVirt 3.5 releases

a) Add your new agent to VdsFenceType option_value in vdc_options table for the relevant cluster version b) Add agent options mappings to VdsFenceOptionMapping option_value in vdc_options table for the relevant cluster version c) If the agent maps actually to another agent , add that to FenceAgentMapping option_value in vdc_options Example :

    Adding zzz agent support for version 3.3 that maps internally to ipmi and have just port setting (from: port, slot, secure) that maps to the fencing script ipport
    a) VdsFenceType for 3.3 becomes "apc,apc_snmp,bladecenter,cisco_ucs,drac5,eps,ilo,ilo2,ilo3,ilo4,ipmilan,rsa,rsb,wti,zzz"
     b) VdsFenceOptionMapping for 3.3 becomes "apc:secure=secure,port=ipport,slot=port;apc_snmp:port=port;bladecenter:secure=secure,port=ipport,slot=port;cisco_ucs:secure=ssl,slot=port; drac5:secure=secure,slot=port;eps:slot=port;ilo:secure=ssl,port=ipport;ipmilan:;ilo2:secure=ssl,port=ipport;ilo3:;ilo4:;rsa:secure=secure,port=ipport;rsb:;wti:secure=secure,port=ipport,slot=port;zzz:port=ipport"
     c) FenceAgentMapping becomes "ilo2=ilo,ilo3=ipmilan,ilo4=ipmilan,zzz=ipmilan"

NOTES

1) Please backup your database 2) You should restart the engine for this to take place 3) Custom definitions will be overridden in your next upgrade , for the long run please fill RFE so it will be part of the supported agents

oVirt 3.5

In oVirt 3.5 we had added custom fence configuration keys :

  CustomFenceAgentMapping - Maps a fencing agent to other agent implicitly. 
     Format : ((\\w)+[=](\\w)+[,]{0,1})+. 
     Example: agent1=agent2,agent3=agent4
  CustomFenceAgentDefaultParams - Default parameters per agent. 
     Format ([\\w]+([=][\\w]+){0,1}[,]{0,1})+. 
     Example: agent1=key1=val1,flag;key2=val2
  CustomVdsFenceOptionMapping - secure/port/slot mapping support per agent. 
     Format ([\\w]+[:]([\\w]*[=][\\w]*[,]{0,1}[;]{0,1}){0,3}[;]{0,1})+. 
     Example: agent1:secure=secure;agent2:port=ipport,slot=slot
  CustomVdsFenceType - Fence agents types. 
     Format ((\\w)+[,]{0,1})+. 
     Example: agent1,agent2
  CustomFencePowerWaitParam - Maps a fencing agent to the param for delay on/off actions. 
     Format : ((\\w)+[=](\\w)+[,]{0,1})+. 
     Example: agent1=power_wait,agent2=delay

Those keys are accessible from the engine-config util

Example 1 : Adding zzz agent support for version 3.5 that maps internally to ipmi and have just port setting (from: port, slot, secure) that maps to the fencing script ipport

    engine-config -s CustomVdsFenceType="zzz"
    engine-config -s CustomFenceAgentMapping="zzz=ipmilan"
    engine-config -s CustomVdsFenceOptionMapping="zzz:port=ipport"
    engine-config -s CustomFencePowerWaitParam="zzz=power_wait"

Example 2: Adding a new custom fencing device ‘yyy’ that have just port setting (from: port, slot, secure) that maps to the fencing script ipport First you have to insure that you have a script named fence_yyy in /usr/sbin directory of all servers that might be selected as proxy host for fencing operations

    engine-config -s CustomVdsFenceType="yyy"
    engine-config -s CustomVdsFenceOptionMapping="yyy:port=ipport"
    engine-config -s CustomFencePowerWaitParam="yyy=power_wait"

Example 3: Adding support for Intel Modular agent

   engine-config -s CustomVdsFenceType="intelmodular"
   engine-config -s CustomFencePowerWaitParam="intelmodular=power_wait"
   engine-config -s CustomVdsFenceOptionMapping="intelmodular:port=port"

NOTE : if you have a power management card that needs no other parameters to be set, you still have to set it mapping as empty example

   engine-config -s CustomVdsFenceOptionMapping="zzz:"

In this case those changes remains valid after oVirt upgrades as well, so please use that method from oVirt 3.5 and on.