示例#1
0
	def create_slave(self, **kwargs):
		site = self.site
		provider = self.provider
		
		fuel_version = self.master_fuel_version
		current_release = self.current_release
		meta_info = FUEL_META_INFO[fuel_version]
		slave_os = meta_info['releases'][current_release]['os']
		
		config = self.config.copy()
		config.update(utils.filter_kwargs(kwargs))
		
		slave_cpu = config['slave_cpu']
		slave_ram = config['slave_ram']
		slave_disk = config['slave_disk']
		
		node_id = provider.get_max_node_id(site) + 1
		node_name = 'node-' + str(node_id)
		
		network_list = provider.get_networks(site)
		
		try:
			print('Creating {0} on site {1}... '.format(node_name, site), end='')
			sys.stdout.flush()
			provider.install_vm_node(site, node_name, slave_cpu, slave_ram,
									boot='pxe',
									disk_size=slave_disk,
									networks=network_list,
									os_variant=slave_os,
									persistent_boot=True)
			print('OK')			
		finally:
			pass
示例#2
0
	def create_master(self, **kwargs):
		site = self.site
		provider = self.provider
		
		config = self.config.copy()
		config.update(utils.filter_kwargs(kwargs))
		
		base_iso = self.base_iso
		fuel_version = self.iso_fuel_version
		meta_info = FUEL_META_INFO[fuel_version]
		master_os = meta_info['master']['os']
		
		vm_install_wait = config['vm_install_wait']
		search_domain = config['search_domain']
				
		admin_net = self.__get_admin_network()
		admin_cidr = admin_net['cidr']
		admin_gw = admin_net['gateway']
		admin_mask = admin_net['netmask']
		public_net = self.__get_public_network()
		public_net_id = self.public_net_id
		public_cidr = public_net['cidr']
		public_gw = public_net['gateway']
		public_mask = public_net['netmask']		
		
		master_ip = self.master_ip
		public_ip = self.public_master_ip
		master_hostname = config['master_hostname']
		master_name = config['master_name']
		master_user = config['master_user']
		master_pass = config['master_pass']
		master_prompt = config['master_prompt']
		master_cpu = config['master_cpu']
		master_ram = config['master_ram']
		master_disk = config['master_disk']
		
		disable_public = config['disable_public']
		disable_snapshot = config['disable_snapshot']
		
		iso_image = None

		try:
			print('Cleaning up... ', end='')
			sys.stdout.flush()
			provider.clean_vm_nodes(site)
			provider.clean_networks(site)
			print('OK')
	
			print('Creating virtual networks... ', end='')
			sys.stdout.flush()
			network_list = provider.create_networks(site, self.networks)
			print('OK')
	
			print('Making the custom ISO image... ', end='')
			sys.stdout.flush()
			iso_image = utils.make_custom_iso_image(base_iso, site,
													data_dir=IMAGE_DIR,
													ipaddr=master_ip,
													gateway=admin_gw,
													dns=admin_gw,
													netmask=admin_mask,
													hostname=master_hostname)
			print('OK')
	
			print('Installing Fuel Master node... ', end='')
			sys.stdout.flush()
			provider.install_vm_node(site, master_name,
									vcpus=master_cpu, ram=master_ram,
									iso_image=iso_image,
									disk_size=master_disk,
									networks=network_list,
									os_variant=master_os,
									wait=vm_install_wait,
									delete_media=True)
			print('OK')
			
			self.wait_for_product_vm(45*60)
			
			self.disable_master_public = disable_public
			if not disable_public:
				print('Enabling outbound network/internet access for the product VM... ', end='')
				sys.stdout.flush()
				self.run_remote_script(ENABLE_VM_NETWORK_SCRIPT, 
									public_net_id, public_ip, public_mask, 
									public_gw, public_gw, search_domain,
									public_cidr)
				print('OK')
			
			print('Setting up Fuel Master VM... ', end='')
			sys.stdout.flush()	
			self.run_remote_script(SETUP_FUEL_SCRIPT)
			print('OK')
			
			if not disable_snapshot:
				self.shutdown_master()
				print('Creating snapshot for Fuel Master recovery... ', end='')
				sys.stdout.flush()	
				provider.create_vm_snapshot(site, master_name, 'fuel_recovery', 'snapshot for fuel recovery')
				print('OK')
				self.start_master()
				self.wait_for_product_vm()			
			
		finally:
			if iso_image and os.path.exists(iso_image):
				try:
					os.remove(iso_image)
				except Exception, e:
					print(str(e))
					print('Warning: ISO image {0} still exists!'.format(iso_image))