{"action":"created","comment":{"url":"https://api.github.com/repos/ansible/ansible/pulls/comments/216994335","pull_request_review_id":154603017,"id":216994335,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxNjk5NDMzNQ==","diff_hunk":"@@ -0,0 +1,452 @@\n+#!/usr/bin/python\n+\n+# (c) 2018, Jakub Kramarz <jakub.kramarz@freshmail.pl>\n+# Sponsored by FreshMail sp. z o.o. http://freshmail.pl\n+# (c) 2014, Epic Games, Inc.\n+# (c) 2012, Elliott Foster <elliott@fourkitchens.com>\n+# Sponsored by Four Kitchens http://fourkitchens.com.\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 = {'metadata_version': '1.1',\n+                    'status': ['preview'],\n+                    'supported_by': 'community'}\n+\n+\n+DOCUMENTATION = '''\n+---\n+module: mongodb_role\n+short_description: Adds or removes a role from a MongoDB database.\n+description:\n+    - Adds or removes a role from a MongoDB database.\n+version_added: \"2.8\"\n+options:\n+    login_user:\n+        description:\n+            - The username used to authenticate with\n+    login_password:\n+        description:\n+            - The password used to authenticate with\n+    login_host:\n+        description:\n+            - The host running the database\n+        default: localhost\n+    login_port:\n+        description:\n+            - The port to connect to\n+        default: 27017\n+    login_database:\n+        description:\n+            - The database where login credentials are stored\n+    config_file:\n+        description:\n+            - A config file from which user and password are to be read\n+        type: path\n+        default: '~/.mongodb.cnf'\n+    replica_set:\n+        description:\n+            - Replica set to connect to (automatically connects to primary for writes)\n+    database:\n+        description:\n+            - The name of the database to add/remove the role from\n+        required: true\n+        aliases: [ 'db' ]\n+    name:\n+        description:\n+            - The name of the role to add or remove\n+        required: true\n+        aliases: [ 'role' ]\n+    privileges:\n+        description:\n+            - The privileges to grant to this role\n+    ssl:\n+        description:\n+            - Whether to use an SSL connection when connecting to the database\n+        type: bool\n+        default: 'no'\n+    ssl_cert_reqs:\n+        description:\n+            - Specifies whether a certificate is required from the other side of the connection, and whether it will be validated if provided\n+        default: \"CERT_REQUIRED\"\n+        choices: [\"CERT_REQUIRED\", \"CERT_OPTIONAL\", \"CERT_NONE\"]\n+    roles:\n+        description:\n+            - An array of roles from which this role inherits\n+    authentication_restrictions:\n+        description:\n+            - The authentication restrictions the server enforces on the role\n+    state:\n+        description:\n+            - The database role state\n+        default: present\n+        choices: [ \"present\", \"absent\" ]\n+\n+notes:\n+    - Requires the pymongo Python package on the remote host, version 2.4.2+. This\n+      can be installed using pip or the OS package manager. @see http://api.mongodb.org/python/current/installation.html\n+    - Authentication Restrictions are not present in rolesInfo result up to MongoDB 4.0, so are not supported here in such versions.\n+    - This module is loosely based on mongodb_user by Elliott Foster (@elliotttf) and Julien Thebault (@lujeni).\n+requirements: [ \"pymongo\" ]\n+author:\n+    - \"Jakub Kramarz (@jkramarz)\"\n+'''\n+\n+EXAMPLES = '''\n+# Create 'overlord' role with inherited 'readWrite' role privileges in database 'test'.\n+- mongodb_role:\n+    database: test\n+    name: overlord\n+    roles:\n+        - readWrite\n+    state: present\n+\n+# Create role 'producer' in database 'test' with 'insert' privilege to 'whatever' collection in database 'test' and 'readWrite' access in database 'private'.\n+- mongodb_role:\n+    database: test\n+    name: producer\n+    roles:\n+        - db: private\n+          role: readWrite\n+    privileges:\n+        - resource:\n+            db: test\n+            collection: whatever\n+          actions:\n+            - insert\n+    state: present\n+\n+# Remove role 'kaktus' from database 'test' via SSL (MongoDB must be compiled with the SSL option and configured properly)\n+- mongodb_role:\n+    database: test\n+    name: kaktus\n+    state: absent\n+    ssl: True\n+'''\n+\n+RETURN = '''\n+role:\n+    description: The name of the role to add or remove.\n+    returned: success\n+    type: string\n+'''\n+\n+import os\n+import ssl as ssl_lib\n+import traceback\n+from distutils.version import LooseVersion\n+\n+try:\n+    import yaml\n+    HAS_YAML = True\n+except ImportError:\n+    HAS_YAML = False\n+\n+try:\n+    from pymongo.errors import ConnectionFailure\n+    from pymongo.errors import OperationFailure\n+    from pymongo import version as PyMongoVersion\n+    from pymongo import MongoClient\n+except ImportError:\n+    try:  # for older PyMongo 2.2\n+        from pymongo import Connection as MongoClient\n+    except ImportError:\n+        HAS_PYMONGO = False\n+    else:\n+        HAS_PYMONGO = True\n+else:\n+    HAS_PYMONGO = True\n+\n+from ansible.module_utils.basic import AnsibleModule\n+from ansible.module_utils.six.moves import configparser\n+from ansible.module_utils._text import to_native\n+\n+\n+# =========================================\n+# MongoDB module specific support methods.\n+#\n+\n+def check_compatibility(module, client):\n+    \"\"\"Check the compatibility between the driver and the database.\n+\n+       See: https://docs.mongodb.com/ecosystem/drivers/driver-compatibility-reference/#python-driver-compatibility\n+\n+    Args:\n+        module: Ansible module.\n+        client (cursor): Mongodb cursor on admin database.\n+    \"\"\"\n+    loose_srv_version = LooseVersion(client.server_info()['version'])\n+    loose_driver_version = LooseVersion(PyMongoVersion)\n+\n+    if loose_srv_version >= LooseVersion('3.2') and loose_driver_version < LooseVersion('3.2'):\n+        module.fail_json(msg=' (Note: you must use pymongo 3.2+ with MongoDB >= 3.2)')\n+\n+    elif loose_srv_version >= LooseVersion('3.0') and loose_driver_version <= LooseVersion('2.8'):\n+        module.fail_json(msg=' (Note: you must use pymongo 2.8+ with MongoDB 3.0)')\n+\n+    elif loose_srv_version >= LooseVersion('2.6') and loose_driver_version <= LooseVersion('2.7'):\n+        module.fail_json(msg=' (Note: you must use pymongo 2.7+ with MongoDB 2.6)')\n+\n+    elif LooseVersion(PyMongoVersion) <= LooseVersion('2.5'):\n+        module.fail_json(msg=' (Note: you must be on mongodb 2.4+ and pymongo 2.5+ to use the roles param)')\n+\n+\n+def load_mongocnf(config_file):\n+    config = configparser.RawConfigParser()\n+\n+    try:\n+        with open(config_file) as f:\n+            config.readfp(f)\n+            creds = dict(","path":"lib/ansible/modules/database/mongodb/mongodb_role.py","position":203,"original_position":203,"commit_id":"fae152ebb9beca48ed4ddafe49d7432db1c055bb","original_commit_id":"fae152ebb9beca48ed4ddafe49d7432db1c055bb","user":{"login":"webknjaz","id":578543,"node_id":"MDQ6VXNlcjU3ODU0Mw==","avatar_url":"https://avatars2.githubusercontent.com/u/578543?v=4","gravatar_id":"","url":"https://api.github.com/users/webknjaz","html_url":"https://github.com/webknjaz","followers_url":"https://api.github.com/users/webknjaz/followers","following_url":"https://api.github.com/users/webknjaz/following{/other_user}","gists_url":"https://api.github.com/users/webknjaz/gists{/gist_id}","starred_url":"https://api.github.com/users/webknjaz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/webknjaz/subscriptions","organizations_url":"https://api.github.com/users/webknjaz/orgs","repos_url":"https://api.github.com/users/webknjaz/repos","events_url":"https://api.github.com/users/webknjaz/events{/privacy}","received_events_url":"https://api.github.com/users/webknjaz/received_events","type":"User","site_admin":false},"body":"also, please use dict literal instead of constuctor (`{'key': 'val'}` instead of `dict(key='val')`)","created_at":"2018-09-12T11:34:27Z","updated_at":"2018-09-12T11:34:28Z","html_url":"https://github.com/ansible/ansible/pull/45488#discussion_r216994335","pull_request_url":"https://api.github.com/repos/ansible/ansible/pulls/45488","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/ansible/ansible/pulls/comments/216994335"},"html":{"href":"https://github.com/ansible/ansible/pull/45488#discussion_r216994335"},"pull_request":{"href":"https://api.github.com/repos/ansible/ansible/pulls/45488"}}},"pull_request":{"url":"https://api.github.com/repos/ansible/ansible/pulls/45488","id":214635009,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE0NjM1MDA5","html_url":"https://github.com/ansible/ansible/pull/45488","diff_url":"https://github.com/ansible/ansible/pull/45488.diff","patch_url":"https://github.com/ansible/ansible/pull/45488.patch","issue_url":"https://api.github.com/repos/ansible/ansible/issues/45488","number":45488,"state":"open","locked":false,"title":"Add mongodb_role module","user":{"login":"jkramarz","id":2168523,"node_id":"MDQ6VXNlcjIxNjg1MjM=","avatar_url":"https://avatars3.githubusercontent.com/u/2168523?v=4","gravatar_id":"","url":"https://api.github.com/users/jkramarz","html_url":"https://github.com/jkramarz","followers_url":"https://api.github.com/users/jkramarz/followers","following_url":"https://api.github.com/users/jkramarz/following{/other_user}","gists_url":"https://api.github.com/users/jkramarz/gists{/gist_id}","starred_url":"https://api.github.com/users/jkramarz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jkramarz/subscriptions","organizations_url":"https://api.github.com/users/jkramarz/orgs","repos_url":"https://api.github.com/users/jkramarz/repos","events_url":"https://api.github.com/users/jkramarz/events{/privacy}","received_events_url":"https://api.github.com/users/jkramarz/received_events","type":"User","site_admin":false},"body":"##### SUMMARY\r\n`mongodb_role` module introduced in this pull request provides management capabilities for user-defined roles in MongoDB, enabling users to define custom privileges.\r\n\r\n##### ISSUE TYPE\r\n- New Module Pull Request\r\n\r\n##### COMPONENT NAME\r\nmongodb_role\r\n\r\n##### ANSIBLE VERSION\r\n```\r\nansible 2.6.3\r\n  config file = /etc/ansible/ansible.cfg\r\n  configured module search path = [u'/home/jkramarz/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']\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.15 (default, May 16 2018, 17:50:09) [GCC 8.1.1 20180502 (Red Hat 8.1.1-1)]\r\n```\r\n","created_at":"2018-09-11T13:35:36Z","updated_at":"2018-09-12T11:34:28Z","closed_at":null,"merged_at":null,"merge_commit_sha":"fd7859926e27d252094f8442a7fcbf4b471ec301","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":"ededed","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":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":636352796,"node_id":"MDU6TGFiZWw2MzYzNTI3OTY=","url":"https://api.github.com/repos/ansible/ansible/labels/support:core","name":"support:core","color":"ededed","default":false},{"id":468273802,"node_id":"MDU6TGFiZWw0NjgyNzM4MDI=","url":"https://api.github.com/repos/ansible/ansible/labels/test","name":"test","color":"0e8a16","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/ansible/ansible/pulls/45488/commits","review_comments_url":"https://api.github.com/repos/ansible/ansible/pulls/45488/comments","review_comment_url":"https://api.github.com/repos/ansible/ansible/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ansible/ansible/issues/45488/comments","statuses_url":"https://api.github.com/repos/ansible/ansible/statuses/fae152ebb9beca48ed4ddafe49d7432db1c055bb","head":{"label":"jkramarz:feature-module-mongodb_role","ref":"feature-module-mongodb_role","sha":"fae152ebb9beca48ed4ddafe49d7432db1c055bb","user":{"login":"jkramarz","id":2168523,"node_id":"MDQ6VXNlcjIxNjg1MjM=","avatar_url":"https://avatars3.githubusercontent.com/u/2168523?v=4","gravatar_id":"","url":"https://api.github.com/users/jkramarz","html_url":"https://github.com/jkramarz","followers_url":"https://api.github.com/users/jkramarz/followers","following_url":"https://api.github.com/users/jkramarz/following{/other_user}","gists_url":"https://api.github.com/users/jkramarz/gists{/gist_id}","starred_url":"https://api.github.com/users/jkramarz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jkramarz/subscriptions","organizations_url":"https://api.github.com/users/jkramarz/orgs","repos_url":"https://api.github.com/users/jkramarz/repos","events_url":"https://api.github.com/users/jkramarz/events{/privacy}","received_events_url":"https://api.github.com/users/jkramarz/received_events","type":"User","site_admin":false},"repo":{"id":20762956,"node_id":"MDEwOlJlcG9zaXRvcnkyMDc2Mjk1Ng==","name":"ansible","full_name":"jkramarz/ansible","owner":{"login":"jkramarz","id":2168523,"node_id":"MDQ6VXNlcjIxNjg1MjM=","avatar_url":"https://avatars3.githubusercontent.com/u/2168523?v=4","gravatar_id":"","url":"https://api.github.com/users/jkramarz","html_url":"https://github.com/jkramarz","followers_url":"https://api.github.com/users/jkramarz/followers","following_url":"https://api.github.com/users/jkramarz/following{/other_user}","gists_url":"https://api.github.com/users/jkramarz/gists{/gist_id}","starred_url":"https://api.github.com/users/jkramarz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jkramarz/subscriptions","organizations_url":"https://api.github.com/users/jkramarz/orgs","repos_url":"https://api.github.com/users/jkramarz/repos","events_url":"https://api.github.com/users/jkramarz/events{/privacy}","received_events_url":"https://api.github.com/users/jkramarz/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jkramarz/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/jkramarz/ansible","forks_url":"https://api.github.com/repos/jkramarz/ansible/forks","keys_url":"https://api.github.com/repos/jkramarz/ansible/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jkramarz/ansible/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jkramarz/ansible/teams","hooks_url":"https://api.github.com/repos/jkramarz/ansible/hooks","issue_events_url":"https://api.github.com/repos/jkramarz/ansible/issues/events{/number}","events_url":"https://api.github.com/repos/jkramarz/ansible/events","assignees_url":"https://api.github.com/repos/jkramarz/ansible/assignees{/user}","branches_url":"https://api.github.com/repos/jkramarz/ansible/branches{/branch}","tags_url":"https://api.github.com/repos/jkramarz/ansible/tags","blobs_url":"https://api.github.com/repos/jkramarz/ansible/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jkramarz/ansible/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jkramarz/ansible/git/refs{/sha}","trees_url":"https://api.github.com/repos/jkramarz/ansible/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jkramarz/ansible/statuses/{sha}","languages_url":"https://api.github.com/repos/jkramarz/ansible/languages","stargazers_url":"https://api.github.com/repos/jkramarz/ansible/stargazers","contributors_url":"https://api.github.com/repos/jkramarz/ansible/contributors","subscribers_url":"https://api.github.com/repos/jkramarz/ansible/subscribers","subscription_url":"https://api.github.com/repos/jkramarz/ansible/subscription","commits_url":"https://api.github.com/repos/jkramarz/ansible/commits{/sha}","git_commits_url":"https://api.github.com/repos/jkramarz/ansible/git/commits{/sha}","comments_url":"https://api.github.com/repos/jkramarz/ansible/comments{/number}","issue_comment_url":"https://api.github.com/repos/jkramarz/ansible/issues/comments{/number}","contents_url":"https://api.github.com/repos/jkramarz/ansible/contents/{+path}","compare_url":"https://api.github.com/repos/jkramarz/ansible/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jkramarz/ansible/merges","archive_url":"https://api.github.com/repos/jkramarz/ansible/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jkramarz/ansible/downloads","issues_url":"https://api.github.com/repos/jkramarz/ansible/issues{/number}","pulls_url":"https://api.github.com/repos/jkramarz/ansible/pulls{/number}","milestones_url":"https://api.github.com/repos/jkramarz/ansible/milestones{/number}","notifications_url":"https://api.github.com/repos/jkramarz/ansible/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jkramarz/ansible/labels{/name}","releases_url":"https://api.github.com/repos/jkramarz/ansible/releases{/id}","deployments_url":"https://api.github.com/repos/jkramarz/ansible/deployments","created_at":"2014-06-12T10:09:09Z","updated_at":"2018-09-11T13:22:09Z","pushed_at":"2018-09-11T22:00:59Z","git_url":"git://github.com/jkramarz/ansible.git","ssh_url":"git@github.com:jkramarz/ansible.git","clone_url":"https://github.com/jkramarz/ansible.git","svn_url":"https://github.com/jkramarz/ansible","homepage":"http://ansible.com/","size":122745,"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":"fa04387550de60921373f9d225745d7ca1f80712","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","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},"private":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-09-12T11:18:48Z","pushed_at":"2018-09-12T11:32:52Z","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":140710,"stargazers_count":32465,"watchers_count":32465,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":12769,"mirror_url":null,"archived":false,"open_issues_count":5392,"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":12769,"open_issues":5392,"watchers":32465,"default_branch":"devel"}},"_links":{"self":{"href":"https://api.github.com/repos/ansible/ansible/pulls/45488"},"html":{"href":"https://github.com/ansible/ansible/pull/45488"},"issue":{"href":"https://api.github.com/repos/ansible/ansible/issues/45488"},"comments":{"href":"https://api.github.com/repos/ansible/ansible/issues/45488/comments"},"review_comments":{"href":"https://api.github.com/repos/ansible/ansible/pulls/45488/comments"},"review_comment":{"href":"https://api.github.com/repos/ansible/ansible/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ansible/ansible/pulls/45488/commits"},"statuses":{"href":"https://api.github.com/repos/ansible/ansible/statuses/fae152ebb9beca48ed4ddafe49d7432db1c055bb"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"webknjaz"}}