It looks like there was either no CIB or it was configured improperly on
the machine I was working on. I will read the documentation on this to
better understand how I can use it in the future. Thanks Dejan.
Dejan Muhamedagic wrote:
> Hi,
>
> On Fri, Dec 19, 2008 at 09:46:36AM -0500, Jason Noble wrote:
>
>> The problem I was seeing was that $OCF_RESKEY_vmxpath was not being set,
>>
>
> It's supposed to be set by the user in the CIB. Or do you mean
> something else?
>
>
>> and even if it were, it could only start or stop a single virtual
>> machine.
>>
>
> Well, that was the point of my question: you can put more than
> one resource of this kind (vmware) in the CIB. Almost all RA
> handle only one instance.
>
> Thanks,
>
> Dejan
>
>
>> Rather than making the script try to parse multiple arguments
>> and loop through a list of machines, I decided to just put a "shim"
>> script in there to call the agent for each VM.
>>
>>
>> Dejan Muhamedagic wrote:
>>
>>> Hi,
>>>
>>> On Thu, Dec 18, 2008 at 11:48:46AM -0500, Jason Noble wrote:
>>>
>>>
>>>> I had a customer who tried to use this script, but it didn't work. I
>>>> made some modifications to the control script. Additionally, the
>>>> customer wanted to start/stop multiple machines. The solution
>>>> implemented makes the Resource Agent a simple script -- vmstart_all --
>>>> that makes multiple calls to vmstart in order to start/stop the virtual
>>>> machines.
>>>>
>>>>
>>> Thanks for sharing the RA. BTW, what's wrong with having multiple
>>> VM resources?
>>>
>>> Thanks,
>>>
>>> Dejan
>>>
>>>
>>>
>>>> Here is vmstart_all:
>>>>
>>>> #!/bin/bash
>>>> VMSTARTDIR="/etc/ha.d/resource.d"
>>>> # Start up multiple virtual machines
>>>> # enter one per line in the following format:
>>>> # $VMSTARTDIR/vmstart $1 directoryname
>>>> #
>>>> # where directoryname is the name of the
>>>> # directory that contains a .vmx file
>>>> $VMSTARTDIR/vmstart $1 vm1
>>>> $VMSTARTDIR/vmstart $1 vm2
>>>>
>>>> And here's the patch for vmstart:
>>>> --- vmstart.20081114 2008-12-18 11:02:30.000000000 -0500
>>>> +++ vmstart 2008-12-18 11:12:45.000000000 -0500
>>>> @@ -31,79 +31,106 @@
>>>> #################################################################
>>>>
>>>> # Source ocf shell functions
>>>> -#. ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs
>>>> -. /usr/lib64/heartbeat/ocf-shellfuncs
>>>> -#. /etc/ha.d/shellfuncs
>>>> +OCF_ROOT=/usr/lib/ocf
>>>> +. ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs
>>>> +#. /usr/lib64/heartbeat/ocf-shellfuncs
>>>> +. /etc/ha.d/shellfuncs
>>>> +
>>>> # Basic variables configuration
>>>> #################################################################
>>>>
>>>> # Path to the virtual machine configuration file
>>>> -VMXPATH="$OCF_RESKEY_vmxpath"
>>>> +#VMXPATH="$OCF_RESKEY_vmxpath"
>>>> +VMXPATH="/mnt/vmware/$2"
>>>>
>>>> # Path to the vmware-vim-cmd executable
>>>> -VIMSHBIN="$OCF_RESKEY_vimshbin"
>>>> +#VIMSHBIN="$OCF_RESKEY_vimshbin"
>>>> +VIMSHBIN="/usr/bin/vmware-vim-cmd"
>>>> +
>>>> +# Additional options to pass to vmware-vim-cmd executable
>>>> +VIMSHBINOPTS="-H localhost -O 904"
>>>> +
>>>> +# Print usage summary
>>>> +vmware_usage() {
>>>> +cat <<EOF
>>>> +usage: $0 VMDIR {start|stop|status|monitor|meta-data|validate-all}
>>>> +
>>>> +VMDIR A directory under $VMXPATH that contains a virtual machine.
>>>> +EOF
>>>> +}
>>>> +
>>>> +# Check for two parameters
>>>> +if [ "$2" == "" ]; then
>>>> + vmware_usage
>>>> + exit 0
>>>> +fi
>>>> +
>>>>
>>>> # vmware-vim-cmd functions
>>>> #################################################################
>>>>
>>>> # Get virtual machine vid
>>>> vmware_get_vid() {
>>>> -$VIMSHBIN vmsvc/getallvms 2>/dev/null | awk '/\/'"$1"'/ {print $1}'
>>>> +$VIMSHBIN $VIMSHBINOPTS vmsvc/getallvms 2>/dev/null | awk '/\/'"$1"'/
>>>> {print $1}'
>>>> }
>>>>
>>>> # Is the vm waiting for input after a migration?
>>>> vmware_uuid_alt() {
>>>> -$VIMSHBIN vmsvc/message $1 2>/dev/null | awk /^msg.uuid.altered/
>>>> +$VIMSHBIN $VIMSHBINOPTS vmsvc/message $1 2>/dev/null | awk
>>>> /^msg.uuid.altered/
>>>> }
>>>>
>>>> # Get message id
>>>> vmware_get_msgid() {
>>>> -$VIMSHBIN vmsvc/message $1 2>/dev/null | awk '/^Virtual machine
>>>> message/ {print $4}' | awk -F : '{print $1}'
>>>> +$VIMSHBIN $VIMSHBINOPTS vmsvc/message $1 2>/dev/null | awk '/^Virtual
>>>> machine message/ {print $4}' | awk -F : '{print $1}'
>>>> }
>>>>
>>>> # Answers message
>>>> vmware_answer_msg() {
>>>> -$VIMSHBIN vmsvc/message $1 $2 $3 &> /dev/null
>>>> +$VIMSHBIN $VIMSHBINOPTS vmsvc/message $1 $3 $4 &> /dev/null
>>>> }
>>>>
>>>> # Register a virtual machine
>>>> vmware_register_vm() {
>>>> -$VIMSHBIN solo/registervm '"'$1'"' &> /dev/null
>>>> +$VIMSHBIN $VIMSHBINOPTS solo/registervm '"'$1'"' &> /dev/null
>>>> }
>>>>
>>>> # Unregister a virtual machine
>>>> vmware_unregister_vm() {
>>>> -$VIMSHBIN vmsvc/unregister $1 &> /dev/null
>>>> +$VIMSHBIN $VIMSHBINOPTS vmsvc/unregister $1 &> /dev/null
>>>> }
>>>>
>>>> # Start a virtual machine
>>>> vmware_poweron_vm() {
>>>> -$VIMSHBIN vmsvc/power.on $1 &> /dev/null
>>>> +$VIMSHBIN $VIMSHBINOPTS vmsvc/power.on $1 &> /dev/null
>>>> }
>>>>
>>>> # Suspend a virtual machine
>>>> vmware_suspend_vm() {
>>>> -$VIMSHBIN vmsvc/power.suspend $1 &> /dev/null
>>>> +$VIMSHBIN $VIMSHBINOPTS vmsvc/power.suspend $1 &> /dev/null
>>>> }
>>>>
>>>> # Get virtual machine power state
>>>> vmware_get_status() {
>>>> -$VIMSHBIN vmsvc/power.getstate $1 2>/dev/null | awk '/^Powered on/ ||
>>>> /^Powered off/ || /^Suspended/'
>>>> +$VIMSHBIN $VIMSHBINOPTS vmsvc/power.getstate $1 2>/dev/null | awk
>>>> '/^Powered on/ || /^Powered off/ || /^Suspended/'
>>>> }
>>>>
>>>> # Get vid of missing virtual machines
>>>> vmware_get_broken() {
>>>> -$VIMSHBIN vmsvc/getallvm 2>&1 | awk -F "'" '/^Skipping/ {print $2}'
>>>> +$VIMSHBIN $VIMSHBINOPTS vmsvc/getallvm 2>&1 | awk -F "'" '/^Skipping/
>>>> {print $2}'
>>>> }
>>>>
>>>> # Variables depending on the above functions
>>>> #################################################################
>>>>
>>>> # Directory containing the virtual machine
>>>> -VMXDIR="`dirname "$VMXPATH"`"
>>>> +#VMXDIR="`dirname "$VMXPATH"`"
>>>> +VMXDIR=$VMXPATH
>>>>
>>>> # Basename of the configuration file
>>>> -RELVMXPATH="`basename "$VMXPATH"`"
>>>> +#RELVMXPATH="`basename "$VMXPATH"`"
>>>> +RELVMXPATH=`basename "$(ls -1 $VMXPATH/*.vmx 2>/dev/null| head -n1)"
>>>> 2>/dev/null`
>>>> +
>>>> +VMXPATH=$VMXDIR/$RELVMXPATH
>>>>
>>>> # Vid of the virtual machine (can be empty if the vm is not registered)
>>>> VMID=`vmware_get_vid "$RELVMXPATH"`
>>>> @@ -120,15 +147,6 @@
>>>> # Main functions
>>>> #################################################################
>>>>
>>>> -# Print usage summary
>>>> -vmware_usage() {
>>>> -cat <<END
>>>> -usage: $0 {start|stop|status|monitor|meta-data|validate-all}
>>>> -
>>>> -Expects to have a fully populated OCF RA-compliant environment set.
>>>> -END
>>>> -}
>>>> -
>>>> # Check for mandatory files presence and consistency
>>>> vmware_validate() {
>>>> if [ -z "`pidof vmware-hostd`" ]; then
>>>> @@ -182,7 +200,7 @@
>>>> if [ -z "$VMID" ]; then
>>>> # VM is not registered, need to register
>>>> ocf_log info "Virtual machine $VM is not registered"
>>>> -ocf_log info "Registering Virtual machine $VM"
>>>> +ocf_log info "Registering Virtual machine $VM >>>> $VMXPATH"
>>>> vmware_register_vm "$VMXPATH"
>>>> VMID=`vmware_get_vid "$RELVMXPATH"`
>>>> if [ -z "$VMID" ]; then
>>>> @@ -269,7 +287,7 @@
>>>>
>>>> # Print metadata informations
>>>> meta_data() {
>>>> -cat <<END
>>>> +cat <<EOF
>>>> <?xml version="1.0"?>
>>>> <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
>>>> <resource-agent name="vmwarevm">
>>>> @@ -305,7 +323,7 @@
>>>> <action name="meta-data" timeout="5" />
>>>> </actions>
>>>> </resource-agent>
>>>> -END
>>>> +EOF
>>>> }
>>>>
>>>> # See how we were called
>>>> _______________________________________________
>>>> Linux-HA mailing list
>>>> [email protected]
>>>> http://lists.linux-ha.org/mailman/listinfo/linux-ha
>>>> See also: http://linux-ha.org/ReportingProblems
>>>>
>>>>
>>> _______________________________________________
>>> Linux-HA mailing list
>>> [email protected]
>>> http://lists.linux-ha.org/mailman/listinfo/linux-ha
>>> See also: http://linux-ha.org/ReportingProblems
>>>
>>>
>> _______________________________________________
>> Linux-HA mailing list
>> [email protected]
>> http://lists.linux-ha.org/mailman/listinfo/linux-ha
>> See also: http://linux-ha.org/ReportingProblems
>>
> _______________________________________________
> Linux-HA mailing list
> [email protected]
> http://lists.linux-ha.org/mailman/listinfo/linux-ha
> See also: http://linux-ha.org/ReportingProblems
>
_______________________________________________
Linux-HA mailing list
[email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha
See also: http://linux-ha.org/ReportingProblems