def test_network_addresses(self): # Machine is off ip_addresses = vb_get_network_addresses(machine_name=BOOTABLE_BASE_BOX_NAME) network_count = len(ip_addresses) self.assertEqual(network_count, 0) # Machine is up again vb_start_vm(BOOTABLE_BASE_BOX_NAME) ip_addresses = vb_wait_for_network_address(20, machine_name=BOOTABLE_BASE_BOX_NAME) network_count = len(ip_addresses) self.assertGreater(network_count, 0) for ip_address in ip_addresses: self.assertIsIpAddress(ip_address)
def test_start_stop(self): for i in range(2): machine = vb_start_vm(BOOTABLE_BASE_BOX_NAME, 20000) self.assertEqual(machine_get_machinestate_str(machine), "Running") machine = vb_stop_vm(BOOTABLE_BASE_BOX_NAME) self.assertEqual(machine_get_machinestate_str(machine), "PoweredOff")
def test_network_addresses(self): # Machine is off ip_addresses = vb_get_network_addresses( machine_name=BOOTABLE_BASE_BOX_NAME) network_count = len(ip_addresses) self.assertEqual(network_count, 0) # Machine is up again vb_start_vm(BOOTABLE_BASE_BOX_NAME) ip_addresses = vb_wait_for_network_address( 20, machine_name=BOOTABLE_BASE_BOX_NAME) network_count = len(ip_addresses) self.assertGreater(network_count, 0) for ip_address in ip_addresses: self.assertIsIpAddress(ip_address)
def start(name, call=None): """ Start a machine. @param name: Machine to start @type name: str @param call: Must be "action" @type call: str """ if call != 'action': raise SaltCloudSystemExit( 'The instance action must be called with -a or --action.') log.info("Starting machine: %s", name) vb_start_vm(name) machine = vb_get_machine(name) del machine["name"] return treat_machine_dict(machine)
def start(name, call=None): """ Start a machine. @param name: Machine to start @type name: str @param call: Must be "action" @type call: str """ if call != 'action': raise SaltCloudSystemExit( 'The instance action must be called with -a or --action.' ) log.info("Starting machine: %s", name) vb_start_vm(name) machine = vb_get_machine(name) del machine["name"] return treat_machine_dict(machine)
def create(vm_info): """ Creates a virtual machine from the given VM information. This is what is used to request a virtual machine to be created by the cloud provider, wait for it to become available, and then (optionally) log in and install Salt on it. Fires: "starting create" : This event is tagged salt/cloud/<vm name>/creating. The payload contains the names of the VM, profile and provider. @param vm_info { name: <str> profile: <dict> driver: <provider>:<profile> clonefrom: <vm_name> } @type vm_info dict @return dict of resulting vm. !!!Passwords can and should be included!!! """ try: # Check for required profile parameters before sending any API calls. if vm_info['profile'] and config.is_profile_configured( __opts__, __active_provider_name__ or 'virtualbox', vm_info['profile']) is False: return False except AttributeError: pass vm_name = vm_info["name"] deploy = config.get_cloud_config_value('deploy', vm_info, __opts__, search_global=False, default=True) wait_for_ip_timeout = config.get_cloud_config_value('wait_for_ip_timeout', vm_info, __opts__, default=60) boot_timeout = config.get_cloud_config_value('boot_timeout', vm_info, __opts__, default=60 * 1000) power = config.get_cloud_config_value('power_on', vm_info, __opts__, default=False) key_filename = config.get_cloud_config_value('private_key', vm_info, __opts__, search_global=False, default=None) log.debug("Going to fire event: starting create") # to create the virtual machine. request_kwargs = { 'name': vm_info['name'], 'clone_from': vm_info['clonefrom'] } vb_stop_vm(vm_info['clonefrom']) vb_clone_vm(vm_info['name'], vm_info['clonefrom']) # Booting and deploying if needed if power: vb_start_vm(vm_info['name']) ip = wait_for(vb_get_vm_address, timeout=60, step=1, default=[], func_kwargs={'name': vm_info['name']}) log.info("[ {0} ] IPv4 is: {1}".format(vm_info['name'], ip)) # ssh or smb using ip and install salt only if deploy is True if deploy: vm_info['ssh_host'] = ip ret = __utils__['cloud.bootstrap'](vm_info, __opts__) return ret
def create(vm_info): """ Creates a virtual machine from the given VM information. This is what is used to request a virtual machine to be created by the cloud provider, wait for it to become available, and then (optionally) log in and install Salt on it. Fires: "starting create" : This event is tagged salt/cloud/<vm name>/creating. The payload contains the names of the VM, profile and provider. @param vm_info { name: <str> profile: <dict> driver: <provider>:<profile> clonefrom: <vm_name> } @type vm_info dict @return dict of resulting vm. !!!Passwords can and should be included!!! """ try: # Check for required profile parameters before sending any API calls. if vm_info['profile'] and config.is_profile_configured( __opts__, __active_provider_name__ or 'virtualbox', vm_info['profile']) is False: return False except AttributeError: pass vm_name = vm_info["name"] deploy = config.get_cloud_config_value('deploy', vm_info, __opts__, search_global=False, default=True) wait_for_ip_timeout = config.get_cloud_config_value('wait_for_ip_timeout', vm_info, __opts__, default=60) boot_timeout = config.get_cloud_config_value('boot_timeout', vm_info, __opts__, default=60 * 1000) power = config.get_cloud_config_value('power_on', vm_info, __opts__, default=False) key_filename = config.get_cloud_config_value('private_key', vm_info, __opts__, search_global=False, default=None) log.debug("Going to fire event: starting create") cloud.fire_event('event', 'starting create', 'salt/cloud/{0}/creating'.format(vm_info['name']), { 'name': vm_info['name'], 'profile': vm_info['profile'], 'driver': vm_info['driver'], }, transport=__opts__['transport']) # to create the virtual machine. request_kwargs = { 'name': vm_info['name'], 'clone_from': vm_info['clonefrom'] } cloud.fire_event('event', 'requesting instance', 'salt/cloud/{0}/requesting'.format(vm_info['name']), request_kwargs, transport=__opts__['transport']) vm_result = vb_clone_vm(**request_kwargs) # Booting and deploying if needed if power: vb_start_vm(vm_name, timeout=boot_timeout) ips = vb_wait_for_network_address(wait_for_ip_timeout, machine_name=vm_name) if len(ips): ip = ips[0] log.info("[ {0} ] IPv4 is: {1}".format(vm_name, ip)) # ssh or smb using ip and install salt only if deploy is True if deploy: vm_info['key_filename'] = key_filename vm_info['ssh_host'] = ip res = cloud.bootstrap(vm_info, __opts__) vm_result.update(res) cloud.fire_event('event', 'created machine', 'salt/cloud/{0}/created'.format(vm_info['name']), vm_result, transport=__opts__['transport']) # Passwords should be included in this object!! return vm_result
def create(vm_info): """ Creates a virtual machine from the given VM information This is what is used to request a virtual machine to be created by the cloud provider, wait for it to become available, and then (optionally) log in and install Salt on it. Events fired: This function fires the event ``salt/cloud/vm_name/creating``, with the payload containing the names of the VM, profile, and provider. @param vm_info .. code-block:: text { name: <str> profile: <dict> driver: <provider>:<profile> clonefrom: <vm_name> clonemode: <mode> (default: state, choices: state, child, all) } @type vm_info dict @return dict of resulting vm. !!!Passwords can and should be included!!! """ try: # Check for required profile parameters before sending any API calls. if ( vm_info["profile"] and config.is_profile_configured( __opts__, __active_provider_name__ or "virtualbox", vm_info["profile"] ) is False ): return False except AttributeError: pass vm_name = vm_info["name"] deploy = config.get_cloud_config_value( "deploy", vm_info, __opts__, search_global=False, default=True ) wait_for_ip_timeout = config.get_cloud_config_value( "wait_for_ip_timeout", vm_info, __opts__, default=60 ) boot_timeout = config.get_cloud_config_value( "boot_timeout", vm_info, __opts__, default=60 * 1000 ) power = config.get_cloud_config_value("power_on", vm_info, __opts__, default=False) key_filename = config.get_cloud_config_value( "private_key", vm_info, __opts__, search_global=False, default=None ) clone_mode = map_clonemode(vm_info) wait_for_pattern = ( vm_info["waitforpattern"] if "waitforpattern" in vm_info.keys() else None ) interface_index = ( vm_info["interfaceindex"] if "interfaceindex" in vm_info.keys() else 0 ) log.debug("Going to fire event: starting create") __utils__["cloud.fire_event"]( "event", "starting create", "salt/cloud/{}/creating".format(vm_info["name"]), args=__utils__["cloud.filter_event"]( "creating", vm_info, ["name", "profile", "provider", "driver"] ), sock_dir=__opts__["sock_dir"], transport=__opts__["transport"], ) # to create the virtual machine. request_kwargs = { "name": vm_info["name"], "clone_from": vm_info["clonefrom"], "clone_mode": clone_mode, } __utils__["cloud.fire_event"]( "event", "requesting instance", "salt/cloud/{}/requesting".format(vm_info["name"]), args=__utils__["cloud.filter_event"]( "requesting", request_kwargs, list(request_kwargs) ), sock_dir=__opts__["sock_dir"], transport=__opts__["transport"], ) vm_result = vb_clone_vm(**request_kwargs) # Booting and deploying if needed if power: vb_start_vm(vm_name, timeout=boot_timeout) ips = vb_wait_for_network_address( wait_for_ip_timeout, machine_name=vm_name, wait_for_pattern=wait_for_pattern ) if ips: ip = ips[interface_index] log.info("[ %s ] IPv4 is: %s", vm_name, ip) # ssh or smb using ip and install salt only if deploy is True if deploy: vm_info["key_filename"] = key_filename vm_info["ssh_host"] = ip res = __utils__["cloud.bootstrap"](vm_info, __opts__) vm_result.update(res) __utils__["cloud.fire_event"]( "event", "created machine", "salt/cloud/{}/created".format(vm_info["name"]), args=__utils__["cloud.filter_event"]("created", vm_result, list(vm_result)), sock_dir=__opts__["sock_dir"], transport=__opts__["transport"], ) # Passwords should be included in this object!! return vm_result
def create(vm_info): ''' Creates a virtual machine from the given VM information This is what is used to request a virtual machine to be created by the cloud provider, wait for it to become available, and then (optionally) log in and install Salt on it. Events fired: This function fires the event ``salt/cloud/vm_name/creating``, with the payload containing the names of the VM, profile, and provider. @param vm_info .. code-block:: text { name: <str> profile: <dict> driver: <provider>:<profile> clonefrom: <vm_name> clonemode: <mode> (default: state, choices: state, child, all) } @type vm_info dict @return dict of resulting vm. !!!Passwords can and should be included!!! ''' try: # Check for required profile parameters before sending any API calls. if vm_info['profile'] and config.is_profile_configured( __opts__, __active_provider_name__ or 'virtualbox', vm_info['profile']) is False: return False except AttributeError: pass vm_name = vm_info["name"] deploy = config.get_cloud_config_value('deploy', vm_info, __opts__, search_global=False, default=True) wait_for_ip_timeout = config.get_cloud_config_value('wait_for_ip_timeout', vm_info, __opts__, default=60) boot_timeout = config.get_cloud_config_value('boot_timeout', vm_info, __opts__, default=60 * 1000) power = config.get_cloud_config_value('power_on', vm_info, __opts__, default=False) key_filename = config.get_cloud_config_value('private_key', vm_info, __opts__, search_global=False, default=None) clone_mode = map_clonemode(vm_info) wait_for_pattern = vm_info[ 'waitforpattern'] if 'waitforpattern' in vm_info.keys() else None interface_index = vm_info[ 'interfaceindex'] if 'interfaceindex' in vm_info.keys() else 0 log.debug("Going to fire event: starting create") __utils__['cloud.fire_event']( 'event', 'starting create', 'salt/cloud/{0}/creating'.format(vm_info['name']), args=__utils__['cloud.filter_event']( 'creating', vm_info, ['name', 'profile', 'provider', 'driver']), sock_dir=__opts__['sock_dir'], transport=__opts__['transport']) # to create the virtual machine. request_kwargs = { 'name': vm_info['name'], 'clone_from': vm_info['clonefrom'], 'clone_mode': clone_mode } __utils__['cloud.fire_event']( 'event', 'requesting instance', 'salt/cloud/{0}/requesting'.format(vm_info['name']), args=__utils__['cloud.filter_event']('requesting', request_kwargs, list(request_kwargs)), sock_dir=__opts__['sock_dir'], transport=__opts__['transport']) vm_result = vb_clone_vm(**request_kwargs) # Booting and deploying if needed if power: vb_start_vm(vm_name, timeout=boot_timeout) ips = vb_wait_for_network_address(wait_for_ip_timeout, machine_name=vm_name, wait_for_pattern=wait_for_pattern) if len(ips): ip = ips[interface_index] log.info("[ %s ] IPv4 is: %s", vm_name, ip) # ssh or smb using ip and install salt only if deploy is True if deploy: vm_info['key_filename'] = key_filename vm_info['ssh_host'] = ip res = __utils__['cloud.bootstrap'](vm_info, __opts__) vm_result.update(res) __utils__['cloud.fire_event']( 'event', 'created machine', 'salt/cloud/{0}/created'.format(vm_info['name']), args=__utils__['cloud.filter_event']('created', vm_result, list(vm_result)), sock_dir=__opts__['sock_dir'], transport=__opts__['transport']) # Passwords should be included in this object!! return vm_result
def create(vm_info): """ Creates a virtual machine from the given VM information. This is what is used to request a virtual machine to be created by the cloud provider, wait for it to become available, and then (optionally) log in and install Salt on it. Fires: "starting create" : This event is tagged salt/cloud/<vm name>/creating. The payload contains the names of the VM, profile and provider. @param vm_info { name: <str> profile: <dict> driver: <provider>:<profile> clonefrom: <vm_name> } @type vm_info dict @return dict of resulting vm. !!!Passwords can and should be included!!! """ try: # Check for required profile parameters before sending any API calls. if vm_info['profile'] and config.is_profile_configured( __opts__, __active_provider_name__ or 'virtualbox', vm_info['profile'] ) is False: return False except AttributeError: pass vm_name = vm_info["name"] deploy = config.get_cloud_config_value( 'deploy', vm_info, __opts__, search_global=False, default=True ) wait_for_ip_timeout = config.get_cloud_config_value( 'wait_for_ip_timeout', vm_info, __opts__, default=60 ) boot_timeout = config.get_cloud_config_value( 'boot_timeout', vm_info, __opts__, default=60 * 1000 ) power = config.get_cloud_config_value( 'power_on', vm_info, __opts__, default=False ) key_filename = config.get_cloud_config_value( 'private_key', vm_info, __opts__, search_global=False, default=None ) log.debug("Going to fire event: starting create") cloud.fire_event( 'event', 'starting create', 'salt/cloud/{0}/creating'.format(vm_info['name']), args={ 'name': vm_info['name'], 'profile': vm_info['profile'], 'driver': vm_info['driver'], }, sock_dir=__opts__['sock_dir'], transport=__opts__['transport'] ) # to create the virtual machine. request_kwargs = { 'name': vm_info['name'], 'clone_from': vm_info['clonefrom'] } cloud.fire_event( 'event', 'requesting instance', 'salt/cloud/{0}/requesting'.format(vm_info['name']), args=request_kwargs, sock_dir=__opts__['sock_dir'], transport=__opts__['transport'] ) vm_result = vb_clone_vm(**request_kwargs) # Booting and deploying if needed if power: vb_start_vm(vm_name, timeout=boot_timeout) ips = vb_wait_for_network_address(wait_for_ip_timeout, machine_name=vm_name) if len(ips): ip = ips[0] log.info("[ {0} ] IPv4 is: {1}".format(vm_name, ip)) # ssh or smb using ip and install salt only if deploy is True if deploy: vm_info['key_filename'] = key_filename vm_info['ssh_host'] = ip res = cloud.bootstrap(vm_info, __opts__) vm_result.update(res) cloud.fire_event( 'event', 'created machine', 'salt/cloud/{0}/created'.format(vm_info['name']), args=vm_result, sock_dir=__opts__['sock_dir'], transport=__opts__['transport'] ) # Passwords should be included in this object!! return vm_result