{"action":"created","comment":{"url":"https://api.github.com/repos/napalm-automation/napalm-ansible/pulls/comments/198284014","pull_request_review_id":132188450,"id":198284014,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5ODI4NDAxNA==","diff_hunk":"@@ -0,0 +1,267 @@\n+\"\"\"\n+(c) 2018 Dmitry Zykov https://dmitryzykov.com\n+    Based on module napalm_install_conf by Elisa Jasinska <elisa@bigwaveit.org>\n+    Original prototype by David Barroso <dbarrosop@dravetech.com>\n+\n+This file is part of Ansible\n+\n+Ansible is free software: you can redistribute it and/or modify\n+it under the terms of the GNU General Public License as published by\n+the Free Software Foundation, either version 3 of the License, or\n+(at your option) any later version.\n+\n+Ansible is distributed in the hope that it will be useful,\n+but WITHOUT ANY WARRANTY; without even the implied warranty of\n+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+GNU General Public License for more details.\n+\n+You should have received a copy of the GNU General Public License\n+along with Ansible.  If not, see <http://www.gnu.org/licenses/>.\n+\"\"\"\n+\n+import re\n+import os.path\n+import hashlib\n+\n+from ansible.module_utils.basic import AnsibleModule, return_values\n+\n+DOCUMENTATION = '''\n+---\n+module: napalm_get_config\n+author: \"Dmitry Zykov (@dmitryzykov)\"\n+version_added: \"1.1\"\n+short_description: \"Get and save to file config taken from a device supported by NAPALM\"\n+description:\n+    - \"This module will get configuration from a device with any\n+       OS supported by napalm and save it to a file.\"\n+requirements:\n+    - napalm\n+options:\n+    hostname:\n+        description:\n+          - IP or FQDN of the device you want to connect to\n+        required: False\n+    username:\n+        description:\n+          - Username\n+        required: False\n+    password:\n+        description:\n+          - Password\n+        required: False\n+    provider:\n+        description:\n+          - Dictionary which acts as a collection of arguments used to define the characteristics\n+            of how to connect to the device.\n+            Note - hostname, username, password and dev_os must be defined in either provider\n+            or local param\n+            Note - local param takes precedence, e.g. hostname is preferred to provider['hostname']\n+        required: False\n+    dev_os:\n+        description:\n+          - OS of the device\n+        required: False\n+    timeout:\n+        description:\n+          - Time in seconds to wait for the device to respond\n+        required: False\n+        default: 60\n+    optional_args:\n+        description:\n+          - Dictionary of additional arguments passed to underlying driver\n+        required: False\n+        default: None\n+    dest:\n+        description:\n+            - File where to save retrieved configuration from a device.\n+        default: None\n+        required: False\n+    type:\n+        description:\n+            - Config type to retreive from device. If retrieved config is empty retrieve\n+              \"running\" type instead.\n+        default: running\n+        required: False\n+        choices: ['running', 'candidate', 'startup']\n+    strip_comments:\n+        description:\n+            - Strip comments with timestamps from the config to behave in idempotent way.\n+        default: False\n+        required: False\n+'''\n+\n+EXAMPLES = '''\n+- name: get the running config with stripped comments\n+  napalm_get_config:\n+    hostname: \"{{ inventory_hostname }}\"\n+    username: \"{{ username }}\"\n+    dev_os: \"{{ os }}\"\n+    password: \"{{ password }}\"\n+    dest: \"../backup/{{ inventory_hostname }}\"\n+    type: running\n+    strip_comments: True\n+\n+- name: get the startup config using provider\n+  napalm_get_config:\n+    provider: \"{{ ios_provider }}\"\n+    dest: \"../backup/{{ inventory_hostname }}\"\n+    type: startup\n+'''\n+\n+RETURN = '''\n+changed:\n+    description: whether the config was retrieved and saved to file\n+    returned: always\n+    type: bool\n+    sample: True\n+\n+msg:\n+    description: retrieved config file\n+    returned: always\n+    type: string\n+    sample: \"## Last commit: 2018-05-30 13:52:39 UTC by root ...\"\n+'''\n+\n+napalm_found = False\n+try:\n+    from napalm import get_network_driver\n+    napalm_found = True\n+except ImportError:\n+    pass\n+\n+# Legacy for pre-reunification napalm (remove in future)\n+if not napalm_found:\n+    try:\n+        from napalm_base import get_network_driver   # noqa\n+        napalm_found = True\n+    except ImportError:\n+        pass\n+\n+\n+def save_to_file(content, filename):\n+    f = open(filename, 'w')\n+    try:\n+        f.write(content)\n+    finally:\n+        f.close()\n+\n+\n+def main():\n+    config_types = ['running', 'candidate', 'startup']\n+\n+    module = AnsibleModule(\n+        argument_spec=dict(\n+            hostname=dict(type='str', required=False, aliases=['host']),\n+            username=dict(type='str', required=False),\n+            password=dict(type='str', required=False, no_log=True),\n+            provider=dict(type='dict', required=False),\n+            timeout=dict(type='int', required=False, default=60),\n+            optional_args=dict(required=False, type='dict', default=None),\n+            dev_os=dict(type='str', required=False),\n+            dest=dict(type='str', required=False, default=None),\n+            type=dict(type='str', required=False, choices=config_types, default=\"running\"),\n+            strip_comments=dict(type='bool', required=False, default=False),\n+        ),\n+        supports_check_mode=True\n+    )\n+\n+    changed = False\n+\n+    if not napalm_found:\n+        module.fail_json(msg=\"the python module napalm is required\")\n+\n+    provider = module.params['provider'] or {}\n+\n+    no_log = ['password', 'secret']\n+    for param in no_log:\n+        if provider.get(param):\n+            module.no_log_values.update(return_values(provider[param]))\n+        if provider.get('optional_args') and provider['optional_args'].get(param):\n+            module.no_log_values.update(return_values(provider['optional_args'].get(param)))\n+        if module.params.get('optional_args') and module.params['optional_args'].get(param):\n+            module.no_log_values.update(return_values(module.params['optional_args'].get(param)))\n+\n+    # allow host or hostname\n+    provider['hostname'] = provider.get('hostname', None) or provider.get('host', None)\n+    # allow local params to override provider\n+    for param, pvalue in provider.items():\n+        if module.params.get(param) is not False:\n+            module.params[param] = module.params.get(param) or pvalue\n+\n+    hostname = module.params['hostname']\n+    username = module.params['username']\n+    dev_os = module.params['dev_os']\n+    password = module.params['password']\n+    timeout = module.params['timeout']\n+    dest = module.params['dest']\n+    type = module.params['type']\n+    strip_comments = module.params['strip_comments']\n+\n+    argument_check = {'hostname': hostname, 'username': username, 'dev_os': dev_os}\n+    for key, val in argument_check.items():\n+        if val is None:\n+            module.fail_json(msg=str(key) + \" is required\")\n+\n+    if module.params['optional_args'] is None:\n+        optional_args = {}\n+    else:\n+        optional_args = module.params['optional_args']\n+\n+    try:\n+        network_driver = get_network_driver(dev_os)\n+        device = network_driver(hostname=hostname,\n+                                username=username,\n+                                password=password,\n+                                timeout=timeout,\n+                                optional_args=optional_args)\n+        device.open()\n+    except Exception as e:\n+        module.fail_json(msg=\"cannot connect to device: \" + str(e))\n+\n+    try:\n+        config = device.get_config(retrieve=type)[type]","path":"napalm_ansible/modules/napalm_get_config.py","position":222,"original_position":222,"commit_id":"7f942af0280ba18d4ca8a595d361b8b5a22ba29d","original_commit_id":"7f942af0280ba18d4ca8a595d361b8b5a22ba29d","user":{"login":"ktbyers","id":899716,"node_id":"MDQ6VXNlcjg5OTcxNg==","avatar_url":"https://avatars0.githubusercontent.com/u/899716?v=4","gravatar_id":"","url":"https://api.github.com/users/ktbyers","html_url":"https://github.com/ktbyers","followers_url":"https://api.github.com/users/ktbyers/followers","following_url":"https://api.github.com/users/ktbyers/following{/other_user}","gists_url":"https://api.github.com/users/ktbyers/gists{/gist_id}","starred_url":"https://api.github.com/users/ktbyers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ktbyers/subscriptions","organizations_url":"https://api.github.com/users/ktbyers/orgs","repos_url":"https://api.github.com/users/ktbyers/repos","events_url":"https://api.github.com/users/ktbyers/events{/privacy}","received_events_url":"https://api.github.com/users/ktbyers/received_events","type":"User","site_admin":false},"body":"type is a Python reserved word...we shouldn't use it for anything so these 'type' references will all need updated.","created_at":"2018-06-26T20:20:49Z","updated_at":"2018-06-26T20:22:07Z","html_url":"https://github.com/napalm-automation/napalm-ansible/pull/131#discussion_r198284014","pull_request_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/pulls/131","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/napalm-automation/napalm-ansible/pulls/comments/198284014"},"html":{"href":"https://github.com/napalm-automation/napalm-ansible/pull/131#discussion_r198284014"},"pull_request":{"href":"https://api.github.com/repos/napalm-automation/napalm-ansible/pulls/131"}}},"pull_request":{"url":"https://api.github.com/repos/napalm-automation/napalm-ansible/pulls/131","id":192128844,"node_id":"MDExOlB1bGxSZXF1ZXN0MTkyMTI4ODQ0","html_url":"https://github.com/napalm-automation/napalm-ansible/pull/131","diff_url":"https://github.com/napalm-automation/napalm-ansible/pull/131.diff","patch_url":"https://github.com/napalm-automation/napalm-ansible/pull/131.patch","issue_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/issues/131","number":131,"state":"open","locked":false,"title":"Introducing napalm_get_config module","user":{"login":"dmitryzykov","id":15911918,"node_id":"MDQ6VXNlcjE1OTExOTE4","avatar_url":"https://avatars1.githubusercontent.com/u/15911918?v=4","gravatar_id":"","url":"https://api.github.com/users/dmitryzykov","html_url":"https://github.com/dmitryzykov","followers_url":"https://api.github.com/users/dmitryzykov/followers","following_url":"https://api.github.com/users/dmitryzykov/following{/other_user}","gists_url":"https://api.github.com/users/dmitryzykov/gists{/gist_id}","starred_url":"https://api.github.com/users/dmitryzykov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmitryzykov/subscriptions","organizations_url":"https://api.github.com/users/dmitryzykov/orgs","repos_url":"https://api.github.com/users/dmitryzykov/repos","events_url":"https://api.github.com/users/dmitryzykov/events{/privacy}","received_events_url":"https://api.github.com/users/dmitryzykov/received_events","type":"User","site_admin":false},"body":"Introducing napalm_get_config module.\r\nThis module will get configuration from a device with any OS supported by napalm and save it to a file in idempotent way.\r\n\r\nKey arguments:\r\n```yaml\r\n    dest:\r\n        description:\r\n            - File where to save a retrieved configuration from a device. Configuration won't be\r\n              retrieved if not set.\r\n        default: None\r\n        required: True\r\n    type:\r\n        description:\r\n            - Config type to retreive from device. If retrieved config is empty retrieve \r\n            \"running\" type instead.\r\n        default: running\r\n        required: False\r\n        choices: ['running', 'candidate', 'startup']\r\n    strip_comments:\r\n        description:\r\n            - Strip comments with timestamps from the config to behave in idempotent way. \r\n        default: False\r\n        required: False\r\n```\r\nExamples: \r\n```yaml\r\n- name: get the running config with stripped comments\r\n  napalm_get_config:\r\n    hostname: \"{{ inventory_hostname }}\"\r\n    username: \"{{ username }}\"\r\n    dev_os: \"{{ os }}\"\r\n    password: \"{{ password }}\"\r\n    dest: \"../backup/{{ inventory_hostname }}\"\r\n    type: running\r\n    strip_comments: True\r\n    \r\n- name: get the startup config using provider\r\n  napalm_get_config:\r\n    provider: \"{{ ios_provider }}\"\r\n    dest: \"../backup/{{ inventory_hostname }}\"\r\n    type: startup\r\n```","created_at":"2018-06-01T20:00:21Z","updated_at":"2018-06-26T20:22:07Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c13715bc62e955551c33d6abb32bafeb8937bca7","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/pulls/131/commits","review_comments_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/pulls/131/comments","review_comment_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/pulls/comments{/number}","comments_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/issues/131/comments","statuses_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/statuses/7f942af0280ba18d4ca8a595d361b8b5a22ba29d","head":{"label":"dmitryzykov:develop","ref":"develop","sha":"7f942af0280ba18d4ca8a595d361b8b5a22ba29d","user":{"login":"dmitryzykov","id":15911918,"node_id":"MDQ6VXNlcjE1OTExOTE4","avatar_url":"https://avatars1.githubusercontent.com/u/15911918?v=4","gravatar_id":"","url":"https://api.github.com/users/dmitryzykov","html_url":"https://github.com/dmitryzykov","followers_url":"https://api.github.com/users/dmitryzykov/followers","following_url":"https://api.github.com/users/dmitryzykov/following{/other_user}","gists_url":"https://api.github.com/users/dmitryzykov/gists{/gist_id}","starred_url":"https://api.github.com/users/dmitryzykov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmitryzykov/subscriptions","organizations_url":"https://api.github.com/users/dmitryzykov/orgs","repos_url":"https://api.github.com/users/dmitryzykov/repos","events_url":"https://api.github.com/users/dmitryzykov/events{/privacy}","received_events_url":"https://api.github.com/users/dmitryzykov/received_events","type":"User","site_admin":false},"repo":{"id":135757137,"node_id":"MDEwOlJlcG9zaXRvcnkxMzU3NTcxMzc=","name":"napalm-ansible","full_name":"dmitryzykov/napalm-ansible","owner":{"login":"dmitryzykov","id":15911918,"node_id":"MDQ6VXNlcjE1OTExOTE4","avatar_url":"https://avatars1.githubusercontent.com/u/15911918?v=4","gravatar_id":"","url":"https://api.github.com/users/dmitryzykov","html_url":"https://github.com/dmitryzykov","followers_url":"https://api.github.com/users/dmitryzykov/followers","following_url":"https://api.github.com/users/dmitryzykov/following{/other_user}","gists_url":"https://api.github.com/users/dmitryzykov/gists{/gist_id}","starred_url":"https://api.github.com/users/dmitryzykov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmitryzykov/subscriptions","organizations_url":"https://api.github.com/users/dmitryzykov/orgs","repos_url":"https://api.github.com/users/dmitryzykov/repos","events_url":"https://api.github.com/users/dmitryzykov/events{/privacy}","received_events_url":"https://api.github.com/users/dmitryzykov/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/dmitryzykov/napalm-ansible","description":null,"fork":true,"url":"https://api.github.com/repos/dmitryzykov/napalm-ansible","forks_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/forks","keys_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/teams","hooks_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/hooks","issue_events_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/issues/events{/number}","events_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/events","assignees_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/assignees{/user}","branches_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/branches{/branch}","tags_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/tags","blobs_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/git/refs{/sha}","trees_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/statuses/{sha}","languages_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/languages","stargazers_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/stargazers","contributors_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/contributors","subscribers_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/subscribers","subscription_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/subscription","commits_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/commits{/sha}","git_commits_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/git/commits{/sha}","comments_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/comments{/number}","issue_comment_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/issues/comments{/number}","contents_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/contents/{+path}","compare_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/merges","archive_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/downloads","issues_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/issues{/number}","pulls_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/pulls{/number}","milestones_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/milestones{/number}","notifications_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/labels{/name}","releases_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/releases{/id}","deployments_url":"https://api.github.com/repos/dmitryzykov/napalm-ansible/deployments","created_at":"2018-06-01T19:44:27Z","updated_at":"2018-06-07T08:57:44Z","pushed_at":"2018-06-07T08:57:42Z","git_url":"git://github.com/dmitryzykov/napalm-ansible.git","ssh_url":"git@github.com:dmitryzykov/napalm-ansible.git","clone_url":"https://github.com/dmitryzykov/napalm-ansible.git","svn_url":"https://github.com/dmitryzykov/napalm-ansible","homepage":null,"size":189,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"napalm-automation:develop","ref":"develop","sha":"b18dfaea22fa2221c69599896ddc2b1c7f98967d","user":{"login":"napalm-automation","id":16415577,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2NDE1NTc3","avatar_url":"https://avatars2.githubusercontent.com/u/16415577?v=4","gravatar_id":"","url":"https://api.github.com/users/napalm-automation","html_url":"https://github.com/napalm-automation","followers_url":"https://api.github.com/users/napalm-automation/followers","following_url":"https://api.github.com/users/napalm-automation/following{/other_user}","gists_url":"https://api.github.com/users/napalm-automation/gists{/gist_id}","starred_url":"https://api.github.com/users/napalm-automation/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/napalm-automation/subscriptions","organizations_url":"https://api.github.com/users/napalm-automation/orgs","repos_url":"https://api.github.com/users/napalm-automation/repos","events_url":"https://api.github.com/users/napalm-automation/events{/privacy}","received_events_url":"https://api.github.com/users/napalm-automation/received_events","type":"Organization","site_admin":false},"repo":{"id":49192168,"node_id":"MDEwOlJlcG9zaXRvcnk0OTE5MjE2OA==","name":"napalm-ansible","full_name":"napalm-automation/napalm-ansible","owner":{"login":"napalm-automation","id":16415577,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2NDE1NTc3","avatar_url":"https://avatars2.githubusercontent.com/u/16415577?v=4","gravatar_id":"","url":"https://api.github.com/users/napalm-automation","html_url":"https://github.com/napalm-automation","followers_url":"https://api.github.com/users/napalm-automation/followers","following_url":"https://api.github.com/users/napalm-automation/following{/other_user}","gists_url":"https://api.github.com/users/napalm-automation/gists{/gist_id}","starred_url":"https://api.github.com/users/napalm-automation/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/napalm-automation/subscriptions","organizations_url":"https://api.github.com/users/napalm-automation/orgs","repos_url":"https://api.github.com/users/napalm-automation/repos","events_url":"https://api.github.com/users/napalm-automation/events{/privacy}","received_events_url":"https://api.github.com/users/napalm-automation/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/napalm-automation/napalm-ansible","description":null,"fork":false,"url":"https://api.github.com/repos/napalm-automation/napalm-ansible","forks_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/forks","keys_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/keys{/key_id}","collaborators_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/teams","hooks_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/hooks","issue_events_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/issues/events{/number}","events_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/events","assignees_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/assignees{/user}","branches_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/branches{/branch}","tags_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/tags","blobs_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/git/refs{/sha}","trees_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/git/trees{/sha}","statuses_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/statuses/{sha}","languages_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/languages","stargazers_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/stargazers","contributors_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/contributors","subscribers_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/subscribers","subscription_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/subscription","commits_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/commits{/sha}","git_commits_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/git/commits{/sha}","comments_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/comments{/number}","issue_comment_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/issues/comments{/number}","contents_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/contents/{+path}","compare_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/compare/{base}...{head}","merges_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/merges","archive_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/downloads","issues_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/issues{/number}","pulls_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/pulls{/number}","milestones_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/milestones{/number}","notifications_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/labels{/name}","releases_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/releases{/id}","deployments_url":"https://api.github.com/repos/napalm-automation/napalm-ansible/deployments","created_at":"2016-01-07T08:36:01Z","updated_at":"2018-06-13T09:34:03Z","pushed_at":"2018-06-20T14:32:52Z","git_url":"git://github.com/napalm-automation/napalm-ansible.git","ssh_url":"git@github.com:napalm-automation/napalm-ansible.git","clone_url":"https://github.com/napalm-automation/napalm-ansible.git","svn_url":"https://github.com/napalm-automation/napalm-ansible","homepage":null,"size":184,"stargazers_count":111,"watchers_count":111,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":49,"mirror_url":null,"archived":false,"open_issues_count":14,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":49,"open_issues":14,"watchers":111,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/napalm-automation/napalm-ansible/pulls/131"},"html":{"href":"https://github.com/napalm-automation/napalm-ansible/pull/131"},"issue":{"href":"https://api.github.com/repos/napalm-automation/napalm-ansible/issues/131"},"comments":{"href":"https://api.github.com/repos/napalm-automation/napalm-ansible/issues/131/comments"},"review_comments":{"href":"https://api.github.com/repos/napalm-automation/napalm-ansible/pulls/131/comments"},"review_comment":{"href":"https://api.github.com/repos/napalm-automation/napalm-ansible/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/napalm-automation/napalm-ansible/pulls/131/commits"},"statuses":{"href":"https://api.github.com/repos/napalm-automation/napalm-ansible/statuses/7f942af0280ba18d4ca8a595d361b8b5a22ba29d"}},"author_association":"NONE"}}
{"actor":{"display_login":"ktbyers"}}