{"action":"created","comment":{"url":"https://api.github.com/repos/SUSE/ceph/pulls/comments/237089665","pull_request_review_id":179302834,"id":237089665,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzNzA4OTY2NQ==","diff_hunk":"@@ -38,6 +39,163 @@ def copy_directory_recursively(from_path, to_remote, to_path=None):\n             from_path=from_path, host=to_remote.name, to_path=to_path))\n \n \n+def introspect_roles(ctx, logger, quiet=True):\n+    \"\"\"\n+    Creates the following keys in ctx:\n+\n+        nodes,\n+        nodes_client_only,\n+        nodes_cluster,\n+        nodes_gateway,\n+        nodes_storage, and\n+        nodes_storage_only.\n+\n+    These are all simple lists of hostnames.\n+\n+    Also creates\n+\n+        ctx['remotes'],\n+\n+    which is a dict of teuthology \"remote\" objects, which look like this:\n+\n+        { remote1_name: remote1_obj, ..., remoten_name: remoten_obj }\n+\n+    Also creates\n+\n+        ctx['role_types']\n+\n+    which is just like the \"roles\" list, except it contains only unique\n+    role types per node.\n+\n+    Finally, creates:\n+\n+        ctx['role_lookup_table']\n+\n+    which will look something like this:\n+\n+        {\n+            \"osd\": { \"osd.0\": osd0remname, ..., \"osd.n\": osdnremname },\n+            \"mon\": { \"mon.a\": monaremname, ..., \"mon.n\": monnremname },\n+            ...\n+        }\n+\n+    and\n+\n+        ctx['remote_lookup_table']\n+\n+    which looks like this:\n+\n+        {\n+            remote0name: [ \"osd.0\", \"client.0\" ],\n+            ...\n+            remotenname: [ remotenrole0, ..., remotenrole99 ],\n+        }\n+\n+    (In other words, remote_lookup_table is just like the roles\n+    stanza, except the role lists are keyed by remote name.)\n+    \"\"\"\n+    # initialization phase\n+    cluster_roles = ['mon', 'mgr', 'osd', 'mds']\n+    non_storage_cluster_roles = ['mon', 'mgr', 'mds']\n+    gateway_roles = ['rgw', 'igw', 'ganesha']\n+    roles = ctx.config['roles']\n+    nodes = []\n+    nodes_client_only = []\n+    nodes_cluster = []\n+    non_storage_cluster_nodes = []\n+    nodes_gateway = []\n+    nodes_storage = []\n+    nodes_storage_only = []\n+    remotes = {}\n+    role_types = []\n+    role_lookup_table = {}\n+    remote_lookup_table = {}\n+    # introspection phase\n+    idx = 0\n+    for node_roles_list in roles:\n+        assert isinstance(node_roles_list, list), \\\n+            \"node_roles_list is a list\"\n+        assert node_roles_list, \"node_roles_list is not empty\"\n+        remote = get_remote_for_role(ctx, node_roles_list[0])\n+        role_types.append([])\n+        if not quiet:\n+            logger.debug(\"Considering remote name {}, hostname {}\"\n+                         .format(remote.name, remote.hostname))\n+        nodes += [remote.hostname]\n+        remotes[remote.hostname] = remote\n+        remote_lookup_table[remote.hostname] = node_roles_list\n+        # inner loop: roles (something like \"osd.1\" or \"c2.mon.a\")\n+        for role in node_roles_list:\n+            # FIXME: support multiple clusters as used in, e.g.,\n+            # rgw/multisite suite\n+            role_arr = role.split('.')\n+            if len(role_arr) != 2:\n+                raise ConfigError(\"Unsupported role ->{}<-\"\n+                                  .format(role))\n+            (role_type, _) = role_arr\n+            if role_type not in role_lookup_table:\n+                role_lookup_table[role_type] = {}\n+            role_lookup_table[role_type][role] = remote.hostname\n+            if role_type in cluster_roles:\n+                nodes_cluster += [remote.hostname]\n+            if role_type in gateway_roles:\n+                nodes_gateway += [remote.hostname]\n+            if role_type in non_storage_cluster_roles:\n+                non_storage_cluster_nodes += [remote.hostname]\n+            if role_type == 'osd':\n+                nodes_storage += [remote.hostname]\n+            if role_type not in role_types[idx]:\n+                role_types[idx] += [role_type]\n+        idx += 1\n+    nodes_cluster = list(set(nodes_cluster))\n+    nodes_gateway = list(set(nodes_gateway))\n+    nodes_storage = list(set(nodes_storage))\n+    nodes_storage_only = []\n+    for node in nodes_storage:\n+        if node not in non_storage_cluster_nodes:\n+            if node not in nodes_gateway:\n+                nodes_storage_only += [node]\n+    nodes_client_only = list(\n+        set(nodes).difference(set(nodes_cluster).union(set(nodes_gateway)))\n+        )\n+    if not quiet:\n+        logger.debug(\"nodes_client_only is ->{}<-\".format(nodes_client_only))\n+    assign_vars = [\n+        'nodes',\n+        'nodes_client_only',\n+        'nodes_cluster',\n+        'nodes_gateway',\n+        'nodes_storage',\n+        'nodes_storage_only',\n+        'remote_lookup_table',\n+        'remotes',\n+        'role_lookup_table',\n+        'role_types',\n+        ]\n+    for var in assign_vars:\n+        exec(\"ctx['{var}'] = {var}\".format(var=var))\n+    ctx['dev_env'] = True if len(nodes_cluster) < 4 else False\n+    if not quiet:\n+        # report phase\n+        logger.info(\"ROLE INTROSPECTION REPORT\")\n+        report_vars = assign_vars + ['dev_env']\n+        for var in report_vars:\n+            logger.info(\"{} == {}\".format(var, ctx[var]))\n+\n+\n+def remote_run_script_as_root(remote, path, data, args=None):","path":"qa/tasks/util/__init__.py","position":154,"original_position":154,"commit_id":"89e4781a030f26d6908cde8b38b6a19f620b75f7","original_commit_id":"89e4781a030f26d6908cde8b38b6a19f620b75f7","user":{"login":"kshtsk","id":5054477,"node_id":"MDQ6VXNlcjUwNTQ0Nzc=","avatar_url":"https://avatars3.githubusercontent.com/u/5054477?v=4","gravatar_id":"","url":"https://api.github.com/users/kshtsk","html_url":"https://github.com/kshtsk","followers_url":"https://api.github.com/users/kshtsk/followers","following_url":"https://api.github.com/users/kshtsk/following{/other_user}","gists_url":"https://api.github.com/users/kshtsk/gists{/gist_id}","starred_url":"https://api.github.com/users/kshtsk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kshtsk/subscriptions","organizations_url":"https://api.github.com/users/kshtsk/orgs","repos_url":"https://api.github.com/users/kshtsk/repos","events_url":"https://api.github.com/users/kshtsk/events{/privacy}","received_events_url":"https://api.github.com/users/kshtsk/received_events","type":"User","site_admin":false},"body":"This can be replaced with remote.sh_file(data, sudo=True)","created_at":"2018-11-28T13:48:11Z","updated_at":"2018-11-28T13:48:11Z","html_url":"https://github.com/SUSE/ceph/pull/247#discussion_r237089665","pull_request_url":"https://api.github.com/repos/SUSE/ceph/pulls/247","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/SUSE/ceph/pulls/comments/237089665"},"html":{"href":"https://github.com/SUSE/ceph/pull/247#discussion_r237089665"},"pull_request":{"href":"https://api.github.com/repos/SUSE/ceph/pulls/247"}}},"pull_request":{"url":"https://api.github.com/repos/SUSE/ceph/pulls/247","id":234264382,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM0MjY0Mzgy","html_url":"https://github.com/SUSE/ceph/pull/247","diff_url":"https://github.com/SUSE/ceph/pull/247.diff","patch_url":"https://github.com/SUSE/ceph/pull/247.patch","issue_url":"https://api.github.com/repos/SUSE/ceph/issues/247","number":247,"state":"open","locked":false,"title":"[SES5] qa/deepsea: optimize scripts, introduce state subtask","user":{"login":"smithfarm","id":3974844,"node_id":"MDQ6VXNlcjM5NzQ4NDQ=","avatar_url":"https://avatars2.githubusercontent.com/u/3974844?v=4","gravatar_id":"","url":"https://api.github.com/users/smithfarm","html_url":"https://github.com/smithfarm","followers_url":"https://api.github.com/users/smithfarm/followers","following_url":"https://api.github.com/users/smithfarm/following{/other_user}","gists_url":"https://api.github.com/users/smithfarm/gists{/gist_id}","starred_url":"https://api.github.com/users/smithfarm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smithfarm/subscriptions","organizations_url":"https://api.github.com/users/smithfarm/orgs","repos_url":"https://api.github.com/users/smithfarm/repos","events_url":"https://api.github.com/users/smithfarm/events{/privacy}","received_events_url":"https://api.github.com/users/smithfarm/received_events","type":"User","site_admin":false},"body":"This brings SES5 qa/deepsea up to breast with current state of SES6.\r\n\r\nPreparation for SES5->6 upgrade test.","created_at":"2018-11-28T12:49:01Z","updated_at":"2018-11-28T13:48:11Z","closed_at":null,"merged_at":null,"merge_commit_sha":"58edd5e3a5758b9a87dcd4c9467029bf918628e1","assignee":null,"assignees":[],"requested_reviewers":[{"login":"jschmid1","id":6840312,"node_id":"MDQ6VXNlcjY4NDAzMTI=","avatar_url":"https://avatars0.githubusercontent.com/u/6840312?v=4","gravatar_id":"","url":"https://api.github.com/users/jschmid1","html_url":"https://github.com/jschmid1","followers_url":"https://api.github.com/users/jschmid1/followers","following_url":"https://api.github.com/users/jschmid1/following{/other_user}","gists_url":"https://api.github.com/users/jschmid1/gists{/gist_id}","starred_url":"https://api.github.com/users/jschmid1/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jschmid1/subscriptions","organizations_url":"https://api.github.com/users/jschmid1/orgs","repos_url":"https://api.github.com/users/jschmid1/repos","events_url":"https://api.github.com/users/jschmid1/events{/privacy}","received_events_url":"https://api.github.com/users/jschmid1/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":{"url":"https://api.github.com/repos/SUSE/ceph/milestones/3","html_url":"https://github.com/SUSE/ceph/milestone/3","labels_url":"https://api.github.com/repos/SUSE/ceph/milestones/3/labels","id":3162025,"node_id":"MDk6TWlsZXN0b25lMzE2MjAyNQ==","number":3,"title":"ses5","description":null,"creator":{"login":"l-mb","id":1162196,"node_id":"MDQ6VXNlcjExNjIxOTY=","avatar_url":"https://avatars2.githubusercontent.com/u/1162196?v=4","gravatar_id":"","url":"https://api.github.com/users/l-mb","html_url":"https://github.com/l-mb","followers_url":"https://api.github.com/users/l-mb/followers","following_url":"https://api.github.com/users/l-mb/following{/other_user}","gists_url":"https://api.github.com/users/l-mb/gists{/gist_id}","starred_url":"https://api.github.com/users/l-mb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/l-mb/subscriptions","organizations_url":"https://api.github.com/users/l-mb/orgs","repos_url":"https://api.github.com/users/l-mb/repos","events_url":"https://api.github.com/users/l-mb/events{/privacy}","received_events_url":"https://api.github.com/users/l-mb/received_events","type":"User","site_admin":false},"open_issues":3,"closed_issues":6,"state":"open","created_at":"2018-03-05T13:52:33Z","updated_at":"2018-11-28T12:49:01Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/SUSE/ceph/pulls/247/commits","review_comments_url":"https://api.github.com/repos/SUSE/ceph/pulls/247/comments","review_comment_url":"https://api.github.com/repos/SUSE/ceph/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SUSE/ceph/issues/247/comments","statuses_url":"https://api.github.com/repos/SUSE/ceph/statuses/89e4781a030f26d6908cde8b38b6a19f620b75f7","head":{"label":"SUSE:wip-qa-ses5-state","ref":"wip-qa-ses5-state","sha":"89e4781a030f26d6908cde8b38b6a19f620b75f7","user":{"login":"SUSE","id":1067733,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwNjc3MzM=","avatar_url":"https://avatars0.githubusercontent.com/u/1067733?v=4","gravatar_id":"","url":"https://api.github.com/users/SUSE","html_url":"https://github.com/SUSE","followers_url":"https://api.github.com/users/SUSE/followers","following_url":"https://api.github.com/users/SUSE/following{/other_user}","gists_url":"https://api.github.com/users/SUSE/gists{/gist_id}","starred_url":"https://api.github.com/users/SUSE/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SUSE/subscriptions","organizations_url":"https://api.github.com/users/SUSE/orgs","repos_url":"https://api.github.com/users/SUSE/repos","events_url":"https://api.github.com/users/SUSE/events{/privacy}","received_events_url":"https://api.github.com/users/SUSE/received_events","type":"Organization","site_admin":false},"repo":{"id":20325897,"node_id":"MDEwOlJlcG9zaXRvcnkyMDMyNTg5Nw==","name":"ceph","full_name":"SUSE/ceph","private":false,"owner":{"login":"SUSE","id":1067733,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwNjc3MzM=","avatar_url":"https://avatars0.githubusercontent.com/u/1067733?v=4","gravatar_id":"","url":"https://api.github.com/users/SUSE","html_url":"https://github.com/SUSE","followers_url":"https://api.github.com/users/SUSE/followers","following_url":"https://api.github.com/users/SUSE/following{/other_user}","gists_url":"https://api.github.com/users/SUSE/gists{/gist_id}","starred_url":"https://api.github.com/users/SUSE/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SUSE/subscriptions","organizations_url":"https://api.github.com/users/SUSE/orgs","repos_url":"https://api.github.com/users/SUSE/repos","events_url":"https://api.github.com/users/SUSE/events{/privacy}","received_events_url":"https://api.github.com/users/SUSE/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/SUSE/ceph","description":"Ceph is a distributed object, block, and file storage platform ","fork":true,"url":"https://api.github.com/repos/SUSE/ceph","forks_url":"https://api.github.com/repos/SUSE/ceph/forks","keys_url":"https://api.github.com/repos/SUSE/ceph/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SUSE/ceph/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SUSE/ceph/teams","hooks_url":"https://api.github.com/repos/SUSE/ceph/hooks","issue_events_url":"https://api.github.com/repos/SUSE/ceph/issues/events{/number}","events_url":"https://api.github.com/repos/SUSE/ceph/events","assignees_url":"https://api.github.com/repos/SUSE/ceph/assignees{/user}","branches_url":"https://api.github.com/repos/SUSE/ceph/branches{/branch}","tags_url":"https://api.github.com/repos/SUSE/ceph/tags","blobs_url":"https://api.github.com/repos/SUSE/ceph/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SUSE/ceph/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SUSE/ceph/git/refs{/sha}","trees_url":"https://api.github.com/repos/SUSE/ceph/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SUSE/ceph/statuses/{sha}","languages_url":"https://api.github.com/repos/SUSE/ceph/languages","stargazers_url":"https://api.github.com/repos/SUSE/ceph/stargazers","contributors_url":"https://api.github.com/repos/SUSE/ceph/contributors","subscribers_url":"https://api.github.com/repos/SUSE/ceph/subscribers","subscription_url":"https://api.github.com/repos/SUSE/ceph/subscription","commits_url":"https://api.github.com/repos/SUSE/ceph/commits{/sha}","git_commits_url":"https://api.github.com/repos/SUSE/ceph/git/commits{/sha}","comments_url":"https://api.github.com/repos/SUSE/ceph/comments{/number}","issue_comment_url":"https://api.github.com/repos/SUSE/ceph/issues/comments{/number}","contents_url":"https://api.github.com/repos/SUSE/ceph/contents/{+path}","compare_url":"https://api.github.com/repos/SUSE/ceph/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SUSE/ceph/merges","archive_url":"https://api.github.com/repos/SUSE/ceph/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SUSE/ceph/downloads","issues_url":"https://api.github.com/repos/SUSE/ceph/issues{/number}","pulls_url":"https://api.github.com/repos/SUSE/ceph/pulls{/number}","milestones_url":"https://api.github.com/repos/SUSE/ceph/milestones{/number}","notifications_url":"https://api.github.com/repos/SUSE/ceph/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SUSE/ceph/labels{/name}","releases_url":"https://api.github.com/repos/SUSE/ceph/releases{/id}","deployments_url":"https://api.github.com/repos/SUSE/ceph/deployments","created_at":"2014-05-30T10:29:18Z","updated_at":"2018-11-06T11:16:06Z","pushed_at":"2018-11-28T13:17:22Z","git_url":"git://github.com/SUSE/ceph.git","ssh_url":"git@github.com:SUSE/ceph.git","clone_url":"https://github.com/SUSE/ceph.git","svn_url":"https://github.com/SUSE/ceph","homepage":"http://ceph.com","size":398717,"stargazers_count":12,"watchers_count":12,"language":"C++","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":15,"mirror_url":null,"archived":false,"open_issues_count":7,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":15,"open_issues":7,"watchers":12,"default_branch":"master"}},"base":{"label":"SUSE:ses5","ref":"ses5","sha":"ec1b73260a88aff607ddbc64f99b2bc3f052c064","user":{"login":"SUSE","id":1067733,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwNjc3MzM=","avatar_url":"https://avatars0.githubusercontent.com/u/1067733?v=4","gravatar_id":"","url":"https://api.github.com/users/SUSE","html_url":"https://github.com/SUSE","followers_url":"https://api.github.com/users/SUSE/followers","following_url":"https://api.github.com/users/SUSE/following{/other_user}","gists_url":"https://api.github.com/users/SUSE/gists{/gist_id}","starred_url":"https://api.github.com/users/SUSE/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SUSE/subscriptions","organizations_url":"https://api.github.com/users/SUSE/orgs","repos_url":"https://api.github.com/users/SUSE/repos","events_url":"https://api.github.com/users/SUSE/events{/privacy}","received_events_url":"https://api.github.com/users/SUSE/received_events","type":"Organization","site_admin":false},"repo":{"id":20325897,"node_id":"MDEwOlJlcG9zaXRvcnkyMDMyNTg5Nw==","name":"ceph","full_name":"SUSE/ceph","private":false,"owner":{"login":"SUSE","id":1067733,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwNjc3MzM=","avatar_url":"https://avatars0.githubusercontent.com/u/1067733?v=4","gravatar_id":"","url":"https://api.github.com/users/SUSE","html_url":"https://github.com/SUSE","followers_url":"https://api.github.com/users/SUSE/followers","following_url":"https://api.github.com/users/SUSE/following{/other_user}","gists_url":"https://api.github.com/users/SUSE/gists{/gist_id}","starred_url":"https://api.github.com/users/SUSE/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SUSE/subscriptions","organizations_url":"https://api.github.com/users/SUSE/orgs","repos_url":"https://api.github.com/users/SUSE/repos","events_url":"https://api.github.com/users/SUSE/events{/privacy}","received_events_url":"https://api.github.com/users/SUSE/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/SUSE/ceph","description":"Ceph is a distributed object, block, and file storage platform ","fork":true,"url":"https://api.github.com/repos/SUSE/ceph","forks_url":"https://api.github.com/repos/SUSE/ceph/forks","keys_url":"https://api.github.com/repos/SUSE/ceph/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SUSE/ceph/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SUSE/ceph/teams","hooks_url":"https://api.github.com/repos/SUSE/ceph/hooks","issue_events_url":"https://api.github.com/repos/SUSE/ceph/issues/events{/number}","events_url":"https://api.github.com/repos/SUSE/ceph/events","assignees_url":"https://api.github.com/repos/SUSE/ceph/assignees{/user}","branches_url":"https://api.github.com/repos/SUSE/ceph/branches{/branch}","tags_url":"https://api.github.com/repos/SUSE/ceph/tags","blobs_url":"https://api.github.com/repos/SUSE/ceph/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SUSE/ceph/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SUSE/ceph/git/refs{/sha}","trees_url":"https://api.github.com/repos/SUSE/ceph/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SUSE/ceph/statuses/{sha}","languages_url":"https://api.github.com/repos/SUSE/ceph/languages","stargazers_url":"https://api.github.com/repos/SUSE/ceph/stargazers","contributors_url":"https://api.github.com/repos/SUSE/ceph/contributors","subscribers_url":"https://api.github.com/repos/SUSE/ceph/subscribers","subscription_url":"https://api.github.com/repos/SUSE/ceph/subscription","commits_url":"https://api.github.com/repos/SUSE/ceph/commits{/sha}","git_commits_url":"https://api.github.com/repos/SUSE/ceph/git/commits{/sha}","comments_url":"https://api.github.com/repos/SUSE/ceph/comments{/number}","issue_comment_url":"https://api.github.com/repos/SUSE/ceph/issues/comments{/number}","contents_url":"https://api.github.com/repos/SUSE/ceph/contents/{+path}","compare_url":"https://api.github.com/repos/SUSE/ceph/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SUSE/ceph/merges","archive_url":"https://api.github.com/repos/SUSE/ceph/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SUSE/ceph/downloads","issues_url":"https://api.github.com/repos/SUSE/ceph/issues{/number}","pulls_url":"https://api.github.com/repos/SUSE/ceph/pulls{/number}","milestones_url":"https://api.github.com/repos/SUSE/ceph/milestones{/number}","notifications_url":"https://api.github.com/repos/SUSE/ceph/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SUSE/ceph/labels{/name}","releases_url":"https://api.github.com/repos/SUSE/ceph/releases{/id}","deployments_url":"https://api.github.com/repos/SUSE/ceph/deployments","created_at":"2014-05-30T10:29:18Z","updated_at":"2018-11-06T11:16:06Z","pushed_at":"2018-11-28T13:17:22Z","git_url":"git://github.com/SUSE/ceph.git","ssh_url":"git@github.com:SUSE/ceph.git","clone_url":"https://github.com/SUSE/ceph.git","svn_url":"https://github.com/SUSE/ceph","homepage":"http://ceph.com","size":398717,"stargazers_count":12,"watchers_count":12,"language":"C++","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":15,"mirror_url":null,"archived":false,"open_issues_count":7,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":15,"open_issues":7,"watchers":12,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/SUSE/ceph/pulls/247"},"html":{"href":"https://github.com/SUSE/ceph/pull/247"},"issue":{"href":"https://api.github.com/repos/SUSE/ceph/issues/247"},"comments":{"href":"https://api.github.com/repos/SUSE/ceph/issues/247/comments"},"review_comments":{"href":"https://api.github.com/repos/SUSE/ceph/pulls/247/comments"},"review_comment":{"href":"https://api.github.com/repos/SUSE/ceph/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SUSE/ceph/pulls/247/commits"},"statuses":{"href":"https://api.github.com/repos/SUSE/ceph/statuses/89e4781a030f26d6908cde8b38b6a19f620b75f7"}},"author_association":"NONE"}}
{"actor":{"display_login":"kshtsk"}}