{"action":"created","comment":{"url":"https://api.github.com/repos/crowbar/crowbar-openstack/pulls/comments/70773128","id":70773128,"diff_hunk":"@@ -17,110 +17,66 @@\n # Recipe:: setup\n #\n \n+return if node['magnum']['trustee']['domain_id'] && node['magnum']['trustee']['domain_admin_id']\n+ \n keystone_settings = KeystoneHelper.keystone_settings(node, @cookbook_name)\n \n-trustee_domain_name = node[\"magnum\"][\"trustee\"][\"domain_name\"]\n-trustee_domain_admin = node[\"magnum\"][\"trustee\"][\"domain_admin_name\"]\n-trustee_domain_admin_password = node[\"magnum\"][\"trustee\"][\"domain_admin_password\"]\n+magnum_domain_name = node['magnum']['trustee']['domain_name']\n+magnum_domain_admin = node['magnum']['trustee']['domain_admin_name']\n+magnum_domain_admin_pass = node['magnum']['trustee']['domain_admin_password']\n \n # Install openstack and magnum client packages\n if %w(rhel suse).include?(node[:platform_family])\n-  [\"python-magnumclient\", \"python-openstackclient\"].each do |pkg|\n+  ['python-magnumclient', 'python-openstackclient'].each do |pkg|\n     package pkg\n   end\n end\n \n-insecure = keystone_settings[\"insecure\"] ? \"--insecure\" : \"\"\n-auth_url = \"#{keystone_settings[\"protocol\"]}://\"\\\n-           \"#{keystone_settings[\"internal_url_host\"]}:\"\\\n-           \"#{keystone_settings[\"service_port\"]}/v3\"\n-\n-domain_env = { \"OS_USERNAME\"             => keystone_settings[\"admin_user\"],\n-               \"OS_PASSWORD\"             => keystone_settings[\"admin_password\"],\n-               \"OS_TENANT_NAME\"          => keystone_settings[\"admin_tenant\"],\n-               \"OS_AUTH_URL\"             => auth_url,\n-               \"OS_REGION_NAME\"          => keystone_settings[\"endpoint_region\"],\n-               \"OS_IDENTITY_API_VERSION\" => \"3\" }\n-\n-bash \"register magnum domain\" do\n-  user \"root\"\n-  code <<-EOF\n-    # Find domain ID\n-    id=\n-    eval $(openstack #{insecure} \\\n-        domain show \\\n-        -f shell --variable id \\\n-        #{trustee_domain_name})\n-    MAGNUM_DOMAIN_ID=$id\n-\n-    if [ -z \"$MAGNUM_DOMAIN_ID\" ]; then\n-        id=\n-        eval $(openstack #{insecure} \\\n-            domain create \\\n-            -f shell --variable id \\\n-            --description \"Owns users and projects created by magnum\" \\\n-            #{trustee_domain_name})\n-        MAGNUM_DOMAIN_ID=$id\n-    fi\n-\n-    [ -n \"$MAGNUM_DOMAIN_ID\" ] || exit 1\n-\n-    id=\n-    eval $(openstack #{insecure} \\\n-        user show #{trustee_domain_admin} \\\n-        -f shell -c id --domain #{trustee_domain_name})\n-    MAGNUM_DOMAIN_ADMIN_ID=$id\n-\n-    if [ -z \"$MAGNUM_DOMAIN_ADMIN_ID\" ]; then\n-        id=\n-        eval $(openstack #{insecure} \\\n-            user create \\\n-            --domain #{trustee_domain_name} \\\n-            --or-show -f shell -c id #{trustee_domain_admin})\n-        MAGNUM_DOMAIN_ADMIN_ID=$id\n+insecure = keystone_settings['insecure'] ? \"--insecure\" : \"\"\n+auth_url = \"#{keystone_settings['protocol']}://\"\\\n+           \"#{keystone_settings['internal_url_host']}:\"\\\n+           \"#{keystone_settings['service_port']}/v3\"\n+\n+openstack_command = \"openstack --os-username #{keystone_settings['admin_user']}\"\n+openstack_command << \" --os-auth-type password --os-identity-api-version 3\"\n+openstack_command << \" --os-password #{keystone_settings['admin_password']}\"\n+openstack_command << \" --os-tenant-name #{keystone_settings['admin_tenant']}\"\n+openstack_command << \" --os-auth-url #{auth_url} #{insecure}\"\n+\n+get_magnum_domain_id = \"#{openstack_command} domain show #{magnum_domain_name} -f value -c id\"\n+magnum_domain_id = Mixlib::ShellOut.new(get_magnum_domain_id).run_command.stdout.chomp\n+\n+if magnum_domain_id.nil? || magnum_domain_id.empty?\n+  create_magnum_domain = \"#{openstack_command} domain create -f value -c id\"\n+  create_magnum_domain << ' --description \"Owns users and projects created by magnum\"'\n+  create_magnum_domain << \" #{magnum_domain_name}\"\n+  magnum_domain_id = Mixlib::ShellOut.new(create_magnum_domain).run_command.stdout.chomp\n+end\n \n-        openstack #{insecure} \\\n-            user set \\\n-            --password #{trustee_domain_admin_password} \\\n-            --description \"Manages users and projects created by magnum\" \\\n-            #{trustee_domain_admin}\n-    fi\n+get_magnum_domain_admin_id = \"#{openstack_command} user show #{magnum_domain_admin}\"\n+get_magnum_domain_admin_id << \" -f value -c id --domain #{magnum_domain_name}\"\n+magnum_domain_admin_id = Mixlib::ShellOut.new(get_magnum_domain_admin_id).run_command.stdout.chomp\n \n-    [ -n \"$MAGNUM_DOMAIN_ADMIN_ID\" ] || exit 1\n+if magnum_domain_admin_id.nil? || magnum_domain_admin_id.empty?\n+  create_magnum_domain_admin = \"#{openstack_command} user create --domain #{magnum_domain_name}\"\n+  create_magnum_domain_admin << \" --or-show -f value -c id #{magnum_domain_admin}\"\n+  magnum_domain_admin_id = Mixlib::ShellOut.new(create_magnum_domain_admin).run_command.stdout.chomp\n \n-    # Make domain user as admin for the role\n-    if ! openstack #{insecure} \\\n-            role list \\\n-            -f csv --column Name \\\n-            --domain $MAGNUM_DOMAIN_ID \\\n-            --user $MAGNUM_DOMAIN_ADMIN_ID \\\n-            | grep -q \\\"admin\\\"; then\n-        openstack #{insecure} \\\n-            role add \\\n-            --user $MAGNUM_DOMAIN_ADMIN_ID \\\n-            --domain $MAGNUM_DOMAIN_ID admin\n-    fi\n-  EOF\n-  environment domain_env\n+  set_magnum_domain_admin = \"#{openstack_command} user set --password #{magnum_domain_admin_pass}\"\n+  set_magnum_domain_admin << ' --description \"Manages users and projects created by magnum\"'\n+  set_magnum_domain_admin << \" #{magnum_domain_admin}\"\n+  Mixlib::ShellOut.new(set_magnum_domain_admin).run_command\n end\n \n-ruby_block \"Update node parameters\" do\n-  block do\n-    openstack_command = \"openstack --os-username #{keystone_settings[\"admin_user\"]}\"\n-    openstack_command << \" --os-auth-type password --os-identity-api-version 3\"\n-    openstack_command << \" --os-password #{keystone_settings[\"admin_password\"]}\"\n-    openstack_command << \" --os-tenant-name #{keystone_settings[\"admin_tenant\"]}\"\n-    openstack_command << \" --os-auth-url #{auth_url}\"\n-\n-    domain_id_cmd = \"#{openstack_command} domain show #{trustee_domain_name} -f value -c id\"\n-    trustee_domain_id = `#{domain_id_cmd}`.chomp\n-    admin_id_cmd = \"#{openstack_command} user show #{trustee_domain_admin}\"\n-    admin_id_cmd << \" -f value -c id --domain #{trustee_domain_name}\"\n-    trustee_domain_admin_id = `#{admin_id_cmd}`.chomp\n-\n-    node.set[:magnum][:trustee][:domain_id] = trustee_domain_id\n-    node.set[:magnum][:trustee][:domain_admin_id] = trustee_domain_admin_id\n+check_magnum_domain_role = \"#{openstack_command} role list -f csv --column Name\"\n+check_magnum_domain_role << \" --domain #{magnum_domain_id} --user #{magnum_domain_admin_id}\"\n+magnum_domain_role = Mixlib::ShellOut.new(check_magnum_domain_role).run_command.stdout\n \n-    node.save\n-  end\n+if magnum_domain_role.include? \"admin\"\n+  create_magnum_domain_role = \"#{openstack_command} role add --user #{magnum_domain_admin_id}\"\n+  create_magnum_domain_role << \" --domain #{magnum_domain_id} admin\"\n end\n+\n+node.set['magnum']['trustee']['domain_id'] = magnum_domain_id\n+node.set['magnum']['trustee']['domain_admin_id'] = magnum_domain_admin_id","path":"chef/cookbooks/magnum/recipes/setup.rb","position":156,"original_position":156,"commit_id":"0f131f2070721e07d3731e97ae9c3943281c66ba","original_commit_id":"0f131f2070721e07d3731e97ae9c3943281c66ba","user":{"login":"houndci-bot","id":6697940,"avatar_url":"https://avatars.githubusercontent.com/u/6697940?v=3","gravatar_id":"","url":"https://api.github.com/users/houndci-bot","html_url":"https://github.com/houndci-bot","followers_url":"https://api.github.com/users/houndci-bot/followers","following_url":"https://api.github.com/users/houndci-bot/following{/other_user}","gists_url":"https://api.github.com/users/houndci-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/houndci-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/houndci-bot/subscriptions","organizations_url":"https://api.github.com/users/houndci-bot/orgs","repos_url":"https://api.github.com/users/houndci-bot/repos","events_url":"https://api.github.com/users/houndci-bot/events{/privacy}","received_events_url":"https://api.github.com/users/houndci-bot/received_events","type":"User","site_admin":false},"body":"Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping. (https://github.com/SUSE/style-guides/blob/master/Ruby.md#stylestringliterals)","created_at":"2016-07-14T09:10:01Z","updated_at":"2016-07-14T09:10:01Z","html_url":"https://github.com/crowbar/crowbar-openstack/pull/448#discussion_r70773128","pull_request_url":"https://api.github.com/repos/crowbar/crowbar-openstack/pulls/448","_links":{"self":{"href":"https://api.github.com/repos/crowbar/crowbar-openstack/pulls/comments/70773128"},"html":{"href":"https://github.com/crowbar/crowbar-openstack/pull/448#discussion_r70773128"},"pull_request":{"href":"https://api.github.com/repos/crowbar/crowbar-openstack/pulls/448"}}},"pull_request":{"url":"https://api.github.com/repos/crowbar/crowbar-openstack/pulls/448","id":77422914,"html_url":"https://github.com/crowbar/crowbar-openstack/pull/448","diff_url":"https://github.com/crowbar/crowbar-openstack/pull/448.diff","patch_url":"https://github.com/crowbar/crowbar-openstack/pull/448.patch","issue_url":"https://api.github.com/repos/crowbar/crowbar-openstack/issues/448","number":448,"state":"open","locked":false,"title":"Re-write recipe for creating Magnum trustee domain","user":{"login":"mjura","id":4455471,"avatar_url":"https://avatars.githubusercontent.com/u/4455471?v=3","gravatar_id":"","url":"https://api.github.com/users/mjura","html_url":"https://github.com/mjura","followers_url":"https://api.github.com/users/mjura/followers","following_url":"https://api.github.com/users/mjura/following{/other_user}","gists_url":"https://api.github.com/users/mjura/gists{/gist_id}","starred_url":"https://api.github.com/users/mjura/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjura/subscriptions","organizations_url":"https://api.github.com/users/mjura/orgs","repos_url":"https://api.github.com/users/mjura/repos","events_url":"https://api.github.com/users/mjura/events{/privacy}","received_events_url":"https://api.github.com/users/mjura/received_events","type":"User","site_admin":false},"body":"During first run of chef-client options `trustee_domain_id`\r\nand `trustee_domain_admin_id` were not saved in magnum.conf.\r\nThis was bacuse of order chef resources for ruby_block,\r\nthese attributes were saved after chef-client run ends.","created_at":"2016-07-14T09:09:55Z","updated_at":"2016-07-14T09:10:02Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ef6b4101ed1de65c6978b616ac171aa18d989544","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/crowbar/crowbar-openstack/pulls/448/commits","review_comments_url":"https://api.github.com/repos/crowbar/crowbar-openstack/pulls/448/comments","review_comment_url":"https://api.github.com/repos/crowbar/crowbar-openstack/pulls/comments{/number}","comments_url":"https://api.github.com/repos/crowbar/crowbar-openstack/issues/448/comments","statuses_url":"https://api.github.com/repos/crowbar/crowbar-openstack/statuses/0f131f2070721e07d3731e97ae9c3943281c66ba","head":{"label":"mjura:magnum_trustee","ref":"magnum_trustee","sha":"0f131f2070721e07d3731e97ae9c3943281c66ba","user":{"login":"mjura","id":4455471,"avatar_url":"https://avatars.githubusercontent.com/u/4455471?v=3","gravatar_id":"","url":"https://api.github.com/users/mjura","html_url":"https://github.com/mjura","followers_url":"https://api.github.com/users/mjura/followers","following_url":"https://api.github.com/users/mjura/following{/other_user}","gists_url":"https://api.github.com/users/mjura/gists{/gist_id}","starred_url":"https://api.github.com/users/mjura/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjura/subscriptions","organizations_url":"https://api.github.com/users/mjura/orgs","repos_url":"https://api.github.com/users/mjura/repos","events_url":"https://api.github.com/users/mjura/events{/privacy}","received_events_url":"https://api.github.com/users/mjura/received_events","type":"User","site_admin":false},"repo":{"id":42586630,"name":"crowbar-openstack","full_name":"mjura/crowbar-openstack","owner":{"login":"mjura","id":4455471,"avatar_url":"https://avatars.githubusercontent.com/u/4455471?v=3","gravatar_id":"","url":"https://api.github.com/users/mjura","html_url":"https://github.com/mjura","followers_url":"https://api.github.com/users/mjura/followers","following_url":"https://api.github.com/users/mjura/following{/other_user}","gists_url":"https://api.github.com/users/mjura/gists{/gist_id}","starred_url":"https://api.github.com/users/mjura/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjura/subscriptions","organizations_url":"https://api.github.com/users/mjura/orgs","repos_url":"https://api.github.com/users/mjura/repos","events_url":"https://api.github.com/users/mjura/events{/privacy}","received_events_url":"https://api.github.com/users/mjura/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mjura/crowbar-openstack","description":"Openstack deployment for Crowbar","fork":true,"url":"https://api.github.com/repos/mjura/crowbar-openstack","forks_url":"https://api.github.com/repos/mjura/crowbar-openstack/forks","keys_url":"https://api.github.com/repos/mjura/crowbar-openstack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mjura/crowbar-openstack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mjura/crowbar-openstack/teams","hooks_url":"https://api.github.com/repos/mjura/crowbar-openstack/hooks","issue_events_url":"https://api.github.com/repos/mjura/crowbar-openstack/issues/events{/number}","events_url":"https://api.github.com/repos/mjura/crowbar-openstack/events","assignees_url":"https://api.github.com/repos/mjura/crowbar-openstack/assignees{/user}","branches_url":"https://api.github.com/repos/mjura/crowbar-openstack/branches{/branch}","tags_url":"https://api.github.com/repos/mjura/crowbar-openstack/tags","blobs_url":"https://api.github.com/repos/mjura/crowbar-openstack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mjura/crowbar-openstack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mjura/crowbar-openstack/git/refs{/sha}","trees_url":"https://api.github.com/repos/mjura/crowbar-openstack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mjura/crowbar-openstack/statuses/{sha}","languages_url":"https://api.github.com/repos/mjura/crowbar-openstack/languages","stargazers_url":"https://api.github.com/repos/mjura/crowbar-openstack/stargazers","contributors_url":"https://api.github.com/repos/mjura/crowbar-openstack/contributors","subscribers_url":"https://api.github.com/repos/mjura/crowbar-openstack/subscribers","subscription_url":"https://api.github.com/repos/mjura/crowbar-openstack/subscription","commits_url":"https://api.github.com/repos/mjura/crowbar-openstack/commits{/sha}","git_commits_url":"https://api.github.com/repos/mjura/crowbar-openstack/git/commits{/sha}","comments_url":"https://api.github.com/repos/mjura/crowbar-openstack/comments{/number}","issue_comment_url":"https://api.github.com/repos/mjura/crowbar-openstack/issues/comments{/number}","contents_url":"https://api.github.com/repos/mjura/crowbar-openstack/contents/{+path}","compare_url":"https://api.github.com/repos/mjura/crowbar-openstack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mjura/crowbar-openstack/merges","archive_url":"https://api.github.com/repos/mjura/crowbar-openstack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mjura/crowbar-openstack/downloads","issues_url":"https://api.github.com/repos/mjura/crowbar-openstack/issues{/number}","pulls_url":"https://api.github.com/repos/mjura/crowbar-openstack/pulls{/number}","milestones_url":"https://api.github.com/repos/mjura/crowbar-openstack/milestones{/number}","notifications_url":"https://api.github.com/repos/mjura/crowbar-openstack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mjura/crowbar-openstack/labels{/name}","releases_url":"https://api.github.com/repos/mjura/crowbar-openstack/releases{/id}","deployments_url":"https://api.github.com/repos/mjura/crowbar-openstack/deployments","created_at":"2015-09-16T12:48:05Z","updated_at":"2015-09-16T12:48:07Z","pushed_at":"2016-07-14T09:09:42Z","git_url":"git://github.com/mjura/crowbar-openstack.git","ssh_url":"git@github.com:mjura/crowbar-openstack.git","clone_url":"https://github.com/mjura/crowbar-openstack.git","svn_url":"https://github.com/mjura/crowbar-openstack","homepage":null,"size":16912,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"crowbar:master","ref":"master","sha":"8d97e64cef830175e802f52ce62fa2cab5441511","user":{"login":"crowbar","id":2910205,"avatar_url":"https://avatars.githubusercontent.com/u/2910205?v=3","gravatar_id":"","url":"https://api.github.com/users/crowbar","html_url":"https://github.com/crowbar","followers_url":"https://api.github.com/users/crowbar/followers","following_url":"https://api.github.com/users/crowbar/following{/other_user}","gists_url":"https://api.github.com/users/crowbar/gists{/gist_id}","starred_url":"https://api.github.com/users/crowbar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/crowbar/subscriptions","organizations_url":"https://api.github.com/users/crowbar/orgs","repos_url":"https://api.github.com/users/crowbar/repos","events_url":"https://api.github.com/users/crowbar/events{/privacy}","received_events_url":"https://api.github.com/users/crowbar/received_events","type":"Organization","site_admin":false},"repo":{"id":39006903,"name":"crowbar-openstack","full_name":"crowbar/crowbar-openstack","owner":{"login":"crowbar","id":2910205,"avatar_url":"https://avatars.githubusercontent.com/u/2910205?v=3","gravatar_id":"","url":"https://api.github.com/users/crowbar","html_url":"https://github.com/crowbar","followers_url":"https://api.github.com/users/crowbar/followers","following_url":"https://api.github.com/users/crowbar/following{/other_user}","gists_url":"https://api.github.com/users/crowbar/gists{/gist_id}","starred_url":"https://api.github.com/users/crowbar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/crowbar/subscriptions","organizations_url":"https://api.github.com/users/crowbar/orgs","repos_url":"https://api.github.com/users/crowbar/repos","events_url":"https://api.github.com/users/crowbar/events{/privacy}","received_events_url":"https://api.github.com/users/crowbar/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/crowbar/crowbar-openstack","description":"Openstack deployment for Crowbar","fork":false,"url":"https://api.github.com/repos/crowbar/crowbar-openstack","forks_url":"https://api.github.com/repos/crowbar/crowbar-openstack/forks","keys_url":"https://api.github.com/repos/crowbar/crowbar-openstack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/crowbar/crowbar-openstack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/crowbar/crowbar-openstack/teams","hooks_url":"https://api.github.com/repos/crowbar/crowbar-openstack/hooks","issue_events_url":"https://api.github.com/repos/crowbar/crowbar-openstack/issues/events{/number}","events_url":"https://api.github.com/repos/crowbar/crowbar-openstack/events","assignees_url":"https://api.github.com/repos/crowbar/crowbar-openstack/assignees{/user}","branches_url":"https://api.github.com/repos/crowbar/crowbar-openstack/branches{/branch}","tags_url":"https://api.github.com/repos/crowbar/crowbar-openstack/tags","blobs_url":"https://api.github.com/repos/crowbar/crowbar-openstack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/crowbar/crowbar-openstack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/crowbar/crowbar-openstack/git/refs{/sha}","trees_url":"https://api.github.com/repos/crowbar/crowbar-openstack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/crowbar/crowbar-openstack/statuses/{sha}","languages_url":"https://api.github.com/repos/crowbar/crowbar-openstack/languages","stargazers_url":"https://api.github.com/repos/crowbar/crowbar-openstack/stargazers","contributors_url":"https://api.github.com/repos/crowbar/crowbar-openstack/contributors","subscribers_url":"https://api.github.com/repos/crowbar/crowbar-openstack/subscribers","subscription_url":"https://api.github.com/repos/crowbar/crowbar-openstack/subscription","commits_url":"https://api.github.com/repos/crowbar/crowbar-openstack/commits{/sha}","git_commits_url":"https://api.github.com/repos/crowbar/crowbar-openstack/git/commits{/sha}","comments_url":"https://api.github.com/repos/crowbar/crowbar-openstack/comments{/number}","issue_comment_url":"https://api.github.com/repos/crowbar/crowbar-openstack/issues/comments{/number}","contents_url":"https://api.github.com/repos/crowbar/crowbar-openstack/contents/{+path}","compare_url":"https://api.github.com/repos/crowbar/crowbar-openstack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/crowbar/crowbar-openstack/merges","archive_url":"https://api.github.com/repos/crowbar/crowbar-openstack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/crowbar/crowbar-openstack/downloads","issues_url":"https://api.github.com/repos/crowbar/crowbar-openstack/issues{/number}","pulls_url":"https://api.github.com/repos/crowbar/crowbar-openstack/pulls{/number}","milestones_url":"https://api.github.com/repos/crowbar/crowbar-openstack/milestones{/number}","notifications_url":"https://api.github.com/repos/crowbar/crowbar-openstack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/crowbar/crowbar-openstack/labels{/name}","releases_url":"https://api.github.com/repos/crowbar/crowbar-openstack/releases{/id}","deployments_url":"https://api.github.com/repos/crowbar/crowbar-openstack/deployments","created_at":"2015-07-13T10:55:33Z","updated_at":"2016-01-11T12:29:07Z","pushed_at":"2016-07-14T09:09:55Z","git_url":"git://github.com/crowbar/crowbar-openstack.git","ssh_url":"git@github.com:crowbar/crowbar-openstack.git","clone_url":"https://github.com/crowbar/crowbar-openstack.git","svn_url":"https://github.com/crowbar/crowbar-openstack","homepage":null,"size":17413,"stargazers_count":2,"watchers_count":2,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":31,"mirror_url":null,"open_issues_count":33,"forks":31,"open_issues":33,"watchers":2,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/crowbar/crowbar-openstack/pulls/448"},"html":{"href":"https://github.com/crowbar/crowbar-openstack/pull/448"},"issue":{"href":"https://api.github.com/repos/crowbar/crowbar-openstack/issues/448"},"comments":{"href":"https://api.github.com/repos/crowbar/crowbar-openstack/issues/448/comments"},"review_comments":{"href":"https://api.github.com/repos/crowbar/crowbar-openstack/pulls/448/comments"},"review_comment":{"href":"https://api.github.com/repos/crowbar/crowbar-openstack/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/crowbar/crowbar-openstack/pulls/448/commits"},"statuses":{"href":"https://api.github.com/repos/crowbar/crowbar-openstack/statuses/0f131f2070721e07d3731e97ae9c3943281c66ba"}}}}
{"actor":{"display_login":"houndci-bot"}}