コード例 #1
0
ファイル: test_rampart_groups.py プロジェクト: yckwon75/awx
def test_instance_group_basic_policies(instance_factory,
                                       instance_group_factory):
    i0 = instance_factory("i0")
    i0.managed_by_policy = False
    i0.save()
    i1 = instance_factory("i1")
    i2 = instance_factory("i2")
    i3 = instance_factory("i3")
    i4 = instance_factory("i4")
    ig0 = instance_group_factory("ig0")
    ig1 = instance_group_factory("ig1", minimum=2)
    ig2 = instance_group_factory("ig2", percentage=50)
    ig3 = instance_group_factory("ig3", percentage=50)
    ig0.policy_instance_list.append(i0.hostname)
    ig0.save()
    apply_cluster_membership_policies()
    ig0 = InstanceGroup.objects.get(id=ig0.id)
    ig1 = InstanceGroup.objects.get(id=ig1.id)
    ig2 = InstanceGroup.objects.get(id=ig2.id)
    ig3 = InstanceGroup.objects.get(id=ig3.id)
    assert len(ig0.instances.all()) == 1
    assert i0 in ig0.instances.all()
    assert len(InstanceGroup.objects.get(id=ig1.id).instances.all()) == 2
    assert i1 in ig1.instances.all()
    assert i2 in ig1.instances.all()
    assert len(InstanceGroup.objects.get(id=ig2.id).instances.all()) == 2
    assert i3 in ig2.instances.all()
    assert i4 in ig2.instances.all()
    assert len(InstanceGroup.objects.get(id=ig3.id).instances.all()) == 2
    assert i1 in ig3.instances.all()
    assert i2 in ig3.instances.all()
コード例 #2
0
def test_policy_instance_distribution_even(instance_factory,
                                           instance_group_factory):
    i1 = instance_factory("i1")
    i2 = instance_factory("i2")
    i3 = instance_factory("i3")
    i4 = instance_factory("i4")
    ig_1 = instance_group_factory("ig1", percentage=25)
    ig_2 = instance_group_factory("ig2", percentage=25)
    ig_3 = instance_group_factory("ig3", percentage=25)
    ig_4 = instance_group_factory("ig4", percentage=25)
    apply_cluster_membership_policies()
    assert len(ig_1.instances.all()) == 1
    assert i1 in ig_1.instances.all()
    assert len(ig_2.instances.all()) == 1
    assert i2 in ig_2.instances.all()
    assert len(ig_3.instances.all()) == 1
    assert i3 in ig_3.instances.all()
    assert len(ig_4.instances.all()) == 1
    assert i4 in ig_4.instances.all()
    ig_1.policy_instance_minimum = 2
    ig_1.save()
    apply_cluster_membership_policies()
    assert len(ig_1.instances.all()) == 2
    assert i1 in ig_1.instances.all()
    assert i2 in ig_1.instances.all()
    assert len(ig_2.instances.all()) == 1
    assert i3 in ig_2.instances.all()
    assert len(ig_3.instances.all()) == 1
    assert i4 in ig_3.instances.all()
    assert len(ig_4.instances.all()) == 1
    assert i1 in ig_4.instances.all()
コード例 #3
0
def test_normal_instance_group_policy_exception():
    ig = InstanceGroup.objects.create(name='bar',
                                      policy_instance_percentage=100,
                                      policy_instance_minimum=2)
    Instance.objects.create(hostname='foo-1', node_type='control')
    apply_cluster_membership_policies()
    assert 'foo-1' not in [inst.hostname for inst in ig.instances.all()]
コード例 #4
0
def test_mixed_group_membership(instance_factory, instance_group_factory):
    for i in range(5):
        instance_factory("i{}".format(i))
    ig_1 = instance_group_factory("ig1", percentage=60)
    ig_2 = instance_group_factory("ig2", minimum=3)
    ig_3 = instance_group_factory("ig3", minimum=1, percentage=60)
    apply_cluster_membership_policies()
    for group in (ig_1, ig_2, ig_3):
        assert len(group.instances.all()) == 3
コード例 #5
0
def test_control_plane_policy_exception(controlplane_instance_group):
    controlplane_instance_group.policy_instance_percentage = 100
    controlplane_instance_group.policy_instance_minimum = 2
    controlplane_instance_group.save()
    Instance.objects.create(hostname='foo-1', node_type='execution')
    apply_cluster_membership_policies()
    assert 'foo-1' not in [
        inst.hostname for inst in controlplane_instance_group.instances.all()
    ]
コード例 #6
0
def test_policy_instance_distribution_round_up(instance_factory,
                                               instance_group_factory):
    i1 = instance_factory("i1")
    i2 = instance_factory("i2")
    i3 = instance_factory("i3")
    i4 = instance_factory("i4")
    i5 = instance_factory("i5")
    ig_1 = instance_group_factory("ig1", percentage=79)
    apply_cluster_membership_policies()
    assert len(ig_1.instances.all()) == 4
    assert set([i1, i2, i3, i4]) == set(ig_1.instances.all())
    assert i5 not in ig_1.instances.all()
コード例 #7
0
def test_policy_instance_list_manually_assigned(instance_factory,
                                                instance_group_factory):
    i1 = instance_factory("i1")
    i2 = instance_factory("i2")
    ig_1 = instance_group_factory("ig1", percentage=100, minimum=2)
    ig_2 = instance_group_factory("ig2")
    ig_2.policy_instance_list = [i2.hostname]
    ig_2.save()
    apply_cluster_membership_policies()
    assert len(ig_1.instances.all()) == 2
    assert i1 in ig_1.instances.all()
    assert i2 in ig_1.instances.all()
    assert len(ig_2.instances.all()) == 1
    assert i2 in ig_2.instances.all()
コード例 #8
0
def test_percentage_as_fraction_of_execution_nodes():
    """
    If an instance requests 50 percent of instances, then those should be 50 percent
    of available execution nodes (1 out of 2), as opposed to 50 percent
    of all available nodes (2 out of 4) which include unusable control nodes
    """
    ig = InstanceGroup.objects.create(name='bar',
                                      policy_instance_percentage=50)
    for i in range(2):
        Instance.objects.create(hostname=f'foo-{i}', node_type='control')
    for i in range(2):
        Instance.objects.create(hostname=f'bar-{i}', node_type='execution')
    apply_cluster_membership_policies()
    assert ig.instances.count() == 1
    assert ig.instances.first().hostname.startswith('bar-')
コード例 #9
0
def test_policy_instance_list_explicitly_pinned(instance_factory,
                                                instance_group_factory):
    i1 = instance_factory("i1")
    i2 = instance_factory("i2")
    ig_1 = instance_group_factory("ig1", percentage=100, minimum=2)
    ig_2 = instance_group_factory("ig2")
    ig_2.policy_instance_list = [i2.hostname]
    ig_2.save()

    # without being marked as manual, i2 will be picked up by ig_1
    apply_cluster_membership_policies()
    assert set(ig_1.instances.all()) == set([i1, i2])
    assert set(ig_2.instances.all()) == set([i2])

    i2.managed_by_policy = False
    i2.save()

    # after marking as manual, i2 no longer available for ig_1
    apply_cluster_membership_policies()
    assert set(ig_1.instances.all()) == set([i1])
    assert set(ig_2.instances.all()) == set([i2])
コード例 #10
0
def test_register_self_openshift():
    assert not Instance.objects.exists()
    assert not InstanceGroup.objects.exists()

    with override_settings(AWX_AUTO_DEPROVISION_INSTANCES=True,
                           CLUSTER_HOST_ID='foo_node',
                           SYSTEM_UUID='12345'):
        Command().handle()
    inst = Instance.objects.first()
    assert inst.hostname == 'foo_node'
    assert inst.uuid == '12345'
    assert inst.node_type == 'control'

    apply_cluster_membership_policies(
    )  # populate instance list using policy rules

    assert list(InstanceGroup.objects.get(name='default').instances.all()) == [
    ]  # container group
    assert list(
        InstanceGroup.objects.get(name='controlplane').instances.all()) == [
            inst
        ]
コード例 #11
0
def test_policy_instance_few_instances(instance_factory,
                                       instance_group_factory):
    # we need to use node_type=execution because node_type=hybrid will implicitly
    # create the controlplane execution group if it doesn't already exist
    i1 = instance_factory("i1", node_type='execution')
    ig_1 = instance_group_factory("ig1", percentage=25)
    ig_2 = instance_group_factory("ig2", percentage=25)
    ig_3 = instance_group_factory("ig3", percentage=25)
    ig_4 = instance_group_factory("ig4", percentage=25)

    count = ActivityStream.objects.count()

    apply_cluster_membership_policies()
    # running apply_cluster_membership_policies shouldn't spam the activity stream
    assert ActivityStream.objects.count() == count

    assert len(ig_1.instances.all()) == 1
    assert i1 in ig_1.instances.all()
    assert len(ig_2.instances.all()) == 1
    assert i1 in ig_2.instances.all()
    assert len(ig_3.instances.all()) == 1
    assert i1 in ig_3.instances.all()
    assert len(ig_4.instances.all()) == 1
    assert i1 in ig_4.instances.all()

    i2 = instance_factory("i2", node_type='execution')
    count += 1
    apply_cluster_membership_policies()
    assert ActivityStream.objects.count() == count

    assert len(ig_1.instances.all()) == 1
    assert i1 in ig_1.instances.all()
    assert len(ig_2.instances.all()) == 1
    assert i2 in ig_2.instances.all()
    assert len(ig_3.instances.all()) == 1
    assert i1 in ig_3.instances.all()
    assert len(ig_4.instances.all()) == 1
    assert i2 in ig_4.instances.all()
コード例 #12
0
def test_policy_instance_few_instances(instance_factory,
                                       instance_group_factory):
    i1 = instance_factory("i1")
    ig_1 = instance_group_factory("ig1", percentage=25)
    ig_2 = instance_group_factory("ig2", percentage=25)
    ig_3 = instance_group_factory("ig3", percentage=25)
    ig_4 = instance_group_factory("ig4", percentage=25)

    count = ActivityStream.objects.count()

    apply_cluster_membership_policies()
    # running apply_cluster_membership_policies shouldn't spam the activity stream
    assert ActivityStream.objects.count() == count

    assert len(ig_1.instances.all()) == 1
    assert i1 in ig_1.instances.all()
    assert len(ig_2.instances.all()) == 1
    assert i1 in ig_2.instances.all()
    assert len(ig_3.instances.all()) == 1
    assert i1 in ig_3.instances.all()
    assert len(ig_4.instances.all()) == 1
    assert i1 in ig_4.instances.all()

    i2 = instance_factory("i2")
    count += 1
    apply_cluster_membership_policies()
    assert ActivityStream.objects.count() == count

    assert len(ig_1.instances.all()) == 1
    assert i1 in ig_1.instances.all()
    assert len(ig_2.instances.all()) == 1
    assert i2 in ig_2.instances.all()
    assert len(ig_3.instances.all()) == 1
    assert i1 in ig_3.instances.all()
    assert len(ig_4.instances.all()) == 1
    assert i2 in ig_4.instances.all()