mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
e77adff0b7
* 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>
85 lines
2.8 KiB
Python
85 lines
2.8 KiB
Python
# -*- 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'])
|
|
assert 'api' == inventory._validate_option('ip_style', str, 'api')
|
|
|
|
|
|
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 == []
|
|
|
|
|
|
def test_config_query_options(inventory):
|
|
regions, types, tags = inventory._get_query_options({
|
|
'regions': ['eu-west', 'us-east'],
|
|
'types': ['g5-standard-2', 'g6-standard-2'],
|
|
'tags': ['web-server'],
|
|
})
|
|
|
|
assert regions == ['eu-west', 'us-east']
|
|
assert types == ['g5-standard-2', 'g6-standard-2']
|
|
assert tags == ['web-server']
|
|
|
|
|
|
def test_verify_file(tmp_path, inventory):
|
|
file = tmp_path / "foobar.linode.yml"
|
|
file.touch()
|
|
assert inventory.verify_file(str(file)) is True
|
|
|
|
|
|
def test_verify_file_bad_config(inventory):
|
|
assert inventory.verify_file('foobar.linode.yml') is False
|