{"action":"created","comment":{"url":"https://api.github.com/repos/ansible/ansible/pulls/comments/226689872","pull_request_review_id":166579588,"id":226689872,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyNjY4OTg3Mg==","diff_hunk":"@@ -0,0 +1,256 @@\n+#!/usr/bin/python\n+# -*- coding: utf-8 -*-\n+\n+# Copyright: (c) 2018, Christian Kotte <christian.kotte@gmx.de>\n+#\n+# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)\n+\n+from __future__ import absolute_import, division, print_function\n+__metaclass__ = type\n+\n+\n+ANSIBLE_METADATA = {\n+    'metadata_version': '1.1',\n+    'status': ['preview'],\n+    'supported_by': 'community'\n+}\n+\n+DOCUMENTATION = r'''\n+---\n+module: vmware_host_dns\n+short_description: Manage DNS configuration of an ESXI host system\n+description:\n+- This module can be used to configure DNS for ESXi host systems in given vCenter infrastructure.\n+- It's only possible to configured DNS for the default TCP/IP stack.\n+version_added: 2.8\n+author:\n+- Christian Kotte (@ckotte)\n+notes:\n+- Tested on vSphere 6.5\n+requirements:\n+- python >= 2.6\n+- PyVmomi\n+options:\n+  host_name:\n+    description:\n+    - The hostname to be used for the ESXi host.\n+    type: str\n+    required: True\n+  domain:\n+    description:\n+    - The domain name to be used for the the ESXi host.\n+    type: str\n+    required: True\n+    aliases: ['domain_name']\n+  dns_servers:\n+    description:\n+    - A list of DNS servers to be used.\n+    - The order of the DNS servers is important as they are used consecutively in order.\n+    type: list\n+    required: True\n+  search_domains:\n+    description:\n+    - A list of domains to be searched through by the resolver.\n+    type: list\n+    required: False\n+  esxi_hostname:\n+    description:\n+    - Name of the host system to work with.\n+    - This parameter is required if C(cluster_name) is not specified.\n+    type: str\n+  cluster_name:\n+    description:\n+    - Name of the cluster from which all host systems will be used.\n+    - This parameter is required if C(esxi_hostname) is not specified.\n+    type: str\n+extends_documentation_fragment: vmware.documentation\n+'''\n+\n+EXAMPLES = r'''\n+- name: Configure DNS for an host system\n+  vmware_host_dns:\n+    hostname: vcenter01.fqdn.local\n+    username: administrator@vsphere.local\n+    password: SuperSecretPassword\n+    esxi_hostname: esx01.fqdn.local\n+    host_name: esx01\n+    domain: fqdn.local\n+    dns_servers:\n+      - 192.168.1.10\n+      - 192.168.1.11\n+    search_domains:\n+      - subdomain.fqdn.local\n+      - fqdn.local\n+  delegate_to: localhost\n+\n+- name: Configure DNS for all host systems from cluster\n+  vmware_host_dns:\n+    hostname: vcenter01.fqdn.local\n+    username: administrator@vsphere.local\n+    password: SuperSecretPassword\n+    cluster_name: cluster01\n+    domain: fqdn.local\n+    dns_servers:\n+      - 192.168.1.10\n+      - 192.168.1.11\n+    search_domains:\n+      - subdomain.fqdn.local\n+      - fqdn.local\n+  delegate_to: localhost\n+'''\n+\n+# TODO: update output\n+RETURN = r'''\n+result:\n+  description: metadata about host system's DNS configuration\n+  returned: always\n+  type: dict\n+  sample: {\n+    \"esxi01\": {\n+    \"msg\": \"DNS is already enabled and active for host 'esxi01'\",\n+    },\n+  }\n+'''\n+\n+try:\n+    from pyVmomi import vim, vmodl\n+except ImportError:\n+    pass\n+\n+from ansible.module_utils.basic import AnsibleModule\n+from ansible.module_utils.vmware import PyVmomi, vmware_argument_spec, wait_for_task, TaskError\n+from ansible.module_utils._text import to_native\n+\n+\n+class VmwareHostDNS(PyVmomi):\n+    \"\"\"Class to manage DNS configuration of an ESXi host system\"\"\"\n+    def __init__(self, module):\n+        super(VmwareHostDNS, self).__init__(module)\n+        cluster_name = self.params.get('cluster_name')\n+        esxi_host_name = self.params.get('esxi_hostname')\n+        self.hosts = self.get_all_host_objs(cluster_name=cluster_name, esxi_host_name=esxi_host_name)\n+        if not self.hosts:\n+            self.module.fail_json(msg=\"Failed to find host system with given configuration.\")\n+\n+    def ensure(self):\n+        \"\"\"Function to manage DNS configuration of an ESXi host system\"\"\"\n+        results = dict(changed=False, result=dict())\n+        cluster_name = self.params.get('cluster_name', None)\n+        if not cluster_name:\n+            host_name = self.params.get('host_name')\n+        domain = self.params.get('domain')\n+        dns_servers = self.params.get('dns_servers')\n+        search_domains = self.params.get('search_domains', None)\n+        # NOTE: The below block is also deprecated starting from Ansible v2.11\n+        if self.params.get('domainname') is not None:\n+            domain = self.params.get('domain')\n+        if self.params.get('change_hostname_to') is not None and not cluster_name:\n+            host_name = self.params.get('change_hostname_to')\n+        host_change_list = []\n+        for host in self.hosts:\n+            changed = False\n+            results['result'][host.name] = dict(changed='', msg='')\n+\n+            host_network_system = host.configManager.networkSystem\n+\n+            host_dns_config = host_network_system.dnsConfig\n+\n+            host_dns_config.dhcp = False\n+\n+            # TODO: check the exact sequence of entries?\n+            if host_dns_config.address != dns_servers:\n+                # [\"192.37.9.12\", \"160.62.174.65\", \"162.86.50.204\", \"165.140.91.47\", \"86.116.38.71\"]\n+                results['result'][host.name]['current_dns_servers'] = host_dns_config.address\n+                results['result'][host.name]['desired_dns_servers'] = dns_servers\n+                # TODO: add changed_dns_servers\n+                # results['result'][host.name]['changed_dns_servers'] = dns_servers\n+                host_dns_config.address = dns_servers\n+                changed = True\n+\n+            if host_dns_config.domainName != domain:\n+                results['result'][host.name]['current_domain'] = host_dns_config.domainName\n+                results['result'][host.name]['desired_domain'] = domain\n+                host_dns_config.domainName = domain\n+                changed = True\n+\n+            # Don't configure hostname if cluster is specified\n+            if not cluster_name:\n+                if host_dns_config.hostName != host_name:\n+                    results['result'][host.name]['current_host_name'] = host_dns_config.hostName\n+                    results['result'][host.name]['desired_host_name'] = host_name\n+                    host_dns_config.hostName = host_name\n+                    changed = True\n+\n+            if search_domains and host_dns_config.searchDomain != search_domains:\n+                # [\"eu.novartis.net\", \"nibr.novartis.net\", \"novartis.net\"]\n+                results['result'][host.name]['current_search_domains'] = host_dns_config.searchDomain\n+                results['result'][host.name]['desired_search_domains'] = search_domains\n+                host_dns_config.searchDomain = search_domains\n+                changed = True\n+\n+            if changed:\n+                if not self.module.check_mode:\n+                    try:\n+                        host_network_system.UpdateDnsConfig(host_dns_config)\n+                        results['result'][host.name]['changed'] = True\n+                        results['result'][host.name]['msg'] = \"DNS configured for host '%s'\" % host.name\n+                    except vim.fault.NotFound:\n+                        self.module.fail_json(msg=\"Virtual network adapter for DHCP doesn't exist on host '%s'\" % host.name)\n+                    except vmodl.fault.InvalidArgument:\n+                        self.module.fail_json(msg=\"Specified IP addresses are invalid for host '%s'\" % host.name)\n+                    except vim.fault.HostInDomain:\n+                        self.module.fail_json(msg=\"Cannot change host or domain name for host '%s'. The host is part of \"\n+                                                  \"a Windows domain.\" % host.name)\n+                    except vim.fault.HostConfigFault as config_fault:\n+                        self.module.fail_json(msg=\"Failed to configure DNS for host '%s' due to : %s\" %\n+                                              (host.name, to_native(config_fault.msg)))\n+                    except vmodl.fault.NotSupported as not_supported:\n+                        self.module.fail_json(msg=\"Failed to configure DNS for host '%s' : %s\" %\n+                                              (host.name, to_native(not_supported.msg)))\n+                    except (vmodl.RuntimeFault, vmodl.MethodFault) as runtime_fault:\n+                        self.module.fail_json(msg=\"Failed to configure DNS for host '%s' due to : %s\" %\n+                                              (host.name, to_native(runtime_fault.msg)))\n+                else:\n+                    results['result'][host.name]['changed'] = True\n+                    results['result'][host.name]['msg'] = \"DNS will be configured for host '%s'\" % host.name\n+            else:\n+                results['result'][host.name]['changed'] = False\n+                results['result'][host.name]['msg'] = \"DNS is already configured for host '%s'\" % host.name\n+\n+            host_change_list.append(changed)\n+\n+        if any(host_change_list):\n+            results['changed'] = True\n+        self.module.exit_json(**results)\n+\n+\n+def main():\n+    \"\"\"Main\"\"\"\n+    argument_spec = vmware_argument_spec()\n+    argument_spec.update(\n+        host_name=dict(required=False, type='str'),\n+        domain=dict(required=True, type='str', aliases=['domain_name']),\n+        domainname=dict(required=False, type='str', removed_in_version=2.11),","path":"lib/ansible/modules/cloud/vmware/vmware_host_dns.py","position":233,"original_position":233,"commit_id":"130438d2784ceb719892c1fad383d10eb651fabc","original_commit_id":"130438d2784ceb719892c1fad383d10eb651fabc","user":{"login":"ckotte","id":8488565,"node_id":"MDQ6VXNlcjg0ODg1NjU=","avatar_url":"https://avatars3.githubusercontent.com/u/8488565?v=4","gravatar_id":"","url":"https://api.github.com/users/ckotte","html_url":"https://github.com/ckotte","followers_url":"https://api.github.com/users/ckotte/followers","following_url":"https://api.github.com/users/ckotte/following{/other_user}","gists_url":"https://api.github.com/users/ckotte/gists{/gist_id}","starred_url":"https://api.github.com/users/ckotte/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ckotte/subscriptions","organizations_url":"https://api.github.com/users/ckotte/orgs","repos_url":"https://api.github.com/users/ckotte/repos","events_url":"https://api.github.com/users/ckotte/events{/privacy}","received_events_url":"https://api.github.com/users/ckotte/received_events","type":"User","site_admin":false},"body":"Done. @Akasurde Does it make sense? Can I resolve the other conversations?","created_at":"2018-10-19T15:33:44Z","updated_at":"2018-10-19T15:33:44Z","html_url":"https://github.com/ansible/ansible/pull/47271#discussion_r226689872","pull_request_url":"https://api.github.com/repos/ansible/ansible/pulls/47271","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/ansible/ansible/pulls/comments/226689872"},"html":{"href":"https://github.com/ansible/ansible/pull/47271#discussion_r226689872"},"pull_request":{"href":"https://api.github.com/repos/ansible/ansible/pulls/47271"}},"in_reply_to_id":226666905},"pull_request":{"url":"https://api.github.com/repos/ansible/ansible/pulls/47271","id":223909877,"node_id":"MDExOlB1bGxSZXF1ZXN0MjIzOTA5ODc3","html_url":"https://github.com/ansible/ansible/pull/47271","diff_url":"https://github.com/ansible/ansible/pull/47271.diff","patch_url":"https://github.com/ansible/ansible/pull/47271.patch","issue_url":"https://api.github.com/repos/ansible/ansible/issues/47271","number":47271,"state":"open","locked":false,"title":"WIP VMware: New module vmware_host_dns","user":{"login":"ckotte","id":8488565,"node_id":"MDQ6VXNlcjg0ODg1NjU=","avatar_url":"https://avatars3.githubusercontent.com/u/8488565?v=4","gravatar_id":"","url":"https://api.github.com/users/ckotte","html_url":"https://github.com/ckotte","followers_url":"https://api.github.com/users/ckotte/followers","following_url":"https://api.github.com/users/ckotte/following{/other_user}","gists_url":"https://api.github.com/users/ckotte/gists{/gist_id}","starred_url":"https://api.github.com/users/ckotte/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ckotte/subscriptions","organizations_url":"https://api.github.com/users/ckotte/orgs","repos_url":"https://api.github.com/users/ckotte/repos","events_url":"https://api.github.com/users/ckotte/events{/privacy}","received_events_url":"https://api.github.com/users/ckotte/received_events","type":"User","site_admin":false},"body":"##### SUMMARY\r\nThis module supports configuration of search domains, check mode, and `esxi_hostname` and `cluster_name` options.\r\nThe name is also similar to the other vmware_host modules.\r\n\r\n`vmware_host_dns` is a drop-in replacement for the old module `vmware_dns_config`.\r\n> Rather than removing one module, and introducing a new module, we are replacing the old module with a compatible new module, but we are deprecating some of the original parameters instead. End goal is to not break existing playbooks and get rid of some parameters.\r\n\r\n##### ISSUE TYPE\r\n- New Module Pull Request\r\n\r\n##### COMPONENT NAME\r\nvmware_host_dns\r\n\r\n##### ANSIBLE VERSION\r\n```\r\nansible 2.6.3\r\n  config file = /root/ansible-vmware/ansible.cfg\r\n  configured module search path = [u'/root/ansible-vmware/library']\r\n  ansible python module location = /usr/lib/python2.7/site-packages/ansible\r\n  executable location = /usr/bin/ansible\r\n  python version = 2.7.5 (default, Jul 13 2018, 13:06:57) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]\r\n```\r\n\r\n##### ADDITIONAL INFORMATION\r\n","created_at":"2018-10-18T10:49:45Z","updated_at":"2018-10-19T15:33:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"412ab8d910b62b4b3cafb331cb5e8baf7e3395b4","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":529643857,"node_id":"MDU6TGFiZWw1Mjk2NDM4NTc=","url":"https://api.github.com/repos/ansible/ansible/labels/WIP","name":"WIP","color":"fef2c0","default":false},{"id":1043397454,"node_id":"MDU6TGFiZWwxMDQzMzk3NDU0","url":"https://api.github.com/repos/ansible/ansible/labels/affects_2.8","name":"affects_2.8","color":"ededed","default":false},{"id":61528803,"node_id":"MDU6TGFiZWw2MTUyODgwMw==","url":"https://api.github.com/repos/ansible/ansible/labels/cloud","name":"cloud","color":"c7def8","default":false},{"id":496359346,"node_id":"MDU6TGFiZWw0OTYzNTkzNDY=","url":"https://api.github.com/repos/ansible/ansible/labels/module","name":"module","color":"1d76db","default":false},{"id":473225334,"node_id":"MDU6TGFiZWw0NzMyMjUzMzQ=","url":"https://api.github.com/repos/ansible/ansible/labels/new_module","name":"new_module","color":"c2e0c6","default":false},{"id":153577825,"node_id":"MDU6TGFiZWwxNTM1Nzc4MjU=","url":"https://api.github.com/repos/ansible/ansible/labels/new_plugin","name":"new_plugin","color":"bfe5bf","default":false},{"id":636327968,"node_id":"MDU6TGFiZWw2MzYzMjc5Njg=","url":"https://api.github.com/repos/ansible/ansible/labels/support:community","name":"support:community","color":"ededed","default":false},{"id":427121291,"node_id":"MDU6TGFiZWw0MjcxMjEyOTE=","url":"https://api.github.com/repos/ansible/ansible/labels/vmware","name":"vmware","color":"d93f0b","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/ansible/ansible/pulls/47271/commits","review_comments_url":"https://api.github.com/repos/ansible/ansible/pulls/47271/comments","review_comment_url":"https://api.github.com/repos/ansible/ansible/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ansible/ansible/issues/47271/comments","statuses_url":"https://api.github.com/repos/ansible/ansible/statuses/130438d2784ceb719892c1fad383d10eb651fabc","head":{"label":"ckotte:vmware_host_dns","ref":"vmware_host_dns","sha":"130438d2784ceb719892c1fad383d10eb651fabc","user":{"login":"ckotte","id":8488565,"node_id":"MDQ6VXNlcjg0ODg1NjU=","avatar_url":"https://avatars3.githubusercontent.com/u/8488565?v=4","gravatar_id":"","url":"https://api.github.com/users/ckotte","html_url":"https://github.com/ckotte","followers_url":"https://api.github.com/users/ckotte/followers","following_url":"https://api.github.com/users/ckotte/following{/other_user}","gists_url":"https://api.github.com/users/ckotte/gists{/gist_id}","starred_url":"https://api.github.com/users/ckotte/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ckotte/subscriptions","organizations_url":"https://api.github.com/users/ckotte/orgs","repos_url":"https://api.github.com/users/ckotte/repos","events_url":"https://api.github.com/users/ckotte/events{/privacy}","received_events_url":"https://api.github.com/users/ckotte/received_events","type":"User","site_admin":false},"repo":{"id":148785102,"node_id":"MDEwOlJlcG9zaXRvcnkxNDg3ODUxMDI=","name":"ansible","full_name":"ckotte/ansible","private":false,"owner":{"login":"ckotte","id":8488565,"node_id":"MDQ6VXNlcjg0ODg1NjU=","avatar_url":"https://avatars3.githubusercontent.com/u/8488565?v=4","gravatar_id":"","url":"https://api.github.com/users/ckotte","html_url":"https://github.com/ckotte","followers_url":"https://api.github.com/users/ckotte/followers","following_url":"https://api.github.com/users/ckotte/following{/other_user}","gists_url":"https://api.github.com/users/ckotte/gists{/gist_id}","starred_url":"https://api.github.com/users/ckotte/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ckotte/subscriptions","organizations_url":"https://api.github.com/users/ckotte/orgs","repos_url":"https://api.github.com/users/ckotte/repos","events_url":"https://api.github.com/users/ckotte/events{/privacy}","received_events_url":"https://api.github.com/users/ckotte/received_events","type":"User","site_admin":false},"html_url":"https://github.com/ckotte/ansible","description":"Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy. Avoid writing scripts or custom code to deploy and update your applications — automate in a language that approaches plain English, using SSH, with no agents to install on remote systems. https://docs.ansible.com/ansible/","fork":true,"url":"https://api.github.com/repos/ckotte/ansible","forks_url":"https://api.github.com/repos/ckotte/ansible/forks","keys_url":"https://api.github.com/repos/ckotte/ansible/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ckotte/ansible/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ckotte/ansible/teams","hooks_url":"https://api.github.com/repos/ckotte/ansible/hooks","issue_events_url":"https://api.github.com/repos/ckotte/ansible/issues/events{/number}","events_url":"https://api.github.com/repos/ckotte/ansible/events","assignees_url":"https://api.github.com/repos/ckotte/ansible/assignees{/user}","branches_url":"https://api.github.com/repos/ckotte/ansible/branches{/branch}","tags_url":"https://api.github.com/repos/ckotte/ansible/tags","blobs_url":"https://api.github.com/repos/ckotte/ansible/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ckotte/ansible/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ckotte/ansible/git/refs{/sha}","trees_url":"https://api.github.com/repos/ckotte/ansible/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ckotte/ansible/statuses/{sha}","languages_url":"https://api.github.com/repos/ckotte/ansible/languages","stargazers_url":"https://api.github.com/repos/ckotte/ansible/stargazers","contributors_url":"https://api.github.com/repos/ckotte/ansible/contributors","subscribers_url":"https://api.github.com/repos/ckotte/ansible/subscribers","subscription_url":"https://api.github.com/repos/ckotte/ansible/subscription","commits_url":"https://api.github.com/repos/ckotte/ansible/commits{/sha}","git_commits_url":"https://api.github.com/repos/ckotte/ansible/git/commits{/sha}","comments_url":"https://api.github.com/repos/ckotte/ansible/comments{/number}","issue_comment_url":"https://api.github.com/repos/ckotte/ansible/issues/comments{/number}","contents_url":"https://api.github.com/repos/ckotte/ansible/contents/{+path}","compare_url":"https://api.github.com/repos/ckotte/ansible/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ckotte/ansible/merges","archive_url":"https://api.github.com/repos/ckotte/ansible/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ckotte/ansible/downloads","issues_url":"https://api.github.com/repos/ckotte/ansible/issues{/number}","pulls_url":"https://api.github.com/repos/ckotte/ansible/pulls{/number}","milestones_url":"https://api.github.com/repos/ckotte/ansible/milestones{/number}","notifications_url":"https://api.github.com/repos/ckotte/ansible/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ckotte/ansible/labels{/name}","releases_url":"https://api.github.com/repos/ckotte/ansible/releases{/id}","deployments_url":"https://api.github.com/repos/ckotte/ansible/deployments","created_at":"2018-09-14T12:25:40Z","updated_at":"2018-10-18T11:06:27Z","pushed_at":"2018-10-19T14:32:22Z","git_url":"git://github.com/ckotte/ansible.git","ssh_url":"git@github.com:ckotte/ansible.git","clone_url":"https://github.com/ckotte/ansible.git","svn_url":"https://github.com/ckotte/ansible","homepage":"https://www.ansible.com/","size":135070,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0","node_id":"MDc6TGljZW5zZTk="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"devel"}},"base":{"label":"ansible:devel","ref":"devel","sha":"65bb6a5af311d3ae8a487100781184bdcf1016c3","user":{"login":"ansible","id":1507452,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE1MDc0NTI=","avatar_url":"https://avatars2.githubusercontent.com/u/1507452?v=4","gravatar_id":"","url":"https://api.github.com/users/ansible","html_url":"https://github.com/ansible","followers_url":"https://api.github.com/users/ansible/followers","following_url":"https://api.github.com/users/ansible/following{/other_user}","gists_url":"https://api.github.com/users/ansible/gists{/gist_id}","starred_url":"https://api.github.com/users/ansible/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ansible/subscriptions","organizations_url":"https://api.github.com/users/ansible/orgs","repos_url":"https://api.github.com/users/ansible/repos","events_url":"https://api.github.com/users/ansible/events{/privacy}","received_events_url":"https://api.github.com/users/ansible/received_events","type":"Organization","site_admin":false},"repo":{"id":3638964,"node_id":"MDEwOlJlcG9zaXRvcnkzNjM4OTY0","name":"ansible","full_name":"ansible/ansible","private":false,"owner":{"login":"ansible","id":1507452,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE1MDc0NTI=","avatar_url":"https://avatars2.githubusercontent.com/u/1507452?v=4","gravatar_id":"","url":"https://api.github.com/users/ansible","html_url":"https://github.com/ansible","followers_url":"https://api.github.com/users/ansible/followers","following_url":"https://api.github.com/users/ansible/following{/other_user}","gists_url":"https://api.github.com/users/ansible/gists{/gist_id}","starred_url":"https://api.github.com/users/ansible/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ansible/subscriptions","organizations_url":"https://api.github.com/users/ansible/orgs","repos_url":"https://api.github.com/users/ansible/repos","events_url":"https://api.github.com/users/ansible/events{/privacy}","received_events_url":"https://api.github.com/users/ansible/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/ansible/ansible","description":"Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy. Avoid writing scripts or custom code to deploy and update your applications — automate in a language that approaches plain English, using SSH, with no agents to install on remote systems. https://docs.ansible.com/ansible/","fork":false,"url":"https://api.github.com/repos/ansible/ansible","forks_url":"https://api.github.com/repos/ansible/ansible/forks","keys_url":"https://api.github.com/repos/ansible/ansible/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ansible/ansible/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ansible/ansible/teams","hooks_url":"https://api.github.com/repos/ansible/ansible/hooks","issue_events_url":"https://api.github.com/repos/ansible/ansible/issues/events{/number}","events_url":"https://api.github.com/repos/ansible/ansible/events","assignees_url":"https://api.github.com/repos/ansible/ansible/assignees{/user}","branches_url":"https://api.github.com/repos/ansible/ansible/branches{/branch}","tags_url":"https://api.github.com/repos/ansible/ansible/tags","blobs_url":"https://api.github.com/repos/ansible/ansible/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ansible/ansible/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ansible/ansible/git/refs{/sha}","trees_url":"https://api.github.com/repos/ansible/ansible/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ansible/ansible/statuses/{sha}","languages_url":"https://api.github.com/repos/ansible/ansible/languages","stargazers_url":"https://api.github.com/repos/ansible/ansible/stargazers","contributors_url":"https://api.github.com/repos/ansible/ansible/contributors","subscribers_url":"https://api.github.com/repos/ansible/ansible/subscribers","subscription_url":"https://api.github.com/repos/ansible/ansible/subscription","commits_url":"https://api.github.com/repos/ansible/ansible/commits{/sha}","git_commits_url":"https://api.github.com/repos/ansible/ansible/git/commits{/sha}","comments_url":"https://api.github.com/repos/ansible/ansible/comments{/number}","issue_comment_url":"https://api.github.com/repos/ansible/ansible/issues/comments{/number}","contents_url":"https://api.github.com/repos/ansible/ansible/contents/{+path}","compare_url":"https://api.github.com/repos/ansible/ansible/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ansible/ansible/merges","archive_url":"https://api.github.com/repos/ansible/ansible/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ansible/ansible/downloads","issues_url":"https://api.github.com/repos/ansible/ansible/issues{/number}","pulls_url":"https://api.github.com/repos/ansible/ansible/pulls{/number}","milestones_url":"https://api.github.com/repos/ansible/ansible/milestones{/number}","notifications_url":"https://api.github.com/repos/ansible/ansible/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ansible/ansible/labels{/name}","releases_url":"https://api.github.com/repos/ansible/ansible/releases{/id}","deployments_url":"https://api.github.com/repos/ansible/ansible/deployments","created_at":"2012-03-06T14:58:02Z","updated_at":"2018-10-19T15:23:09Z","pushed_at":"2018-10-19T15:32:53Z","git_url":"git://github.com/ansible/ansible.git","ssh_url":"git@github.com:ansible/ansible.git","clone_url":"https://github.com/ansible/ansible.git","svn_url":"https://github.com/ansible/ansible","homepage":"https://www.ansible.com/","size":143884,"stargazers_count":33267,"watchers_count":33267,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":13197,"mirror_url":null,"archived":false,"open_issues_count":5568,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0","node_id":"MDc6TGljZW5zZTk="},"forks":13197,"open_issues":5568,"watchers":33267,"default_branch":"devel"}},"_links":{"self":{"href":"https://api.github.com/repos/ansible/ansible/pulls/47271"},"html":{"href":"https://github.com/ansible/ansible/pull/47271"},"issue":{"href":"https://api.github.com/repos/ansible/ansible/issues/47271"},"comments":{"href":"https://api.github.com/repos/ansible/ansible/issues/47271/comments"},"review_comments":{"href":"https://api.github.com/repos/ansible/ansible/pulls/47271/comments"},"review_comment":{"href":"https://api.github.com/repos/ansible/ansible/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ansible/ansible/pulls/47271/commits"},"statuses":{"href":"https://api.github.com/repos/ansible/ansible/statuses/130438d2784ceb719892c1fad383d10eb651fabc"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"ckotte"}}