def destroy(name, call=None, kwargs=None):  # pylint: disable=unused-argument
    '''
    Destroy a VM.

    CLI Examples:

    .. code-block:: bash

        salt-cloud -d myminion
        salt-cloud -a destroy myminion service_name=myservice
    '''
    if kwargs is None:
        kwargs = {}

    if call == 'function':
        raise SaltCloudSystemExit(
            'The destroy action must be called with -d, --destroy, '
            '-a or --action.'
        )

    compconn = get_conn(client_type='compute')

    node_data = show_instance(name, call='action')
    if node_data['storage_profile']['os_disk'].get('managed_disk'):
        vhd = node_data['storage_profile']['os_disk']['managed_disk']['id']
    else:
        vhd = node_data['storage_profile']['os_disk']['vhd']['uri']

    ret = {name: {}}
    log.debug('Deleting VM')
    result = compconn.virtual_machines.delete(node_data['resource_group'], name)
    result.wait()

    if __opts__.get('update_cachedir', False) is True:
        __utils__['cloud.delete_minion_cachedir'](
           name,
           __active_provider_name__.split(':')[0],
           __opts__
        )

    cleanup_disks = config.get_cloud_config_value(
        'cleanup_disks',
        get_configured_provider(),
        __opts__,
        search_global=False,
        default=False,
    )

    if cleanup_disks:
        cleanup_vhds = kwargs.get(
            'delete_vhd',
            config.get_cloud_config_value(
                'cleanup_vhds',
                get_configured_provider(),
                __opts__,
                search_global=False,
                default=False
            )
        )

        if cleanup_vhds:
            log.debug('Deleting vhd')

            comps = vhd.split('/')
            container = comps[-2]
            blob = comps[-1]

            ret[name]['delete_disk'] = {
                'delete_disks': cleanup_disks,
                'delete_vhd': cleanup_vhds,
                'container': container,
                'blob': blob,
            }

            if vhd.startswith('http'):
                ret[name]['data'] = delete_blob(
                    kwargs={'container': container, 'blob': blob},
                    call='function'
                )
            else:
                ret[name]['data'] = delete_managed_disk(
                    kwargs={'resource_group': node_data['resource_group'],
                            'container': container,
                            'blob': blob},
                    call='function'
                )

        cleanup_data_disks = kwargs.get(
            'delete_data_disks',
            config.get_cloud_config_value(
                'cleanup_data_disks',
                get_configured_provider(),
                __opts__,
                search_global=False,
                default=False
            )
        )

        if cleanup_data_disks:
            log.debug('Deleting data_disks')
            ret[name]['data_disks'] = {}

            for disk in node_data['storage_profile']['data_disks']:
                datavhd = disk.get('managed_disk', {}).get('id') or disk.get('vhd', {}).get('uri')
                comps = datavhd.split('/')
                container = comps[-2]
                blob = comps[-1]

                ret[name]['data_disks'][disk['name']] = {
                    'delete_disks': cleanup_disks,
                    'delete_vhd': cleanup_vhds,
                    'container': container,
                    'blob': blob,
                }

                if datavhd.startswith('http'):
                    ret[name]['data'] = delete_blob(
                        kwargs={'container': container, 'blob': blob},
                        call='function'
                    )
                else:
                    ret[name]['data'] = delete_managed_disk(
                        kwargs={'resource_group': node_data['resource_group'],
                                'container': container,
                                'blob': blob},
                        call='function'
                    )

    cleanup_interfaces = config.get_cloud_config_value(
        'cleanup_interfaces',
        get_configured_provider(),
        __opts__,
        search_global=False,
        default=False
    )

    if cleanup_interfaces:
        ret[name]['cleanup_network'] = {
            'cleanup_interfaces': cleanup_interfaces,
            'resource_group': node_data['resource_group'],
            'data': [],
        }

        ifaces = node_data['network_profile']['network_interfaces']
        for iface in ifaces:
            resource_group = iface['id'].split('/')[4]
            ret[name]['cleanup_network']['data'].append(
                delete_interface(
                    kwargs={
                        'resource_group': resource_group,
                        'iface_name': iface['name'],
                    },
                    call='function',
                )
            )

    return ret
def destroy ( name , call = None , kwargs = None ) : if kwargs is None : kwargs = { } if call == 'function' : raise SaltCloudSystemExit ( 'The destroy action must be called with -d, --destroy, ' '-a or --action.' ) compconn = get_conn ( client_type = 'compute' ) node_data = show_instance ( name , call = 'action' ) if node_data [ 'storage_profile' ] [ 'os_disk' ] . get ( 'managed_disk' ) : vhd = node_data [ 'storage_profile' ] [ 'os_disk' ] [ 'managed_disk' ] [ 'id' ] else : vhd = node_data [ 'storage_profile' ] [ 'os_disk' ] [ 'vhd' ] [ 'uri' ] ret = { name : { } } log . debug ( 'Deleting VM' ) result = compconn . virtual_machines . delete ( node_data [ 'resource_group' ] , name ) result . wait ( ) if __opts__ . get ( 'update_cachedir' , False ) is True : __utils__ [ 'cloud.delete_minion_cachedir' ] ( name , __active_provider_name__ . split ( ':' ) [ 0 ] , __opts__ ) cleanup_disks = config . get_cloud_config_value ( 'cleanup_disks' , get_configured_provider ( ) , __opts__ , search_global = False , default = False , ) if cleanup_disks : cleanup_vhds = kwargs . get ( 'delete_vhd' , config . get_cloud_config_value ( 'cleanup_vhds' , get_configured_provider ( ) , __opts__ , search_global = False , default = False ) ) if cleanup_vhds : log . debug ( 'Deleting vhd' ) comps = vhd . split ( '/' ) container = comps [ - 2 ] blob = comps [ - 1 ] ret [ name ] [ 'delete_disk' ] = { 'delete_disks' : cleanup_disks , 'delete_vhd' : cleanup_vhds , 'container' : container , 'blob' : blob , } if vhd . startswith ( 'http' ) : ret [ name ] [ 'data' ] = delete_blob ( kwargs = { 'container' : container , 'blob' : blob } , call = 'function' ) else : ret [ name ] [ 'data' ] = delete_managed_disk ( kwargs = { 'resource_group' : node_data [ 'resource_group' ] , 'container' : container , 'blob' : blob } , call = 'function' ) cleanup_data_disks = kwargs . get ( 'delete_data_disks' , config . get_cloud_config_value ( 'cleanup_data_disks' , get_configured_provider ( ) , __opts__ , search_global = False , default = False ) ) if cleanup_data_disks : log . debug ( 'Deleting data_disks' ) ret [ name ] [ 'data_disks' ] = { } for disk in node_data [ 'storage_profile' ] [ 'data_disks' ] : datavhd = disk . get ( 'managed_disk' , { } ) . get ( 'id' ) or disk . get ( 'vhd' , { } ) . get ( 'uri' ) comps = datavhd . split ( '/' ) container = comps [ - 2 ] blob = comps [ - 1 ] ret [ name ] [ 'data_disks' ] [ disk [ 'name' ] ] = { 'delete_disks' : cleanup_disks , 'delete_vhd' : cleanup_vhds , 'container' : container , 'blob' : blob , } if datavhd . startswith ( 'http' ) : ret [ name ] [ 'data' ] = delete_blob ( kwargs = { 'container' : container , 'blob' : blob } , call = 'function' ) else : ret [ name ] [ 'data' ] = delete_managed_disk ( kwargs = { 'resource_group' : node_data [ 'resource_group' ] , 'container' : container , 'blob' : blob } , call = 'function' ) cleanup_interfaces = config . get_cloud_config_value ( 'cleanup_interfaces' , get_configured_provider ( ) , __opts__ , search_global = False , default = False ) if cleanup_interfaces : ret [ name ] [ 'cleanup_network' ] = { 'cleanup_interfaces' : cleanup_interfaces , 'resource_group' : node_data [ 'resource_group' ] , 'data' : [ ] , } ifaces = node_data [ 'network_profile' ] [ 'network_interfaces' ] for iface in ifaces : resource_group = iface [ 'id' ] . split ( '/' ) [ 4 ] ret [ name ] [ 'cleanup_network' ] [ 'data' ] . append ( delete_interface ( kwargs = { 'resource_group' : resource_group , 'iface_name' : iface [ 'name' ] , } , call = 'function' , ) ) return ret
Destroy a VM.

    CLI Examples:

    .. code-block:: bash

        salt-cloud -d myminion
        salt-cloud -a destroy myminion service_name=myservice