def create_instance(vm, public_nic, flavor, image): """`image` is a dictionary which should contain the keys: 'backend_id', 'format' and 'metadata' metadata value should be a dictionary. """ # Handle arguments to CreateInstance() as a dictionary, # initialize it based on a deployment-specific value. # This enables the administrator to override deployment-specific # arguments, such as the disk template to use, name of os provider # and hypervisor-specific parameters at will (see Synnefo #785, #835). # kw = vm.backend.get_create_params() kw['mode'] = 'create' kw['name'] = vm.backend_vm_id # Defined in settings.GANETI_CREATEINSTANCE_KWARGS kw['disk_template'] = flavor.disk_template kw['disks'] = [{"size": flavor.disk * 1024}] provider = flavor.disk_provider if provider: kw['disks'][0]['provider'] = provider kw['disks'][0]['origin'] = flavor.disk_origin kw['nics'] = [{"name": public_nic.backend_uuid, "network": public_nic.network.backend_id, "ip": public_nic.ipv4}] # Defined in settings.GANETI_CREATEINSTANCE_KWARGS # kw['os'] = settings.GANETI_OS_PROVIDER kw['ip_check'] = False kw['name_check'] = False # Do not specific a node explicitly, have # Ganeti use an iallocator instead #kw['pnode'] = rapi.GetNodes()[0] kw['dry_run'] = settings.TEST kw['beparams'] = { 'auto_balance': True, 'vcpus': flavor.cpu, 'memory': flavor.ram} kw['osparams'] = { 'config_url': vm.config_url, # Store image id and format to Ganeti 'img_id': image['backend_id'], 'img_format': image['format']} # Use opportunistic locking kw['opportunistic_locking'] = settings.GANETI_USE_OPPORTUNISTIC_LOCKING # Defined in settings.GANETI_CREATEINSTANCE_KWARGS # kw['hvparams'] = dict(serial_console=False) log.debug("Creating instance %s", utils.hide_pass(kw)) with pooled_rapi_client(vm) as client: return client.CreateInstance(**kw)
def create_instance(vm, public_nic, flavor, image): """`image` is a dictionary which should contain the keys: 'backend_id', 'format' and 'metadata' metadata value should be a dictionary. """ # Handle arguments to CreateInstance() as a dictionary, # initialize it based on a deployment-specific value. # This enables the administrator to override deployment-specific # arguments, such as the disk template to use, name of os provider # and hypervisor-specific parameters at will (see Synnefo #785, #835). # kw = vm.backend.get_create_params() kw['mode'] = 'create' kw['name'] = vm.backend_vm_id # Defined in settings.GANETI_CREATEINSTANCE_KWARGS kw['disk_template'] = flavor.disk_template kw['disks'] = [{"size": flavor.disk * 1024}] provider = flavor.disk_provider if provider: kw['disks'][0]['provider'] = provider kw['disks'][0]['origin'] = flavor.disk_origin kw['nics'] = [public_nic] if vm.backend.use_hotplug(): kw['hotplug'] = True # Defined in settings.GANETI_CREATEINSTANCE_KWARGS # kw['os'] = settings.GANETI_OS_PROVIDER kw['ip_check'] = False kw['name_check'] = False # Do not specific a node explicitly, have # Ganeti use an iallocator instead #kw['pnode'] = rapi.GetNodes()[0] kw['dry_run'] = settings.TEST kw['beparams'] = { 'auto_balance': True, 'vcpus': flavor.cpu, 'memory': flavor.ram} kw['osparams'] = { 'config_url': vm.config_url, # Store image id and format to Ganeti 'img_id': image['backend_id'], 'img_format': image['format']} # Defined in settings.GANETI_CREATEINSTANCE_KWARGS # kw['hvparams'] = dict(serial_console=False) log.debug("Creating instance %s", utils.hide_pass(kw)) with pooled_rapi_client(vm) as client: return client.CreateInstance(**kw)
def test_hidden_pass(self): foo = {'osparams': {'img_passwd': 'pass'}, 'bar': 'foo'} after = {'osparams': {'img_passwd': 'xxxxxxxx'}, 'bar': 'foo'} self.assertEqual(after, utils.hide_pass(foo))
def test_no_osparams(self): foo = {'foo': 'bar'} self.assertTrue(foo is utils.hide_pass(foo)) foo = {'osparams': {}, 'bar': 'foo'} self.assertTrue(foo is utils.hide_pass(foo))
def create_instance(vm, nics, flavor, image): """`image` is a dictionary which should contain the keys: 'backend_id', 'format' and 'metadata' metadata value should be a dictionary. """ # Handle arguments to CreateInstance() as a dictionary, # initialize it based on a deployment-specific value. # This enables the administrator to override deployment-specific # arguments, such as the disk template to use, name of os provider # and hypervisor-specific parameters at will (see Synnefo #785, #835). # kw = vm.backend.get_create_params() kw['mode'] = 'create' kw['name'] = vm.backend_vm_id # Defined in settings.GANETI_CREATEINSTANCE_KWARGS kw['disk_template'] = flavor.disk_template kw['disks'] = [{"size": flavor.disk * 1024}] provider = flavor.disk_provider if provider: kw['disks'][0]['provider'] = provider kw['disks'][0]['origin'] = flavor.disk_origin extra_disk_params = settings.GANETI_DISK_PROVIDER_KWARGS.get(provider) if extra_disk_params is not None: kw["disks"][0].update(extra_disk_params) kw['nics'] = [{ "name": nic.backend_uuid, "network": nic.network.backend_id, "ip": nic.ipv4_address } for nic in nics] backend = vm.backend depend_jobs = [] for nic in nics: bnet, job_ids = ensure_network_is_active(backend, nic.network_id) depend_jobs.extend(job_ids) kw["depends"] = create_job_dependencies(depend_jobs) # Defined in settings.GANETI_CREATEINSTANCE_KWARGS # kw['os'] = settings.GANETI_OS_PROVIDER kw['ip_check'] = False kw['name_check'] = False # Do not specific a node explicitly, have # Ganeti use an iallocator instead #kw['pnode'] = rapi.GetNodes()[0] kw['dry_run'] = settings.TEST kw['beparams'] = { 'auto_balance': True, 'vcpus': flavor.cpu, 'memory': flavor.ram } kw['osparams'] = { 'config_url': vm.config_url, # Store image id and format to Ganeti 'img_id': image['backend_id'], 'img_format': image['format'] } # Use opportunistic locking kw['opportunistic_locking'] = settings.GANETI_USE_OPPORTUNISTIC_LOCKING # Defined in settings.GANETI_CREATEINSTANCE_KWARGS # kw['hvparams'] = dict(serial_console=False) log.debug("Creating instance %s", utils.hide_pass(kw)) with pooled_rapi_client(vm) as client: return client.CreateInstance(**kw)