{"action":"created","comment":{"url":"https://api.github.com/repos/ansible/ansible/pulls/comments/266467379","pull_request_review_id":215632259,"id":266467379,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI2NjQ2NzM3OQ==","diff_hunk":"@@ -0,0 +1,469 @@\n+# Based on the ssh connection plugin by Michael DeHaan\n+#\n+# Copyright: (c) 2018, Pat Sharkey <psharkey@cleo.com>\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+DOCUMENTATION = \"\"\"\n+author:\n+- Pat Sharkey (@psharkey) <psharkey@cleo.com>\n+- HanumanthaRao MVL (@hanumantharaomvl) <hanumanth@flux7.com>\n+- Gaurav Ashtikar (@gau1991 )<gaurav.ashtikar@flux7.com>\n+connection: aws_ssm\n+short_description: execute via AWS Systems Manager\n+description:\n+- This connection plugin allows ansible to execute tasks on an EC2 instance via the aws ssm CLI.\n+version_added: \"2.8\"\n+requirements:\n+- The remote EC2 instance must be running the AWS Systems Manager Agent (SSM Agent).\n+- The control machine must have the aws session manager plugin installed.\n+- The remote EC2 instance must have the curl installed.\n+options:\n+  instance_id:\n+    description: The EC2 instance ID.\n+    vars:\n+    - name: instance_id\n+    - name: aws_instance_id\n+  region:\n+    description: The region the EC2 instance is located.\n+    vars:\n+    - name: region\n+    - name: aws_region\n+    default: 'us-east-1'\n+  bucket_name:\n+    description: The name of the S3 bucket used for file transfers.\n+    vars:\n+    - name: bucket_name\n+  plugin:\n+    description: This defines the location of the session-manager-plugin binary.\n+    vars:\n+    - name: session_manager_plugin\n+    default: '/usr/local/bin/session-manager-plugin'\n+  retries:\n+    description: Number of attempts to connect.\n+    default: 3\n+    type: integer\n+    vars:\n+    - name: ansible_ssm_retries","path":"lib/ansible/plugins/connection/aws_ssm.py","position":49,"original_position":49,"commit_id":"5f9c751623137e4a4951603ebdb250b2ba000f0a","original_commit_id":"5f9c751623137e4a4951603ebdb250b2ba000f0a","user":{"login":"jamescassell","id":5522890,"node_id":"MDQ6VXNlcjU1MjI4OTA=","avatar_url":"https://avatars1.githubusercontent.com/u/5522890?v=4","gravatar_id":"","url":"https://api.github.com/users/jamescassell","html_url":"https://github.com/jamescassell","followers_url":"https://api.github.com/users/jamescassell/followers","following_url":"https://api.github.com/users/jamescassell/following{/other_user}","gists_url":"https://api.github.com/users/jamescassell/gists{/gist_id}","starred_url":"https://api.github.com/users/jamescassell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jamescassell/subscriptions","organizations_url":"https://api.github.com/users/jamescassell/orgs","repos_url":"https://api.github.com/users/jamescassell/repos","events_url":"https://api.github.com/users/jamescassell/events{/privacy}","received_events_url":"https://api.github.com/users/jamescassell/received_events","type":"User","site_admin":false},"body":"since the plugin is called `aws_ssm`, I'd change this to `ansible_aws_ssm_retries`","created_at":"2019-03-18T14:30:14Z","updated_at":"2019-03-18T14:31:26Z","html_url":"https://github.com/ansible/ansible/pull/49652#discussion_r266467379","pull_request_url":"https://api.github.com/repos/ansible/ansible/pulls/49652","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/ansible/ansible/pulls/comments/266467379"},"html":{"href":"https://github.com/ansible/ansible/pull/49652#discussion_r266467379"},"pull_request":{"href":"https://api.github.com/repos/ansible/ansible/pulls/49652"}}},"pull_request":{"url":"https://api.github.com/repos/ansible/ansible/pulls/49652","id":236879390,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM2ODc5Mzkw","html_url":"https://github.com/ansible/ansible/pull/49652","diff_url":"https://github.com/ansible/ansible/pull/49652.diff","patch_url":"https://github.com/ansible/ansible/pull/49652.patch","issue_url":"https://api.github.com/repos/ansible/ansible/issues/49652","number":49652,"state":"open","locked":false,"title":"new connection plugin aws_ssm","user":{"login":"psharkey","id":8724209,"node_id":"MDQ6VXNlcjg3MjQyMDk=","avatar_url":"https://avatars3.githubusercontent.com/u/8724209?v=4","gravatar_id":"","url":"https://api.github.com/users/psharkey","html_url":"https://github.com/psharkey","followers_url":"https://api.github.com/users/psharkey/followers","following_url":"https://api.github.com/users/psharkey/following{/other_user}","gists_url":"https://api.github.com/users/psharkey/gists{/gist_id}","starred_url":"https://api.github.com/users/psharkey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/psharkey/subscriptions","organizations_url":"https://api.github.com/users/psharkey/orgs","repos_url":"https://api.github.com/users/psharkey/repos","events_url":"https://api.github.com/users/psharkey/events{/privacy}","received_events_url":"https://api.github.com/users/psharkey/received_events","type":"User","site_admin":false},"body":"##### SUMMARY\r\n<!--- Describe the change below, including rationale and design decisions -->\r\nThis connection plugin allows Ansible to execute tasks on an EC2 instance via the  [Session Manager Plugin for the AWS CLI](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html). This is an alternative to SSH connections which eliminates the need for jumpboxes and SSH keys. Similarly, for Windows this means the control machine does not need to have username/password credentials needed for WinRM to manage the remote EC2 instance.\r\n<!--- HINT: Include \"Fixes #nnn\" if you are fixing an existing issue -->\r\n\r\n##### ISSUE TYPE\r\n<!--- Pick one below and delete the rest -->\r\n- Feature Pull Request\r\n\r\n##### COMPONENT NAME\r\nconnection/aws_ssm\r\n\r\n##### ADDITIONAL INFORMATION\r\n<!--- Include additional information to help people understand the change here -->\r\n<!--- A step-by-step reproduction of the problem is helpful if there is no related issue -->\r\n\r\n###### Prerequisites\r\n- The remote EC2 instance must be running the [AWS Systems Manager Agent (SSM Agent)](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html)\r\n- The remote EC2 instance must have the curl installed. On Windows, `curl` should already be present as it's an alias for [Invoke-WebRequest](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-webrequest?view=powershell-6).\r\n- The control machine must have the [AWS Session Manager Plugin](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html) installed.\r\n\r\n###### Sample Integration Test Playbook\r\n```\r\n---\r\n#\r\n# aws_ssm test playbook\r\n#\r\n- name: check plugin\r\n  hosts: localhost\r\n  gather_facts: False\r\n  tags: syntax\r\n  vars:\r\n    plugin_path: '../connection_plugins' # Substitute your path to aws_ssm.py here\r\n    ignore: 'E402,E501,W503,W504,E722,E741'\r\n    plugins:\r\n      - 'aws_ssm'\r\n  tasks:\r\n  - name:  ensure the plugin exists\r\n    command: \"ls -l {{ plugin_path }}/{{ item }}.py\"\r\n    changed_when: False\r\n    with_items: \"{{ plugins }}\"\r\n  - name: install pcodestyle\r\n    pip:\r\n      name: pycodestyle\r\n    become: True\r\n  - name: check plugin style\r\n    command: pycodestyle {{ item }}.py --ignore={{ ignore }}\r\n    changed_when: False\r\n    args:\r\n      chdir: \"{{ plugin_path }}/\"\r\n    with_items: \"{{ plugins }}\"\r\n  - name: check docs\r\n    command: ansible-doc --type=connection --module-path={{ plugin_path }} aws_ssm\r\n    changed_when: False\r\n    with_items: \"{{ plugins }}\"\r\n\r\n- name: check raw command\r\n  hosts: linux\r\n  gather_facts: False\r\n  tags: raw\r\n  vars:\r\n    pwd_stdout: '/usr/bin'\r\n  tasks:\r\n  - name: raw\r\n    raw: pwd\r\n    register: raw\r\n    changed_when: False\r\n  - name: check raw output\r\n    local_action:\r\n      module: assert\r\n      that:\r\n        - \"raw.stdout | trim == pwd_stdout\"\r\n        - \"raw.stderr == ''\"\r\n      msg: \"pwd stdout '{{ raw.stdout | trim }}' != '{{ pwd_stdout }}' or stderr not blank\"\r\n\r\n- name: check escalation\r\n  hosts: linux\r\n  gather_facts: False\r\n  tags: escalation\r\n  vars:\r\n    whoami_become_root: 'root'\r\n    whoami_become_user: 'ec2-user'\r\n  tasks:\r\n  - name: whoami become\r\n    raw: whoami\r\n    register: whoami_root\r\n    changed_when: False\r\n    become: True\r\n  - name: check whoami output\r\n    local_action:\r\n      module: assert\r\n      that:\r\n        - \"whoami_root.stdout | trim == whoami_become_root\"\r\n        - \"whoami_root.stderr == ''\"\r\n      msg: \"whoami stdout '{{ whoami_root.stdout | trim }}' != '{{ whoami_become_root }}' or stderr not blank\"\r\n\r\n  - name: whomai become_user\r\n    raw: whoami\r\n    register: whoami_user\r\n    changed_when: False\r\n    become_user: \"{{ whoami_become_user }}\"\r\n    become: True\r\n  - name: check whoami output\r\n    local_action:\r\n      module: assert\r\n      that:\r\n        - \"whoami_user.stdout | trim == whoami_become_user\"\r\n        - \"whoami_user.stderr == ''\"\r\n      msg: \"whoami stdout '{{ whoami_user.stdout | trim }}' != '{{ whoami_become_user }}' or stderr not blank\"\r\n\r\n- name: install python-pip\r\n  hosts: linux\r\n  gather_facts: False\r\n  tags:  python-pip\r\n  tasks:\r\n  - name: pip\r\n    raw: sudo yum install -y python-pip\r\n    tags: pip\r\n\r\n- name: check the basics - linux\r\n  hosts: linux\r\n  gather_facts: False\r\n  tags: smoke\r\n  vars:\r\n    content: 'Some test content'\r\n    test_filename: 'test.txt'\r\n    remote_file: \"/tmp/{{ test_filename }}\"\r\n    local_file: \"/tmp/{{ inventory_hostname }}.txt\"\r\n  tasks:\r\n  - name: ping\r\n    ping:\r\n    tags: ping\r\n  - name: facts\r\n    setup:\r\n    tags: facts\r\n  - name: command\r\n    command: 'uname -a'\r\n    changed_when: False\r\n    tags: command\r\n  - name: copy\r\n    copy:\r\n      content: \"{{ content }}\"\r\n      dest: \"{{ remote_file }}\"\r\n    tags: copy\r\n  - name: fetch\r\n    fetch:\r\n      src: \"{{ remote_file }}\"\r\n      dest: \"{{ local_file }}\"\r\n      flat: yes\r\n      validate_checksum: false\r\n    tags: fetch\r\n  - name: check\r\n    assert: \r\n      that:\r\n        - \"item == content\"\r\n      msg: \"'{{ item }}' must match '{{ content }}'\"\r\n    with_file:\r\n      - \"{{ local_file }}\"\r\n    tags: check\r\n  - name: cleanup remote\r\n    file:\r\n      path: \"{{ remote_file }}\"\r\n      state: absent\r\n    tags: cleanup\r\n  - name: cleanup local\r\n    local_action:\r\n      module: file\r\n      path: \"{{ local_file }}\"\r\n      state: absent\r\n    tags: cleanup\r\n\r\n- name: check the basics - windows\r\n  hosts: windows\r\n  gather_facts: False\r\n  tags: smoke\r\n  vars:\r\n    content: 'Some test content'\r\n    test_filename: 'C:\\test.txt'\r\n    remote_file: \"{{ test_filename }}\"\r\n    local_file: \"/tmp/{{ inventory_hostname }}.txt\"\r\n  tasks:\r\n  - name: win_ping\r\n    win_ping:\r\n    tags: ping\r\n  - name: win_command\r\n    win_command: 'whoami'\r\n    changed_when: False\r\n    tags: command\r\n  - name: win_copy\r\n    win_copy:\r\n      content: \"{{ content }}\"\r\n      dest: \"{{ remote_file }}\"\r\n    tags: copy\r\n  - name: win_cleanup remote\r\n    win_file:\r\n      path: \"{{ remote_file }}\"\r\n      state: absent\r\n    tags: cleanup\r\n\r\n- name: check timeout\r\n  hosts: linux\r\n  gather_facts: False\r\n  tags:\r\n    - never\r\n    - timeout\r\n  vars:\r\n    timeout_sleep: 30 # must be greater than ansible.cfg timeout (or cli -T, --timeout) value\r\n  tasks:\r\n  - name: expect fatal error due to timeout\r\n    raw: sleep {{ timeout_sleep }}\r\n```\r\n\r\n###### Sample Inventory\r\n```\r\ntest:\r\n  hosts:\r\n    linux:\r\n      instance_id: i-08f3666ba78194dc6\r\n    windows:\r\n      instance_id: i-0dde9ca4b0e666478\r\n      ansible_shell_type: powershell\r\n  children:\r\n    us-east-1:\r\n      hosts:\r\n        linux:\r\n      vars:\r\n        region: us-east-1\r\n    us-west-2:\r\n      hosts:\r\n        windows:\r\n      vars:\r\n        region: us-west-2\r\n  vars:\r\n    bucket_name: your-bucket-name\r\n    ansible_connection: aws_ssm\r\n```\r\n\r\nExample ad-hoc command using sample inventory (in `hosts.yml`):\r\n```\r\n$ ansible test -i ./hosts.yml -m raw -a pwd\r\nlinux | CHANGED | rc=0 >>\r\n/usr/bin\r\n\r\nwindows | CHANGED | rc=0 >>\r\n\r\nPath\r\n----\r\nC:\\Windows\\system32\r\n\r\n\r\n$ \r\n```\r\n<!--- Paste verbatim command output below, e.g. before and after your change -->\r\n```paste below\r\n```","created_at":"2018-12-07T14:09:05Z","updated_at":"2019-03-18T14:31:26Z","closed_at":null,"merged_at":null,"merge_commit_sha":"aec0cb984bc0949ac9c589c91d6f21a1031812d5","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":1043397454,"node_id":"MDU6TGFiZWwxMDQzMzk3NDU0","url":"https://api.github.com/repos/ansible/ansible/labels/affects_2.8","name":"affects_2.8","color":"5319e7","default":false},{"id":379680333,"node_id":"MDU6TGFiZWwzNzk2ODAzMzM=","url":"https://api.github.com/repos/ansible/ansible/labels/aws","name":"aws","color":"c5def5","default":false},{"id":61528803,"node_id":"MDU6TGFiZWw2MTUyODgwMw==","url":"https://api.github.com/repos/ansible/ansible/labels/cloud","name":"cloud","color":"4071a5","default":false},{"id":513652538,"node_id":"MDU6TGFiZWw1MTM2NTI1Mzg=","url":"https://api.github.com/repos/ansible/ansible/labels/core_review","name":"core_review","color":"ededed","default":false},{"id":852590921,"node_id":"MDU6TGFiZWw4NTI1OTA5MjE=","url":"https://api.github.com/repos/ansible/ansible/labels/feature","name":"feature","color":"006b75","default":false},{"id":723150340,"node_id":"MDU6TGFiZWw3MjMxNTAzNDA=","url":"https://api.github.com/repos/ansible/ansible/labels/new_contributor","name":"new_contributor","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":636352796,"node_id":"MDU6TGFiZWw2MzYzNTI3OTY=","url":"https://api.github.com/repos/ansible/ansible/labels/support:core","name":"support:core","color":"ededed","default":false},{"id":108461331,"node_id":"MDU6TGFiZWwxMDg0NjEzMzE=","url":"https://api.github.com/repos/ansible/ansible/labels/windows","name":"windows","color":"AAAAAA","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/ansible/ansible/pulls/49652/commits","review_comments_url":"https://api.github.com/repos/ansible/ansible/pulls/49652/comments","review_comment_url":"https://api.github.com/repos/ansible/ansible/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ansible/ansible/issues/49652/comments","statuses_url":"https://api.github.com/repos/ansible/ansible/statuses/5f9c751623137e4a4951603ebdb250b2ba000f0a","head":{"label":"psharkey:aws_ssm-connection-plugin","ref":"aws_ssm-connection-plugin","sha":"5f9c751623137e4a4951603ebdb250b2ba000f0a","user":{"login":"psharkey","id":8724209,"node_id":"MDQ6VXNlcjg3MjQyMDk=","avatar_url":"https://avatars3.githubusercontent.com/u/8724209?v=4","gravatar_id":"","url":"https://api.github.com/users/psharkey","html_url":"https://github.com/psharkey","followers_url":"https://api.github.com/users/psharkey/followers","following_url":"https://api.github.com/users/psharkey/following{/other_user}","gists_url":"https://api.github.com/users/psharkey/gists{/gist_id}","starred_url":"https://api.github.com/users/psharkey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/psharkey/subscriptions","organizations_url":"https://api.github.com/users/psharkey/orgs","repos_url":"https://api.github.com/users/psharkey/repos","events_url":"https://api.github.com/users/psharkey/events{/privacy}","received_events_url":"https://api.github.com/users/psharkey/received_events","type":"User","site_admin":false},"repo":{"id":87205748,"node_id":"MDEwOlJlcG9zaXRvcnk4NzIwNTc0OA==","name":"ansible","full_name":"psharkey/ansible","private":false,"owner":{"login":"psharkey","id":8724209,"node_id":"MDQ6VXNlcjg3MjQyMDk=","avatar_url":"https://avatars3.githubusercontent.com/u/8724209?v=4","gravatar_id":"","url":"https://api.github.com/users/psharkey","html_url":"https://github.com/psharkey","followers_url":"https://api.github.com/users/psharkey/followers","following_url":"https://api.github.com/users/psharkey/following{/other_user}","gists_url":"https://api.github.com/users/psharkey/gists{/gist_id}","starred_url":"https://api.github.com/users/psharkey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/psharkey/subscriptions","organizations_url":"https://api.github.com/users/psharkey/orgs","repos_url":"https://api.github.com/users/psharkey/repos","events_url":"https://api.github.com/users/psharkey/events{/privacy}","received_events_url":"https://api.github.com/users/psharkey/received_events","type":"User","site_admin":false},"html_url":"https://github.com/psharkey/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.","fork":true,"url":"https://api.github.com/repos/psharkey/ansible","forks_url":"https://api.github.com/repos/psharkey/ansible/forks","keys_url":"https://api.github.com/repos/psharkey/ansible/keys{/key_id}","collaborators_url":"https://api.github.com/repos/psharkey/ansible/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/psharkey/ansible/teams","hooks_url":"https://api.github.com/repos/psharkey/ansible/hooks","issue_events_url":"https://api.github.com/repos/psharkey/ansible/issues/events{/number}","events_url":"https://api.github.com/repos/psharkey/ansible/events","assignees_url":"https://api.github.com/repos/psharkey/ansible/assignees{/user}","branches_url":"https://api.github.com/repos/psharkey/ansible/branches{/branch}","tags_url":"https://api.github.com/repos/psharkey/ansible/tags","blobs_url":"https://api.github.com/repos/psharkey/ansible/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/psharkey/ansible/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/psharkey/ansible/git/refs{/sha}","trees_url":"https://api.github.com/repos/psharkey/ansible/git/trees{/sha}","statuses_url":"https://api.github.com/repos/psharkey/ansible/statuses/{sha}","languages_url":"https://api.github.com/repos/psharkey/ansible/languages","stargazers_url":"https://api.github.com/repos/psharkey/ansible/stargazers","contributors_url":"https://api.github.com/repos/psharkey/ansible/contributors","subscribers_url":"https://api.github.com/repos/psharkey/ansible/subscribers","subscription_url":"https://api.github.com/repos/psharkey/ansible/subscription","commits_url":"https://api.github.com/repos/psharkey/ansible/commits{/sha}","git_commits_url":"https://api.github.com/repos/psharkey/ansible/git/commits{/sha}","comments_url":"https://api.github.com/repos/psharkey/ansible/comments{/number}","issue_comment_url":"https://api.github.com/repos/psharkey/ansible/issues/comments{/number}","contents_url":"https://api.github.com/repos/psharkey/ansible/contents/{+path}","compare_url":"https://api.github.com/repos/psharkey/ansible/compare/{base}...{head}","merges_url":"https://api.github.com/repos/psharkey/ansible/merges","archive_url":"https://api.github.com/repos/psharkey/ansible/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/psharkey/ansible/downloads","issues_url":"https://api.github.com/repos/psharkey/ansible/issues{/number}","pulls_url":"https://api.github.com/repos/psharkey/ansible/pulls{/number}","milestones_url":"https://api.github.com/repos/psharkey/ansible/milestones{/number}","notifications_url":"https://api.github.com/repos/psharkey/ansible/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/psharkey/ansible/labels{/name}","releases_url":"https://api.github.com/repos/psharkey/ansible/releases{/id}","deployments_url":"https://api.github.com/repos/psharkey/ansible/deployments","created_at":"2017-04-04T15:44:54Z","updated_at":"2018-12-07T13:12:36Z","pushed_at":"2019-03-17T17:45:56Z","git_url":"git://github.com/psharkey/ansible.git","ssh_url":"git@github.com:psharkey/ansible.git","clone_url":"https://github.com/psharkey/ansible.git","svn_url":"https://github.com/psharkey/ansible","homepage":"http://ansible.com/","size":141303,"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":"906427cabac133d3690aff2225d33ef0dd34bcd5","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":"2019-03-18T14:10:13Z","pushed_at":"2019-03-18T14:19:42Z","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":162228,"stargazers_count":35974,"watchers_count":35974,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":14749,"mirror_url":null,"archived":false,"open_issues_count":5576,"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":14749,"open_issues":5576,"watchers":35974,"default_branch":"devel"}},"_links":{"self":{"href":"https://api.github.com/repos/ansible/ansible/pulls/49652"},"html":{"href":"https://github.com/ansible/ansible/pull/49652"},"issue":{"href":"https://api.github.com/repos/ansible/ansible/issues/49652"},"comments":{"href":"https://api.github.com/repos/ansible/ansible/issues/49652/comments"},"review_comments":{"href":"https://api.github.com/repos/ansible/ansible/pulls/49652/comments"},"review_comment":{"href":"https://api.github.com/repos/ansible/ansible/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ansible/ansible/pulls/49652/commits"},"statuses":{"href":"https://api.github.com/repos/ansible/ansible/statuses/5f9c751623137e4a4951603ebdb250b2ba000f0a"}},"author_association":"NONE"}}
{"actor":{"display_login":"jamescassell"}}