Exemplo n.º 1
0
    def test_https_whole_disk(self):
        source = sources.detect('https:///image', checksum='abcd')
        self.assertIs(source.__class__, sources.HttpWholeDiskImage)
        self.assertEqual(source.url, 'https:///image')
        self.assertEqual(source.checksum, 'abcd')

        source._validate(mock.Mock(), None)
Exemplo n.º 2
0
 def test_file_partition_disk_missing_root(self):
     source = sources.detect('file:///image',
                             checksum='abcd',
                             kernel='file:///kernel',
                             ramdisk='file:///ramdisk')
     self.assertRaises(exceptions.UnknownRootDiskSize, source._validate,
                       mock.Mock(), None)
Exemplo n.º 3
0
    def test_file_whole_disk(self):
        source = sources.detect('file:///image')
        self.assertIs(source.__class__, sources.FileWholeDiskImage)
        self.assertEqual(source.location, 'file:///image')
        self.assertIsNone(source.checksum)

        source._validate(mock.Mock(), None)
Exemplo n.º 4
0
    def test_file_partition_disk(self):
        source = sources.detect('file:///image',
                                kernel='file:///kernel',
                                ramdisk='file:///ramdisk')
        self.assertIs(source.__class__, sources.FilePartitionImage)
        self.assertEqual(source.location, 'file:///image')
        self.assertIsNone(source.checksum)
        self.assertEqual(source.kernel_location, 'file:///kernel')
        self.assertEqual(source.ramdisk_location, 'file:///ramdisk')

        source._validate(mock.Mock(), 9)
Exemplo n.º 5
0
    def test_glance_partition_missing_root(self):
        source = sources.detect('foobar')
        self.assertIsInstance(source, sources.GlanceImage)
        self.assertEqual(source.image, 'foobar')

        conn = mock.Mock(spec=['image'])
        conn.image.find_image.return_value = mock.Mock(id=42,
                                                       kernel_id=1,
                                                       ramdisk_id=2)
        self.assertRaises(exceptions.UnknownRootDiskSize, source._validate,
                          conn, None)
Exemplo n.º 6
0
    def test_glance_whole_disk(self):
        source = sources.detect('foobar')
        self.assertIsInstance(source, sources.GlanceImage)
        self.assertEqual(source.image, 'foobar')

        conn = mock.Mock(spec=['image'])
        conn.image.find_image.return_value = mock.Mock(id=42,
                                                       kernel_id=None,
                                                       ramdisk_id=None)
        source._validate(conn, None)
        self.assertEqual({'image_source': 42}, source._node_updates(conn))
Exemplo n.º 7
0
 def test_https_partition_disk_checksum(self):
     source = sources.detect(
         'https:///image',
         # Can mix HTTP and HTTPs
         checksum='http://checksum',
         kernel='http:///kernel',
         ramdisk='https:///ramdisk')
     self.assertIs(source.__class__, sources.HttpPartitionImage)
     self.assertEqual(source.url, 'https:///image')
     self.assertEqual(source.checksum_url, 'http://checksum')
     self.assertEqual(source.kernel_url, 'http:///kernel')
     self.assertEqual(source.ramdisk_url, 'https:///ramdisk')
Exemplo n.º 8
0
    def test_http_whole_disk(self):
        source = sources.detect('http:///image', checksum='abcd')
        self.assertIs(source.__class__, sources.HttpWholeDiskImage)
        self.assertEqual(source.url, 'http:///image')
        self.assertEqual(source.checksum, 'abcd')

        source._validate(mock.Mock(), None)
        self.assertEqual(
            {
                'image_checksum': 'abcd',
                'image_source': 'http:///image'
            }, source._node_updates(None))
Exemplo n.º 9
0
    def test_glance_partition(self):
        source = sources.detect('foobar')
        self.assertIsInstance(source, sources.GlanceImage)
        self.assertEqual(source.image, 'foobar')

        conn = mock.Mock(spec=['image'])
        conn.image.find_image.return_value = mock.Mock(id=42,
                                                       kernel_id=1,
                                                       ramdisk_id=2)
        source._validate(conn, 9)
        self.assertEqual({
            'image_source': 42,
            'kernel': 1,
            'ramdisk': 2
        }, source._node_updates(conn))
Exemplo n.º 10
0
    def test_http_partition_disk(self):
        source = sources.detect('http:///image',
                                checksum='abcd',
                                kernel='http:///kernel',
                                ramdisk='http:///ramdisk')
        self.assertIs(source.__class__, sources.HttpPartitionImage)
        self.assertEqual(source.url, 'http:///image')
        self.assertEqual(source.checksum, 'abcd')
        self.assertEqual(source.kernel_url, 'http:///kernel')
        self.assertEqual(source.ramdisk_url, 'http:///ramdisk')

        source._validate(mock.Mock(), 9)
        self.assertEqual(
            {
                'image_checksum': 'abcd',
                'image_source': 'http:///image',
                'kernel': 'http:///kernel',
                'ramdisk': 'http:///ramdisk'
            }, source._node_updates(None))
Exemplo n.º 11
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)
Exemplo n.º 12
0
def _get_source(instance):
    return sources.detect(image=instance.get('image'),
                          kernel=instance.get('image_kernel'),
                          ramdisk=instance.get('image_ramdisk'),
                          checksum=instance.get('image_checksum'))
Exemplo n.º 13
0
 def test_https_whole_disk_checksum(self):
     source = sources.detect('https:///image', checksum='https://checksum')
     self.assertIs(source.__class__, sources.HttpWholeDiskImage)
     self.assertEqual(source.url, 'https:///image')
     self.assertEqual(source.checksum_url, 'https://checksum')
Exemplo n.º 14
0
def _get_source(instance):
    image = instance.get('image')
    return sources.detect(image=image.get('href'),
                          kernel=image.get('kernel'),
                          ramdisk=image.get('ramdisk'),
                          checksum=image.get('checksum'))