docs: def create(vm_, call=None):
      '''Create an lxc Container.
      This function is idempotent and will try to either provision
      or finish the provision of an lxc container.
  
      NOTE: Most of the initialization code has been moved and merged
      with the lxc runner and lxc.init functions
      '''
      prov = get_configured_provider(vm_)
      if not prov:
          return
      # we cant use profile as a configuration key as it conflicts
      # with salt cloud internals
      profile = vm_.get(
          'lxc_profile',
          vm_.get('container_profile', None))
  
      event_data = vm_.copy()
      event_data['profile'] = profile
  
      __utils__['cloud.fire_event'](
          'event',
          'starting create',
          'salt/cloud/{0}/creating'.format(vm_['name']),
          args=__utils__['cloud.filter_event']('creating', event_data, ['name', 'profile', 'provider', 'driver']),
          sock_dir=__opts__['sock_dir'],
          transport=__opts__['transport']
      )
  
      ret = {'name': vm_['name'], 'changes': {}, 'result': True, 'comment': ''}
      if 'pub_key' not in vm_ and 'priv_key' not in vm_:
          log.debug('Generating minion keys for %s', vm_['name'])
          vm_['priv_key'], vm_['pub_key'] = salt.utils.cloud.gen_keys(
              salt.config.get_cloud_config_value(
                  'keysize', vm_, __opts__))
      # get the minion key pair to distribute back to the container
      kwarg = copy.deepcopy(vm_)
      kwarg['host'] = prov['target']
      kwarg['profile'] = profile
  
      __utils__['cloud.fire_event'](
          'event',
          'requesting instance',
          'salt/cloud/{0}/requesting'.format(vm_['name']),
          args=__utils__['cloud.filter_event']('requesting', vm_, ['name', 'profile', 'provider', 'driver']),
          sock_dir=__opts__['sock_dir'],
          transport=__opts__['transport']
      )
  
      cret = _runner().cmd('lxc.cloud_init', [vm_['name']], kwarg=kwarg)
      ret['runner_return'] = cret
      ret['result'] = cret['result']
      if not ret['result']:
          ret['Error'] = 'Error while creating {0},'.format(vm_['name'])
      else:
          ret['changes']['created'] = 'created'
  
      # When using cloud states to manage LXC containers
      # __opts__['profile'] is not implicitly reset between operations
      # on different containers. However list_nodes will hide container
      # if profile is set in opts assuming that it have to be created.
      # But in cloud state we do want to check at first if it really
      # exists hence the need to remove profile from global opts once
      # current container is created.
      if 'profile' in __opts__:
          __opts__['internal_lxc_profile'] = __opts__['profile']
          del __opts__['profile']
  
      __utils__['cloud.fire_event'](
          'event',
          'created instance',
          'salt/cloud/{0}/created'.format(vm_['name']),
          args=__utils__['cloud.filter_event']('created', vm_, ['name', 'profile', 'provider', 'driver']),
          sock_dir=__opts__['sock_dir'],
          transport=__opts__['transport']
      )
  
      return ret