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)
Example #4
0
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