Exemple #1
0
 def test_returns_as_servers(self):
     """
     Returns servers with AS metadata in it grouped by scaling group ID
     """
     as_servers = ([{
         'metadata': {
             'rax:auto_scaling_group_id': 'a'
         },
         'id': i
     } for i in range(5)] + [{
         'metadata': {
             'rax:auto_scaling_group_id': 'b'
         },
         'id': i
     } for i in range(5, 8)] + [{
         'metadata': {
             'rax:auto_scaling_group_id': 'a'
         },
         'id': 10
     }])
     servers = as_servers + [{'metadata': 'junk'}] * 3
     eff = get_all_scaling_group_servers()
     body = {'servers': servers}
     sequence = [(service_request(*self.req).intent, lambda i:
                  (StubResponse(200, None), body)),
                 (Log(mock.ANY, mock.ANY), lambda i: None)]
     result = perform_sequence(sequence, eff)
     self.assertEqual(result, {
         'a': as_servers[:5] + [as_servers[-1]],
         'b': as_servers[5:8]
     })
Exemple #2
0
 def test_filters_on_user_criteria(self):
     """
     Considers user provided filter if provided
     """
     as_servers = ([{
         'metadata': {
             'rax:auto_scaling_group_id': 'a'
         },
         'id': i
     } for i in range(5)] + [{
         'metadata': {
             'rax:auto_scaling_group_id': 'b'
         },
         'id': i
     } for i in range(5, 8)])
     servers = as_servers + [{'metadata': 'junk'}] * 3
     eff = get_all_scaling_group_servers(
         server_predicate=lambda s: s['id'] % 3 == 0)
     body = {'servers': servers}
     sequence = [(service_request(*self.req).intent, lambda i:
                  (StubResponse(200, None), body)),
                 (Log(mock.ANY, mock.ANY), lambda i: None)]
     result = perform_sequence(sequence, eff)
     self.assertEqual(result, {
         'a': [as_servers[0], as_servers[3]],
         'b': [as_servers[6]]
     })
Exemple #3
0
 def test_filters_no_metadata(self):
     """
     Servers without metadata are not included in the result.
     """
     servers = [{'id': i} for i in range(10)]
     eff = get_all_scaling_group_servers()
     body = {'servers': servers}
     sequence = [(service_request(*self.req).intent, lambda i:
                  (StubResponse(200, None), body)),
                 (Log(mock.ANY, mock.ANY), lambda i: None)]
     result = perform_sequence(sequence, eff)
     self.assertEqual(result, {})
Exemple #4
0
 def test_filters_no_as_metadata(self):
     """
     Does not include servers which have metadata but does not have AS info
     in it
     """
     servers = [{'id': i, 'metadata': {}} for i in range(10)]
     eff = get_all_scaling_group_servers()
     body = {'servers': servers}
     sequence = [(service_request(*self.req).intent, lambda i:
                  (StubResponse(200, None), body)),
                 (Log(mock.ANY, mock.ANY), lambda i: None)]
     result = perform_sequence(sequence, eff)
     self.assertEqual(result, {})
Exemple #5
0
 def test_filters_no_metadata(self):
     """
     Servers without metadata are not included in the result.
     """
     servers = [{"id": i} for i in range(10)]
     eff = get_all_scaling_group_servers()
     body = {"servers": servers}
     sequence = [
         (service_request(*self.req).intent, lambda i: (StubResponse(200, None), body)),
         (Log(mock.ANY, mock.ANY), lambda i: None),
     ]
     result = perform_sequence(sequence, eff)
     self.assertEqual(result, {})
Exemple #6
0
    def test_with_changes_since(self):
        """
        If given, servers are fetched based on changes_since
        """
        since = datetime(2010, 10, 10, 10, 10, 0)
        eff = get_all_scaling_group_servers(changes_since=since)
        body = {'servers': []}

        sequence = [(service_request(
            **svc_request_args(changes_since=since, limit=100)).intent,
                     lambda i: (StubResponse(200, None), body)),
                    (Log(mock.ANY, mock.ANY), lambda i: None)]
        result = perform_sequence(sequence, eff)
        self.assertEqual(result, {})
Exemple #7
0
 def test_filters_no_as_metadata(self):
     """
     Does not include servers which have metadata but does not have AS info
     in it
     """
     servers = [{"id": i, "metadata": {}} for i in range(10)]
     eff = get_all_scaling_group_servers()
     body = {"servers": servers}
     sequence = [
         (service_request(*self.req).intent, lambda i: (StubResponse(200, None), body)),
         (Log(mock.ANY, mock.ANY), lambda i: None),
     ]
     result = perform_sequence(sequence, eff)
     self.assertEqual(result, {})
Exemple #8
0
    def test_with_changes_since(self):
        """
        If given, servers are fetched based on changes_since
        """
        since = datetime(2010, 10, 10, 10, 10, 0)
        eff = get_all_scaling_group_servers(changes_since=since)
        body = {'servers': []}

        sequence = [
            (service_request(
                **svc_request_args(changes_since=since, limit=100)).intent,
             lambda i: (StubResponse(200, None), body)),
            (Log(mock.ANY, mock.ANY), lambda i: None)
        ]
        result = perform_sequence(sequence, eff)
        self.assertEqual(result, {})
Exemple #9
0
 def test_filters_on_user_criteria(self):
     """
     Considers user provided filter if provided
     """
     as_servers = [{"metadata": {"rax:auto_scaling_group_id": "a"}, "id": i} for i in range(5)] + [
         {"metadata": {"rax:auto_scaling_group_id": "b"}, "id": i} for i in range(5, 8)
     ]
     servers = as_servers + [{"metadata": "junk"}] * 3
     eff = get_all_scaling_group_servers(server_predicate=lambda s: s["id"] % 3 == 0)
     body = {"servers": servers}
     sequence = [
         (service_request(*self.req).intent, lambda i: (StubResponse(200, None), body)),
         (Log(mock.ANY, mock.ANY), lambda i: None),
     ]
     result = perform_sequence(sequence, eff)
     self.assertEqual(result, {"a": [as_servers[0], as_servers[3]], "b": [as_servers[6]]})
Exemple #10
0
 def test_returns_as_servers(self):
     """
     Returns servers with AS metadata in it grouped by scaling group ID
     """
     as_servers = (
         [{"metadata": {"rax:auto_scaling_group_id": "a"}, "id": i} for i in range(5)]
         + [{"metadata": {"rax:auto_scaling_group_id": "b"}, "id": i} for i in range(5, 8)]
         + [{"metadata": {"rax:auto_scaling_group_id": "a"}, "id": 10}]
     )
     servers = as_servers + [{"metadata": "junk"}] * 3
     eff = get_all_scaling_group_servers()
     body = {"servers": servers}
     sequence = [
         (service_request(*self.req).intent, lambda i: (StubResponse(200, None), body)),
         (Log(mock.ANY, mock.ANY), lambda i: None),
     ]
     result = perform_sequence(sequence, eff)
     self.assertEqual(result, {"a": as_servers[:5] + [as_servers[-1]], "b": as_servers[5:8]})
Exemple #11
0
 def test_filters_on_user_criteria(self):
     """
     Considers user provided filter if provided
     """
     as_servers = (
         [{'metadata': {'rax:auto_scaling_group_id': 'a'}, 'id': i}
          for i in range(5)] +
         [{'metadata': {'rax:auto_scaling_group_id': 'b'}, 'id': i}
          for i in range(5, 8)])
     servers = as_servers + [{'metadata': 'junk'}] * 3
     eff = get_all_scaling_group_servers(
         server_predicate=lambda s: s['id'] % 3 == 0)
     body = {'servers': servers}
     sequence = [
         (service_request(*self.req).intent,
          lambda i: (StubResponse(200, None), body)),
         (Log(mock.ANY, mock.ANY), lambda i: None)
     ]
     result = perform_sequence(sequence, eff)
     self.assertEqual(
         result,
         {'a': [as_servers[0], as_servers[3]], 'b': [as_servers[6]]})
Exemple #12
0
 def test_returns_as_servers(self):
     """
     Returns servers with AS metadata in it grouped by scaling group ID
     """
     as_servers = (
         [{'metadata': {'rax:auto_scaling_group_id': 'a'}, 'id': i}
          for i in range(5)] +
         [{'metadata': {'rax:auto_scaling_group_id': 'b'}, 'id': i}
          for i in range(5, 8)] +
         [{'metadata': {'rax:auto_scaling_group_id': 'a'}, 'id': 10}])
     servers = as_servers + [{'metadata': 'junk'}] * 3
     eff = get_all_scaling_group_servers()
     body = {'servers': servers}
     sequence = [
         (service_request(*self.req).intent,
          lambda i: (StubResponse(200, None), body)),
         (Log(mock.ANY, mock.ANY), lambda i: None)
     ]
     result = perform_sequence(sequence, eff)
     self.assertEqual(
         result,
         {'a': as_servers[:5] + [as_servers[-1]], 'b': as_servers[5:8]})
Exemple #13
0
def get_all_metrics_effects(tenanted_groups, log, _print=False):
    """
    Gather server data for and produce metrics for all groups
    across all tenants in a region

    :param dict tenanted_groups: Scaling groups grouped with tenantId
    :param bool _print: Should the function print while processing?

    :return: ``list`` of :obj:`Effect` of (``list`` of :obj:`GroupMetrics`)
             or None
    """
    effs = []
    for tenant_id, groups in tenanted_groups.iteritems():
        eff = get_all_scaling_group_servers()
        eff = Effect(TenantScope(eff, tenant_id))
        eff = eff.on(partial(get_tenant_metrics, tenant_id, groups,
                             _print=_print))
        eff = eff.on(list)
        eff = eff.on(
            error=lambda exc_info: log.err(exc_info_to_failure(exc_info)))
        effs.append(eff)
    return effs
Exemple #14
0
def get_all_metrics_effects(tenanted_groups, log, _print=False):
    """
    Gather server data for and produce metrics for all groups
    across all tenants in a region

    :param dict tenanted_groups: Scaling groups grouped with tenantId
    :param bool _print: Should the function print while processing?

    :return: ``list`` of :obj:`Effect` of (``list`` of :obj:`GroupMetrics`)
             or None
    """
    effs = []
    for tenant_id, groups in tenanted_groups.iteritems():
        eff = get_all_scaling_group_servers()
        eff = Effect(TenantScope(eff, tenant_id))
        eff = eff.on(partial(get_tenant_metrics, tenant_id, groups,
                             _print=_print))
        eff = eff.on(list)
        eff = eff.on(
            error=lambda exc_info: log.err(exc_info_to_failure(exc_info)))
        effs.append(eff)
    return effs