def delete(ctx, **kwargs): ctx.logger.info("Initializing {0} cloud driver" .format(Provider.CLOUDSTACK)) server_config = ctx.node.properties['server'] expunge = server_config.get(['expunge'][0], False) cloud_driver = get_cloud_driver(ctx) instance_id = ctx.instance.runtime_properties[CLOUDSTACK_ID_PROPERTY] if instance_id is None: raise NameError('Could not find node ID in runtime context: {0} ' .format(instance_id)) node = get_vm_by_id(ctx, cloud_driver, instance_id) if node is None: raise NameError('Could not find node with ID: {0} ' .format(instance_id)) ctx.logger.info('destroying vm: {0} expunge {1}'.format(node.name, expunge)) cloud_driver.destroy_node(node) delete_runtime_properties(ctx, RUNTIME_PROPERTIES_KEYS)
def delete(ctx, **kwargs): network_name = ctx.instance.runtime_properties[CLOUDSTACK_NAME_PROPERTY] cloud_driver = get_cloud_driver(ctx) network = get_network(cloud_driver, network_name) if not ctx.node.properties[USE_EXTERNAL_RESOURCE_PROPERTY] is True: # firewall_rules = [rule for rule in cloud_driver. # ex_list_egress_firewall_rules() if # network.id == rule.network_id] # # for rule in firewall_rules: # # ctx.logger.info('Deleting egress fw rule: {3}:{0}:{1}-{2} ' # 'from network: {4}'.format( # rule.cidr_list, rule.start_port, rule.end_port, # rule.protocol, network_name)) # # cloud_driver.ex_delete_egress_firewall_rule(rule) try: cloud_driver.ex_delete_network(network) except Exception as e: ctx.logger.warn('Network {0} may not have been deleted: {1}' .format(network_name, str(e))) return False pass else: ctx.logger.info('This is an external resource only removing ' 'runtime props') delete_runtime_properties(ctx, RUNTIME_PROPERTIES_KEYS) return True
def delete(ctx, **kwargs): ctx.logger.info("Initializing {0} cloud driver" .format(Provider.CLOUDSTACK)) server_config = ctx.node.properties['server'] expunge = server_config.get(['expunge'][0], False) cloud_driver = get_cloud_driver(ctx) instance_id = ctx.instance.runtime_properties[CLOUDSTACK_ID_PROPERTY] if instance_id is None: raise NameError('Could not find node ID in runtime context: {0} ' .format(instance_id)) node = get_vm_by_id(ctx, cloud_driver, instance_id) if node is None: raise NameError('Could not find node with ID: {0} ' .format(instance_id)) ctx.logger.info('destroying vm: {0} expunge {1}'.format(node.name, expunge)) cloud_driver.destroy_node(node) delete_runtime_properties(ctx, RUNTIME_PROPERTIES_KEYS)
def create(ctx, **kwargs): private_key_path = _get_private_key_path() pk_exists = _check_private_key_exists(private_key_path) if ctx.node.properties[USE_EXTERNAL_RESOURCE_PROPERTY] is True: if not pk_exists: delete_runtime_properties(ctx, RUNTIME_PROPERTIES_KEYS) raise NonRecoverableError( 'Failed to use external keypair (node {0}): the public key {1}' ' is available on Openstack, but the private key could not be ' 'found at {2}'.format(ctx.node.id, ctx.node.properties['resource_id'], private_key_path)) return if pk_exists: raise NonRecoverableError( "Can't create keypair - private key path already exists: {0}". format(private_key_path)) ctx.logger.info("Initializing {0} cloud driver".format( Provider.CLOUDSTACK)) cloud_driver = get_cloud_driver(ctx) keypair = { 'name': get_resource_id(ctx, KEYPAIR_CLOUDSTACK_TYPE), } keypair.update(ctx.node.properties['keypair']) #transform_resource_name(ctx, keypair) keypair = cloud_driver.create_key_pair(keypair['name']) # Cloudstack does not have an ID on keypair, so using name instead, # which is unique ctx.instance.runtime_properties[CLOUDSTACK_ID_PROPERTY] = keypair.name ctx.instance.runtime_properties[CLOUDSTACK_TYPE_PROPERTY] = \ KEYPAIR_CLOUDSTACK_TYPE ctx.instance.runtime_properties[CLOUDSTACK_NAME_PROPERTY] = keypair.name try: # write private key file _mkdir_p(os.path.dirname(private_key_path)) with open(private_key_path, 'w') as f: f.write(keypair.private_key) os.fchmod(f.fileno(), stat.S_IRUSR | stat.S_IWUSR) except Exception: _delete_private_key_file() delete_runtime_properties(ctx, RUNTIME_PROPERTIES_KEYS) raise
def create(ctx, **kwargs): private_key_path = _get_private_key_path() pk_exists = _check_private_key_exists(private_key_path) if ctx.node.properties[USE_EXTERNAL_RESOURCE_PROPERTY] is True: if not pk_exists: delete_runtime_properties(ctx, RUNTIME_PROPERTIES_KEYS) raise NonRecoverableError( 'Failed to use external keypair (node {0}): the public key {1}' ' is available on Openstack, but the private key could not be ' 'found at {2}'.format(ctx.node.id, ctx.node.properties['resource_id'], private_key_path)) return if pk_exists: raise NonRecoverableError( "Can't create keypair - private key path already exists: {0}" .format(private_key_path)) ctx.logger.info("Initializing {0} cloud driver" .format(Provider.CLOUDSTACK)) cloud_driver = get_cloud_driver(ctx) keypair = { 'name': get_resource_id(ctx, KEYPAIR_CLOUDSTACK_TYPE), } keypair.update(ctx.node.properties['keypair']) keypair = cloud_driver.create_key_pair(keypair['name']) # Cloudstack does not have an ID on keypair, so using name instead, # which is unique ctx.instance.runtime_properties[CLOUDSTACK_ID_PROPERTY] = keypair.name ctx.instance.runtime_properties[CLOUDSTACK_TYPE_PROPERTY] = \ KEYPAIR_CLOUDSTACK_TYPE ctx.instance.runtime_properties[CLOUDSTACK_NAME_PROPERTY] = keypair.name try: # write private key file _mkdir_p(os.path.dirname(private_key_path)) with open(private_key_path, 'w') as f: f.write(keypair.private_key) os.fchmod(f.fileno(), stat.S_IRUSR | stat.S_IWUSR) except Exception: _delete_private_key_file() delete_runtime_properties(ctx, RUNTIME_PROPERTIES_KEYS) raise
def delete(ctx, **kwargs): if not ctx.node.properties[USE_EXTERNAL_RESOURCE_PROPERTY]: ctx.logger.info('deleting keypair') _delete_private_key_file() ctx.logger.info("Initializing {0} cloud driver" .format(Provider.CLOUDSTACK)) cloud_driver = get_cloud_driver(ctx) key = get_key_pair(ctx, cloud_driver, ctx.instance.runtime_properties [CLOUDSTACK_ID_PROPERTY]) cloud_driver.delete_key_pair(key_pair=key) else: ctx.logger.info('not deleting keypair since an external keypair is ' 'being used') delete_runtime_properties(ctx, RUNTIME_PROPERTIES_KEYS)
def delete(ctx, **kwargs): if not ctx.node.properties[USE_EXTERNAL_RESOURCE_PROPERTY]: ctx.logger.info('deleting keypair') _delete_private_key_file() ctx.logger.info("Initializing {0} cloud driver".format( Provider.CLOUDSTACK)) cloud_driver = get_cloud_driver(ctx) key = get_key_pair( ctx, cloud_driver, ctx.instance.runtime_properties[CLOUDSTACK_ID_PROPERTY]) cloud_driver.delete_key_pair(key_pair=key) else: ctx.logger.info('not deleting keypair since an external keypair is ' 'being used') delete_runtime_properties(ctx, RUNTIME_PROPERTIES_KEYS)
def delete(ctx, **kwargs): network_name = ctx.instance.runtime_properties[CLOUDSTACK_NAME_PROPERTY] cloud_driver = get_cloud_driver(ctx) network = get_network(cloud_driver, network_name) if not ctx.node.properties[USE_EXTERNAL_RESOURCE_PROPERTY] is True: # firewall_rules = [rule for rule in cloud_driver. # ex_list_egress_firewall_rules() if # network.id == rule.network_id] # # for rule in firewall_rules: # # ctx.logger.info('Deleting egress fw rule: {3}:{0}:{1}-{2} ' # 'from network: {4}'.format( # rule.cidr_list, rule.start_port, rule.end_port, # rule.protocol, network_name)) # # cloud_driver.ex_delete_egress_firewall_rule(rule) try: cloud_driver.ex_delete_network(network) except Exception as e: ctx.logger.warn( 'Network {0} may not have been deleted: {1}'.format( network_name, str(e))) return False pass else: ctx.logger.info('This is an external resource only removing ' 'runtime props') delete_runtime_properties(ctx, RUNTIME_PROPERTIES_KEYS) return True