mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-21 09:51:27 -07:00
* Add inventory plugin for Stackpath Edge Compute
* Update comments from PR regarding general issues.
* Convert requests to ansible open_url
* Add types to documentation and replace stack ids with stack names
* Replace stack_ids with stack_slugs for easier readability, fix pagination and separate getting lists to a function
* create initial test
* fix test name
* fix test to look at class variable as that function doesn't return the value
* fix pep line length limit in line 149
* Add validation function for config options.
Add more testing for validation and population functions
* set correct indentation for tests
* fix validate config to expect KeyError,
fix testing to have inventory data,
fix testing to use correct authentication function
* import InventoryData from the correct location
* remove test_authenticate since there's no dns resolution in the CI,
rename some stack_slugs to a more generic name
fix missing hostname_key for populate test
* Fix typo in workloadslug name for testing
* fix group name in assertion
* debug failing test
* fix missing hosts in assertion for group hosts
* fixes for documentation formatting
add commas to last item in all dictionaries
* end documentation description with a period
* fix typo in documentation
* More documentation corrections, remove unused local variable
(cherry picked from commit 951a7e2758
)
Co-authored-by: shayrybak <shay.rybak@stackpath.com>
This commit is contained in:
parent
e4d3d24b26
commit
6ec769b051
2 changed files with 481 additions and 0 deletions
200
tests/unit/plugins/inventory/test_stackpath_compute.py
Normal file
200
tests/unit/plugins/inventory/test_stackpath_compute.py
Normal file
|
@ -0,0 +1,200 @@
|
|||
# Copyright (c) 2020 Shay Rybak <shay.rybak@stackpath.com>
|
||||
# Copyright (c) 2020 Ansible Project
|
||||
# GNGeneral Public License v3.0+
|
||||
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
import pytest
|
||||
|
||||
from ansible.errors import AnsibleError
|
||||
from ansible.inventory.data import InventoryData
|
||||
from ansible_collections.community.general.plugins.inventory.stackpath_compute import InventoryModule
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def inventory():
|
||||
r = InventoryModule()
|
||||
r.inventory = InventoryData()
|
||||
return r
|
||||
|
||||
|
||||
def test_get_stack_slugs(inventory):
|
||||
stacks = [
|
||||
{
|
||||
'status': 'ACTIVE',
|
||||
'name': 'test1',
|
||||
'id': 'XXXX',
|
||||
'updatedAt': '2020-07-08T01:00:00.000000Z',
|
||||
'slug': 'test1',
|
||||
'createdAt': '2020-07-08T00:00:00.000000Z',
|
||||
'accountId': 'XXXX',
|
||||
}, {
|
||||
'status': 'ACTIVE',
|
||||
'name': 'test2',
|
||||
'id': 'XXXX',
|
||||
'updatedAt': '2019-10-22T18:00:00.000000Z',
|
||||
'slug': 'test2',
|
||||
'createdAt': '2019-10-22T18:00:00.000000Z',
|
||||
'accountId': 'XXXX',
|
||||
}, {
|
||||
'status': 'DISABLED',
|
||||
'name': 'test3',
|
||||
'id': 'XXXX',
|
||||
'updatedAt': '2020-01-16T20:00:00.000000Z',
|
||||
'slug': 'test3',
|
||||
'createdAt': '2019-10-15T13:00:00.000000Z',
|
||||
'accountId': 'XXXX',
|
||||
}, {
|
||||
'status': 'ACTIVE',
|
||||
'name': 'test4',
|
||||
'id': 'XXXX',
|
||||
'updatedAt': '2019-11-20T22:00:00.000000Z',
|
||||
'slug': 'test4',
|
||||
'createdAt': '2019-11-20T22:00:00.000000Z',
|
||||
'accountId': 'XXXX',
|
||||
}
|
||||
]
|
||||
inventory._get_stack_slugs(stacks)
|
||||
assert len(inventory.stack_slugs) == 4
|
||||
assert inventory.stack_slugs == [
|
||||
"test1",
|
||||
"test2",
|
||||
"test3",
|
||||
"test4"
|
||||
]
|
||||
|
||||
|
||||
def test_verify_file_bad_config(inventory):
|
||||
assert inventory.verify_file('foobar.stackpath_compute.yml') is False
|
||||
|
||||
|
||||
def test_validate_config(inventory):
|
||||
config = {
|
||||
"client_secret": "short_client_secret",
|
||||
"use_internal_ip": False,
|
||||
"stack_slugs": ["test1"],
|
||||
"client_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
"plugin": "community.general.stackpath_compute",
|
||||
}
|
||||
with pytest.raises(AnsibleError) as error_message:
|
||||
inventory._validate_config(config)
|
||||
assert "client_secret must be 64 characters long" in error_message
|
||||
|
||||
config = {
|
||||
"client_secret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
"use_internal_ip": True,
|
||||
"stack_slugs": ["test1"],
|
||||
"client_id": "short_client_id",
|
||||
"plugin": "community.general.stackpath_compute",
|
||||
}
|
||||
with pytest.raises(AnsibleError) as error_message:
|
||||
inventory._validate_config(config)
|
||||
assert "client_id must be 32 characters long" in error_message
|
||||
|
||||
config = {
|
||||
"use_internal_ip": True,
|
||||
"stack_slugs": ["test1"],
|
||||
"client_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
"plugin": "community.general.stackpath_compute",
|
||||
}
|
||||
with pytest.raises(AnsibleError) as error_message:
|
||||
inventory._validate_config(config)
|
||||
assert "config missing client_secret, a required paramter" in error_message
|
||||
|
||||
config = {
|
||||
"client_secret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
"use_internal_ip": False,
|
||||
"plugin": "community.general.stackpath_compute",
|
||||
}
|
||||
with pytest.raises(AnsibleError) as error_message:
|
||||
inventory._validate_config(config)
|
||||
assert "config missing client_id, a required paramter" in error_message
|
||||
|
||||
|
||||
def test_populate(inventory):
|
||||
instances = [
|
||||
{
|
||||
"name": "instance1",
|
||||
"countryCode": "SE",
|
||||
"workloadSlug": "wokrload1",
|
||||
"continent": "Europe",
|
||||
"workloadId": "id1",
|
||||
"cityCode": "ARN",
|
||||
"externalIpAddress": "20.0.0.1",
|
||||
"target": "target1",
|
||||
"stackSlug": "stack1",
|
||||
"ipAddress": "10.0.0.1",
|
||||
},
|
||||
{
|
||||
"name": "instance2",
|
||||
"countryCode": "US",
|
||||
"workloadSlug": "wokrload2",
|
||||
"continent": "America",
|
||||
"workloadId": "id2",
|
||||
"cityCode": "JFK",
|
||||
"externalIpAddress": "20.0.0.2",
|
||||
"target": "target2",
|
||||
"stackSlug": "stack1",
|
||||
"ipAddress": "10.0.0.2",
|
||||
},
|
||||
{
|
||||
"name": "instance3",
|
||||
"countryCode": "SE",
|
||||
"workloadSlug": "workload3",
|
||||
"continent": "Europe",
|
||||
"workloadId": "id3",
|
||||
"cityCode": "ARN",
|
||||
"externalIpAddress": "20.0.0.3",
|
||||
"target": "target1",
|
||||
"stackSlug": "stack2",
|
||||
"ipAddress": "10.0.0.3",
|
||||
},
|
||||
{
|
||||
"name": "instance4",
|
||||
"countryCode": "US",
|
||||
"workloadSlug": "workload3",
|
||||
"continent": "America",
|
||||
"workloadId": "id4",
|
||||
"cityCode": "JFK",
|
||||
"externalIpAddress": "20.0.0.4",
|
||||
"target": "target2",
|
||||
"stackSlug": "stack2",
|
||||
"ipAddress": "10.0.0.4",
|
||||
},
|
||||
]
|
||||
inventory.hostname_key = "externalIpAddress"
|
||||
inventory._populate(instances)
|
||||
# get different hosts
|
||||
host1 = inventory.inventory.get_host('20.0.0.1')
|
||||
host2 = inventory.inventory.get_host('20.0.0.2')
|
||||
host3 = inventory.inventory.get_host('20.0.0.3')
|
||||
host4 = inventory.inventory.get_host('20.0.0.4')
|
||||
|
||||
# get different groups
|
||||
assert 'citycode_arn' in inventory.inventory.groups
|
||||
group_citycode_arn = inventory.inventory.groups['citycode_arn']
|
||||
assert 'countrycode_se' in inventory.inventory.groups
|
||||
group_countrycode_se = inventory.inventory.groups['countrycode_se']
|
||||
assert 'continent_america' in inventory.inventory.groups
|
||||
group_continent_america = inventory.inventory.groups['continent_america']
|
||||
assert 'name_instance1' in inventory.inventory.groups
|
||||
group_name_instance1 = inventory.inventory.groups['name_instance1']
|
||||
assert 'stackslug_stack1' in inventory.inventory.groups
|
||||
group_stackslug_stack1 = inventory.inventory.groups['stackslug_stack1']
|
||||
assert 'target_target1' in inventory.inventory.groups
|
||||
group_target_target1 = inventory.inventory.groups['target_target1']
|
||||
assert 'workloadslug_workload3' in inventory.inventory.groups
|
||||
group_workloadslug_workload3 = inventory.inventory.groups['workloadslug_workload3']
|
||||
assert 'workloadid_id1' in inventory.inventory.groups
|
||||
group_workloadid_id1 = inventory.inventory.groups['workloadid_id1']
|
||||
|
||||
assert group_citycode_arn.hosts == [host1, host3]
|
||||
assert group_countrycode_se.hosts == [host1, host3]
|
||||
assert group_continent_america.hosts == [host2, host4]
|
||||
assert group_name_instance1.hosts == [host1]
|
||||
assert group_stackslug_stack1.hosts == [host1, host2]
|
||||
assert group_target_target1.hosts == [host1, host3]
|
||||
assert group_workloadslug_workload3.hosts == [host3, host4]
|
||||
assert group_workloadid_id1.hosts == [host1]
|
Loading…
Add table
Add a link
Reference in a new issue