diff --git a/lib/ansible/modules/net_tools/ipify_facts.py b/lib/ansible/modules/net_tools/ipify_facts.py index 1fb7024562b..cc585daee7c 100644 --- a/lib/ansible/modules/net_tools/ipify_facts.py +++ b/lib/ansible/modules/net_tools/ipify_facts.py @@ -44,6 +44,12 @@ options: required: false default: 10 version_added: "2.3" + validate_certs: + description: + - When set to C(NO), SSL certificates will not be validated. + required: false + default: "yes" + version_added: "2.4" notes: - "Visit https://www.ipify.org to get more information." ''' @@ -80,6 +86,7 @@ except ImportError: from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.urls import fetch_url +from ansible.module_utils._text import to_text class IpifyFacts(object): @@ -92,21 +99,23 @@ class IpifyFacts(object): result = { 'ipify_public_ip': None } - (response, info) = fetch_url(module=module, url=self.api_url + "?format=json" , force=True, timeout=self.timeout) + (response, info) = fetch_url(module=module, url=self.api_url + "?format=json", force=True, timeout=self.timeout) if not response: module.fail_json(msg="No valid or no response from url %s within %s seconds (timeout)" % (self.api_url, self.timeout)) - data = json.loads(response.read()) + data = json.loads(to_text(response.read())) result['ipify_public_ip'] = data.get('ip') return result + def main(): global module module = AnsibleModule( - argument_spec = dict( - api_url=dict(default='https://api.ipify.org'), + argument_spec=dict( + api_url=dict(default='https://api.ipify.org/'), timeout=dict(type='int', default=10), + validate_certs=dict(type='bool', default=True), ), supports_check_mode=True, ) diff --git a/test/integration/targets/ipify_facts/aliases b/test/integration/targets/ipify_facts/aliases new file mode 100644 index 00000000000..7af8b7f05bb --- /dev/null +++ b/test/integration/targets/ipify_facts/aliases @@ -0,0 +1 @@ +posix/ci/group2 diff --git a/test/integration/targets/ipify_facts/tasks/main.yml b/test/integration/targets/ipify_facts/tasks/main.yml new file mode 100644 index 00000000000..505118fa8c9 --- /dev/null +++ b/test/integration/targets/ipify_facts/tasks/main.yml @@ -0,0 +1,39 @@ +# Test code for the ipify_facts +# (c) 2017, Abhijeet Kasurde + +# 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 . +# + +- debug: var=ansible_distribution +- debug: var=ansible_distribution_version + +- set_fact: + validate_certs: false + when: (ansible_distribution == "MacOSX" and ansible_distribution_version == "10.11.1") + +- name: get information about current IP using ipify facts + ipify_facts: + timeout: 30 + validate_certs: "{{ validate_certs }}" + register: external_ip +- debug: var="{{ external_ip }}" + +- name: check if task was successful + assert: + that: + - "{{ external_ip.changed == false }}" + - "{{ external_ip['ansible_facts'] is defined }}" + - "{{ external_ip['ansible_facts']['ipify_public_ip'] is defined }}" diff --git a/test/integration/targets/ipify_facts/vars/main.yml b/test/integration/targets/ipify_facts/vars/main.yml new file mode 100644 index 00000000000..1ccaab46697 --- /dev/null +++ b/test/integration/targets/ipify_facts/vars/main.yml @@ -0,0 +1,2 @@ +--- +validate_certs: true diff --git a/test/sanity/pep8/legacy-files.txt b/test/sanity/pep8/legacy-files.txt index 83e3e4a6336..37550d417f7 100644 --- a/test/sanity/pep8/legacy-files.txt +++ b/test/sanity/pep8/legacy-files.txt @@ -323,7 +323,6 @@ lib/ansible/modules/network/iosxr/iosxr_command.py lib/ansible/modules/network/iosxr/iosxr_config.py lib/ansible/modules/network/iosxr/iosxr_facts.py lib/ansible/modules/network/iosxr/iosxr_system.py -lib/ansible/modules/net_tools/ipify_facts.py lib/ansible/modules/net_tools/ipinfoio_facts.py lib/ansible/modules/network/lenovo/cnos_conditional_template.py lib/ansible/modules/network/lenovo/cnos_template.py