Esempio n. 1
0
    def test_success(self):
        """
        Executes the plan and returns SUCCESS when that's the most severe
        result.
        """
        dgs = get_desired_group_state(self.group_id, self.lc, 2)
        deleted = server(
            'c', ServerState.DELETED, servicenet_address='10.0.0.3',
            desired_lbs=self.desired_lbs,
            links=freeze([{'href': 'link3', 'rel': 'self'}]))
        self.servers += (deleted,)

        steps = [
            TestStep(
                Effect(
                    {'dgs': dgs,
                     'servers': self.servers,
                     'lb_nodes': (),
                     'now': 0})
                .on(lambda _: (StepResult.SUCCESS, [])))]

        def plan(dgs, servers, lb_nodes, now, build_timeout):
            self.assertEqual(build_timeout, 3600)
            return steps

        sequence = [
            parallel_sequence([]),
            (Log('execute-convergence',
                 dict(servers=self.servers, lb_nodes=(), steps=steps,
                      now=self.now, desired=dgs)), noop),
            parallel_sequence([
                [({'dgs': dgs, 'servers': self.servers,
                   'lb_nodes': (), 'now': 0},
                  noop)]
            ]),
            (Log('execute-convergence-results',
                 {'results': [{'step': steps[0],
                               'result': StepResult.SUCCESS,
                               'reasons': []}],
                  'worst_status': 'SUCCESS'}), noop),
            # Note that servers arg is non-deleted servers
            (UpdateServersCache(
                "tenant-id", "group-id", self.now,
                [thaw(self.servers[0].json.set("_is_as_active", True)),
                 thaw(self.servers[1].json.set("_is_as_active", True))]),
             noop)
        ]

        # all the servers updated in cache in beginning
        self.cache.append(thaw(deleted.json))

        self.assertEqual(
            perform_sequence(self.get_seq() + sequence, self._invoke(plan)),
            (StepResult.SUCCESS, ScalingGroupStatus.ACTIVE))
Esempio n. 2
0
    def test_convert(self):
        """
        An Otter launch config a :obj:`DesiredGroupState`, ignoring extra
        config information.
        """
        server_config = {'name': 'test', 'flavorRef': 'f'}
        lc = {'args': {'server': server_config,
                       'loadBalancers': [
                           {'loadBalancerId': 23, 'port': 80,
                            'whatsit': 'invalid'},
                           {'loadBalancerId': 23, 'port': 90},
                           {'loadBalancerId': 23, 'type': 'RackConnectV3'},
                           {'loadBalancerId': '12', 'type': 'RackConnectV3'}]}}

        expected_server_config = {
            'server': {
                'name': 'test',
                'flavorRef': 'f',
                'metadata': {
                    'rax:auto_scaling_group_id': 'uuid',
                    'rax:autoscale:group:id': 'uuid',
                    'rax:autoscale:lb:CloudLoadBalancer:23': json.dumps(
                        [{"port": 80},
                         {"port": 90}]),
                    'rax:autoscale:lb:RackConnectV3:23': '',
                    'rax:autoscale:lb:RackConnectV3:12': ''
                }
            }
        }
        state = get_desired_group_state('uuid', lc, 2)
        self.assertEqual(
            state,
            DesiredGroupState(
                server_config=expected_server_config,
                capacity=2,
                desired_lbs=pset([
                    CLBDescription(lb_id='23', port=80),
                    CLBDescription(lb_id='23', port=90),
                    RCv3Description(lb_id='23'),
                    RCv3Description(lb_id='12')])))
        self.assert_server_config_hashable(state)
Esempio n. 3
0
    def test_no_lbs(self):
        """
        When no loadBalancers are specified, the returned DesiredGroupState has
        an empty mapping for desired_lbs.
        """
        server_config = {'name': 'test', 'flavorRef': 'f'}
        lc = {'args': {'server': server_config}}

        expected_server_config = {
            'server': {
                'name': 'test',
                'flavorRef': 'f',
                'metadata': {
                    'rax:auto_scaling_group_id': 'uuid',
                    'rax:autoscale:group:id': 'uuid'}}}
        state = get_desired_group_state('uuid', lc, 2)
        self.assertEqual(
            state,
            DesiredGroupState(
                server_config=expected_server_config,
                capacity=2,
                desired_lbs=pset()))
        self.assert_server_config_hashable(state)