def _provision_instance(provisioner, instance, nodes, timeout, wait):
    name = instance.get('name')

    image = _get_source(instance)
    ssh_keys = instance.get('ssh_public_keys')
    config_drive = instance.get('config_drive', {})
    cloud_config = config_drive.get('cloud_config')
    meta_data = config_drive.get('meta_data')
    config = instance_config.CloudInitConfig(ssh_keys=ssh_keys,
                                             user_data=cloud_config,
                                             meta_data=meta_data)
    if instance.get('user_name'):
        config.add_user(instance.get('user_name'),
                        admin=True,
                        sudo=instance.get('passwordless_sudo', True))
    node = provisioner.provision_node(
        name,
        config=config,
        hostname=instance.get('hostname'),
        image=image,
        nics=instance.get('nics'),
        root_size_gb=instance.get('root_size_gb'),
        swap_size_mb=instance.get('swap_size_mb'),
        netboot=instance.get('netboot', False))
    nodes.append(node)
    if wait:
        provisioner.wait_for_provisioning([node.uuid], timeout=timeout)
Beispiel #2
0
 def __init__(
     self,
     instance,
     node,
     ssh_keys=None,
     # For compatibility with deployment based on heat+nova
     ssh_user_name='heat-admin',
     default_network='ctlplane',
     # 50 is the default for old flavors, subtracting 1G to account
     # for partitioning and configdrive.
     default_root_size=49):
     super(DeployNodeAction, self).__init__()
     self.instance = instance
     self.node = node
     self.config = instance_config.CloudInitConfig(ssh_keys=ssh_keys)
     self.config.add_user(ssh_user_name, admin=True, sudo=True)
     self.default_network = default_network
     self.default_root_size = default_root_size
Beispiel #3
0
def _do_deploy(api, args, formatter):
    wait = None if args.no_wait else args.wait

    capabilities = dict(item.split('=', 1) for item in args.capability)
    if args.ssh_public_key:
        with open(args.ssh_public_key) as fp:
            ssh_keys = [fp.read().strip()]
    else:
        ssh_keys = []

    if args.hostname and not _utils.is_hostname_safe(args.hostname):
        raise RuntimeError("%s cannot be used as a hostname" % args.hostname)

    source = sources.detect(args.image,
                            kernel=args.image_kernel,
                            ramdisk=args.image_ramdisk,
                            checksum=args.image_checksum)

    if args.user_name:
        config = instance_config.CloudInitConfig(ssh_keys=ssh_keys)
        config.add_user(args.user_name, sudo=args.passwordless_sudo)
    else:
        config = instance_config.GenericConfig(ssh_keys=ssh_keys)

    node = api.reserve_node(resource_class=args.resource_class,
                            conductor_group=args.conductor_group,
                            capabilities=capabilities,
                            traits=args.trait,
                            candidates=args.candidate,
                            hostname=args.hostname)
    instance = api.provision_node(node,
                                  image=source,
                                  nics=args.nics,
                                  root_size_gb=args.root_size,
                                  swap_size_mb=args.swap_size,
                                  config=config,
                                  netboot=args.netboot,
                                  wait=wait,
                                  clean_up_on_failure=not args.no_clean_up)
    formatter.deploy(instance)