Exemple #1
0
    def create_group(self, **kwargs):
        """
        :return: a tuple of the scaling group with (the helper's pool) and
            the server name prefix used for the scaling group.
        """
        if self.clbs:
            # allow us to override the CLB setup
            kwargs.setdefault(
                'use_lbs',
                [clb.scaling_group_spec() for clb in self.clbs])

        kwargs.setdefault("flavor_ref", flavor_ref)
        kwargs.setdefault("min_entities", 0)

        server_name_prefix = "{}-{}".format(
            random_string(), reactor.seconds())
        if "server_name_prefix" in kwargs:
            server_name_prefix = "{}-{}".format(kwargs['server_name_prefix'],
                                                server_name_prefix)
        kwargs['server_name_prefix'] = server_name_prefix

        return (
            ScalingGroup(
                group_config=create_scaling_group_dict(**kwargs),
                treq=self.treq,
                pool=self.pool),
            server_name_prefix)
Exemple #2
0
    def create_group(self, **kwargs):
        """
        :return: a tuple of the scaling group with (the helper's pool) and
            the server name prefix used for the scaling group.
        """
        if self.clbs:
            # allow us to override the CLB setup
            kwargs.setdefault(
                'use_lbs',
                [clb.scaling_group_spec() for clb in self.clbs])

        kwargs.setdefault("flavor_ref", flavor_ref)
        kwargs.setdefault("min_entities", 0)

        server_name_prefix = "{}-{}".format(
            random_string(), reactor.seconds())
        if "server_name_prefix" in kwargs:
            server_name_prefix = "{}-{}".format(kwargs['server_name_prefix'],
                                                server_name_prefix)
        kwargs['server_name_prefix'] = server_name_prefix

        return (
            ScalingGroup(
                group_config=create_scaling_group_dict(**kwargs),
                treq=self.treq,
                pool=self.pool),
            server_name_prefix)
Exemple #3
0
    def test_scaling_down(self):
        """
        Verify that a basic scale down operation completes as expected.
        """
        scaling_group_body = autoscale.create_scaling_group_dict(
            image_ref=image_ref, flavor_ref=flavor_ref,
            name="tr-scaledown-conf",
        )

        self.scaling_group = autoscale.ScalingGroup(
            group_config=scaling_group_body,
            pool=self.pool
        )

        self.scaling_policy_up_2 = autoscale.ScalingPolicy(
            scale_by=2,
            scaling_group=self.scaling_group
        )
        self.scaling_policy_down_1 = autoscale.ScalingPolicy(
            scale_by=-1,
            scaling_group=self.scaling_group
        )

        rcs = TestResources()
        d = (
            self.identity.authenticate_user(
                rcs,
                resources={
                    "otter": ("autoscale", "http://localhost:9000/v1.0/{0}"),
                    "loadbalancers": ("cloudLoadBalancers",),
                },
                region=region
            ).addCallback(print_token_and_ep)
            .addCallback(self.scaling_group.start, self)
            .addCallback(self.scaling_policy_up_2.start, self)
            .addCallback(self.scaling_policy_up_2.execute)
            .addCallback(self.scaling_group.wait_for_N_servers,
                         2, timeout=1800)
            .addCallback(
                lambda _: self.scaling_group.get_scaling_group_state(rcs))
            .addCallback(dump_state)
            .addCallback(lambda _: rcs)
            .addCallback(self.scaling_policy_down_1.start, self)
            .addCallback(self.scaling_policy_down_1.execute)
            .addCallback(self.scaling_group.wait_for_N_servers,
                         1, timeout=900)
            .addCallback(
                lambda _: self.scaling_group.get_scaling_group_state(rcs)
            ).addCallback(dump_state)
        )
        return d
Exemple #4
0
    def create_servers(self, rcs, num, wait_for=None):
        """
        Create some number of servers using just Nova, and wait until they
        are active.  This uses the same default server arguments as
        `create_group`.

        :param TestResources rcs: An instance of
            :class:`otter.integration.lib.resources.TestResources`
        :param int num: The number of servers to create.
        :param wait_for: What state to wait for for those servers - by default,
            it waits just for them to be active

        :return: an iterable of server details JSON of the created servers.
        """
        image_id = yield fetch_ubuntu_image_id(rcs, self.pool)
        as_args = create_scaling_group_dict(
            image_ref=image_id,
            flavor_ref=flavor_ref)
        server_args = as_args['launchConfiguration']['args']
        server_args['server']['name'] = "autogenerated-non-as-test-server"

        if wait_for is None:
            wait_for = ContainsDict({'status': Equals("ACTIVE")})

        server_ids = yield gatherResults([
            create_server(rcs, self.pool, server_args) for _ in range(num)])

        self.test_case.addCleanup(delete_servers, server_ids, rcs, self.pool)

        servers = yield wait_for_servers(
            rcs,
            self.pool,
            # The list of active servers' ids has the created server ids
            AfterPreprocessing(
                lambda servers: [s for s in servers if s['id'] in server_ids],
                AllMatch(wait_for)
            )
        )

        returnValue(
            [server for server in servers if server['id'] in server_ids])
Exemple #5
0
    def create_servers(self, rcs, num, wait_for=None):
        """
        Create some number of servers using just Nova, and wait until they
        are active.  This uses the same default server arguments as
        `create_group`.

        :param TestResources rcs: An instance of
            :class:`otter.integration.lib.resources.TestResources`
        :param int num: The number of servers to create.
        :param wait_for: What state to wait for for those servers - by default,
            it waits just for them to be active

        :return: an iterable of server details JSON of the created servers.
        """
        image_id = yield fetch_ubuntu_image_id(rcs, self.pool)
        as_args = create_scaling_group_dict(
            image_ref=image_id,
            flavor_ref=flavor_ref)
        server_args = as_args['launchConfiguration']['args']
        server_args['server']['name'] = "autogenerated-non-as-test-server"

        if wait_for is None:
            wait_for = ContainsDict({'status': Equals("ACTIVE")})

        server_ids = yield gatherResults([
            create_server(rcs, self.pool, server_args) for _ in range(num)])

        self.test_case.addCleanup(delete_servers, server_ids, rcs, self.pool)

        servers = yield wait_for_servers(
            rcs,
            self.pool,
            # The list of active servers' ids has the created server ids
            AfterPreprocessing(
                lambda servers: [s for s in servers if s['id'] in server_ids],
                AllMatch(wait_for)
            )
        )

        returnValue(
            [server for server in servers if server['id'] in server_ids])
Exemple #6
0
    def test_scaling_up(self):
        scaling_group_body = autoscale.create_scaling_group_dict(
            image_ref=image_ref, flavor_ref=flavor_ref,
            name="my-group-configuration"
        )

        self.scaling_group = autoscale.ScalingGroup(
            group_config=scaling_group_body,
            pool=self.pool
        )

        self.scaling_policy = autoscale.ScalingPolicy(
            scale_by=2,
            scaling_group=self.scaling_group
        )

        rcs = TestResources()
        d = (
            self.identity.authenticate_user(
                rcs,
                resources={
                    "otter": ("autoscale", "http://localhost:9000/v1.0/{0}"),
                    "loadbalancers": ("cloudLoadBalancers",),
                },
                region=region,
            ).addCallback(print_token_and_ep)
            .addCallback(self.scaling_group.start, self)
            .addCallback(dump_groups)
            .addCallback(self.scaling_policy.start, self)
            .addCallback(self.scaling_policy.execute)
            .addCallback(
                self.scaling_group.wait_for_N_servers, 2, timeout=1800
            ).addCallback(
                lambda _: self.scaling_group.get_scaling_group_state(rcs)
            ).addCallback(dump_state)
        )
        return d