Example #1
0
    def POST(self):
        x = web.input(id='0', m_ip='', mp_user='', mp_pass='', ethname='')
        util = CommonUtil(x.m_ip, x.mp_user, x.mp_pass)
        result = util.create_ssh_masterToAgent(ethname=x.ethname)
        phymachine = objects.PhysicalMachineInfoObject.get_by_uid(x.id)
        additional_info = dict(
            phymachine.additional_info) if phymachine.additional_info else {}
        res = {}
        if result:
            res["result"] = "success"
            additional_info["init_status"] = "wait"
            PhysicalMachineInfo.update(phymachine,
                                       {'additional_info': additional_info})
            db().commit()
            #必须在启动子线程之前把数据库session更新到database
            #否则会和子线程中对数据的修改造成冲突
            t = threading.Thread(target=self.threadupdatestatus,
                                 args=(
                                     x.id,
                                     util,
                                 ))
            t.start()
        else:
            additional_info["init_status"] = False
            PhysicalMachineInfo.update(phymachine,
                                       {'additional_info': additional_info})
            db().commit()

        return json.dumps(res)
Example #2
0
 def copyfile_to_agent(cls, power_ip, filesrc=None, targetsrc=None):
     util = CommonUtil(ip=power_ip)
     if filesrc:
         filesrc = filesrc
     else:
         filesrc = "/opt/net_probe.rb"
     if targetsrc:
         targetsrc = targetsrc
     else:
         targetsrc = "/usr/libexec/mcollective/mcollective/agent/"
     util.copyfile(filesrc, targetsrc, "mcollective")
Example #3
0
 def copyfile_to_agent(cls,power_ip,filesrc=None,targetsrc=None):
     util=CommonUtil(ip=power_ip)
     if filesrc:
        filesrc = filesrc
     else:
        filesrc = "/opt/net_probe.rb"
     if targetsrc:
        targetsrc = targetsrc
     else:   
        targetsrc = "/usr/libexec/mcollective/mcollective/agent/"
     util.copyfile(filesrc,targetsrc,"mcollective")
Example #4
0
 def handlerMachine(self, pid):
     try:
         p = objects.PhysicalMachineInfoObject.get_by_uid(int(pid))
         util = CommonUtil(p.ip, p.mp_username, p.mp_passwd)
         res = util.create_ssh_masterToAgent(ethname=p.ethname)
         additional_info = dict(
             p.additional_info) if p.additional_info else {}
         #additional_info["init_status"]=res
         #循环到当前agent上去读取/root/initnode_res
         #读取到True则表示init_node.sh在节点上成功执行
         if res:
             try:
                 util.excute_initnodeshell()
                 time.sleep(1)
                 util.getshellresulst()
                 util.copynailgunagent()
                 additional_info["init_status"] = True
             except Exception, e:
                 logger.info(p.ip + u"读取initnode_res文件异常")
                 additional_info["init_status"] = False
         else:
    def serialize_node(cls, cluster_attrs, node):
        """Serialize a single node."""
        #if node.cluster.cluster_type==3:
           #cluster_attrs['cobbler']['profile']="bclinux7.1"
        serialized_node = {
            'uid': node.uid,
            'power_address': node.power_ip,
            'name': objects.Node.make_slave_name(node),
            # right now it duplicates to avoid possible issues
            'slave_name': objects.Node.make_slave_name(node),
            'hostname': node.fqdn,
            'power_pass': cls.get_ssh_key_path(node),
            'profile': cluster_attrs['cobbler']['profile'],
            'power_type': 'ssh',
            'power_user': '******',
            'name_servers': '\"%s\"' % settings.DNS_SERVERS,
            'name_servers_search': '\"%s\"' % settings.DNS_SEARCH,
            'netboot_enabled': '1',
            # For provisioning phase
            'kernel_options': {
                'netcfg/choose_interface': objects.Node.get_admin_physical_iface(node).mac,
                'udevrules': cls.interfaces_mapping_for_udev(node)},
            'ks_meta': {
                'pm_data': {
                    'ks_spaces': node.attributes.volumes,
                    'kernel_params': objects.Node.get_kernel_params(node)},
                'fuel_version': node.cluster.fuel_version,
                'puppet_auto_setup': 1,
                'puppet_master': settings.PUPPET_MASTER_HOST,
                'puppet_enable': 0,
                'mco_auto_setup': 1,
                'install_log_2_syslog': 1,
                'mco_pskey': settings.MCO_PSKEY,
                'mco_vhost': settings.MCO_VHOST,
                'mco_host': settings.MCO_HOST,
                'mco_user': settings.MCO_USER,
                'mco_password': settings.MCO_PASSWORD,
                'mco_connector': settings.MCO_CONNECTOR,
                'mco_enable': 1,
                'auth_key': "\"%s\"" % cluster_attrs.get('auth_key', ''),
                'authorized_keys':
                ["\"%s\"" % key for key in settings.AUTHORIZED_KEYS],
                'master_ip': settings.MASTER_IP,
                'timezone': settings.TIMEZONE,
            }}

        provision_data = cluster_attrs.get('provision')
        if provision_data:
            if provision_data['method'] == consts.PROVISION_METHODS.image:
                serialized_node['ks_meta']['image_data'] = \
                    provision_data['image_data']

        orchestrator_data = objects.Release.get_orchestrator_data_dict(
            node.cluster.release)
        if orchestrator_data:
            serialized_node['ks_meta']['repo_metadata'] = \
                orchestrator_data['repo_metadata']

        vlan_splinters = cluster_attrs.get('vlan_splinters', {})
        if vlan_splinters.get('vswitch') == 'kernel_lt':
            serialized_node['ks_meta']['kernel_lt'] = 1

        mellanox_data = cluster_attrs.get('neutron_mellanox')
        if mellanox_data:
            serialized_node['ks_meta'].update({
                'mlnx_vf_num': mellanox_data['vf_num'],
                'mlnx_plugin_mode': mellanox_data['plugin'],
                'mlnx_iser_enabled': cluster_attrs['storage']['iser'],
            })
            # Add relevant kernel parameter when using Mellanox SR-IOV
            # and/or iSER (which works on top of a probed virtual function)
            # unless it was explicitly added by the user
            pm_data = serialized_node['ks_meta']['pm_data']
            if ((mellanox_data['plugin'] == 'ethernet' or
                    cluster_attrs['storage']['iser'] is True) and
                    'intel_iommu=' not in pm_data['kernel_params']):
                        pm_data['kernel_params'] += ' intel_iommu=on'

        net_manager = objects.Node.get_network_manager(node)
        gw = net_manager.get_default_gateway(node.id)
        #serialized_node['ks_meta'].update({'gw': gw}) 
        util=CommonUtil()
        serialized_node['ks_meta'].update({'gw': util.format_gwip()}) 
        serialized_node['ks_meta'].update(
            {'admin_net': net_manager.get_admin_network_group(node.id).cidr}
        )

        serialized_node.update(cls.serialize_interfaces(node))

        return serialized_node
Example #6
0
 def create_randomnumber(self, length):
     util = CommonUtil()
     return util.generate_randnumber(length)
 def create_randomnumber(self,length):
   util=CommonUtil()
   return util.generate_randnumber(length)
Example #8
0
    def serialize_node(cls, cluster_attrs, node):
        """Serialize a single node."""
        #if node.cluster.cluster_type==3:
        #cluster_attrs['cobbler']['profile']="bclinux7.1"
        serialized_node = {
            'uid': node.uid,
            'power_address': node.power_ip,
            'name': objects.Node.make_slave_name(node),
            # right now it duplicates to avoid possible issues
            'slave_name': objects.Node.make_slave_name(node),
            'hostname': node.fqdn,
            'power_pass': cls.get_ssh_key_path(node),
            'profile': cluster_attrs['cobbler']['profile'],
            'power_type': 'ssh',
            'power_user': '******',
            'name_servers': '\"%s\"' % settings.DNS_SERVERS,
            'name_servers_search': '\"%s\"' % settings.DNS_SEARCH,
            'netboot_enabled': '1',
            # For provisioning phase
            'kernel_options': {
                'netcfg/choose_interface':
                objects.Node.get_admin_physical_iface(node).mac,
                'udevrules':
                cls.interfaces_mapping_for_udev(node)
            },
            'ks_meta': {
                'mysql_disk':
                node.user_set.get('mysql_disk'),
                'var_dir_disk':
                node.user_set.get('var_dir_disk'),
                'pm_data': {
                    'ks_spaces': node.attributes.volumes,
                    'kernel_params': objects.Node.get_kernel_params(node)
                },
                'fuel_version':
                node.cluster.fuel_version,
                'puppet_auto_setup':
                1,
                'puppet_master':
                settings.PUPPET_MASTER_HOST,
                'puppet_enable':
                0,
                'mco_auto_setup':
                1,
                'install_log_2_syslog':
                1,
                'mco_pskey':
                settings.MCO_PSKEY,
                'mco_vhost':
                settings.MCO_VHOST,
                'mco_host':
                settings.MCO_HOST,
                'mco_user':
                settings.MCO_USER,
                'mco_password':
                settings.MCO_PASSWORD,
                'mco_connector':
                settings.MCO_CONNECTOR,
                'mco_enable':
                1,
                'auth_key':
                "\"%s\"" % cluster_attrs.get('auth_key', ''),
                'authorized_keys':
                ["\"%s\"" % key for key in settings.AUTHORIZED_KEYS],
                'master_ip':
                settings.MASTER_IP,
                'timezone':
                settings.TIMEZONE,
            }
        }

        provision_data = cluster_attrs.get('provision')
        if provision_data:
            if provision_data['method'] == consts.PROVISION_METHODS.image:
                serialized_node['ks_meta']['image_data'] = \
                    provision_data['image_data']

        orchestrator_data = objects.Release.get_orchestrator_data_dict(
            node.cluster.release)
        if orchestrator_data:
            serialized_node['ks_meta']['repo_metadata'] = \
                orchestrator_data['repo_metadata']

        vlan_splinters = cluster_attrs.get('vlan_splinters', {})
        if vlan_splinters.get('vswitch') == 'kernel_lt':
            serialized_node['ks_meta']['kernel_lt'] = 1

        mellanox_data = cluster_attrs.get('neutron_mellanox')
        if mellanox_data:
            serialized_node['ks_meta'].update({
                'mlnx_vf_num':
                mellanox_data['vf_num'],
                'mlnx_plugin_mode':
                mellanox_data['plugin'],
                'mlnx_iser_enabled':
                cluster_attrs['storage']['iser'],
            })
            # Add relevant kernel parameter when using Mellanox SR-IOV
            # and/or iSER (which works on top of a probed virtual function)
            # unless it was explicitly added by the user
            pm_data = serialized_node['ks_meta']['pm_data']
            if ((mellanox_data['plugin'] == 'ethernet'
                 or cluster_attrs['storage']['iser'] is True)
                    and 'intel_iommu=' not in pm_data['kernel_params']):
                pm_data['kernel_params'] += ' intel_iommu=on'

        net_manager = objects.Node.get_network_manager(node)
        gw = net_manager.get_default_gateway(node.id)
        #serialized_node['ks_meta'].update({'gw': gw})
        util = CommonUtil()
        serialized_node['ks_meta'].update({'gw': util.format_gwip()})
        serialized_node['ks_meta'].update(
            {'admin_net': net_manager.get_admin_network_group(node.id).cidr})

        serialized_node.update(cls.serialize_interfaces(node))

        return serialized_node