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)
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")
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")
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
def create_randomnumber(self, length): util = CommonUtil() return util.generate_randnumber(length)
def create_randomnumber(self,length): util=CommonUtil() return util.generate_randnumber(length)
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