payload: {"action":"created","comment":{"url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/pulls/comments/360254418","pull_request_review_id":335101947,"id":360254418,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM2MDI1NDQxOA==","diff_hunk":"@@ -655,10 +690,237 @@ def exit_json(self, changed=False, **kwargs):\n         super(ForemanAnsibleModule, self).exit_json(**kwargs)\n \n \n-class ForemanEntityAnsibleModule(ForemanAnsibleModule):\n+class ResolverEntityMixin(object):\n+    \"\"\" This mixin add automatic entities resolution based on provided attributes/ sub entities options.\n+        It add following options to entity_spec 'entity' and 'entity_list' types:\n+        * search_by (str): Field used to search the sub entity. Defaults to 'name' unless `parent` was set, in which case it defaults to `title`.\n+        * search_operator (str): Operator used to search the su entity. Defaults to '='.\n+        * resource_type (str): Resource type used to build API resource PATH. Defaults to pluralized entity key.\n+        It add following attributes:\n+        * entity_search (str): Defautls to None. If provided, the base entity resolver will use this search query instead to try to build it.\n+        * entity_key (str): field used to search current entity. Defaults to 'name'. If entity_spec contains 'parent', defaults to 'title'.\n+        * entity_scope (str): Type of the entity used to build search scope. Defaults to None.\n+        * entity_resolve (boolean): Set it to False to disable base entity resolution.\n+        * entity_opts (dict): Dict of options for base entity. Same options can be provided for subentities described in entity_spec.\n+    \"\"\"\n+    def __init__(self, argument_spec=None, **kwargs):\n+        self.check_requirements()\n+        self.original_entity_spec = kwargs.pop('entity_spec', {})\n+        self.sub_entities = {key: value for key, value in self.original_entity_spec.items()\n+                             if value.get('resolve', True) and 'type' in value and value['type'] in ['entity', 'entity_list']}\n+        self.entity_scope = kwargs.pop('entity_scope', None)\n+        self.entity_key = kwargs.pop('entity_key', 'name')\n+        self.entity_resolve = kwargs.pop('entity_resolve', True)\n+        self.entity_opts = kwargs.pop('entity_opts', {})\n+        self.entity_name = kwargs.pop('entity_key', self.entity_name_from_class)\n+        if 'thin' not in self.entity_opts:\n+            self.entity_opts['thin'] = False\n+        if 'failsafe' not in self.entity_opts:\n+            self.entity_opts['failsafe'] = True\n+        if 'search_operator' not in self.entity_opts:\n+            self.entity_opts['search_operator'] = '='\n+        if 'parent' in self.sub_entities:\n+            self.entity_opts['search_by'] = 'title'\n+        elif 'search_by' not in self.entity_opts:\n+            self.entity_opts['search_by'] = self.entity_key\n+        else:\n+            self.entity_opts['search_by'] = 'name'\n+\n+        self.inflector = apypie.Inflector()\n+        self._entity_resource_path = self.inflector.pluralize(self.entity_name)\n+        super(ResolverEntityMixin, self).__init__(argument_spec=argument_spec, **kwargs)\n+\n+    @property\n+    def entity_name_from_class(self):\n+        # Convert current class name from CamelCase to snake_case\n+        class_name = re.sub(r'(?<=[a-z])[A-Z]|[A-Z](?=[^A-Z])', r'_\\g<0>', self.__class__.__name__).lower().strip('_')\n+        # Get entity name from snake case class name\n+        return '_'.join(class_name.split('_')[1:-1])\n+\n+    def run(self, entity_dict=None, entity=None, search=None):\n+        \"\"\" Connect, get entity_dict, resolve entities, ensure entity, remove sensitive data, manage parameters and exit.\n+            You can provide custom entity_dict and entity if custom workflow is needed before doing most of listed actions.\n+            If your module have some custom workflow, you can opt-out some actions:\n+            * Connect by setting connect=False\n+            * Exit by setting exit=False. In this case it will return the current entity","path":"plugins/module_utils/foreman_helper.py","position":153,"original_position":153,"commit_id":"aed15c9a6d0c4c2429db4e310b9c2659889b8e16","original_commit_id":"aed15c9a6d0c4c2429db4e310b9c2659889b8e16","user":{"login":"evgeni","id":94284,"node_id":"MDQ6VXNlcjk0Mjg0","avatar_url":"https://avatars3.githubusercontent.com/u/94284?v=4","gravatar_id":"","url":"https://api.github.com/users/evgeni","html_url":"https://github.com/evgeni","followers_url":"https://api.github.com/users/evgeni/followers","following_url":"https://api.github.com/users/evgeni/following{/other_user}","gists_url":"https://api.github.com/users/evgeni/gists{/gist_id}","starred_url":"https://api.github.com/users/evgeni/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/evgeni/subscriptions","organizations_url":"https://api.github.com/users/evgeni/orgs","repos_url":"https://api.github.com/users/evgeni/repos","events_url":"https://api.github.com/users/evgeni/events{/privacy}","received_events_url":"https://api.github.com/users/evgeni/received_events","type":"User","site_admin":false},"body":"```suggestion\r\n```","created_at":"2019-12-20T07:30:33Z","updated_at":"2019-12-20T07:30:33Z","html_url":"https://github.com/theforeman/foreman-ansible-modules/pull/610#discussion_r360254418","pull_request_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/pulls/610","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/theforeman/foreman-ansible-modules/pulls/comments/360254418"},"html":{"href":"https://github.com/theforeman/foreman-ansible-modules/pull/610#discussion_r360254418"},"pull_request":{"href":"https://api.github.com/repos/theforeman/foreman-ansible-modules/pulls/610"}}},"pull_request":{"url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/pulls/610","id":344465271,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQ0NDY1Mjcx","html_url":"https://github.com/theforeman/foreman-ansible-modules/pull/610","diff_url":"https://github.com/theforeman/foreman-ansible-modules/pull/610.diff","patch_url":"https://github.com/theforeman/foreman-ansible-modules/pull/610.patch","issue_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/issues/610","number":610,"state":"open","locked":false,"title":"Add resolve mecanism for entities","user":{"login":"bagasse","id":2952632,"node_id":"MDQ6VXNlcjI5NTI2MzI=","avatar_url":"https://avatars2.githubusercontent.com/u/2952632?v=4","gravatar_id":"","url":"https://api.github.com/users/bagasse","html_url":"https://github.com/bagasse","followers_url":"https://api.github.com/users/bagasse/followers","following_url":"https://api.github.com/users/bagasse/following{/other_user}","gists_url":"https://api.github.com/users/bagasse/gists{/gist_id}","starred_url":"https://api.github.com/users/bagasse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bagasse/subscriptions","organizations_url":"https://api.github.com/users/bagasse/orgs","repos_url":"https://api.github.com/users/bagasse/repos","events_url":"https://api.github.com/users/bagasse/events{/privacy}","received_events_url":"https://api.github.com/users/bagasse/received_events","type":"User","site_admin":false},"body":"Trying to address some parts of #324\r\n\r\n#### foreman modules\r\n- [x] foreman_architecture\r\n- [x] foreman_auth_source_ldap\r\n- [x] foreman_bookmark\r\n- [x] foreman_compute_attribute\r\n- [x] foreman_compute_profile\r\n- [x] foreman_compute_resource\r\n- [x] foreman_config_group\r\n- [x] foreman_domain\r\n- [x] foreman_environment\r\n- [x] foreman_external_usergroup\r\n- [x] foreman_global_parameter\r\n- [x] foreman_hostgroup\r\n-  foreman_host_power *(make actions, out of scope)*\r\n- [x] foreman_host\r\n- [x] foreman_installation_medium\r\n- foreman_job_template (a lot of custom logic)\r\n- [x] foreman_location\r\n- [x] foreman_operatingsystem\r\n- [x] foreman_organization\r\n- [x] foreman_os_default_template\r\n- [x] foreman_provisioning_template\r\n- [x] foreman_ptable\r\n- [x] foreman_realm\r\n- [x] foreman_role\r\n-  foreman_search_facts (low level, use ForemanAnsible module directly, out of scope)\r\n- [x] foreman_setting\r\n- foreman_snapshot (Needs vmware, no setup to test)\r\n- [x] foreman_subnet\r\n- [x] foreman_usergroup\r\n- [x] foreman_user  (tests OK in my env but KO here)","created_at":"2019-11-22T11:07:38Z","updated_at":"2019-12-20T07:30:33Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6fab2c287dfe404cbbaaed2feaaa3d3d2d375c6e","assignee":{"login":"evgeni","id":94284,"node_id":"MDQ6VXNlcjk0Mjg0","avatar_url":"https://avatars3.githubusercontent.com/u/94284?v=4","gravatar_id":"","url":"https://api.github.com/users/evgeni","html_url":"https://github.com/evgeni","followers_url":"https://api.github.com/users/evgeni/followers","following_url":"https://api.github.com/users/evgeni/following{/other_user}","gists_url":"https://api.github.com/users/evgeni/gists{/gist_id}","starred_url":"https://api.github.com/users/evgeni/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/evgeni/subscriptions","organizations_url":"https://api.github.com/users/evgeni/orgs","repos_url":"https://api.github.com/users/evgeni/repos","events_url":"https://api.github.com/users/evgeni/events{/privacy}","received_events_url":"https://api.github.com/users/evgeni/received_events","type":"User","site_admin":false},"assignees":[{"login":"evgeni","id":94284,"node_id":"MDQ6VXNlcjk0Mjg0","avatar_url":"https://avatars3.githubusercontent.com/u/94284?v=4","gravatar_id":"","url":"https://api.github.com/users/evgeni","html_url":"https://github.com/evgeni","followers_url":"https://api.github.com/users/evgeni/followers","following_url":"https://api.github.com/users/evgeni/following{/other_user}","gists_url":"https://api.github.com/users/evgeni/gists{/gist_id}","starred_url":"https://api.github.com/users/evgeni/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/evgeni/subscriptions","organizations_url":"https://api.github.com/users/evgeni/orgs","repos_url":"https://api.github.com/users/evgeni/repos","events_url":"https://api.github.com/users/evgeni/events{/privacy}","received_events_url":"https://api.github.com/users/evgeni/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"mdellweg","id":25984076,"node_id":"MDQ6VXNlcjI1OTg0MDc2","avatar_url":"https://avatars1.githubusercontent.com/u/25984076?v=4","gravatar_id":"","url":"https://api.github.com/users/mdellweg","html_url":"https://github.com/mdellweg","followers_url":"https://api.github.com/users/mdellweg/followers","following_url":"https://api.github.com/users/mdellweg/following{/other_user}","gists_url":"https://api.github.com/users/mdellweg/gists{/gist_id}","starred_url":"https://api.github.com/users/mdellweg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mdellweg/subscriptions","organizations_url":"https://api.github.com/users/mdellweg/orgs","repos_url":"https://api.github.com/users/mdellweg/repos","events_url":"https://api.github.com/users/mdellweg/events{/privacy}","received_events_url":"https://api.github.com/users/mdellweg/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":1249665555,"node_id":"MDU6TGFiZWwxMjQ5NjY1NTU1","url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/labels/refactor","name":"refactor","color":"ff7f00","default":false,"description":""},{"id":1665415511,"node_id":"MDU6TGFiZWwxNjY1NDE1NTEx","url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/labels/triaged","name":"triaged","color":"eeeeee","default":false,"description":""}],"milestone":null,"commits_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/pulls/610/commits","review_comments_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/pulls/610/comments","review_comment_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/pulls/comments{/number}","comments_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/issues/610/comments","statuses_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/statuses/aed15c9a6d0c4c2429db4e310b9c2659889b8e16","head":{"label":"bagasse:dry_entity_lookup","ref":"dry_entity_lookup","sha":"aed15c9a6d0c4c2429db4e310b9c2659889b8e16","user":{"login":"bagasse","id":2952632,"node_id":"MDQ6VXNlcjI5NTI2MzI=","avatar_url":"https://avatars2.githubusercontent.com/u/2952632?v=4","gravatar_id":"","url":"https://api.github.com/users/bagasse","html_url":"https://github.com/bagasse","followers_url":"https://api.github.com/users/bagasse/followers","following_url":"https://api.github.com/users/bagasse/following{/other_user}","gists_url":"https://api.github.com/users/bagasse/gists{/gist_id}","starred_url":"https://api.github.com/users/bagasse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bagasse/subscriptions","organizations_url":"https://api.github.com/users/bagasse/orgs","repos_url":"https://api.github.com/users/bagasse/repos","events_url":"https://api.github.com/users/bagasse/events{/privacy}","received_events_url":"https://api.github.com/users/bagasse/received_events","type":"User","site_admin":false},"repo":{"id":155180264,"node_id":"MDEwOlJlcG9zaXRvcnkxNTUxODAyNjQ=","name":"foreman-ansible-modules","full_name":"bagasse/foreman-ansible-modules","private":false,"owner":{"login":"bagasse","id":2952632,"node_id":"MDQ6VXNlcjI5NTI2MzI=","avatar_url":"https://avatars2.githubusercontent.com/u/2952632?v=4","gravatar_id":"","url":"https://api.github.com/users/bagasse","html_url":"https://github.com/bagasse","followers_url":"https://api.github.com/users/bagasse/followers","following_url":"https://api.github.com/users/bagasse/following{/other_user}","gists_url":"https://api.github.com/users/bagasse/gists{/gist_id}","starred_url":"https://api.github.com/users/bagasse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bagasse/subscriptions","organizations_url":"https://api.github.com/users/bagasse/orgs","repos_url":"https://api.github.com/users/bagasse/repos","events_url":"https://api.github.com/users/bagasse/events{/privacy}","received_events_url":"https://api.github.com/users/bagasse/received_events","type":"User","site_admin":false},"html_url":"https://github.com/bagasse/foreman-ansible-modules","description":"Repository for Ansible modules that communicate with Foreman and plugin APIs","fork":true,"url":"https://api.github.com/repos/bagasse/foreman-ansible-modules","forks_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/forks","keys_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/teams","hooks_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/hooks","issue_events_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/issues/events{/number}","events_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/events","assignees_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/assignees{/user}","branches_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/branches{/branch}","tags_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/tags","blobs_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/git/refs{/sha}","trees_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/statuses/{sha}","languages_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/languages","stargazers_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/stargazers","contributors_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/contributors","subscribers_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/subscribers","subscription_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/subscription","commits_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/commits{/sha}","git_commits_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/git/commits{/sha}","comments_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/comments{/number}","issue_comment_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/issues/comments{/number}","contents_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/contents/{+path}","compare_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/merges","archive_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/downloads","issues_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/issues{/number}","pulls_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/pulls{/number}","milestones_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/milestones{/number}","notifications_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/labels{/name}","releases_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/releases{/id}","deployments_url":"https://api.github.com/repos/bagasse/foreman-ansible-modules/deployments","created_at":"2018-10-29T08:52:00Z","updated_at":"2019-12-09T08:16:38Z","pushed_at":"2019-12-18T15:18:21Z","git_url":"git://github.com/bagasse/foreman-ansible-modules.git","ssh_url":"git@github.com:bagasse/foreman-ansible-modules.git","clone_url":"https://github.com/bagasse/foreman-ansible-modules.git","svn_url":"https://github.com/bagasse/foreman-ansible-modules","homepage":null,"size":7673,"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,"disabled":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":"master"}},"base":{"label":"theforeman:master","ref":"master","sha":"6c5efb60208960c214b821cb2e5499820541c0df","user":{"login":"theforeman","id":1439844,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0Mzk4NDQ=","avatar_url":"https://avatars2.githubusercontent.com/u/1439844?v=4","gravatar_id":"","url":"https://api.github.com/users/theforeman","html_url":"https://github.com/theforeman","followers_url":"https://api.github.com/users/theforeman/followers","following_url":"https://api.github.com/users/theforeman/following{/other_user}","gists_url":"https://api.github.com/users/theforeman/gists{/gist_id}","starred_url":"https://api.github.com/users/theforeman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/theforeman/subscriptions","organizations_url":"https://api.github.com/users/theforeman/orgs","repos_url":"https://api.github.com/users/theforeman/repos","events_url":"https://api.github.com/users/theforeman/events{/privacy}","received_events_url":"https://api.github.com/users/theforeman/received_events","type":"Organization","site_admin":false},"repo":{"id":94547727,"node_id":"MDEwOlJlcG9zaXRvcnk5NDU0NzcyNw==","name":"foreman-ansible-modules","full_name":"theforeman/foreman-ansible-modules","private":false,"owner":{"login":"theforeman","id":1439844,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0Mzk4NDQ=","avatar_url":"https://avatars2.githubusercontent.com/u/1439844?v=4","gravatar_id":"","url":"https://api.github.com/users/theforeman","html_url":"https://github.com/theforeman","followers_url":"https://api.github.com/users/theforeman/followers","following_url":"https://api.github.com/users/theforeman/following{/other_user}","gists_url":"https://api.github.com/users/theforeman/gists{/gist_id}","starred_url":"https://api.github.com/users/theforeman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/theforeman/subscriptions","organizations_url":"https://api.github.com/users/theforeman/orgs","repos_url":"https://api.github.com/users/theforeman/repos","events_url":"https://api.github.com/users/theforeman/events{/privacy}","received_events_url":"https://api.github.com/users/theforeman/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/theforeman/foreman-ansible-modules","description":"Repository for Ansible modules that communicate with Foreman and plugin APIs","fork":false,"url":"https://api.github.com/repos/theforeman/foreman-ansible-modules","forks_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/forks","keys_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/keys{/key_id}","collaborators_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/teams","hooks_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/hooks","issue_events_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/issues/events{/number}","events_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/events","assignees_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/assignees{/user}","branches_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/branches{/branch}","tags_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/tags","blobs_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/git/refs{/sha}","trees_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/git/trees{/sha}","statuses_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/statuses/{sha}","languages_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/languages","stargazers_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/stargazers","contributors_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/contributors","subscribers_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/subscribers","subscription_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/subscription","commits_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/commits{/sha}","git_commits_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/git/commits{/sha}","comments_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/comments{/number}","issue_comment_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/issues/comments{/number}","contents_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/contents/{+path}","compare_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/compare/{base}...{head}","merges_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/merges","archive_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/downloads","issues_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/issues{/number}","pulls_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/pulls{/number}","milestones_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/milestones{/number}","notifications_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/labels{/name}","releases_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/releases{/id}","deployments_url":"https://api.github.com/repos/theforeman/foreman-ansible-modules/deployments","created_at":"2017-06-16T13:43:02Z","updated_at":"2019-12-19T13:28:40Z","pushed_at":"2019-12-19T13:28:38Z","git_url":"git://github.com/theforeman/foreman-ansible-modules.git","ssh_url":"git@github.com:theforeman/foreman-ansible-modules.git","clone_url":"https://github.com/theforeman/foreman-ansible-modules.git","svn_url":"https://github.com/theforeman/foreman-ansible-modules","homepage":null,"size":7420,"stargazers_count":66,"watchers_count":66,"language":"Python","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":58,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":48,"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":58,"open_issues":48,"watchers":66,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/theforeman/foreman-ansible-modules/pulls/610"},"html":{"href":"https://github.com/theforeman/foreman-ansible-modules/pull/610"},"issue":{"href":"https://api.github.com/repos/theforeman/foreman-ansible-modules/issues/610"},"comments":{"href":"https://api.github.com/repos/theforeman/foreman-ansible-modules/issues/610/comments"},"review_comments":{"href":"https://api.github.com/repos/theforeman/foreman-ansible-modules/pulls/610/comments"},"review_comment":{"href":"https://api.github.com/repos/theforeman/foreman-ansible-modules/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/theforeman/foreman-ansible-modules/pulls/610/commits"},"statuses":{"href":"https://api.github.com/repos/theforeman/foreman-ansible-modules/statuses/aed15c9a6d0c4c2429db4e310b9c2659889b8e16"}},"author_association":"MEMBER"}}
other: {"actor":{"display_login":"evgeni"}}