示例#1
0
    def test_activates(self):
        """Ensures that the instance group managers are activated."""
        template_cfg = config_pb2.InstanceTemplateConfig.InstanceTemplate(
            base_name='base-name', )
        manager_cfgs = config_pb2.InstanceGroupManagerConfig(managers=[
            config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
                template_base_name='base-name',
                zone='zone1',
            ),
            config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
                template_base_name='base-name',
                zone='zone2',
            ),
        ], ).managers
        expected_active_keys = [
            parse.get_instance_group_manager_key(template_cfg,
                                                 manager_cfgs[0]),
            parse.get_instance_group_manager_key(template_cfg,
                                                 manager_cfgs[1]),
        ]
        instance_template_revision = models.InstanceTemplateRevision()

        self.failUnless(
            parse.ensure_instance_group_managers_active(
                template_cfg, manager_cfgs, instance_template_revision))
        self.assertItemsEqual(instance_template_revision.active,
                              expected_active_keys)
示例#2
0
    def test_drains_and_reactivates(self):
        """Ensures that the active are drained and the drained are reactivated."""
        template_cfg = config_pb2.InstanceTemplateConfig.InstanceTemplate(
            base_name='base-name', )
        manager_cfgs = config_pb2.InstanceGroupManagerConfig(managers=[
            config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
                template_base_name='base-name',
                zone='zone1',
            ),
            config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
                template_base_name='base-name',
                zone='zone2',
            ),
        ], ).managers
        expected_active_keys = [
            parse.get_instance_group_manager_key(template_cfg,
                                                 manager_cfgs[0]),
            parse.get_instance_group_manager_key(template_cfg,
                                                 manager_cfgs[1]),
        ]
        instance_template_revision = models.InstanceTemplateRevision(
            active=[
                ndb.Key(models.InstanceGroupManager, 'fake-key'),
            ],
            drained=expected_active_keys,
        )

        self.failUnless(
            parse.ensure_instance_group_managers_active(
                template_cfg, manager_cfgs, instance_template_revision))
        self.assertItemsEqual(instance_template_revision.active,
                              expected_active_keys)
        self.assertEqual(instance_template_revision.drained[0].id(),
                         'fake-key')
示例#3
0
  def test_drains_and_reactivates(self):
    """Ensures that the active are drained and the drained are reactivated."""
    template_cfg = config_pb2.InstanceTemplateConfig.InstanceTemplate(
        base_name='base-name',
    )
    manager_cfgs = config_pb2.InstanceGroupManagerConfig(
        managers=[
            config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
                template_base_name='base-name',
                zone='zone1',
            ),
            config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
                template_base_name='base-name',
                zone='zone2',
            ),
        ],
    ).managers
    expected_active_keys = [
        parse.get_instance_group_manager_key(template_cfg, manager_cfgs[0]),
        parse.get_instance_group_manager_key(template_cfg, manager_cfgs[1]),
    ]
    instance_template_revision = models.InstanceTemplateRevision(
        active=[
            ndb.Key(models.InstanceGroupManager, 'fake-key'),
        ],
        drained=expected_active_keys,
    )

    self.failUnless(parse.ensure_instance_group_managers_active(
        template_cfg, manager_cfgs, instance_template_revision))
    self.assertItemsEqual(
        instance_template_revision.active, expected_active_keys)
    self.assertEqual(instance_template_revision.drained[0].id(), 'fake-key')
示例#4
0
  def test_activates(self):
    """Ensures that the instance group managers are activated."""
    template_cfg = config_pb2.InstanceTemplateConfig.InstanceTemplate(
        base_name='base-name',
    )
    manager_cfgs = config_pb2.InstanceGroupManagerConfig(
        managers=[
            config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
                template_base_name='base-name',
                zone='zone1',
            ),
            config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
                template_base_name='base-name',
                zone='zone2',
            ),
        ],
    ).managers
    expected_active_keys = [
        parse.get_instance_group_manager_key(template_cfg, manager_cfgs[0]),
        parse.get_instance_group_manager_key(template_cfg, manager_cfgs[1]),
    ]
    instance_template_revision = models.InstanceTemplateRevision()

    self.failUnless(parse.ensure_instance_group_managers_active(
        template_cfg, manager_cfgs, instance_template_revision))
    self.assertItemsEqual(
        instance_template_revision.active, expected_active_keys)
示例#5
0
    def test_matches_existing_entity(self):
        """Ensures that an entity matches when it already exists."""
        template_cfg = config_pb2.InstanceTemplateConfig.InstanceTemplate(
            base_name='base-name', )
        manager_cfg = config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
            maximum_size=3,
            minimum_size=2,
            template_base_name='base-name',
            zone='zone',
        )
        expected_key = parse.get_instance_group_manager_key(
            template_cfg, manager_cfg)
        models.InstanceGroupManager(
            key=expected_key,
            maximum_size=2,
            minimum_size=1,
        ).put()

        future = parse.ensure_instance_group_manager_exists(
            template_cfg, manager_cfg)
        future.wait()
        key = future.get_result()
        entity = key.get()

        self.assertEqual(key, expected_key)
        self.assertEqual(entity.maximum_size, manager_cfg.maximum_size)
        self.assertEqual(entity.minimum_size, manager_cfg.minimum_size)
示例#6
0
  def test_matches_existing_entity(self):
    """Ensures that an entity matches when it already exists."""
    template_cfg = config_pb2.InstanceTemplateConfig.InstanceTemplate(
        base_name='base-name',
    )
    manager_cfg = config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
        maximum_size=3,
        minimum_size=2,
        template_base_name='base-name',
        zone='zone',
    )
    expected_key = parse.get_instance_group_manager_key(
        template_cfg, manager_cfg)
    models.InstanceGroupManager(
        key=expected_key,
        maximum_size=2,
        minimum_size=1,
    ).put()

    future = parse.ensure_instance_group_manager_exists(
        template_cfg, manager_cfg)
    future.wait()
    key = future.get_result()
    entity = key.get()

    self.assertEqual(key, expected_key)
    self.assertEqual(entity.maximum_size, manager_cfg.maximum_size)
    self.assertEqual(entity.minimum_size, manager_cfg.minimum_size)
示例#7
0
    def test_creates_new_entity(self):
        """Ensures that a new entity is created when one doesn't exist."""
        template_cfg = config_pb2.InstanceTemplateConfig.InstanceTemplate(
            base_name='base-name', )
        manager_cfg = config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
            maximum_size=2,
            minimum_size=1,
            template_base_name='base-name',
            zone='zone',
        )
        expected_key = parse.get_instance_group_manager_key(
            template_cfg, manager_cfg)

        future = parse.ensure_instance_group_manager_exists(
            template_cfg, manager_cfg)
        future.wait()
        key = future.get_result()
        entity = key.get()

        self.assertEqual(key, expected_key)
        self.assertEqual(entity.maximum_size, manager_cfg.maximum_size)
        self.assertEqual(entity.minimum_size, manager_cfg.minimum_size)
示例#8
0
  def test_creates_new_entity(self):
    """Ensures that a new entity is created when one doesn't exist."""
    template_cfg = config_pb2.InstanceTemplateConfig.InstanceTemplate(
        base_name='base-name',
    )
    manager_cfg = config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
        maximum_size=2,
        minimum_size=1,
        template_base_name='base-name',
        zone='zone',
    )
    expected_key = parse.get_instance_group_manager_key(
        template_cfg, manager_cfg)

    future = parse.ensure_instance_group_manager_exists(
        template_cfg, manager_cfg)
    future.wait()
    key = future.get_result()
    entity = key.get()

    self.assertEqual(key, expected_key)
    self.assertEqual(entity.maximum_size, manager_cfg.maximum_size)
    self.assertEqual(entity.minimum_size, manager_cfg.minimum_size)
示例#9
0
    def test_creates_new_entity(self):
        """Ensures that a new entity is created when one doesn't exist."""
        template_cfg = config_pb2.InstanceTemplateConfig.InstanceTemplate(
            base_name='base-name',
            dimensions=[
                'os_family:LINUX',
            ],
            disk_size_gb=100,
            machine_type='n1-standard-8',
            metadata=[
                'key:value',
            ],
            service_accounts=[
                config_pb2.InstanceTemplateConfig.InstanceTemplate.
                ServiceAccount(
                    name='service-account',
                    scopes=[
                        'scope',
                    ],
                ),
            ],
            tags=[
                'tag',
            ])
        manager_cfgs = [
            config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
                maximum_size=2,
                minimum_size=1,
                template_base_name='base-name',
                zone='us-central-1a',
            ),
            config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
                maximum_size=3,
                minimum_size=2,
                template_base_name='base-name',
                zone='us-central-1b',
            ),
            config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
                maximum_size=4,
                minimum_size=3,
                template_base_name='base-name',
                zone='us-central-1c',
            ),
        ]
        expected_instance_template_key = parse.get_instance_template_key(
            template_cfg)
        expected_instance_template_revision_key = (
            parse.get_instance_template_revision_key(template_cfg))
        expected_dimensions = parse._load_machine_provider_dimensions(
            template_cfg.dimensions)
        expected_metadata = parse._load_dict(template_cfg.metadata)
        expected_service_accounts = [
            models.ServiceAccount(
                name=template_cfg.service_accounts[0].name,
                scopes=list(template_cfg.service_accounts[0].scopes),
            ),
        ]
        expected_active_keys = [
            parse.get_instance_group_manager_key(template_cfg, manager_cfg)
            for manager_cfg in manager_cfgs
        ]

        future = parse.ensure_entities_exist(template_cfg, manager_cfgs)
        future.wait()
        instance_template_key = future.get_result()
        instance_template = instance_template_key.get()
        instance_template_revision = instance_template.active.get()
        instance_group_managers = sorted(
            [
                instance_group_manager.get()
                for instance_group_manager in instance_template_revision.active
            ],
            key=lambda instance_group_manager: instance_group_manager.key.id(),
        )

        self.assertEqual(instance_template_key, expected_instance_template_key)
        self.assertEqual(instance_template.active,
                         expected_instance_template_revision_key)
        self.assertEqual(instance_template_revision.dimensions,
                         expected_dimensions)
        self.assertEqual(instance_template_revision.disk_size_gb,
                         template_cfg.disk_size_gb)
        self.assertEqual(instance_template_revision.machine_type,
                         template_cfg.machine_type)
        self.assertEqual(instance_template_revision.metadata,
                         expected_metadata)
        self.assertItemsEqual(instance_template_revision.service_accounts,
                              expected_service_accounts)
        self.assertItemsEqual(instance_template_revision.tags,
                              template_cfg.tags)
        self.assertItemsEqual(instance_template_revision.active,
                              expected_active_keys)
        self.assertEqual(instance_group_managers[0].maximum_size,
                         manager_cfgs[0].maximum_size)
        self.assertEqual(instance_group_managers[0].minimum_size,
                         manager_cfgs[0].minimum_size)
        self.assertEqual(instance_group_managers[1].maximum_size,
                         manager_cfgs[1].maximum_size)
        self.assertEqual(instance_group_managers[1].minimum_size,
                         manager_cfgs[1].minimum_size)
        self.assertEqual(instance_group_managers[2].maximum_size,
                         manager_cfgs[2].maximum_size)
        self.assertEqual(instance_group_managers[2].minimum_size,
                         manager_cfgs[2].minimum_size)
示例#10
0
  def test_creates_new_entity(self):
    """Ensures that a new entity is created when one doesn't exist."""
    template_cfg = config_pb2.InstanceTemplateConfig.InstanceTemplate(
        base_name='base-name',
        dimensions=[
            'os_family:LINUX',
        ],
        disk_size_gb=100,
        machine_type='n1-standard-8',
        metadata=[
            'key:value',
        ],
        service_accounts=[
            config_pb2.InstanceTemplateConfig.InstanceTemplate.ServiceAccount(
                name='service-account',
                scopes=[
                  'scope',
                ],
            ),
        ],
        tags=[
          'tag',
        ]
    )
    manager_cfgs = [
        config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
            maximum_size=2,
            minimum_size=1,
            template_base_name='base-name',
            zone='us-central-1a',
        ),
        config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
            maximum_size=3,
            minimum_size=2,
            template_base_name='base-name',
            zone='us-central-1b',
        ),
        config_pb2.InstanceGroupManagerConfig.InstanceGroupManager(
            maximum_size=4,
            minimum_size=3,
            template_base_name='base-name',
            zone='us-central-1c',
        ),
    ]
    expected_instance_template_key = parse.get_instance_template_key(
        template_cfg)
    expected_instance_template_revision_key = (
        parse.get_instance_template_revision_key(template_cfg))
    expected_dimensions = parse._load_machine_provider_dimensions(
        template_cfg.dimensions)
    expected_metadata = parse._load_dict(template_cfg.metadata)
    expected_service_accounts = [
        models.ServiceAccount(
            name=template_cfg.service_accounts[0].name,
            scopes=list(template_cfg.service_accounts[0].scopes),
        ),
    ]
    expected_active_keys = [
        parse.get_instance_group_manager_key(template_cfg, manager_cfg)
        for manager_cfg in manager_cfgs
    ]

    future = parse.ensure_entities_exist(
        template_cfg, manager_cfgs)
    future.wait()
    instance_template_key = future.get_result()
    instance_template = instance_template_key.get()
    instance_template_revision = instance_template.active.get()
    instance_group_managers = sorted(
        [
            instance_group_manager.get()
            for instance_group_manager in instance_template_revision.active
        ],
        key=lambda instance_group_manager: instance_group_manager.key.id(),
    )

    self.assertEqual(instance_template_key, expected_instance_template_key)
    self.assertEqual(
        instance_template.active, expected_instance_template_revision_key)
    self.assertEqual(instance_template_revision.dimensions, expected_dimensions)
    self.assertEqual(
        instance_template_revision.disk_size_gb, template_cfg.disk_size_gb)
    self.assertEqual(
        instance_template_revision.machine_type, template_cfg.machine_type)
    self.assertEqual(instance_template_revision.metadata, expected_metadata)
    self.assertItemsEqual(
        instance_template_revision.service_accounts, expected_service_accounts)
    self.assertItemsEqual(instance_template_revision.tags, template_cfg.tags)
    self.assertItemsEqual(
        instance_template_revision.active, expected_active_keys)
    self.assertEqual(
        instance_group_managers[0].maximum_size, manager_cfgs[0].maximum_size)
    self.assertEqual(
        instance_group_managers[0].minimum_size, manager_cfgs[0].minimum_size)
    self.assertEqual(
        instance_group_managers[1].maximum_size, manager_cfgs[1].maximum_size)
    self.assertEqual(
        instance_group_managers[1].minimum_size, manager_cfgs[1].minimum_size)
    self.assertEqual(
        instance_group_managers[2].maximum_size, manager_cfgs[2].maximum_size)
    self.assertEqual(
        instance_group_managers[2].minimum_size, manager_cfgs[2].minimum_size)