{"action":"opened","number":82,"pull_request":{"url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/pulls/82","id":189126799,"html_url":"https://github.com/glenjarvis/ansible_tutorial/pull/82","diff_url":"https://github.com/glenjarvis/ansible_tutorial/pull/82.diff","patch_url":"https://github.com/glenjarvis/ansible_tutorial/pull/82.patch","issue_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/issues/82","number":82,"state":"open","locked":false,"title":"Pin ansible to latest version 2.5.3","user":{"login":"pyup-bot","id":16239342,"avatar_url":"https://avatars0.githubusercontent.com/u/16239342?v=4","gravatar_id":"","url":"https://api.github.com/users/pyup-bot","html_url":"https://github.com/pyup-bot","followers_url":"https://api.github.com/users/pyup-bot/followers","following_url":"https://api.github.com/users/pyup-bot/following{/other_user}","gists_url":"https://api.github.com/users/pyup-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/pyup-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pyup-bot/subscriptions","organizations_url":"https://api.github.com/users/pyup-bot/orgs","repos_url":"https://api.github.com/users/pyup-bot/repos","events_url":"https://api.github.com/users/pyup-bot/events{/privacy}","received_events_url":"https://api.github.com/users/pyup-bot/received_events","type":"User","site_admin":false},"body":"\nThis PR pins [ansible](https://pypi.org/project/ansible) to the latest release **2.5.3**.\n\n\n\n<details>\n  <summary>Changelog</summary>\n  \n  \n   ### 2.5\n   ```\n   [Porting Guide](https://docs.ansible.com/ansible/devel/porting_guides/porting_guide_2.5.html)\n\n Major Changes\n* Removed the previously deprecated &#39;accelerate&#39; mode and all associated keywords and code.\n* New simpler and more intuitive &#39;loop&#39; keyword for task loops. The ``with_&lt;lookup&gt;`` loops will be deprecated in the near future and eventually removed.\n* Added fact namespacing, from now on facts will be available under `ansible_facts` namespace (i.e. `ansible_facts.os_distribution`) w/o the `ansible_` prefix.\n  They will continue to be added into the main namespace directly, but now with a configuration toggle to enable this,\n  currently on by default, in the future it will be off.\n* Add a configuration file to filter modules that a site administrator wants to exclude from being used.\n   ```\n   \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n   ### 2.4\n   ```\n   Major Changes\n\n* Support for Python-2.4 and Python-2.5 on the managed system&#39;s side was dropped. If you need to manage a system that ships with Python-2.4 or Python-2.5, you&#39;ll need to install Python-2.6 or better on the managed system or run Ansible-2.3 until you can upgrade the system.\n* New import/include keywords to replace the old bare `include` directives. The use of `static: {yes|no}` on such includes is now deprecated.\n    - Using `import_*` (`import_playbook`, `import_tasks`, `import_role`) directives are static.\n    - Using `include_*` (`include_tasks`, `include_role`) directives are dynamic.\n  This is done to avoid collisions and possible security issues as facts come from the remote targets and they might be compromised.\n* New `order` play level keyword that allows the user to change the order in which Ansible processes hosts when dispatching tasks.\n* Users can now set group merge priority for groups of the same depth (parent child relationship), using the new `ansible_group_priority` variable, when values are the same or don&#39;t exist it will fallback to the previous sorting by name&#39;.\n* Inventory has been revamped:\n  - Inventory classes have been split to allow for better management and deduplication\n  - Logic that each inventory source duplicated is now common and pushed up to reconciliation\n  - VariableManager has been updated for better interaction with inventory\n  - Updated CLI with helper method to initialize base objects for plays\n  - New inventory plugins for creating inventory\n  - Old inventory formats are still supported via plugins\n  - Inline host_list is also an inventory plugin, an example alternative `advanced_host_list` is also provided (it supports ranges)\n  - New configuration option to list enabled plugins and precedence order `[inventory]enable_plugins` in ansible.cfg\n  - vars_plugins have been reworked, they are now run from Vars manager and API has changed (need docs)\n  - Loading group_vars/host_vars is now a vars plugin and can be overridden\n  - It is now possible to specify multiple inventory sources in the command line (-i /etc/hosts1 -i /opt/hosts2)\n  - Inventory plugins can use the cache plugin (i.e. virtualbox) and is affected by `meta: refresh_inventory`\n  - Group variable precedence is now configurable via new &#39;precedence&#39; option in ansible.cfg (needs docs)\n  - Improved warnings and error messages across the board\n* Configuration has been changed from a hardcoded listing in the constants module to dynamically loaded from yaml definitions\n  - Also added an ansible-config CLI to allow for listing config options and dumping current config (including origin)\n  - TODO: build upon this to add many features detailed in ansible-config proposal https://github.com/ansible/proposals/issues/35\n* Windows modules now support the use of multiple shared module_utils files in the form of Powershell modules (.psm1), via `Requires -Module Ansible.ModuleUtils.Whatever.psm1`\n* Python module argument_spec now supports custom validation logic by accepting a callable as the `type` argument.\n* Windows become_method: runas is no longer marked `experimental`\n* Windows become_method: runas now works across all authtypes and will auto-elevate under UAC if WinRM user has &quot;Act as part of the operating system&quot; privilege\n\n Deprecations\n* The behaviour when specifying `--tags` (or `--skip-tags`) multiple times on the command line\n  has changed so that the tags are merged together by default.  See the\n  documentation for how to temporarily use the old behaviour if needed:\n  https://docs.ansible.com/ansible/intro_configuration.htmlmerge-multiple-cli-tags\n* The `fetch` module&#39;s `validate_md5` parameter has been deprecated and will be\n  removed in 2.8.  If you wish to disable post-validation of the downloaded\n  file, use validate_checksum instead.\n* Those using ansible as a library should note that the `ansible.vars.unsafe_proxy`\n  module is deprecated and slated to go away in 2.8.  The functionality has been\n  moved to `ansible.utils.unsafe_proxy` to avoid a circular import.\n* The win_get_url module has the dictionary &#39;win_get_url&#39; in its results deprecated,\n  its content is now also available directly in the resulting output, like other modules.\n* Previously deprecated &#39;hostfile&#39; config settings have been &#39;re-deprecated&#39; as before the code did not warn about deprecated configuration settings, but it does now.\n   ```\n   \n  \n  \n  \n  \n   ### 2.3.3\n   ```\n   Bugfixes\n* Fix alternatives module handlling of non existing options\n* Fix synchronize traceback with the docker connection plugin\n* Do not escape backslashes in the template lookup plugin to mirror what the template module does\n* Fix the expires option of the postgresq_user module\n* Fix for win_acl when settings permissions on registry objects that use `ALL APPLICATION PACKAGES` and `ALL RESTRICTED APPLICATION PACKAGES`\n* Python3 fixes\n  * asorted azure modules\n  * pause module\n  * hacking/env-setup script\n  * Fix traceback when checking for passwords in logged strings when logging executed commands.\n  * docker_login module\n  * Workaround python-libselinux API change in the seboolean module\n  * digital_ocean_tag module\n  * Fix the zip filter\n  * Fix user module combining bytes and text\n  * Fix for security groups in the amazon efs module\n  * Fix for the jail connection plugin not finding the named jail\n  * Fix for blockinfile&#39;s parameters insertbefore and insertafter\n* ios_config: Fix traceback when the efaults parameter is not set\n* iosxr_config: Fixed unicode error when UTF-8 characters are in configs\n* Fix check mode in archive module\n* Fix UnboundLocalError in check mode in cs_role module\n* Fix to always use lowercase hostnames for host keys in known_hosts module\n* Added missing return results for win_stat\n* Fix rabbitmq modules to give a helpful error if requests is not installed\n* Fix yum module not deleting rpms that it downloaded\n* Fix yum module failing with a URL to an rpm\n* Fix file module inappropriately expanding literal dollar signs in a path read\n  from the filesystem as an environment variable.\n* Fix the ssh &quot;smart&quot; transport setting which automatically selects the best means of\n  transferring files over ssh (sftp, ssh, piped).\n* Fix authentication by api_key parameter in exoscale modules.\n* vmware module_utils shared code ssl/validate_certs fixes in connection logic\n* allow &#39;bridge&#39; facts to work for certain containers that create conflicting ones with connection plugins\n* Fix for win_get_url to use TLS 1.2/1.1 if it is available on the host\n* Fix for the filetree lookup with non-ascii group names\n* Better message for invalid keywords/options in task due to undefined expressions\n* Fixed check mode for enable on Solaris for service module\n* Fix cloudtrail module to allow AWS profiles other than the default\n* Fix an encoding issue with secret (password) vars_prompts\n\n&lt;a id=&quot;2.3.2&quot;&gt;&lt;/a&gt;\n   ```\n   \n  \n  \n  \n  \n  \n  \n   ### 2.3\n   ```\n   Moving to Ansible 2.3 guide https://docs.ansible.com/ansible/porting_guide_2.3.html\n\n Major Changes\n* Documented and renamed the previously released &#39;single var vaulting&#39; feature, allowing user to use vault encryption for single variables in a normal YAML vars file.\n* Allow module_utils for custom modules to be placed in site-specific directories and shipped in roles\n* On platforms that support it, use more modern system polling API instead of select in the ssh connection plugin.\n  This removes one limitation on how many parallel forks are feasible on these systems.\n* Windows/WinRM supports (experimental) become method &quot;runas&quot; to run modules and scripts as a different user, and to transparently access network resources.\n* The WinRM connection plugin now uses pipelining when executing modules, resulting in significantly faster execution for small tasks.\n* The WinRM connection plugin can now manage Kerberos tickets automatically when `ansible_winrm_transport=kerberos` and `ansible_user`/`ansible_password` are specified.\n* Refactored/standardized most Windows modules, adding check-mode and diff support where possible.\n* Extended Windows module API with parameter-type support, helper functions. (i.e. Expand-Environment, Add-Warning, Add-DeprecatationWarning)\n* restructured how async works to allow it to apply to action plugins that choose to support it.\n\n Minor Changes\n* The version and release facts for OpenBSD hosts were reversed.\n  This has been changed so that version has the numeric portion and release has the name of the release.\n* removed &#39;package&#39; from default squash actions as not all package managers support it and it creates errors when using loops,\n  any user can add back via config options if they don&#39;t use those package managers or otherwise avoid the errors.\n* Blocks can now have a `name` field, to aid in playbook readability.\n* default strategy is now configurable via ansible.cfg or environment variable.\n* Added &#39;ansible_playbook_python&#39; which contains &#39;current python executable&#39;, it can be blank in some cases in which Ansible is not invoked via the standard CLI (sys.executable limitation).\n* Added &#39;metadata&#39; to modules to enable classification\n* ansible-doc now displays path to module and existing &#39;metadata&#39;\n* added optional &#39;piped&#39; transfer method to ssh plugin for when scp and sftp are missing, ssh plugin is also now &#39;smarter&#39; when using these options\n* default controlpersist path is now a custom hash of host-port-user to avoid the socket path length errors for long hostnames\n* Various fixes for Python3 compatibility\n* Fixed issues with inventory formats not handling &#39;all&#39; and &#39;ungrouped&#39; in an uniform way.\n* &#39;service&#39; tasks can now use async again, we had lost this capability when changed into an action plugin.\n* made any_errors_fatal inheritable from play to task and all other objects in between.\n* many small performance improvements in inventory and variable handling and in task execution.\n* Added a retry class to the ec2_asg module since customers were running into throttling errors (AWSRetry is a solution for modules using boto3 which isn&#39;t applicable here).\n\n Deprecations\n* Specifying --tags (or --skip-tags) multiple times on the command line\n  currently leads to the last one overriding all the previous ones. This behaviour is deprecated.\n  In the future, if you specify --tags multiple times the tags will be merged together.\n  From now on, using --tags multiple times on one command line will emit a deprecation warning.\n  Setting the merge_multiple_cli_tags option to True in the ansible.cfg file will enable the new behaviour.\n  In 2.4, the default will be to merge and you can enable the old overwriting behaviour via the config option.\n  In 2.5, multiple --tags options will be merged with no way to go back to the old behaviour.\n\n* Modules (scheduled for removal in 2.5)\n  * ec2_vpc\n  * cl_bond\n  * cl_bridge\n  * cl_img_install\n  * cl_interface\n  * cl_interface_policy\n  * cl_license\n  * cl_ports\n  * nxos_mtu, use nxos_system instead\n\n New: Callbacks\n\n- dense: minimal stdout output with fallback to default when verbose\n\n New: lookups\n\n- keyring: allows getting password from the &#39;controller&#39; system&#39;s keyrings\n- chef_databag: allows querying Chef Databags via pychef library\n\n New: cache\n\n- pickle (uses python&#39;s own serializer)\n- yaml\n\n New: inventory scripts\n- oVirt/RHV\n\n New: filters\n- combinations\n- permutations\n- zip\n- zip_longest\n\n\n Module Notes\n- AWS lambda: previously ignored changes that only affected one parameter. Existing deployments may have outstanding changes that this bugfix will apply.\n- oVirt/RHV: Added support for 4.1 features and the following:\n  * data centers, clusters, hosts, storage domains and networks management.\n  * hosts and virtual machines affinity groups and labels.\n  * users, groups and permissions management.\n  * Improved virtual machines and disks management.\n- Mount: Some fixes so bind mounts are not mounted each time the playbook runs.\n\n New Modules\n- a10_server_axapi3\n- amazon:\n  * aws_kms\n  * cloudfront_facts\n  * ec2_group_facts\n  * ec2_lc_facts\n  * ec2_vpc_igw_facts\n  * ec2_vpc_nat_gateway_facts\n  * ec2_vpc_vgw_facts\n  * ecs_ecr\n  * elasticache_parameter_group\n  * elasticache_snapshot\n  * iam_role\n  * s3_sync\n- archive\n- beadm\n- bigswitch:\n  * bigmon_chain\n  * bigmon_policy\n- cisco\n  * cisco_spark\n- cloudengine:\n  * ce_command\n- cloudscale_server\n- cloudstack:\n  * cs_host\n  * cs_nic\n  * cs_region\n  * cs_role\n  * cs_vpc\n- dimensiondata_network\n- eos:\n  * eos_banner\n  * eos_system\n  * eos_user\n- f5:\n  * bigip_gtm_facts\n  * bigip_hostname\n  * bigip_snat_pool\n  * bigip_sys_global\n- foreman:\n  * foreman\n  * katello\n- fortios\n  * fortios_config\n- gconftool2\n- google:\n  * gce_eip\n  * gce_snapshot\n  * gcpubsub\n  * gcpubsub_facts\n- hpilo:\n  * hpilo_boot\n  * hpilo_facts\n  * hponcfg\n- icinga2_feature\n- illumos:\n  * dladm_iptun\n  * dladm_linkprop\n  * dladm_vlan\n  * ipadm_addr\n  * ipadm_addrprop\n  * ipadm_ifprop\n- infinidat:\n  * infini_export\n  * infini_export_client\n  * infini_fs\n  * infini_host\n  * infini_pool\n  * infini_vol\n- ipa:\n  * ipa_group\n  * ipa_hbacrule\n  * ipa_host\n  * ipa_hostgroup\n  * ipa_role\n  * ipa_sudocmd\n  * ipa_sudocmdgroup\n  * ipa_sudorule\n  * ipa_user\n- ipinfoio_facts\n- ios:\n  * ios_banner\n  * ios_system\n  * ios_vrf\n- iosxr_system\n- iso_extract\n- java_cert\n- jenkins_script\n- ldap:\n  * ldap_attr\n  * ldap_entry\n- logstash_plugin\n- mattermost\n- net_command\n- netapp:\n  * sf_account_manager\n  * sf_snapshot_schedule_manager\n  * sf_volume_manager\n  * sf_volume_access_group_manager\n- nginx_status_facts\n- nsupdate\n- omapi_host\n- openssl:\n  * openssl_privatekey\n  * openssl_publickey\n- openstack:\n  * os_nova_host_aggregate\n  * os_quota\n- openwrt_init\n- ordnance:\n  * ordnance_config\n  * ordnance_facts\n- ovirt:\n  * ovirt_affinity_groups\n  * ovirt_affinity_labels\n  * ovirt_affinity_labels_facts\n  * ovirt_clusters\n  * ovirt_clusters_facts\n  * ovirt_datacenters\n  * ovirt_datacenters_facts\n  * ovirt_external_providers\n  * ovirt_external_providers_facts\n  * ovirt_groups\n  * ovirt_groups_facts\n  * ovirt_host_networks\n  * ovirt_host_pm\n  * ovirt_hosts\n  * ovirt_hosts_facts\n  * ovirt_mac_pools\n  * ovirt_networks\n  * ovirt_networks_facts\n  * ovirt_nics\n  * ovirt_nics_facts\n  * ovirt_permissions\n  * ovirt_permissions_facts\n  * ovirt_quotas\n  * ovirt_quotas_facts\n  * ovirt_snapshots\n  * ovirt_snapshots_facts\n  * ovirt_storage_domains\n  * ovirt_storage_domains_facts\n  * ovirt_tags\n  * ovirt_tags_facts\n  * ovirt_templates\n  * ovirt_templates_facts\n  * ovirt_users\n  * ovirt_users_facts\n  * ovirt_vmpools\n  * ovirt_vmpools_facts\n  * ovirt_vms_facts\n- pacemaker_cluster\n- packet:\n  * packet_device\n  * packet_sshkey\n- pamd\n- panos:\n  * panos_address\n  * panos_admin\n  * panos_admpwd\n  * panos_cert_gen_ssh\n  * panos_check\n  * panos_commit\n  * panos_dag\n  * panos_import\n  * panos_interface\n  * panos_lic\n  * panos_loadcfg\n  * panos_mgtconfig\n  * panos_nat_policy\n  * panos_pg\n  * panos_restart\n  * panos_security_policy\n  * panos_service\n- postgresql_schema\n- proxmox_kvm\n- proxysql:\n  * proxysql_backend_servers\n  * proxysql_global_variables\n  * proxysql_manage_config\n  * proxysql_mysql_users\n  * proxysql_query_rules\n  * proxysql_replication_hostgroups\n  * proxysql_scheduler\n- pubnub_blocks\n- pulp_repo\n- runit\n- serverless\n- set_stats\n- panos:\n  * panos_security_policy\n- smartos:\n  * imgadm\n  * vmadm\n- sorcery\n- stacki_host\n- swupd\n- tempfile\n- tower:\n  * tower_credential\n  * tower_group\n  * tower_host\n  * tower_inventory\n  * tower_job_template\n  * tower_label\n  * tower_organization\n  * tower_project\n  * tower_role\n  * tower_team\n  * tower_user\n- vmware:\n  * vmware_guest_facts\n  * vmware_guest_snapshot\n- web_infrastructure:\n  * jenkins_script\n- system\n  * parted\n- windows:\n  * win_disk_image\n  * win_dns_client\n  * win_domain\n  * win_domain_controller\n  * win_domain_membership\n  * win_find\n  * win_msg\n  * win_path\n  * win_psexec\n  * win_reg_stat\n  * win_region\n  * win_say\n  * win_shortcut\n  * win_tempfile\n- xbps\n- zfs:\n  * zfs_facts\n  * zpool_facts\n\n&lt;a id=&quot;2.2.1&quot;&gt;&lt;/a&gt;\n   ```\n   \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n   ### 2.2\n   ```\n   Major Changes:\n\n* Added the `listen` feature for modules. This feature allows tasks to more easily notify multiple handlers, as well as making it easier for handlers from decoupled roles to be notified.\n* Major performance improvements.\n* Added support for binary modules\n* Added the ability to specify serial batches as a list (`serial: [1, 5, 10]`), which allows for so-called &quot;canary&quot; actions in one play.\n* Fixed &#39;local type&#39; plugins and actions to have a more predictable relative path. Fixes a regression of 1.9 (PR 16805). Existing users of 2.x will need to adjust related tasks.\n* `meta` tasks can now use conditionals.\n* `raw` now returns `changed: true` to be consistent with shell/command/script modules. Add `changed_when: false` to `raw` tasks to restore the pre-2.2 behavior if necessary.\n* New privilege escalation become method `ksu`\n* Windows `async:` support for long-running or background tasks.\n* Windows `environment:` support for setting module environment vars in play/task.\n* Added a new `meta` option: `end_play`, which can be used to skip to the end of a play.\n* roles can now be included in the middle of a task list via the new `include_role` module, this also allows for making the role import &#39;loopable&#39; and/or conditional.\n* The service module has been changed to use system specific modules if they exist and fall back to the old service module if they cannot be found or detected.\n* Add ability to specify what ssh client binary to use on the controller.  This\n  can be configured via ssh_executable in the ansible config file or by setting\n  ansible_ssh_executable as an inventory variable if different ones are needed\n  for different hosts.\n* Windows:\n  * several facts were modified or renamed for consistency with their Unix counterparts, and many new facts were added. If your playbooks rely on any of the following keys, please ensure they are using the correct key names and/or values:\n    - ansible_date_time.date (changed to use yyyy-mm-dd format instead of default system-locale format)\n    - ansible_date_time.iso8601 (changed to UTC instead of local time)\n    - ansible_distribution (now uses OS caption string, e.g.: &quot;Microsoft Windows Server 2012 R2 Standard&quot;, version is still available on ansible_distribution_version)\n    - ansible_totalmem (renamed to ansible_memtotal_mb, units changed to MB instead of bytes)\n  * `async:` support for long-running or background tasks.\n  * `environment:` support for setting module environment vars in play/task.\n* Tech Preview: Work has been done to get Ansible running under Python3.  This work is not complete enough to depend upon in production environments but it is enough to begin testing it.\n  * Most of the controller side should now work.  Users should be able to run python3 /usr/bin/ansible and python3 /usr/bin/ansible-playbook and have core features of ansible work.\n  * A few of the most essential modules have been audited and are known to work.  Others work out of the box.\n  * We are using unit and integration tests to help us port code and not regress later.  Even if you are not familiar with python you can still help by contributing integration tests (just ansible roles) that exercise more of the code to make sure it continues to run on both Python2 and Python3.\n  * scp_if_ssh now supports True, False and &quot;smart&quot;. &quot;smart&quot; is the default and will retry failed sftp transfers with scp.\n* Network:\n  * Refactored all network modules to remove duplicate code and take advantage of Ansiballz implementation\n  * All functionality from *_template network modules have been combined into *_config module\n  * Network *_command modules not longer allow configuration mode statements\n\n New Modules\n- apache2_mod_proxy\n- asa\n  * asa_acl\n  * asa_command\n  * asa_config\n- atomic\n  * atomic_host\n  * atomic_image\n- aws\n  * cloudformation_facts\n  * ec2_asg_facts\n  * ec2_customer_gateway\n  * ec2_lc_find\n  * ec2_vpc_dhcp_options_facts\n  * ec2_vpc_nacl\n  * ec2_vpc_nacl_facts\n  * ec2_vpc_nat_gateway\n  * ec2_vpc_peer\n  * ec2_vpc_vgw\n  * efs\n  * efs_facts\n  * execute_lambda\n  * iam_mfa_device_facts\n  * iam_server_certificate_facts\n  * kinesis_stream\n  * lambda\n  * lambda_alias\n  * lambda_event\n  * lambda_facts\n  * redshift\n  * redshift_subnet_group\n  * s3_website\n  * sts_session_token\n- cloudstack\n  * cs_router\n  * cs_snapshot_policy\n- dellos6\n  * dellos6_command\n  * dellos6_config\n  * dellos6_facts\n- dellos9\n  * dellos9_command\n  * dellos9_config\n  * dellos9_facts\n- dellos10\n  * dellos10_command\n  * dellos10_config\n  * dellos10_facts\n- digital_ocean_block_storage\n- docker\n  * docker_network\n- eos\n  * eos_facts\n- exoscale:\n  * exo_dns_domain\n  * exo_dns_record\n- f5:\n  * bigip_device_dns\n  * bigip_device_ntp\n  * bigip_device_sshd\n  * bigip_gtm_datacenter\n  * bigip_gtm_virtual_server\n  * bigip_irule\n  * bigip_routedomain\n  * bigip_selfip\n  * bigip_ssl_certificate\n  * bigip_sys_db\n  * bigip_vlan\n- github\n  * github_key\n  * github_release\n- google\n  * gcdns_record\n  * gcdns_zone\n  * gce_mig\n- honeybadger_deployment\n- illumos\n  * dladm_etherstub\n  * dladm_vnic\n  * flowadm\n  * ipadm_if\n  * ipadm_prop\n- ipmi\n  * ipmi_boot\n  * ipmi_power\n- ios\n  * ios_facts\n- iosxr\n  * iosxr_facts\n- include_role\n- jenkins\n  * jenkins_job\n  * jenkins_plugin\n- kibana_plugin\n- letsencrypt\n- logicmonitor\n- logicmonitor_facts\n- lxd\n  * lxd_profile\n  * lxd_container\n- netapp\n  * netapp_e_amg\n  * netapp_e_amg_role\n  * netapp_e_amg_sync\n  * netapp_e_auth\n  * netapp_e_facts\n  * netapp_e_flashcache\n  * netapp_e_hostgroup\n  * netapp_e_host\n  * netapp_e_lun_mapping\n  * netapp_e_snapshot_group\n  * netapp_e_snapshot_images\n  * netapp_e_snapshot_volume\n  * netapp_e_storage_system\n  * netapp_e_storagepool\n  * netapp_e_volume\n  * netapp_e_volume_copy\n- netconf_config\n- netvisor\n  * pn_cluster\n  * pn_ospfarea\n  * pn_ospf\n  * pn_show\n  * pn_trunk\n  * pn_vlag\n  * pn_vlan\n  * pn_vrouterbgp\n  * pn_vrouterif\n  * pn_vrouterlbif\n  * pn_vrouter\n- nxos\n  * nxos_aaa_server_host\n  * nxos_aaa_server\n  * nxos_acl_interface\n  * nxos_acl\n  * nxos_bgp_af\n  * nxos_bgp_neighbor_af\n  * nxos_bgp_neighbor\n  * nxos_bgp\n  * nxos_evpn_global\n  * nxos_evpn_vni\n  * nxos_file_copy\n  * nxos_gir_profile_management\n  * nxos_gir\n  * nxos_hsrp\n  * nxos_igmp_interface\n  * nxos_igmp\n  * nxos_igmp_snooping\n  * nxos_install_os\n  * nxos_interface_ospf\n  * nxos_mtu\n  * nxos_ntp_auth\n  * nxos_ntp_options\n  * nxos_ntp\n  * nxos_ospf\n  * nxos_ospf_vrf\n  * nxos_overlay_global\n  * nxos_pim_interface\n  * nxos_pim\n  * nxos_pim_rp_address\n  * nxos_portchannel\n  * nxos_rollback\n  * nxos_smu\n  * nxos_snapshot\n  * nxos_snmp_community\n  * nxos_snmp_contact\n  * nxos_snmp_host\n  * nxos_snmp_location\n  * nxos_snmp_traps\n  * nxos_snmp_user\n  * nxos_static_route\n  * nxos_udld_interface\n  * nxos_udld\n  * nxos_vpc_interface\n  * nxos_vpc\n  * nxos_vrf_af\n  * nxos_vtp_domain\n  * nxos_vtp_password\n  * nxos_vtp_version\n  * nxos_vxlan_vtep\n  * nxos_vxlan_vtep_vni\n- mssql_db\n- ovh_ip_loadbalancing_backend\n- opendj_backendprop\n- openstack\n  * os_keystone_service\n  * os_recordset\n  * os_server_group\n  * os_stack\n  * os_zone\n- ovirt\n  * ovirt_auth\n  * ovirt_disks\n  * ovirt_vms\n- rhevm\n- rocketchat\n- sefcontext\n- sensu_subscription\n- smartos\n  * smartos_image_facts\n- sros\n  * sros_command\n  * sros_config\n  * sros_rollback\n- statusio_maintenance\n- systemd\n- telegram\n- univention\n  * udm_dns_record\n  * udm_dns_zone\n  * udm_group\n  * udm_share\n  * udm_user\n- vmware\n  * vmware_guest\n  * vmware_local_user_manager\n  * vmware_vmotion\n- vyos\n  * vyos_command\n  * vyos_config\n  * vyos_facts\n- wakeonlan\n- windows\n  * win_command\n  * win_robocopy\n  * win_shell\n\n New Callbacks\n* foreman\n\n Minor Changes\n* now -vvv shows exact path from which &#39;currently executing module&#39; was picked up from.\n* loop_control now has a label option to allow fine grained control what gets displayed per item\n* loop_control now has a pause option to allow pausing for N seconds between loop iterations of a task.\n* New privilege escalation become method `ksu`\n* `raw` now returns `changed: true` to be consistent with shell/command/script modules. Add `changed_when: false` to `raw` tasks to restore the pre-2.2 behavior if necessary.\n* removed previously deprecated &#39;;&#39; as host list separator.\n* Only check if the default ssh client supports ControlPersist once instead of once for each host + task combination.\n* Fix a problem with the pip module updating the python pip package itself.\n* ansible_play_hosts is a new magic variable to provide a list of hosts in scope for the current play. Unlike play_hosts it is not subject to the &#39;serial&#39; keyword.\n* ansible_play_batch is a new magic variable meant to substitute the current play_hosts.\n\n For custom front ends using the API\n* ansible.parsing.vault:\n  * VaultLib.is_encrypted() has been deprecated.  It will be removed in 2.4.\n    Use ansible.parsing.vault.is_encrypted() instead\n  * VaultFile has been removed. This unfinished code was never used inside of\n    Ansible.  The feature it was intended to support has now been implemented\n    without using this.\n  * VaultAES, the older, insecure encrypted format that debuted in Ansible-1.5\n    and was replaced by VaultAES256 less than a week later, now has a deprecation\n    warning.  **It will be removed in 2.3**.  In the unlikely event that you\n    wrote a vault file in that 1 week window and have never modified the file\n    since (ansible-vault automatically re-encrypts the file using VaultAES256\n    whenever it is written to but not read), run ``ansible-vault rekey\n    [filename]`` to move to VaultAES256.\n\n Removed Deprecated\n* &#39;;&#39; as host list separator.\n* with\\_ &#39;bare variable&#39; handling, now loop items must always be templated `{{ }}` or they will be considered as plain strings.\n* skipping task on &#39;missing attribute&#39; in loop variable, now in a loop an undefined attribute will return an error instead of skipping the task.\n* skipping on undefined variables in loop, now loops will have to define a variable or use `|default` to avoid errors.\n\n Deprecations\nNotice given that the following will be removed in Ansible 2.4:\n* Modules\n  * eos_template\n  * ios_template\n  * iosxr_template\n  * junos_template\n  * nxos_template\n  * ops_template\n\n&lt;a id=&quot;2.1.4&quot;&gt;&lt;/a&gt;\n   ```\n   \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n   ### 2.1\n   ```\n   Major Changes:\n\n* Official support for the networking modules, originally available in 2.0 as a tech preview.\n* Refactored and expanded support for Docker with new modules and many improvements to existing modules, as well as a new Kubernetes module.\n* Added new modules for Azure (see below for the full list)\n* Added the ability to specify includes as &quot;static&quot; (either through a configuration option or on a per-include basis). When includes are static,\n  they are loaded at compile time and cannot contain dynamic features like loops.\n* Added a new strategy `debug`, which allows per-task debugging of playbooks, for more details see https://docs.ansible.com/ansible/playbooks_debugger.html\n* Added a new option for tasks: `loop_control`. This currently only supports one option - `loop_var`, which allows a different loop variable from `item` to be used.\n* Added the ability to filter facts returned by the fact gathering setup step using the `gather_subset` option on the play or in the ansible.cfg configuration file.\n  See https://docs.ansible.com/ansible/intro_configuration.htmlgathering for details on the format of the option.\n* Added the ability to send per-item callbacks, rather than a batch update (this more closely resembles the behavior of Ansible 1.x).\n* Added facility for modules to send back &#39;diff&#39; for display when ansible is called with --diff, updated several modules to return this info\n* Added ansible-console tool, a REPL shell that allows running adhoc tasks against a chosen inventory (based on  https://github.com/dominis/ansible-shell)\n* Added two new variables, which are set when the `rescue` portion of a `block` is started:\n  - `ansible_failed_task`, which contains the serialized version of the failed task.\n  - `ansible_failed_result`, which contains the result of the failed task.\n* New meta action, `meta: clear_host_errors` which will clear any hosts which were marked as failed (but not unreachable hosts).\n* New meta action, `meta: clear_facts` which will remove existing facts for the current host from current memory and facts cache.\n* copy module can now transparently use a vaulted file as source, if vault passwords were provided it will decrypt and copy on the fly.\n* The way new-style python modules (which include all of the non-windows modules shipped with Ansible) are assembled before execution on the remote machine has been changed. The new way stays closer to how python imports modules which will make it easier to write modules which rely heavily on shared code.\n* Reduce the situations in which a module can end up as world readable.  For details, see: https://docs.ansible.com/ansible/become.htmlbecoming-an-unprivileged-user\n* Re-implemented the retry file feature, which had been left out of 2.0 (fix was backported to 2.0.1 originally).\n* Improved winrm argument validation and feature sniffing (for upcoming pywinrm NTLM support).\n* Improved winrm error handling: basic parsing of stderr from CLIXML stream.\n\n New Modules\n- aws\n  * ec2_vol_facts\n  * ec2_vpc_dhcp_options\n  * ec2_vpc_net_facts\n  * ec2_snapshot_facts\n- azure:\n  * azure_rm_deployment\n  * azure_rm_networkinterface\n  * azure_rm_networkinterface_facts (TECH PREVIEW)\n  * azure_rm_publicipaddress\n  * azure_rm_publicipaddress_facts (TECH PREVIEW)\n  * azure_rm_resourcegroup\n  * azure_rm_resourcegroup_facts (TECH PREVIEW)\n  * azure_rm_securitygroup\n  * azure_rm_securitygroup_facts (TECH PREVIEW)\n  * azure_rm_storageaccount\n  * azure_rm_storageaccount_facts (TECH PREVIEW)\n  * azure_rm_storageblob\n  * azure_rm_subnet\n  * azure_rm_virtualmachine\n  * azure_rm_virtualmachineimage_facts (TECH PREVIEW)\n  * azure_rm_virtualnetwork\n  * azure_rm_virtualnetwork_facts (TECH PREVIEW)\n- cloudflare_dns\n- cloudstack\n  * cs_cluster\n  * cs_configuration\n  * cs_instance_facts\n  * cs_pod\n  * cs_resourcelimit\n  * cs_volume\n  * cs_zone\n  * cs_zone_facts\n- clustering\n  * kubernetes\n- cumulus\n  * cl_bond\n  * cl_bridge\n  * cl_img_install\n  * cl_interface\n  * cl_interface_policy\n  * cl_license\n  * cl_ports\n- eos\n  * eos_command\n  * eos_config\n  * eos_eapi\n  * eos_template\n- gitlab\n  * gitlab_group\n  * gitlab_project\n  * gitlab_user\n- ios\n  * ios_command\n  * ios_config\n  * ios_template\n- iosxr\n  * iosxr_command\n  * iosxr_config\n  * iosxr_template\n- junos\n  * junos_command\n  * junos_config\n  * junos_facts\n  * junos_netconf\n  * junos_package\n  * junos_template\n- make\n- mongodb_parameter\n- nxos\n  * nxos_command\n  * nxos_config\n  * nxos_facts\n  * nxos_feature\n  * nxos_interface\n  * nxos_ip_interface\n  * nxos_nxapi\n  * nxos_ping\n  * nxos_switchport\n  * nxos_template\n  * nxos_vlan\n  * nxos_vrf\n  * nxos_vrf_interface\n  * nxos_vrrp\n- openstack\n  * os_flavor_facts\n  * os_group\n  * os_ironic_inspect\n  * os_keystone_domain_facts\n  * os_keystone_role\n  * os_port_facts\n  * os_project_facts\n  * os_user_facts\n  * os_user_role\n- openswitch\n  * ops_command\n  * ops_config\n  * ops_facts\n  * ops_template\n- softlayer\n  * sl_vm\n- vmware\n  * vmware_maintenancemode\n  * vmware_vm_shell\n- windows\n  * win_acl_inheritance\n  * win_owner\n  * win_reboot\n  * win_regmerge\n  * win_timezone\n- yum_repository\n\n\n New Strategies\n* debug\n\n New Filters\n* extract\n* ip4_hex\n* regex_search\n* regex_findall\n\n New Callbacks\n* actionable (only shows changed and failed)\n* slack\n* json\n\n New Tests\n* issubset\n* issuperset\n\n New Inventory scripts:\n* brook\n* rackhd\n* azure_rm\n\n Minor Changes:\n\n* Added support for pipelining mode to more connection plugins, which helps prevent\n  module data from being written to disk.\n* Added a new &#39;!unsafe&#39; YAML decorator, which can be used in playbooks to ensure a\n  string is not templated. For example: `foo: !unsafe &quot;Don&#39;t template {{me}}&quot;`.\n* Callbacks now have access to the options with which the CLI was called\n* Debug now has verbosity option to control when to display by matching number of -v in command line\n* Modules now get verbosity, diff and other flags as passed to ansible\n* Mount facts now also show &#39;network mounts&#39; that use the pattern `&lt;host&gt;:/&lt;mount&gt;`\n* Plugins are now sorted before loading.  This means, for instance, if you want\n  two custom callback plugins to run in a certain order you can name them\n  10-first-callback.py and 20-second-callback.py.\n* Added (alpha) Centirfy&#39;s dzdo as another become meethod (privilege escalation)\n\n Deprecations:\n\n* Deprecated the use of &quot;bare&quot; variables in loops (ie. `with_items: foo`, where `foo` is a variable).\n  The full jinja2 variable syntax of `{{foo}}` should always be used instead. This warning will be removed\n  completely in 2.3, after which time it will be an error.\n* play_hosts magic variable, use ansible_play_batch or ansible_play_hosts instead.\n\n&lt;a id=&quot;2.0.2&quot;&gt;&lt;/a&gt;\n   ```\n   \n  \n  \n  \n  \n  \n  \n  \n  \n   ### 2.0\n   ```\n   Major Changes:\n\n* Releases are now named after Led Zeppelin songs, 1.9 will be the last Van Halen named release.\n* The new block/rescue/always directives allow for making task blocks and exception-like semantics\n* New strategy plugins (e.g. `free`) allow control over the flow of task execution per play. The default (`linear`) will be the same as before.\n* Improved error handling, with more detailed parser messages. General exception handling and display has been revamped.\n* Task includes are now evaluated during execution, allowing more dynamic includes and options. Play includes are unchanged both still use the `include` directive.\n* &quot;with\\_&lt;lookup&gt;&quot; loops can now be used with task includes since they are dynamic.\n* Callback, connection, cache and lookup plugin APIs have changed. Existing plugins might require modification to work with the new versions.\n* Callbacks are now shipped in the active directory and don&#39;t need to be copied, just whitelisted in ansible.cfg.\n* Many API changes. Those integrating directly with Ansible&#39;s API will encounter breaking changes, but the new API is much easier to use and test.\n* Settings are now more inheritable; what you set at play, block or role will be automatically inherited by the contained tasks.\n  This allows for new features to automatically be settable at all levels, previously we had to manually code this.\n* Vars are now settable at play, block, role and task level with the `vars` directive and scoped to the tasks contained.\n* Template code now retains types for bools and numbers instead of turning them into strings.\n  If you need the old behaviour, quote the value and it will get passed around as a string\n* Empty variables and variables set to null in yaml will no longer be converted to empty strings.  They will retain the value of `None`.\n  To go back to the old behaviour, you can override the `null_representation` setting to an empty string in your config file or\n  by setting the `ANSIBLE_NULL_REPRESENTATION` environment variable.\n* Added `meta: refresh_inventory` to force rereading the inventory in a play.\n  This re-executes inventory scripts, but does not force them to ignore any cache they might use.\n* New delegate_facts directive, a boolean that allows you to apply facts to the delegated host (true/yes) instead of the inventory_hostname (no/false) which is the default and previous behaviour.\n* local connections now work with &#39;su&#39; as a privilege escalation method\n* Ansible 2.0 has deprecated the &quot;ssh&quot; from ansible_ssh_user, ansible_ssh_host, and ansible_ssh_port to become ansible_user, ansible_host, and ansible_port.\n* New ssh configuration variables (`ansible_ssh_common_args`, `ansible_ssh_extra_args`) can be used to configure a\n  per-group or per-host ssh ProxyCommand or set any other ssh options.\n  `ansible_ssh_extra_args` is used to set options that are accepted only by ssh (not sftp or scp, which have their own analogous settings).\n* ansible-pull can now verify the code it runs when using git as a source repository, using git&#39;s code signing and verification features.\n* Backslashes used when specifying parameters in jinja2 expressions in YAML dicts sometimes needed to be escaped twice.\n  This has been fixed so that escaping once works. Here&#39;s an example of how playbooks need to be modified:\n\n    yaml\n     Syntax in 1.9.x\n    - debug:\n        msg: &quot;{{ &#39;test1_junk 1\\\\\\\\3&#39; | regex_replace(&#39;(.*)_junk (.*)&#39;, &#39;\\\\\\\\1 \\\\\\\\2&#39;) }}&quot;\n     Syntax in 2.0.x\n    - debug:\n        msg: &quot;{{ &#39;test1_junk 1\\\\3&#39; | regex_replace(&#39;(.*)_junk (.*)&#39;, &#39;\\\\1 \\\\2&#39;) }}&quot;\n\n     Output:\n    &quot;msg&quot;: &quot;test1 1\\\\3&quot;\n    \n\n* When a string with a trailing newline was specified in the playbook via yaml\ndict format, the trailing newline was stripped. When specified in key=value\nformat the trailing newlines were kept. In v2, both methods of specifying the\nstring will keep the trailing newlines. If you relied on the trailing\nnewline being stripped you can change your playbook like this:\n\n    yaml\n     Syntax in 1.9.2\n    vars:\n      message: &gt;\n        Testing\n        some things\n    tasks:\n    - debug:\n        msg: &quot;{{ message }}&quot;\n\n     Syntax in 2.0.x\n    vars:\n      old_message: &gt;\n        Testing\n        some things\n      message: &quot;{{ old_messsage[:-1] }}&quot;\n    - debug:\n        msg: &quot;{{ message }}&quot;\n     Output\n    &quot;msg&quot;: &quot;Testing some things&quot;\n    \n\n* When specifying complex args as a variable, the variable must use the full jinja2\nvariable syntax (&#39;{{var_name}}&#39;) - bare variable names there are no longer accepted.\nIn fact, even specifying args with variables has been deprecated, and will not be\nallowed in future versions:\n\n    yaml\n    ---\n    - hosts: localhost\n      connection: local\n      gather_facts: false\n      vars:\n        my_dirs:\n          - { path: /tmp/3a, state: directory, mode: 0755 }\n          - { path: /tmp/3b, state: directory, mode: 0700 }\n      tasks:\n        - file:\n          args: &quot;{{item}}&quot;\n          with_items: my_dirs\n    \n\n Plugins\n\n* Rewritten dnf module that should be faster and less prone to encountering bugs in cornercases\n* WinRM connection plugin passes all vars named `ansible_winrm_*` to the underlying pywinrm client. This allows, for instance, `ansible_winrm_server_cert_validation=ignore` to be used with newer versions of pywinrm to disable certificate validation on Python 2.7.9+.\n* WinRM connection plugin put_file is significantly faster and no longer has file size limitations.\n\n Deprecated Modules (new ones in parens):\n\n* ec2_ami_search (ec2_ami_find)\n* quantum_network (os_network)\n* glance_image\n* nova_compute   (os_server)\n* quantum_floating_ip (os_floating_ip)\n* quantum_router (os_router)\n* quantum_router_gateway (os_router)\n* quantum_router_interface (os_router)\n\n New Modules:\n\n- amazon\n  * ec2_ami_copy\n  * ec2_ami_find\n  * ec2_elb_facts\n  * ec2_eni\n  * ec2_eni_facts\n  * ec2_remote_facts\n  * ec2_vpc_igw\n  * ec2_vpc_net\n  * ec2_vpc_net_facts\n  * ec2_vpc_route_table\n  * ec2_vpc_route_table_facts\n  * ec2_vpc_subnet\n  * ec2_vpc_subnet_facts\n  * ec2_win_password\n  * ecs_cluster\n  * ecs_task\n  * ecs_taskdefinition\n  * elasticache_subnet_group_facts\n  * iam\n  * iam_cert\n  * iam_policy\n  * route53_facts\n  * route53_health_check\n  * route53_zone\n  * s3_bucket\n  * s3_lifecycle\n  * s3_logging\n  * sns_topic\n  * sqs_queue\n  * sts_assume_role\n- apk\n- bigip_gtm_wide_ip\n- bundler\n- centurylink\n  * clc_aa_policy\n  * clc_alert_policy\n  * clc_blueprint_package\n  * clc_firewall_policy\n  * clc_group\n  * clc_loadbalancer\n  * clc_modify_server\n  * clc_publicip\n  * clc_server\n  * clc_server_snapshot\n- circonus_annotation\n- consul\n  * consul\n  * consul_acl\n  * consul_kv\n  * consul_session\n- cloudtrail\n- cloudstack\n  * cs_account\n  * cs_affinitygroup\n  * cs_domain\n  * cs_facts\n  * cs_firewall\n  * cs_iso\n  * cs_instance\n  * cs_instancegroup\n  * cs_ip_address\n  * cs_loadbalancer_rule\n  * cs_loadbalancer_rule_member\n  * cs_network\n  * cs_portforward\n  * cs_project\n  * cs_securitygroup\n  * cs_securitygroup_rule\n  * cs_sshkeypair\n  * cs_staticnat\n  * cs_template\n  * cs_user\n  * cs_vmsnapshot\n- cronvar\n- datadog_monitor\n- deploy_helper\n- docker\n  * docker_login\n- dpkg_selections\n- elasticsearch_plugin\n- expect\n- find\n- google\n  * gce_tag\n- hall\n- ipify_facts\n- iptables\n- libvirt\n  * virt_net\n  * virt_pool\n- maven_artifact\n- openstack\n  * os_auth\n  * os_client_config\n  * os_image\n  * os_image_facts\n  * os_floating_ip\n  * os_ironic\n  * os_ironic_node\n  * os_keypair\n  * os_network\n  * os_network_facts\n  * os_nova_flavor\n  * os_object\n  * os_port\n  * os_project\n  * os_router\n  * os_security_group\n  * os_security_group_rule\n  * os_server\n  * os_server_actions\n  * os_server_facts\n  * os_server_volume\n  * os_subnet\n  * os_subnet_facts\n  * os_user\n  * os_user_group\n  * os_volume\n- openvswitch_db\n- osx_defaults\n- pagerduty_alert\n- pam_limits\n- pear\n- profitbricks\n  * profitbricks\n  * profitbricks_datacenter\n  * profitbricks_nic\n  * profitbricks_snapshot\n  * profitbricks_volume\n  * profitbricks_volume_attachments\n- proxmox\n  * proxmox\n  * proxmox_template\n- puppet\n- pushover\n- pushbullet\n- rax\n  * rax_clb_ssl\n  * rax_mon_alarm\n  * rax_mon_check\n  * rax_mon_entity\n  * rax_mon_notification\n  * rax_mon_notification_plan\n- rabbitmq\n  * rabbitmq_binding\n  * rabbitmq_exchange\n  * rabbitmq_queue\n- selinux_permissive\n- sendgrid\n- sensu\n  * sensu_check\n  * sensu_subscription\n- seport\n- slackpkg\n- solaris_zone\n- taiga_issue\n- vertica\n  * vertica_configuration\n  * vertica_facts\n  * vertica_role\n  * vertica_schema\n  * vertica_user\n- vmware\n  * vca_fw\n  * vca_nat\n  * vmware_cluster\n  * vmware_datacenter\n  * vmware_dns_config\n  * vmware_dvs_host\n  * vmware_dvs_portgroup\n  * vmware_dvswitch\n  * vmware_host\n  * vmware_migrate_vmk\n  * vmware_portgroup\n  * vmware_target_canonical_facts\n  * vmware_vm_facts\n  * vmware_vm_vss_dvs_migrate\n  * vmware_vmkernel\n  * vmware_vmkernel_ip_config\n  * vmware_vsan_cluster\n  * vmware_vswitch\n  * vsphere_copy\n- webfaction\n  * webfaction_app\n  * webfaction_db\n  * webfaction_domain\n  * webfaction_mailbox\n  * webfaction_site\n- windows\n  * win_acl\n  * win_dotnet_ngen\n  * win_environment\n  * win_firewall_rule\n  * win_iis_virtualdirectory\n  * win_iis_webapplication\n  * win_iis_webapppool\n  * win_iis_webbinding\n  * win_iis_website\n  * win_lineinfile\n  * win_nssm\n  * win_package\n  * win_regedit\n  * win_scheduled_task\n  * win_unzip\n  * win_updates\n  * win_webpicmd\n- xenserver_facts\n- zabbbix\n  * zabbix_host\n  * zabbix_hostmacro\n  * zabbix_screen\n- znode\n\n New Inventory scripts:\n\n* cloudstack\n* fleetctl\n* openvz\n* nagios_ndo\n* nsot\n* proxmox\n* rudder\n* serf\n\n New Lookups:\n\n* credstash\n* hashi_vault\n* ini\n* shelvefile\n\n New Filters:\n\n* combine\n\n New Connection:\n\n* docker: for talking to docker containers on the ansible controller machine without using ssh.\n\n New Callbacks:\n\n* logentries: plugin to send play data to logentries service\n* skippy: same as default but does not display skip messages\n\n Minor changes:\n\n* Many more tests. The new API makes things more testable and we took advantage of it.\n* big_ip modules now support turning off ssl certificate validation (use only for self-signed certificates).\n* Consolidated code from modules using urllib2 to normalize features, TLS and SNI support.\n* synchronize module&#39;s dest_port parameter now takes precedence over the ansible_ssh_port inventory setting.\n* Play output is now dynamically sized to terminal with a minimum of 80 coluumns (old default).\n* vars_prompt and pause are now skipped with a warning if the play is called noninteractively (i.e. pull from cron).\n* Support for OpenBSD&#39;s &#39;doas&#39; privilege escalation method.\n* Most vault operations can now be done over multilple files.\n* ansible-vault encrypt/decrypt read from stdin if no other input file is given, and can write to a given ``--output file`` (including stdout, &#39;-&#39;).\n  This lets you avoid ever writing sensitive plaintext to disk.\n* ansible-vault rekey accepts the --new-vault-password-file option.\n* ansible-vault now preserves file permissions on edit and rekey and defaults to restrictive permissions for other options.\n* Configuration items defined as paths (local only) now all support shell style interpolations.\n* Many fixes and new options added to modules, too many to list here.\n* Now you can see task file and line number when using verbosity of 3 or above.\n* The ``[x-y]`` host range syntax is no longer supported. Note that ``[0:1]`` matches two hosts, i.e. the range is inclusive of its endpoints.\n* We now recommend the use of `pattern1,pattern2` to combine host matching patterns.\n  * The use of &#39;:&#39; as a separator conflicts with IPv6 addresses and host ranges. It will be deprecated in the future.\n  * The undocumented use of &#39;;&#39; as a separator is now deprecated.\n* modules and callbacks have been extended to support no_log to avoid data disclosure.\n* new managed_syslog option has been added to control output to syslog on managed machines, no_log supersedes this settings.\n* Lookup, vars and action plugin pathing has been normalized, all now follow the same sequence to find relative files.\n* We do not ignore the explicitly set login user for ssh when it matches the &#39;current user&#39; anymore, this allows overriding .ssh/config when it is set\n  explicitly. Leaving it unset will still use the same user and respect .ssh/config. This also means ansible_ssh_user can now return a None value.\n* environment variables passed to remote shells now default to &#39;controller&#39; settings, with fallback to en_US.UTF8 which was the previous default.\n* add_hosts is much stricter about host name and will prevent invalid names from being added.\n* ansible-pull now defaults to doing shallow checkouts with git, use `--full` to return to previous behaviour.\n* random cows are more random\n* when: now gets the registered var after the first iteration, making it possible to break out of item loops\n* Handling of undefined variables has changed.  In most places they will now raise an error instead of silently injecting an empty string.  Use the default filter if you want to approximate the old behaviour:\n\n    \n    - debug: msg=&quot;The error message was: {{error_code |default(&#39;&#39;) }}&quot;\n   ```\n   \n  \n  \n  \n  \n   ### 1.9.7\n   ```\n   * Fix for lxc_container backport which was broken because it tried to use a feature from ansible-2.x\n   ```\n   \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n   ### 1.9\n   ```\n   Major changes:\n\n* Added kerberos support to winrm connection plugin.\n* Tags rehaul: added &#39;all&#39;, &#39;always&#39;, &#39;untagged&#39; and &#39;tagged&#39; special tags and normalized\n  tag resolution. Added tag information to --list-tasks and new --list-tags option.\n* Privilege Escalation generalization, new &#39;Become&#39; system and variables  now will\n  handle existing and new methods. Sudo and su have been kept for backwards compatibility.\n  New methods pbrun and pfexec in &#39;alpha&#39; state, planned adding &#39;runas&#39; for winrm connection plugin.\n* Improved ssh connection error reporting, now you get back the specific message from ssh.\n* Added facility to document task module return values for registered vars, both for\n  ansible-doc and the docsite. Documented copy, stats and acl modules, the rest must be\n  updated individually (we will start doing so incrementally).\n* Optimize the plugin loader to cache available plugins much more efficiently.\n  For some use cases this can lead to dramatic improvements in startup time.\n* Overhaul of the checksum system, now supports more systems and more cases more reliably and uniformly.\n* Fix skipped tasks to not display their parameters if no_log is specified.\n* Many fixes to unicode support, standarized functions to make it easier to add to input/output boundaries.\n* Added travis integration to github for basic tests, this should speed up ticket triage and merging.\n* environment: directive now can also be applied to play and is inhertited by tasks, which can still override it.\n* expanded facts and OS/distribution support for existing facts and improved performance with pypy.\n* new &#39;wantlist&#39; option to lookups allows for selecting a list typed variable vs a comma delimited string as the return.\n* the shared module code for file backups now uses a timestamp resolution of seconds (previously minutes).\n* allow for empty inventories, this is now a warning and not an error (for those using localhost and cloud modules).\n* sped up YAML parsing in ansible by up to 25% by switching to CParser loader.\n\nNew Modules:\n\n* cryptab *-- manages linux encrypted block devices*\n* gce_img *-- for utilizing GCE image resources*\n* gluster_volume *-- manage glusterfs volumes*\n* haproxy *-- for the load balancer of same name*\n* known_hosts *-- manages the ssh known_hosts file*\n* lxc_container *-- manage lxc containers*\n* patch *-- allows for patching files on target systems*\n* pkg5 *-- installing and uninstalling packages on Solaris*\n* pkg5_publisher *-- manages Solaris pkg5 repository configuration*\n* postgresql_ext *-- manage postgresql extensions*\n* snmp_facts *-- gather facts via snmp*\n* svc *-- manages daemontools based services*\n* uptimerobot *-- manage monitoring with this service*\n\nNew Filters:\n\n* ternary: allows for trueval/falseval assignment dependent on conditional\n* cartesian: returns the Cartesian product of 2 lists\n* to_uuid: given a string it will return an ansible domain specific UUID\n* checksum: uses the ansible internal checksum to return a hash from a string\n* hash: get a hash from a string (md5, sha1, etc)\n* password_hash: get a hash form as string that can be used as a password in the user module (and others)\n* A whole set of ip/network manipulation filters: ipaddr,ipwrap,ipv4,ipv6ipsubnet,nthhost,hwaddr,macaddr\n\nOther Notable Changes:\n\n* New lookup plugins:\n  * dig: does dns resolution and returns IPs.\n  * url: allows pulling data from a url.\n\n* New callback plugins:\n  * syslog_json: allows logging play output to a syslog network server using json format\n\n* Many new enhancements to the amazon web service modules:\n  * ec2 now applies all specified security groups when creating a new instance.  Previously it was only applying one\n  * ec2_vol gained the ability to specify the EBS volume type\n  * ec2_vol can now detach volumes by specifying instance=None\n  * Fix ec2_group to purge specific grants rather than whole rules\n  * Added tenancy support for the ec2 module\n  * rds module has gained the ability to manage tags and set charset and public accessibility\n  * ec2_snapshot module gained the capability to remove snapshots\n  * Add alias support for route53\n  * Add private_zones support to route53\n  * ec2_asg: Add wait_for_instances parameter that waits until an instance is ready before ending the ansible task\n* Many new docker improvements:\n  * restart_policy parameters to configure when the container automatically restarts\n  * If the docker client or server doesn&#39;t support an option, the task will now fail instead of silently ignoring the option\n  * Add insecure_registry parameter for connecting to registries via http\n  * New parameter to set a container&#39;s domain name\n  * Undeprecated docker_image module until there&#39;s replacement functionality\n  * Allow setting the container&#39;s pid namespace\n  * Add a pull parameter that chooses when ansible will look for more recent images in the registry\n  * docker module states have been greatly enhanced.  The reworked and new states are:\n    * present now creates but does not start containers\n    * restarted always restarts a container\n    * reloaded restarts a container if ansible detects that the configuration is different than what is specified\n      * reloaded accounts for exposed ports, env vars, and volumes\n  * Can now connect to the docker server using TLS\n* Several source control modules had force parameters that defaulted to true.\n  These have been changed to default to false so as not to accidentally lose\n  work.  Playbooks that depended on the former behaviour simply need to add\n  force=True to the task that needs it.  Affected modules:\n  * bzr: When local modifications exist in a checkout, the bzr module used to\n    default to removing the modifications on any operation.  Now the module\n    will not remove the modifications unless force=yes is specified.\n    Operations that depend on a clean working tree may fail unless force=yes is\n    added.\n  * git: When local modifications exist in a checkout, the git module will now\n    fail unless force is explicitly specified.  Specifying force=yes will allow\n    the module to revert and overwrite local modifications to make git actions\n    succeed.\n  * hg: When local modifications exist in a checkout, the hg module used to\n    default to removing the modifications on any operation.  Now the module\n    will not remove the modifications unless force=yes is specified.\n  * subversion: When updating a checkout with local modifications, you now need\n    to add force=yes so the module will revert the modifications before updating.\n* New inventory scripts:\n  * vbox: virtualbox\n  * consul: use consul as an inventory source\n* gce gained the ip_forward parameter to forward ip packets\n* disk_auto_delete parameter to gce that will remove the boot disk after an instance is destroyed\n* gce can now spawn instances with no external ip\n* gce_pd gained the ability to choose a disk type\n* gce_net gained target_tags parameter for creating firewall rules\n* rax module has new parameters for making use of a boot volume\n* Add scheduler_hints to the nova_compute module for optional parameters\n* vsphere_guest now supports deploying guests from a template\n* Many fixes for hardlink and softlink handling in file-related modules\n* Implement user, group, mode, and selinux parameters for the unarchive module\n* authorized_keys can now use url as a key source\n* authorized_keys has a new exclusive parameter that determines if keys that weren&#39;t specified in the task\n* The selinux module now sets the current running state to permissive if state=&#39;disabled&#39;\n* Can now set accounts to expire via the user module\n* Overhaul of the service module to make code simpler and behave better for systems running several popular init systems\n* yum module now has a parameter to refresh its cache of package metadata\n* apt module gained a build_dep parameter to install a package&#39;s build dependencies\n* Add parameters to the postgres modules to specify a unix socket to connect to the db\n* The mount module now supports bind mounts\n* Add a clone parameter to git module that allows you to get information about a remote repo even if it doesn&#39;t exist locally.\n* Add a refspec argument to the git module that allows pulling commits that aren&#39;t part of a branch\n* Many documentation additions and fixes.\n   ```\n   \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n   ### 1.8\n   ```\n   Major changes:\n\n* fact caching support, pluggable, initially supports Redis (DOCS pending)\n* &#39;serial&#39; size in a rolling update can be specified as a percentage\n* added new Jinja2 filters, &#39;min&#39; and &#39;max&#39; that take lists\n* new &#39;ansible_version&#39; variable available contains a dictionary of version info\n* For ec2 dynamic inventory, ec2.ini can has various new configuration options\n* &#39;ansible vault view filename.yml&#39; opens filename.yml decrypted in a pager.\n* no_log parameter now surpressess data from callbacks/output as well as syslog\n* ansible-galaxy install -f requirements.yml allows advanced options and installs from non-galaxy SCM sources and tarballs.\n* command_warnings feature will warn about when usage of the shell/command module can be simplified to use core modules - this can be enabled in ansible.cfg\n* new omit value can be used to leave off a parameter when not set, like so module_name: a=1 b={{ c | default(omit) }}, would not pass value for b (not even an empty value) if c was not set.\n* developers: &#39;baby JSON&#39; in module responses, originally intended for writing modules in bash, is removed as a feature to simplify logic, script module remains available for running bash scripts.\n* async jobs started in &quot;fire &amp; forget&quot; mode can now be checked on at a later time.\n* added ability to subcategorize modules for docs.ansible.com\n* added ability for shipped modules to have aliases with symlinks\n* added ability to deprecate older modules by starting with &quot;_&quot; and including &quot;deprecated: message why&quot; in module docs\n\nNew Modules:\n\n- cloud\n  * rax_cdb *-- manages Rackspace Cloud Database instances*\n  * rax_cdb_database *-- manages Rackspace Cloud Databases*\n  * rax_cdb_user *-- manages Rackspace Cloud Database users*\n- monitoring\n  * bigpanda *-- support for bigpanda*\n  * zabbix_maintaince *-- handles outage windows with Zabbix*\n- net_infrastructure\n  * a10_server *-- manages server objects on A10 devices*\n  * a10_service_group *-- manages service group objects on A10 devices*\n  * a10_virtual_server *-- manages virtual server objects on A10 devices*\n- system\n  * getent  *-- read getent databases*\n\nSome other notable changes:\n\n* added the ability to set &quot;instance filters&quot; in the ec2.ini to limit results from the inventory plugin.\n* upgrades for various variable precedence items and parsing related items\n* added a new &quot;follow&quot; parameter to the file and copy modules, which allows actions to be taken on the target of a symlink rather than the symlink itself.\n* if a module should ever traceback, it will return a standard error, catchable by ignore_errors, versus an &#39;unreachable&#39;\n* ec2_lc: added support for multiple new parameters like kernel_id, ramdisk_id and ebs_optimized.\n* ec2_elb_lb: added support for the connection_draining_timeout and cross_az_load_balancing options.\n* support for symbolic representations (ie. u+rw) for file permission modes (file/copy/template modules etc.).\n* docker: Added support for specifying the net type of the container.\n* docker: support for specifying read-only volumes.\n* docker: support for specifying the API version to use for the remote connection.\n* openstack modules: various improvements\n* irc: ssl support for the notification module\n* npm: fix flags passed to package installation\n* windows: improved error handling\n* setup: additional facts on System Z\n* apt_repository: certificate validation can be disabled if requested\n* pagerduty module: misc improvements\n* ec2_lc: public_ip boolean configurable in launch configurations\n* ec2_asg: fixes related to proper termination of an autoscaling group\n* win_setup: total memory fact correction\n* ec2_vol: ability to list existing volumes\n* ec2: can set optimized flag\n* various parser improvements\n* produce a friendly error message if the SSH key is too permissive\n* ec2_ami_search: support for SSD and IOPS provisioned EBS images\n* can set ansible_sudo_exe as an inventory variable which allows specifying\n  a different sudo (or equivalent) command\n* git module: Submodule handling has changed.  Previously if you used the\n  ``recursive`` parameter to handle submodules, ansible would track the\n  submodule upstream&#39;s head revision.  This has been changed to checkout the\n  version of the submodule specified in the superproject&#39;s git repository.\n  This is inline with what git submodule update does.  If you want the old\n  behaviour use the new module parameter track_submodules=yes\n* Checksumming of transferred files has been made more portable and now uses\n  the sha1 algorithm instead of md5 to be compatible with FIPS-140.\n  - As a small side effect, the fetch module no longer returns a useful value\n    in remote_md5.  If you need a replacement, switch to using remote_checksum\n    which returns the sha1sum of the remote file.\n* ansible-doc CLI tool contains various improvements for working with different terminals\n\nAnd various other bug fixes and improvements ...\n   ```\n   \n  \n  \n  \n  \n  \n  \n  \n  \n   ### 1.7\n   ```\n   Major new features:\n\n* Windows support (alpha) using native PowerShell remoting\n* Tasks can now specify `run_once: true`, meaning they will be executed exactly once. This can be combined with delegate_to to trigger actions you want done just the one time versus for every host in inventory.\n\nNew inventory scripts:\n\n* SoftLayer\n* Windows Azure\n\nNew Modules:\n\n- cloud\n  * azure\n  * rax_meta\n  * rax_scaling_group\n  * rax_scaling_policy\n- windows\n  * *version of setup module*\n  * *version of slurp module*\n  * win_feature\n  * win_get_url\n  * win_group\n  * win_msi\n  * win_ping\n  * win_service\n  * win_user\n\nOther notable changes:\n\n* Security fixes\n  - Prevent the use of lookups when using legacy &quot;{{ }}&quot; syntax around variables and with_* loops.\n  - Remove relative paths in TAR-archived file names used by ansible-galaxy.\n* Inventory speed improvements for very large inventories.\n* Vault password files can now be executable, to support scripts that fetch the vault password.\n   ```\n   \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n   ### 1.6\n   ```\n   Major features/changes:\n\n* The deprecated legacy variable templating system has been finally removed.  Use {{ foo }} always not $foo or ${foo}.\n* Any data file can also be JSON.  Use sparingly -- with great power comes great responsibility.  Starting file with &quot;{&quot; or &quot;[&quot; denotes JSON.\n* Added &#39;gathering&#39; param for ansible.cfg to change the default gather_facts policy.\n* Accelerate improvements:\n  - multiple users can connect with different keys, when `accelerate_multi_key = yes` is specified in the ansible.cfg.\n  - daemon lifetime is now based on the time from the last activity, not the time from the daemon&#39;s launch.\n* ansible-playbook now accepts --force-handlers to run handlers even if tasks result in failures.\n* Added VMWare support with the vsphere_guest module.\n\nNew Modules:\n\n- files\n  * replace\n- packaging\n  * apt_rpm\n  * composer *(PHP)*\n  * cpanm *(Perl)*\n  * homebrew_cask *(OS X)*\n  * homebrew_tap *(OS X)*\n  * layman\n  * portage\n- monitoring\n  * librato_annotation\n  * logentries\n  * rollbar_deployment\n- notification\n  * nexmo *(SMS)*\n  * slack *(Slack.com)*\n  * sns *(Amazon)*\n  * twilio *(SMS)*\n  * typetalk *(Typetalk.in)*\n- system\n  * alternatives\n  * capabilities\n  * debconf\n  * locale_gen\n  * ufw\n- net_infrastructure\n  * bigip_facts\n  * dnssimple\n  * lldp\n- web_infrastructure\n  * apache2_module\n- cloud\n  * digital_ocean_domain\n  * digital_ocean_sshkey\n  * ec2_asg *(configure autoscaling groups)*\n  * ec2_metric_alarm\n  * ec2_scaling_policy\n  * rax_identity\n  * rax_cbs *(cloud block storage)*\n  * rax_cbs_attachments\n  * vsphere_guest\n\nOther notable changes:\n\n* example callback plugin added for hipchat\n* added example inventory plugin for vcenter/vsphere\n* added example inventory plugin for doing really trivial inventory from SSH config files\n* libvirt module now supports destroyed and paused as states\n* s3 module can specify metadata\n* security token additions to ec2 modules\n* setup module code moved into module_utils/, facts now accessible by other modules\n* synchronize module sets relative dirs based on inventory or role path\n* misc bugfixes and other parameters\n* the ec2_key module now has wait/wait_timeout parameters\n* added version_compare filter (see docs)\n* added ability for module documentation YAML to utilize shared module snippets for common args\n* apt module now accepts &quot;deb&quot; parameter to install local dpkg files\n* regex_replace filter plugin added\n* added an inventory script for Docker\n* added an inventory script for Abiquo\n* the get_url module now accepts url_username and url_password as parameters, so sites which require\n  authentication no longer need to have them embedded in the url\n* ... to b","created_at":"2018-05-18T20:26:35Z","updated_at":"2018-05-18T20:26:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/pulls/82/commits","review_comments_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/pulls/82/comments","review_comment_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/pulls/comments{/number}","comments_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/issues/82/comments","statuses_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/statuses/1f00669ad90cdc9160e904e31cfc25af452df2f1","head":{"label":"glenjarvis:pyup-pin-ansible-2.5.3","ref":"pyup-pin-ansible-2.5.3","sha":"1f00669ad90cdc9160e904e31cfc25af452df2f1","user":{"login":"glenjarvis","id":553860,"avatar_url":"https://avatars1.githubusercontent.com/u/553860?v=4","gravatar_id":"","url":"https://api.github.com/users/glenjarvis","html_url":"https://github.com/glenjarvis","followers_url":"https://api.github.com/users/glenjarvis/followers","following_url":"https://api.github.com/users/glenjarvis/following{/other_user}","gists_url":"https://api.github.com/users/glenjarvis/gists{/gist_id}","starred_url":"https://api.github.com/users/glenjarvis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/glenjarvis/subscriptions","organizations_url":"https://api.github.com/users/glenjarvis/orgs","repos_url":"https://api.github.com/users/glenjarvis/repos","events_url":"https://api.github.com/users/glenjarvis/events{/privacy}","received_events_url":"https://api.github.com/users/glenjarvis/received_events","type":"User","site_admin":false},"repo":{"id":20897265,"name":"ansible_tutorial","full_name":"glenjarvis/ansible_tutorial","owner":{"login":"glenjarvis","id":553860,"avatar_url":"https://avatars1.githubusercontent.com/u/553860?v=4","gravatar_id":"","url":"https://api.github.com/users/glenjarvis","html_url":"https://github.com/glenjarvis","followers_url":"https://api.github.com/users/glenjarvis/followers","following_url":"https://api.github.com/users/glenjarvis/following{/other_user}","gists_url":"https://api.github.com/users/glenjarvis/gists{/gist_id}","starred_url":"https://api.github.com/users/glenjarvis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/glenjarvis/subscriptions","organizations_url":"https://api.github.com/users/glenjarvis/orgs","repos_url":"https://api.github.com/users/glenjarvis/repos","events_url":"https://api.github.com/users/glenjarvis/events{/privacy}","received_events_url":"https://api.github.com/users/glenjarvis/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/glenjarvis/ansible_tutorial","description":"A tutorial with video and code taking the user from AWS machine creation to their first deployment using Ansible","fork":false,"url":"https://api.github.com/repos/glenjarvis/ansible_tutorial","forks_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/forks","keys_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/keys{/key_id}","collaborators_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/teams","hooks_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/hooks","issue_events_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/issues/events{/number}","events_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/events","assignees_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/assignees{/user}","branches_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/branches{/branch}","tags_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/tags","blobs_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/git/refs{/sha}","trees_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/git/trees{/sha}","statuses_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/statuses/{sha}","languages_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/languages","stargazers_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/stargazers","contributors_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/contributors","subscribers_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/subscribers","subscription_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/subscription","commits_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/commits{/sha}","git_commits_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/git/commits{/sha}","comments_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/comments{/number}","issue_comment_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/issues/comments{/number}","contents_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/contents/{+path}","compare_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/compare/{base}...{head}","merges_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/merges","archive_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/downloads","issues_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/issues{/number}","pulls_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/pulls{/number}","milestones_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/milestones{/number}","notifications_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/labels{/name}","releases_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/releases{/id}","deployments_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/deployments","created_at":"2014-06-16T19:13:26Z","updated_at":"2018-05-18T20:24:30Z","pushed_at":"2018-05-18T20:26:34Z","git_url":"git://github.com/glenjarvis/ansible_tutorial.git","ssh_url":"git@github.com:glenjarvis/ansible_tutorial.git","clone_url":"https://github.com/glenjarvis/ansible_tutorial.git","svn_url":"https://github.com/glenjarvis/ansible_tutorial","homepage":null,"size":5544,"stargazers_count":95,"watchers_count":95,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":95,"mirror_url":null,"archived":false,"open_issues_count":2,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":95,"open_issues":2,"watchers":95,"default_branch":"develop"}},"base":{"label":"glenjarvis:develop","ref":"develop","sha":"844dcf31f9a12e5016e7a4394208a91f9499ae2c","user":{"login":"glenjarvis","id":553860,"avatar_url":"https://avatars1.githubusercontent.com/u/553860?v=4","gravatar_id":"","url":"https://api.github.com/users/glenjarvis","html_url":"https://github.com/glenjarvis","followers_url":"https://api.github.com/users/glenjarvis/followers","following_url":"https://api.github.com/users/glenjarvis/following{/other_user}","gists_url":"https://api.github.com/users/glenjarvis/gists{/gist_id}","starred_url":"https://api.github.com/users/glenjarvis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/glenjarvis/subscriptions","organizations_url":"https://api.github.com/users/glenjarvis/orgs","repos_url":"https://api.github.com/users/glenjarvis/repos","events_url":"https://api.github.com/users/glenjarvis/events{/privacy}","received_events_url":"https://api.github.com/users/glenjarvis/received_events","type":"User","site_admin":false},"repo":{"id":20897265,"name":"ansible_tutorial","full_name":"glenjarvis/ansible_tutorial","owner":{"login":"glenjarvis","id":553860,"avatar_url":"https://avatars1.githubusercontent.com/u/553860?v=4","gravatar_id":"","url":"https://api.github.com/users/glenjarvis","html_url":"https://github.com/glenjarvis","followers_url":"https://api.github.com/users/glenjarvis/followers","following_url":"https://api.github.com/users/glenjarvis/following{/other_user}","gists_url":"https://api.github.com/users/glenjarvis/gists{/gist_id}","starred_url":"https://api.github.com/users/glenjarvis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/glenjarvis/subscriptions","organizations_url":"https://api.github.com/users/glenjarvis/orgs","repos_url":"https://api.github.com/users/glenjarvis/repos","events_url":"https://api.github.com/users/glenjarvis/events{/privacy}","received_events_url":"https://api.github.com/users/glenjarvis/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/glenjarvis/ansible_tutorial","description":"A tutorial with video and code taking the user from AWS machine creation to their first deployment using Ansible","fork":false,"url":"https://api.github.com/repos/glenjarvis/ansible_tutorial","forks_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/forks","keys_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/keys{/key_id}","collaborators_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/teams","hooks_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/hooks","issue_events_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/issues/events{/number}","events_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/events","assignees_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/assignees{/user}","branches_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/branches{/branch}","tags_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/tags","blobs_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/git/refs{/sha}","trees_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/git/trees{/sha}","statuses_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/statuses/{sha}","languages_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/languages","stargazers_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/stargazers","contributors_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/contributors","subscribers_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/subscribers","subscription_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/subscription","commits_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/commits{/sha}","git_commits_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/git/commits{/sha}","comments_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/comments{/number}","issue_comment_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/issues/comments{/number}","contents_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/contents/{+path}","compare_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/compare/{base}...{head}","merges_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/merges","archive_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/downloads","issues_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/issues{/number}","pulls_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/pulls{/number}","milestones_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/milestones{/number}","notifications_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/labels{/name}","releases_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/releases{/id}","deployments_url":"https://api.github.com/repos/glenjarvis/ansible_tutorial/deployments","created_at":"2014-06-16T19:13:26Z","updated_at":"2018-05-18T20:24:30Z","pushed_at":"2018-05-18T20:26:34Z","git_url":"git://github.com/glenjarvis/ansible_tutorial.git","ssh_url":"git@github.com:glenjarvis/ansible_tutorial.git","clone_url":"https://github.com/glenjarvis/ansible_tutorial.git","svn_url":"https://github.com/glenjarvis/ansible_tutorial","homepage":null,"size":5544,"stargazers_count":95,"watchers_count":95,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":95,"mirror_url":null,"archived":false,"open_issues_count":2,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":95,"open_issues":2,"watchers":95,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/glenjarvis/ansible_tutorial/pulls/82"},"html":{"href":"https://github.com/glenjarvis/ansible_tutorial/pull/82"},"issue":{"href":"https://api.github.com/repos/glenjarvis/ansible_tutorial/issues/82"},"comments":{"href":"https://api.github.com/repos/glenjarvis/ansible_tutorial/issues/82/comments"},"review_comments":{"href":"https://api.github.com/repos/glenjarvis/ansible_tutorial/pulls/82/comments"},"review_comment":{"href":"https://api.github.com/repos/glenjarvis/ansible_tutorial/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/glenjarvis/ansible_tutorial/pulls/82/commits"},"statuses":{"href":"https://api.github.com/repos/glenjarvis/ansible_tutorial/statuses/1f00669ad90cdc9160e904e31cfc25af452df2f1"}},"author_association":"NONE","merged":false,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":1,"deletions":1,"changed_files":1}}
{"actor":{"display_login":"pyup-bot"}}