mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-11-04 05:12:30 +00:00 
			
		
		
		
	more for xCAT baremetal driver for OpenStack
This commit is contained in:
		@@ -150,8 +150,8 @@ class xCATBareMetalDriver(bm_driver.BareMetalDriver):
 | 
			
		||||
                             'error':str(e)})
 | 
			
		||||
                bm_driver._update_state(context, node, instance, baremetal_states.ERROR)
 | 
			
		||||
 | 
			
		||||
    def destroy(self, context, instance, network_info, block_device_info=None,
 | 
			
		||||
                destroy_disks=True):
 | 
			
		||||
    def destroy(self, instance, network_info, block_device_info=None,
 | 
			
		||||
                context=None):
 | 
			
		||||
        """Destroy (shutdown and delete) the specified instance.
 | 
			
		||||
 | 
			
		||||
        If the instance is not found (for example if networking failed), this
 | 
			
		||||
@@ -168,6 +168,7 @@ class xCATBareMetalDriver(bm_driver.BareMetalDriver):
 | 
			
		||||
        """
 | 
			
		||||
 	    #import pdb
 | 
			
		||||
	    #pdb.set_trace()
 | 
			
		||||
	    context = nova_context.get_admin_context()
 | 
			
		||||
        try:
 | 
			
		||||
            node = bm_driver._get_baremetal_node_by_instance_uuid(instance['uuid'])
 | 
			
		||||
            
 | 
			
		||||
 
 | 
			
		||||
@@ -137,6 +137,7 @@ class xCAT(object):
 | 
			
		||||
            LOG.warning(errstr)
 | 
			
		||||
            raise exception.xCATCommandError(errstr)
 | 
			
		||||
        else:
 | 
			
		||||
            self._wait_for_node_reboot(nodename)
 | 
			
		||||
            return power_states.ON
 | 
			
		||||
    
 | 
			
		||||
    def power_off_node(self, nodename):
 | 
			
		||||
@@ -199,6 +200,7 @@ class xCAT(object):
 | 
			
		||||
 | 
			
		||||
            if out:
 | 
			
		||||
                node,status = out.split(": ")
 | 
			
		||||
                status = status.strip()
 | 
			
		||||
                if status == "booted":
 | 
			
		||||
                    LOG.info(_("Deployment for node %s completed.")
 | 
			
		||||
                             % nodename)
 | 
			
		||||
@@ -226,7 +228,7 @@ class xCAT(object):
 | 
			
		||||
        locals = {'errstr':''}
 | 
			
		||||
 | 
			
		||||
        def _wait_for_reboot():
 | 
			
		||||
            out,err = self._exec_xcat_command("nodels %s nodelist.status" % nodename)
 | 
			
		||||
            out,err = self._exec_xcat_command("nodestat %s" % nodename)
 | 
			
		||||
            if err:
 | 
			
		||||
                locals['errstr'] = _("Error returned when quering node status"
 | 
			
		||||
                           " for node %s:%s") % (nodename, err)
 | 
			
		||||
@@ -235,7 +237,8 @@ class xCAT(object):
 | 
			
		||||
 | 
			
		||||
            if out:
 | 
			
		||||
                node,status = out.split(": ")
 | 
			
		||||
                if status == "booted":
 | 
			
		||||
                status = status.strip()
 | 
			
		||||
                if status == "sshd":
 | 
			
		||||
                    LOG.info(_("Rebooting node %s completed.")
 | 
			
		||||
                             % nodename)
 | 
			
		||||
                    raise loopingcall.LoopingCallDone()
 | 
			
		||||
 
 | 
			
		||||
@@ -12,23 +12,38 @@ B<opsaddbmnode> [B<-v>|B<--version>]
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
The B<opsaddbmnode> command registers xCAT nodes to an OpenStack cloud. 
 | 
			
		||||
The B<opsaddbmnode> command registers xCAT nodes to an OpenStack cloud. An OpenStack nova baremetal node registration command takes several node attributes:
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
An OpenStack nova baremetal node registration command takes several node attributes:
 | 
			
		||||
=item BMC ip addresss, user id and password
 | 
			
		||||
 | 
			
		||||
=item Name of nova compute host which will control this baremetal node
 | 
			
		||||
 | 
			
		||||
=item Number of CPUs in the node
 | 
			
		||||
 | 
			
		||||
=item Memory in the node (MB)
 | 
			
		||||
 | 
			
		||||
=item Local hard disk in the node (GB)
 | 
			
		||||
 | 
			
		||||
=item MAC address to provision the node
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
The opsaddbmnode command pulls the above baremetal node information from xCAT tables and calls "nova baremetal-node-create" to register the baremetal node with the OpenStack cloud.
 | 
			
		||||
 | 
			
		||||
Please make sure the following xCAT tables are filled with correct information for the given nodes before calling this command.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item ipmi (for BMC ip addresss, user id and password)
 | 
			
		||||
 | 
			
		||||
=item mac (for MAC address)
 | 
			
		||||
 | 
			
		||||
=item hwinv (for CPU, memory and disk info.)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 Parameters
 | 
			
		||||
 | 
			
		||||
I<noderage> is a comma separated node or node group names. 
 | 
			
		||||
@@ -56,7 +71,7 @@ I<noderage> is a comma separated node or node group names.
 | 
			
		||||
 | 
			
		||||
=over 3
 | 
			
		||||
 | 
			
		||||
=item 1.
 | 
			
		||||
=item 1
 | 
			
		||||
 | 
			
		||||
To register node1, node2 and node3 to OpenStack, sv1 is the compute host.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -90,6 +90,34 @@ setup_ip()
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#change hostname permanently
 | 
			
		||||
change_host_name()
 | 
			
		||||
{
 | 
			
		||||
    str_os_type=$1
 | 
			
		||||
    str_hostname=$2
 | 
			
		||||
 | 
			
		||||
    hostname $str_hostname
 | 
			
		||||
 | 
			
		||||
    if [ "$str_os_type" = "sles" ];then
 | 
			
		||||
        echo "Persistently changing the hostname not implemented yet."
 | 
			
		||||
    #debian ubuntu
 | 
			
		||||
    elif [ "$str_os_type" = "debian" ];then
 | 
			
		||||
        conf_file="/etc/hostname"
 | 
			
		||||
        echo "$str_hostname" > $conf_file
 | 
			
		||||
    else
 | 
			
		||||
        conf_file="/etc/sysconfig/network"
 | 
			
		||||
        if [ ! -f $conf_file ]; then
 | 
			
		||||
            touch $conf_file
 | 
			
		||||
        fi
 | 
			
		||||
        grep 'HOSTNAME' $conf_file 2>&1 > /dev/null
 | 
			
		||||
        if [ $? -eq 0 ]; then
 | 
			
		||||
            sed -i "s/HOSTNAME=.*/HOSTNAME=$str_hostname/" $conf_file
 | 
			
		||||
        else
 | 
			
		||||
            echo "HOSTNAME=$str_hostname" >> $conf_file
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
str_os_type=$(get_os_type)
 | 
			
		||||
echo "os_type=$str_os_type"
 | 
			
		||||
@@ -101,7 +129,7 @@ fi
 | 
			
		||||
 | 
			
		||||
#change the hostname
 | 
			
		||||
if [[ -n "$1" ]]; then
 | 
			
		||||
    hostname $1
 | 
			
		||||
    change_host_name $str_os_type $1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
#Add the openstack ip to the node
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,34 @@ get_os_type()
 | 
			
		||||
	echo "$str_os_type"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#change hostname permanently
 | 
			
		||||
change_host_name()
 | 
			
		||||
{
 | 
			
		||||
    str_os_type=$1
 | 
			
		||||
    str_hostname=$2
 | 
			
		||||
 | 
			
		||||
    hostname $str_hostname
 | 
			
		||||
 | 
			
		||||
    if [ "$str_os_type" = "sles" ];then
 | 
			
		||||
        echo "Persistently changing the hostname not implemented yet."
 | 
			
		||||
    #debian ubuntu
 | 
			
		||||
    elif [ "$str_os_type" = "debian" ];then
 | 
			
		||||
        conf_file="/etc/hostname"
 | 
			
		||||
        echo "$str_hostname" > $conf_file
 | 
			
		||||
    else
 | 
			
		||||
        conf_file="/etc/sysconfig/network"
 | 
			
		||||
        if [ ! -f $conf_file ]; then
 | 
			
		||||
            touch $conf_file
 | 
			
		||||
        fi
 | 
			
		||||
        grep 'HOSTNAME' $conf_file 2>&1 > /dev/null
 | 
			
		||||
        if [ $? -eq 0 ]; then
 | 
			
		||||
            sed -i "s/HOSTNAME=.*/HOSTNAME=$str_hostname/" $conf_file
 | 
			
		||||
        else
 | 
			
		||||
            echo "HOSTNAME=$str_hostname" >> $conf_file
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
str_os_type=$(get_os_type)
 | 
			
		||||
echo "os_type=$str_os_type"
 | 
			
		||||
@@ -37,7 +65,8 @@ if [ $str_os_type == "aix" ]; then
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
#change the hostname
 | 
			
		||||
hostname $NODE
 | 
			
		||||
#hostname $NODE
 | 
			
		||||
change_host_name $str_os_type $NODE
 | 
			
		||||
 | 
			
		||||
#remove the openstack ip from the node
 | 
			
		||||
if [[ -n $1 ]]; then
 | 
			
		||||
 
 | 
			
		||||
@@ -85,9 +85,8 @@ rm -rf $RPM_BUILD_ROOT
 | 
			
		||||
%post
 | 
			
		||||
#copy the postscripts under /installl/postscripts directory on MN only
 | 
			
		||||
if [ -f "/etc/xCATMN" ]; then
 | 
			
		||||
	cp $RPM_INSTALL_PREFIX0/share/xcat/openstack/postscripts/* /install/postscripts
 | 
			
		||||
	cp $RPM_INSTALL_PREFIX0/share/xcat/openstack/postscripts/* /install/postscripts/
 | 
			
		||||
fi
 | 
			
		||||
exit 0
 | 
			
		||||
 | 
			
		||||
%preun
 | 
			
		||||
#remove postscripts under /installl/postscripts directory on MN only
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user