1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00
community.general/tests/unit/plugins/inventory/test_linode.py

86 lines
2.8 KiB
Python
Raw Normal View History

2020-03-09 10:11:07 +01:00
# -*- coding: utf-8 -*-
# Copyright 2018 Luke Murphy <lukewm@riseup.net>
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import pytest
import sys
linode_apiv4 = pytest.importorskip('linode_api4')
mandatory_py_version = pytest.mark.skipif(
sys.version_info < (2, 7),
reason='The linode_api4 dependency requires python2.7 or higher'
)
from ansible.errors import AnsibleError, AnsibleParserError
from ansible_collections.community.general.plugins.inventory.linode import InventoryModule
@pytest.fixture(scope="module")
def inventory():
return InventoryModule()
def test_access_token_lookup(inventory):
inventory._options = {'access_token': None}
with pytest.raises(AnsibleError) as error_message:
inventory._build_client()
assert 'Could not retrieve Linode access token' in error_message
def test_validate_option(inventory):
assert ['eu-west'] == inventory._validate_option('regions', list, 'eu-west')
assert ['eu-west'] == inventory._validate_option('regions', list, ['eu-west'])
Linode Inventory can use full IP data from APIv4 (#3203) (#3278) * Linode Inventory can use full IP data from APIv4 - The Linode dynamic inventory module does not currently distinguish between private and public IP addresses even though the Linode APIv4 contains this information. This change keeps the current behavior as the default and adds an option to set `ip_style: api`. When set, this option allows administrators to differentiate between private, public, slaac, local_link, and pool network addresses providing a more nuanced and granular view of the remote host's network information. Signed-off-by: Kellin <kellin@retromud.org> * Review - amend changelog details - Adds a link back to this pull request - Uses markdown styles for easier to read publishing in the changelogs - Amends the wording style to match the existing changelog styles Co-authored-by: Felix Fontein <felix@fontein.de> * Add scope to example invocation - Adds the `community.general` scope to invocation example Co-authored-by: Felix Fontein <felix@fontein.de> * Convert lamda to list comprehension - Change the ip type filter from a lambda to a list comprehension Co-authored-by: Felix Fontein <felix@fontein.de> * Add punctuation to description sentence - Adds a period to the end of the description sentence Co-authored-by: Felix Fontein <felix@fontein.de> Co-authored-by: Felix Fontein <felix@fontein.de> (cherry picked from commit e77adff0b76e13ce932dde6ab26ea320335d7476) Co-authored-by: Kellin <kellin@retromud.org>
2021-08-27 06:38:22 +02:00
assert 'api' == inventory._validate_option('ip_style', str, 'api')
2020-03-09 10:11:07 +01:00
def test_validation_option_bad_option(inventory):
with pytest.raises(AnsibleParserError) as error_message:
inventory._validate_option('regions', dict, [])
assert "The option filters ([]) must be a <class 'dict'>" == error_message
def test_empty_config_query_options(inventory):
regions, types, tags = inventory._get_query_options({})
assert regions == types == tags == []
2020-03-09 10:11:07 +01:00
def test_config_query_options(inventory):
regions, types, tags = inventory._get_query_options({
2020-03-09 10:11:07 +01:00
'regions': ['eu-west', 'us-east'],
'types': ['g5-standard-2', 'g6-standard-2'],
'tags': ['web-server'],
2020-03-09 10:11:07 +01:00
})
assert regions == ['eu-west', 'us-east']
assert types == ['g5-standard-2', 'g6-standard-2']
assert tags == ['web-server']
2020-03-09 10:11:07 +01:00
def test_verify_file(tmp_path, inventory):
file = tmp_path / "foobar.linode.yml"
file.touch()
assert inventory.verify_file(str(file)) is True
2020-03-09 10:11:07 +01:00
def test_verify_file_bad_config(inventory):
assert inventory.verify_file('foobar.linode.yml') is False