Compare commits

...

10 Commits

Author SHA1 Message Date
89c3ebf053 New release v2.8.0b1 2019-04-15 12:21:54 -07:00
3ac5ccda03 [stable-2.8] Fix ansible-test unicode error with redact option.
(cherry picked from commit 2ef4ba3)

Co-authored-by: Matt Clay <matt@mystile.com>
2019-04-15 11:37:57 -07:00
5b1645aca9 [stable-2.8] Rebalance Azure tests. (#55238)
(cherry picked from commit 7599229310)

Co-authored-by: Matt Clay <matt@mystile.com>
2019-04-12 22:51:07 -07:00
bba6ca4db1 [stable-2.8] Disable hcloud tests until issues are resolved.
(cherry picked from commit 216cd86cb8)

Co-authored-by: Matt Clay <matt@mystile.com>
2019-04-12 15:04:58 -07:00
9bc5f72c13 tag off long-running azure_rm_virtualnetworkgateway tests
(cherry picked from commit 837ea4b39f)
2019-04-12 14:14:55 -07:00
6179a94d9b [stable-2.8] Fix ansible-test inventory and vars path handling. (#55186)
* Fix ansible-test inventory and vars path handling.
* Improve explanation for missing commit.
(cherry picked from commit a4d0c24bbf)

Co-authored-by: Matt Clay <matt@mystile.com>
2019-04-12 14:14:43 -07:00
1a96098bb3 [stable-2.8] Don't use SSLEOFError in vmware_tools.py
(cherry picked from commit 27a3ec3a12)

Co-authored-by: Sam Doran <sdoran@redhat.com>
2019-04-12 08:42:24 -07:00
bca7f1fe22 [stable-2.8] vmware_tools: ignore absence of urllib3
(cherry picked from commit 05fe9ef)

Co-authored-by: James Cassell <code@james.cassell.me>
2019-04-11 16:51:35 -07:00
65b461b8fe Update the porting guide link to changelog 2019-04-11 11:17:22 -07:00
2c4b934482 Update the docs template to make 2.8 the current release 2019-04-11 11:04:40 -07:00
28 changed files with 371 additions and 93 deletions

View File

@ -572,7 +572,6 @@ releases:
- win_copy-empty-dir.yaml
- win_copy-paths.yaml
- win_domain-cred.yaml
- win_domain_membership-replace.yaml
- win_dsc-validation.yaml
- win_dsc-warning.yaml
- win_file-hidden.yaml
@ -1409,3 +1408,66 @@ releases:
shell:
- cmd
release_date: '2019-04-04'
2.8.0b1:
codename: How Many More Times
fragments:
- 40366-modify-existing-volume.yml
- 45355-mysql_user-fix-versions-compatibilities.yml
- 49039-facts-xen-paravirt-cpuinfo.yaml
- 54494-ec2-user-data.yaml
- 54517-include-partition-table-postgresql-privs.yaml
- 54633-openssl_pkcs12_idempotency_fixes.yaml
- 54690-openssl_certificate-assertonly.yml
- 54692-ec2_asg_fix_reading_properties.yml
- 54799-ufw-default-direction.yml
- 54974-rename-safeconfigparser-to-configparser.yaml
- 55006-setup-is_chroot-btrfs.yaml
- 55038-rename-results-key-vmware-guest.yml
- 55083-univention-diff-UnboundLocalError.yaml
- dnf-4.2.2-module-remove.yaml
- facts-pkg-mgr-rhel.yaml
- fibre_channel_wwn_fact_aix.yaml
- fix_cache_assumption.yml
- gcp-compute-add-image.yaml
- include-no-swallow-error.yaml
- jinja2_nested_undefined_getitem.yaml
- paramiko-optional.yaml
- redhat_subscription_use_strings_for_yum_plugin_configs.yaml
- tower_job_launch-options.yaml
- use-module_utils-six-in-contrib-inventory.yaml
- user-read-passwd-when-local.yaml
- v2.8.0b1_summary.yaml
- yum-select-version.yml
modules:
- azure_rm_devtestlabcustomimage_facts
- azure_rm_devtestlabenvironment_facts
- azure_rm_devtestlabpolicy_facts
- azure_rm_devtestlabschedule_facts
- azure_rm_hdinsightcluster_facts
- azure_rm_virtualnetworkgateway
- cloudscale_server_group
- docker_swarm_service_info
- keycloak_group
- oci_vcn
- onyx_buffer_pool
- onyx_vxlan
- openssl_certificate_info
- openssl_csr_info
- openssl_privatekey_info
- ovirt_role
- podman_image
- podman_image_info
- postgresql_owner
- postgresql_slot
- vexata_volume
- win_format
- win_http_proxy
- win_inet_proxy
- xfs_quota
plugins:
connection:
- vmware_tools
inventory:
- cloudscale
- kubevirt
release_date: '2019-04-15'

View File

@ -5,6 +5,163 @@ Ansible 2.8 "How Many More Times" Release Notes
.. contents:: Topics
v2.8.0b1
========
Release Summary
---------------
| Release Date: 2019-04-15
| `Porting Guide <https://docs.ansible.com/ansible/devel/porting_guides.html>`__
Minor Changes
-------------
- add support for extending volumes in os_volume, also add module support for check_mode and diff
- ansible facts properly detect xen paravirt vs hvm
- gather Fibre Channel WWNs fact on AIX (extends https://github.com/ansible/ansible/pull/37043)
- gcp_compute - add the image field to map to disk source iamges in the configured zones bringing it in line with old gce inventory script data
- jinja2 - accesses to keys/indices on an undefined value now return further undefined values rather than throwing an exception
- openssl_certificate - the messages of the ``assertonly`` provider with respect to private key and CSR checking are now more precise.
- openssl_pkcs12 - Fixed idempotency checks, the module will regenerate the pkcs12 file if any of the parameters differ from the ones in the file. The ``ca_certificates`` parameter has been renamed to ``other_certificates``.
- paramiko is now optional. There is no compat package on certain platforms to worry about.
- rename safeConfigParser to ConfigParser to suppress DeprecationWarning (The SafeConfigParser class has been renamed to ConfigParser in Python 3.2.)
- use ansible.module_utils.six for all scripts in contrib/inventory
Bugfixes
--------
- Fixed to handle arguments correctly even if inventory and credential variables are not specified (#25017,#37567)
- Include partition tables in the ALL_IN_SCHEMA option for postgresql-privs (https://github.com/ansible/ansible/issues/54516)
- The internal key `results` in vmware_guest_snapshot module return renamed to `snapshot_results`.
- dnf - fix issue with dnf API calls to adapt to changes in upstream dnf version 4.2.2
- ec2 - Only use user_data if the user has specified a value. This prevents setting the instance's user data to b'None'.
- ec2_asg - Fix error where ASG dict has no launch config or launch template key
- facts - ensure that the default package manager for RHEL < 8 is yum, and dnf for newer
- include_role - Don't swallow errors when processing included files/roles (https://github.com/ansible/ansible/issues/54786)
- mysql_user: fix compatibility issues with various MySQL/MariaDB versions
- redhat_subscription - For compatibility using the redhat_subscription module on hosts set to use a python 3 interpreter, use string values when updating yum plugin configuration files.
- rely on method existing vs loosely related _cache attribute, also fix data persistence issue on plugin reuse across sources.
- setup - properly detect is_chroot on Btrfs (https://github.com/ansible/ansible/issues/55006)
- udm_dns_record - Fix issues when state is absent with undefined variable diff at the module return.
- udm_dns_zone - Fix issues when state is absent with undefined variable diff at the module return.
- udm_group - Fix issues when state is absent with undefined variable diff at the module return.
- udm_share - Fix issues when state is absent with undefined variable diff at the module return.
- udm_user - Fix issues when state is absent with undefined variable diff at the module return.
- ufw - when ``default`` is specified, ``direction`` does not needs to be specified. This was accidentally introduced in Ansible 2.7.8.
- user - fix a bug when checking if a local user account exists on a system using directory authentication (https://github.com/ansible/ansible/issues/50947, https://github.com/ansible/ansible/issues/38206)
- yum allows comparison operators like '>=' for selecting package version
New Plugins
-----------
Connection
~~~~~~~~~~
- vmware_tools - Execute tasks inside a VM via VMware Tools
Inventory
~~~~~~~~~
- cloudscale - cloudscale.ch inventory source
- kubevirt - KubeVirt inventory source
New Modules
-----------
Cloud
~~~~~
azure
^^^^^
- azure_rm_devtestlabcustomimage_facts - Get Azure DevTest Lab Custom Image facts.
- azure_rm_devtestlabenvironment_facts - Get Azure Environment facts.
- azure_rm_devtestlabpolicy_facts - Get Azure DTL Policy facts.
- azure_rm_devtestlabschedule_facts - Get Azure Schedule facts.
- azure_rm_hdinsightcluster_facts - Get Azure HDInsight Cluster facts.
- azure_rm_virtualnetworkgateway - Manage Azure virtual network gateways.
cloudscale
^^^^^^^^^^
- cloudscale_server_group - Manages server groups on the cloudscale.ch IaaS service
docker
^^^^^^
- docker_swarm_service_info - Retrieves information about docker services from a Swarm Manager
oracle
^^^^^^
- oci_vcn - Manage Virtual Cloud Networks(VCN) in OCI
ovirt
^^^^^
- ovirt_role - Module to manage roles in oVirt/RHV
podman
^^^^^^
- podman_image - Pull images for use by podman
- podman_image_info - Gather info about images using podman
Crypto
~~~~~~
- openssl_certificate_info - Provide information of OpenSSL X.509 certificates
- openssl_csr_info - Provide information of OpenSSL Certificate Signing Requests (CSR)
- openssl_privatekey_info - Provide information for OpenSSL private keys
Database
~~~~~~~~
postgresql
^^^^^^^^^^
- postgresql_owner - Change an owner of PostgreSQL database object
- postgresql_slot - Add or remove slots from a PostgreSQL database
Identity
~~~~~~~~
keycloak
^^^^^^^^
- keycloak_group - Allows administration of Keycloak groups via Keycloak API
Network
~~~~~~~
onyx
^^^^
- onyx_buffer_pool - Configures Buffer Pool
- onyx_vxlan - Configures Vxlan
Storage
~~~~~~~
vexata
^^^^^^
- vexata_volume - Manage volumes on Vexata VX100 storage arrays
System
~~~~~~
- xfs_quota - Manage quotas on XFS filesystems
Windows
~~~~~~~
- win_format - Formats an existing volume or a new volume on an existing partition on Windows
- win_http_proxy - Manages proxy settings for WinHTTP
- win_inet_proxy - Manages proxy settings for WinINet and Internet Explorer
v2.8.0a1
========
@ -296,7 +453,6 @@ Expression.
- win_chocolatey - Added the ability to pin a package using the ``pinned`` option - https://github.com/ansible/ansible/issues/38526
- win_chocolatey - added the allow_multiple module option to allow side by side installs of the same package
- win_chocolatey - support bootstrapping Chocolatey from other URLs with any PS script that ends with ``.ps1``, originally this script had to be ``install.ps1``
- win_domain_membership - will now fail if an existing AD object for the host exists and ``allow_existing_computer_account=no`` - https://github.com/ansible/ansible/pull/53542
- win_dsc - Display the warnings produced by the DSC engine for better troubleshooting - https://github.com/ansible/ansible/issues/51543
- win_dsc - The Verbose logs will be returned when running with ``-vvv``.
- win_dsc - The module invocation and possible options will be displayed when running with ``-vvv``.
@ -1225,7 +1381,7 @@ Net Tools
netbox
^^^^^^
- netbox_device - Create or delete devices within Netbox
- netbox_device - Create, update or delete devices within Netbox
- netbox_interface - Creates or removes interfaces from Netbox
- netbox_ip_address - Creates or removes IP addresses from Netbox
- netbox_prefix - Creates or removes prefixes from Netbox

View File

@ -0,0 +1,3 @@
release_summary: |
| Release Date: 2019-04-15
| `Porting Guide <https://docs.ansible.com/ansible/devel/porting_guides.html>`__

View File

@ -156,7 +156,7 @@
<div class="DocSiteProduct-logoText">
Ansible
<div class="DocSiteProduct-CurrentVersion" align="right">
devel
2.8
</div>
</div>
</div>

View File

@ -8,7 +8,7 @@ This section discusses the behavioral changes between Ansible 2.7 and Ansible 2.
It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they will work with this version of Ansible.
We suggest you read this page along with `Ansible Changelog for 2.8 <https://github.com/ansible/ansible/blob/devel/changelogs/CHANGELOG-v2.8.rst>`_ to understand what updates you may need to make.
We suggest you read this page along with `Ansible Changelog for 2.8 <https://github.com/ansible/ansible/blob/stable-2.8/changelogs/CHANGELOG-v2.8.rst>`_ to understand what updates you may need to make.
This document is part of a collection on porting. The complete list of porting guides can be found at :ref:`porting guides <porting_guides>`.

View File

@ -8,11 +8,18 @@ __metaclass__ = type
import re
from os.path import exists, getsize
from socket import gaierror
from ssl import SSLEOFError, SSLError
from ssl import SSLError
from time import sleep
import urllib3
import traceback
URLLIB3_IMP_ERR = None
try:
import urllib3
HAS_URLLIB3 = True
except ImportError:
URLLIB3_IMP_ER = traceback.format_exc()
HAS_URLLIB3 = False
REQUESTS_IMP_ERR = None
try:
import requests
@ -290,7 +297,7 @@ class Connection(ConnectionBase):
if self.validate_certs:
connect = SmartConnect
else:
if self.get_option("silence_tls_warnings"):
if HAS_URLLIB3 and self.get_option("silence_tls_warnings"):
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
connect = SmartConnectNoSSL
@ -298,7 +305,7 @@ class Connection(ConnectionBase):
self._si = connect(**connection_kwargs)
except SSLError:
raise AnsibleError("SSL Error: Certificate verification failed.")
except (gaierror, SSLEOFError):
except (gaierror):
raise AnsibleError("Connection Error: Unable to connect to '%s'." % to_native(connection_kwargs["host"]))
except vim.fault.InvalidLogin as e:
raise AnsibleError("Connection Login Error: %s" % to_native(e.msg))

View File

@ -19,6 +19,6 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
__version__ = '2.8.0a1.post0'
__version__ = '2.8.0b1'
__author__ = 'Ansible, Inc.'
__codename__ = 'How Many More Times'

View File

@ -1,4 +1,4 @@
cloud/azure
shippable/azure/group5
shippable/azure/group2
destructive
azure_rm_autoscale

View File

@ -1,5 +1,5 @@
cloud/azure
shippable/azure/group4
shippable/azure/group2
destructive
azure_rm_cdnprofile_facts
azure_rm_cdnendpoint
azure_rm_cdnendpoint

View File

@ -1,6 +1,6 @@
cloud/azure
destructive
shippable/azure/group8
shippable/azure/group3
azure_rm_mariadbserver_facts
azure_rm_mariadbdatabase
azure_rm_mariadbdatabase_facts

View File

@ -1,3 +1,3 @@
cloud/azure
shippable/azure/group4
shippable/azure/group3
destructive

View File

@ -1,3 +1,3 @@
cloud/azure
shippable/azure/group4
shippable/azure/group6
destructive

View File

@ -1,82 +1,120 @@
# FIXME: needs minimal tests (check mode?) that can run quickly, VNG creation takes > 20min
- name: Prepare random number
set_fact:
vnetname: "vnet{{ resource_group | hash('md5') | truncate(7, True, '') }}{{ 1000 | random }}"
vngname: "vng{{ resource_group | hash('md5') | truncate(7, True, '') }}{{ 1000 | random }}"
- name: Create virtual network
azure_rm_virtualnetwork:
resource_group: "{{ resource_group }}"
name: "{{ vnetname }}"
address_prefixes: "10.0.0.0/16"
- name: Create virtual network gateway without bgp settings (check mode)
check_mode: yes
azure_rm_virtualnetworkgateway:
resource_group: "{{ resource_group }}"
name: "{{ vngname }}"
ip_configurations:
- name: testipconfig
private_ip_allocation_method: Dynamic
public_ip_address_name: testPublicIP
virtual_network: "{{ vnetname }}"
tags:
common: "xyz"
register: output
- name: Add subnet
azure_rm_subnet:
- assert:
that: output.changed
- name: long-running virtualnetworkgateway tests [run with `--tags long_run,untagged` to enable]
tags: [long_run, never]
block:
- name: Create virtual network
azure_rm_virtualnetwork:
resource_group: "{{ resource_group }}"
name: "{{ vnetname }}"
address_prefixes: "10.0.0.0/16"
- name: Add subnet
azure_rm_subnet:
resource_group: "{{ resource_group }}"
name: GatewaySubnet
address_prefix: "10.0.2.0/24"
virtual_network: "{{ vnetname }}"
- name: Create public IP address
azure_rm_publicipaddress:
resource_group: "{{ resource_group }}"
allocation_method: Dynamic
name: testPublicIP
- name: Create virtual network gateway without bgp settings
azure_rm_virtualnetworkgateway:
resource_group: "{{ resource_group }}"
name: GatewaySubnet
address_prefix: "10.0.2.0/24"
name: "{{ vngname }}"
ip_configurations:
- name: testipconfig
private_ip_allocation_method: Dynamic
public_ip_address_name: testPublicIP
virtual_network: "{{ vnetname }}"
tags:
common: "xyz"
register: output
- name: Create public IP address
azure_rm_publicipaddress:
- assert:
that: output.changed
- name: Create virtual network gateway without bgp settings
azure_rm_virtualnetworkgateway:
resource_group: "{{ resource_group }}"
allocation_method: Dynamic
name: testPublicIP
name: "{{ vngname }}"
ip_configurations:
- name: testipconfig
private_ip_allocation_method: Dynamic
public_ip_address_name: testPublicIP
virtual_network: "{{ vnetname }}"
tags:
common: "xyz"
register: output
- name: Create virtual network gateway without bgp settings
azure_rm_virtualnetworkgateway:
resource_group: "{{ resource_group }}"
name: "{{ vngname }}"
ip_configurations:
- name: testipconfig
private_ip_allocation_method: Dynamic
public_ip_address_name: testPublicIP
virtual_network: "{{ vnetname }}"
tags:
common: "xyz"
register: output
- assert:
that: output.changed
- assert:
that: output.changed
- name: Create virtual network gateway without bgp settings - idempotent
azure_rm_virtualnetworkgateway:
resource_group: "{{ resource_group }}"
name: "{{ vngname }}"
ip_configurations:
- name: testipconfig
private_ip_allocation_method: Dynamic
public_ip_address_name: testPublicIP
virtual_network: "{{ vnetname }}"
tags:
common: "xyz"
register: output
- name: Create virtual network gateway without bgp settings - idempotent
azure_rm_virtualnetworkgateway:
resource_group: "{{ resource_group }}"
name: "{{ vngname }}"
ip_configurations:
- name: testipconfig
private_ip_allocation_method: Dynamic
public_ip_address_name: testPublicIP
virtual_network: "{{ vnetname }}"
tags:
common: "xyz"
register: output
- assert:
that: not output.changed
- assert:
that: not output.changed
- name: Update virtual network gateway
azure_rm_virtualnetworkgateway:
resource_group: "{{ resource_group }}"
name: "{{ vngname }}"
ip_configurations:
- name: testipconfig
private_ip_allocation_method: Dynamic
public_ip_address_name: testPublicIP
virtual_network: "{{ vnetname }}"
tags:
common: "mno"
register: output
- assert:
that: output.changed
- name: Update virtual network gateway
azure_rm_virtualnetworkgateway:
resource_group: "{{ resource_group }}"
name: "{{ vngname }}"
ip_configurations:
- name: testipconfig
private_ip_allocation_method: Dynamic
public_ip_address_name: testPublicIP
virtual_network: "{{ vnetname }}"
tags:
common: "mno"
register: output
- assert:
that: output.changed
- name: Delete virtual network gateway
azure_rm_virtualnetworkgateway:
resource_group: "{{ resource_group }}"
name: "{{ vngname }}"
state: absent
register: output
- assert:
that: output.changed
- name: Delete virtual network gateway
azure_rm_virtualnetworkgateway:
resource_group: "{{ resource_group }}"
name: "{{ vngname }}"
state: absent
register: output
- assert:
that: output.changed
- name: Delete virtual network gateway - idempotent
azure_rm_virtualnetworkgateway:

View File

@ -1,2 +1,3 @@
cloud/hcloud
shippable/hcloud/group1
disabled

View File

@ -1,2 +1,3 @@
cloud/hcloud
shippable/hcloud/group1
disabled

View File

@ -1,2 +1,3 @@
cloud/hcloud
shippable/hcloud/group1
disabled

View File

@ -1,2 +1,3 @@
cloud/hcloud
shippable/hcloud/group1
disabled

View File

@ -1,2 +1,3 @@
cloud/hcloud
shippable/hcloud/group1
disabled

View File

@ -1,2 +1,3 @@
cloud/hcloud
shippable/hcloud/group1
disabled

View File

@ -1,2 +1,3 @@
cloud/hcloud
shippable/hcloud/group1
disabled

View File

@ -1,2 +1,3 @@
cloud/hcloud
shippable/hcloud/group1
disabled

View File

@ -1,2 +1,3 @@
cloud/hcloud
shippable/hcloud/group1
disabled

View File

@ -1,2 +1,3 @@
cloud/hcloud
shippable/hcloud/group1
disabled

View File

@ -1,2 +1,3 @@
cloud/hcloud
shippable/hcloud/group1
disabled

View File

@ -301,7 +301,7 @@ class AnsibleCoreCI(object):
)
if self.connection.password:
display.sensitive.add(self.connection.password)
display.sensitive.add(str(self.connection.password))
status = 'running' if self.connection.running else 'starting'
@ -453,7 +453,7 @@ class AnsibleCoreCI(object):
:type config: dict[str, str]
:rtype: bool
"""
self.instance_id = config['instance_id']
self.instance_id = str(config['instance_id'])
self.endpoint = config['endpoint']
self.started = True

View File

@ -321,7 +321,8 @@ def get_merged_commit(args, commit):
# This should only fail for pull requests where the commit does not exist.
# Merge runs would fail much earlier when attempting to checkout the commit.
raise ApplicationError('Commit %s was not found:\n\n%s\n\n'
'The commit was likely removed by a force push between job creation and execution.\n'
'GitHub may not have fully replicated the commit across their infrastructure.\n'
'It is also possible the commit was removed by a force push between job creation and execution.\n'
'Find the latest run for the pull request and restart failed jobs as needed.'
% (commit, ex.stderr.strip()))

View File

@ -1241,7 +1241,7 @@ def command_integration_role(args, target, start_at_task, test_dir, inventory_pa
hosts=hosts,
gather_facts=gather_facts,
vars_files=[
test_env.vars_file,
os.path.relpath(test_env.vars_file, test_env.integration_dir),
],
roles=[
target.name,
@ -1262,7 +1262,7 @@ def command_integration_role(args, target, start_at_task, test_dir, inventory_pa
display.info('>>> Playbook: %s\n%s' % (filename, playbook.strip()), verbosity=3)
cmd = ['ansible-playbook', filename, '-i', test_env.inventory_path]
cmd = ['ansible-playbook', filename, '-i', os.path.relpath(test_env.inventory_path, test_env.integration_dir)]
if start_at_task:
cmd += ['--start-at-task', start_at_task]

View File

@ -125,15 +125,12 @@ def integration_test_environment(args, target, inventory_path):
if args.no_temp_workdir or 'no/temp_workdir/' in target.aliases:
display.warning('Disabling the temp work dir is a temporary debugging feature that may be removed in the future without notice.')
integration_dir = 'test/integration'
integration_dir = os.path.abspath('test/integration')
inventory_path = os.path.abspath(inventory_path)
ansible_config = os.path.join(integration_dir, '%s.cfg' % args.command)
vars_file = os.path.join(integration_dir, vars_file)
inventory_name = os.path.relpath(inventory_path, integration_dir)
if '/' in inventory_name:
inventory_name = inventory_path
yield IntegrationEnvironment(integration_dir, inventory_name, ansible_config, vars_file)
yield IntegrationEnvironment(integration_dir, inventory_path, ansible_config, vars_file)
return
root_temp_dir = os.path.expanduser('~/.ansible/test/tmp')
@ -216,7 +213,10 @@ def integration_test_environment(args, target, inventory_path):
make_dirs(os.path.dirname(file_dst))
shutil.copy2(file_src, file_dst)
yield IntegrationEnvironment(integration_dir, inventory_name, ansible_config, vars_file)
inventory_path = os.path.join(integration_dir, inventory_name)
vars_file = os.path.join(integration_dir, vars_file)
yield IntegrationEnvironment(integration_dir, inventory_path, ansible_config, vars_file)
finally:
if not args.explain:
shutil.rmtree(temp_dir)