{"action":"created","comment":{"url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/pulls/comments/46778255","id":46778255,"diff_hunk":"@@ -0,0 +1,264 @@\n+---\n+layout: toc-page\n+title: Customizing Spinnaker Configuration\n+id: customizing_spinnaker\n+lang: en\n+---\n+\n+* Table of contents. This line is required to start the list.\n+{:toc}\n+\n+# Custom Configuring a Spinnaker Deployment\n+\n+This document provides an overview of how Spinnaker is configured and\n+how to customize it for your particular deployment.\n+\n+\n+## Overview of Spinnaker Configuration\n+\n+Spinnaker is composed of multiple systems, each of which can be configured\n+independently. In order to facilitate system-wide configuration, there is\n+a master configuration file that provides the key parameters from a global\n+spinnaker perspective, which should meet most typical needs.\n+\n+Spinnaker uses Spring to configure itself. Technically this means that\n+there are lots of different ways and places to configure Spinnaker. However,\n+it is not necessary to worry about the intracacies and details of Spring,\n+nor will this guide discuss Spring or its mechanics other than mentioning\n+that approaching the Spring dimension can offer additional techniques not\n+addressed in this guide.\n+\n+\n+### Types of configuration files\n+\n+The complete realm of configuration possibilities spans a lot of files\n+in a lot of locations. For practical purposes the critical files you will\n+be concerned with are:\n+* Spinnaker's default `*.yml` files in `/opt/spinnaker/config`\n+* Your customized `*-local.yml` files in `$HOME/.spinnaker`\n+* Provider platform credential files you provide and deposit, typically\n+  under `$HOME` but may vary depending on what the credentials are for.\n+* The default installation of Spinnaker will run as the user `spinnaker`,\n+  whose `$HOME` is `/home/spinnaker`.\n+\n+\n+### About notation used within the YAML files\n+\n+The YAML files define hierarchical name value pairs. The values can be indirect\n+using the notation `${property}` or `${property:default}` where\n+`property` is the name of the property whose value is being referenced and\n+`default`, if provided, is the value to use if `*property*` cannot be found.\n+Technically, the *property* uses Spring to resolve the value. But in practice\n+these will usually resolve to properties specified elsewhere in the YAML or\n+as environment variables. By convention, environment variables are typically\n+upper case and separated with underscores\n+(e.g. `SOME_ENV_VAR`) as opposed to other properties within the yaml\n+that are lower case and separated with dots (e.g. `domain.component.attribute`)\n+\n+The standard practice within Spinnaker is that the *subsystem*`.yml` files\n+will specify their configuration by referencing properties defined in\n+`spinnaker.yml` for standard system-wide values and policies, and inline literal\n+values for values that are local, encapsulated, or non-standard overrides.\n+\n+The `spinnaker.yml` file defines two hierarchies of properties (described later),\n+neither of which are directly used to configure the systems. Rather these are\n+used for those system configurations to reference to explicitly acknowledge how\n+and where they are using the standard configuration values, since they always\n+include the `spinnaker.yml`. In other words, you can completely rewrite the\n+*system*`.yml` files and forget about `spinnaker.yml`, however this will become\n+tedious to maintain in a consistent way.\n+\n+### About the different YAML files\n+\n+The YAML configuration files are named *system*`.yml` where system is\n+`spinnaker` or one of its subsystems (as described later).\n+By default they are located in `/opt/spinnaker/config`. However, there is a\n+default search path used to look for files. The gist is that each subsystem\n+looks in the directories `/opt/spinnaker/config` and\n+`$HOME/.spinnaker` for files named either `spinnaker.yml`, *subsystem*`.yml`,\n+`spinnaker-local.yml`, or *subsystem*`-local.yml`.\n+\n+By convention the `-local.yml` files override standard configuration to\n+customize the local deployment, thus these are the preferred files you will\n+be editing. The undecorated yml files are intended to be the standard default\n+configuration shipped with each Spinnaker release. Since `-local` files are\n+specific deployment customizations, Spinnaker does not ship with any. And since\n+it does not ship with any, your files will be preserved without conflict when\n+you update Spinnaker in the future, and the default configuration files should\n+be easy to update to the future version since they were never modified.\n+\n+The files are included in a particular order where individual properties in\n+later files will override the entries in earlier files. If some properties\n+are overriden but not others, then all the properties will still be present\n+but their values will have come from different files.\n+\n+Files are included in the following order:\n+\n+* Directories\n+  1. `/opt/spinnaker/config/`\n+  2. `$HOME/.spinnaker/`\n+\n+* Files within those directories:\n+  1. `spinnaker.yml`\n+  2. *subsystem*`.yml`\n+  3. *subsystem*`-local.yml`\n+\n+The takeaway is that the `-local` files you put in\n+`$HOME/.spinnaker` will have higher precedence than the system files\n+that ship in `/opt/spinnaker/config`.\n+\n+\n+### Anatomy of YAML files\n+\n+As noted earlier, each Spinnaker subsystem loads both the `spinnaker.yml` and\n+*subsystem*`.yml` files (and their `-local.yml` overrides). This means that every\n+subsystem will be loading the same `spinnaker.yml` file plus a unique\n+*subsystem*`.yml`, where the unique file has higher precedence.\n+By convention, the unique *subsystem*`.yml` file defines all the configuration\n+parameters that the subsystem uses, but sets their values indirectly from the\n+standard systemwide values maintained in `spinnaker.yml`.\n+\n+\n+## Enumeration of YAML configuration files\n+\n+**spinnaker.yml**\n+\n+The `spinnaker.yml` contains two hierarchies of properties.\n+\n+1. `provider` is used for provider-specific values.\n+  * The children of `provider` are the different cloud platform providers that\n+    spinnaker defaults.\n+  * Each `provider` tree contains the properties that are needed for that\n+    particular platforms integration. By definition, these vary from platform\n+    to platform and are only used the context of that platform.\n+  * The `provider.`*platform*`.primaryCredentials` root holds different properties\n+    used to define the default account and credentials needed when managing that\n+    platform. Spinnaker permits multiple accounts so that it can manage resources\n+    on behalf of different accounts. The primary accounts is referenced to\n+    configure the different *subsystem*`.yml` needs from a single place in\n+    `spinnaker-local.yml` and meets the needs of a single-account deployment.\n+  * Additional credential configuration will go in `clouddriver.yml`\n+    The actual credentials for all accounts (including primary) are typically\n+    stored externally in protected files, but exactly where and how depends on\n+    the individual platform.\n+\n+2. `services` is used for Spinnaker subsystem and service-specific values.\n+  * The children of `services` are the individual services. Each service contains\n+    the minimal properties needed by consumers of the service (so they can\n+    share the configuration through the common standard `spinnaker.yml`) and\n+    typically key configuration parameters for convienence of having the\n+    `spinnaker-local` act as a single source configuration file.\n+  * Most if not all services share common property names by convention\n+       * `host` defines the IP host for the service endpoint.\n+       * `port` defines the IP port for the service endpoint.\n+       * baseUrl defines the HTTP service endpoint. The default is typically\n+         composed from `host` and `port`.\n+       * The expectation is that the *subsystem*`.yml` will bind the IP address\n+         it listens on by referencing `${services.`*subsystem*`.host}` and\n+         `${services.`*subsystem*`.port}`, where consumers\n+         will connect to it by referencing `${services.`*subsystem*`.baseUrl}.\n+   * A special entry `default` contains default values used soley to reference\n+     other default values.\n+       * `services.default.host` is the default `host` to use. This is\n+         `localhost` by default indicating that all the services by default\n+         will bind to the loopback address so as not to expose themselves to\n+         external addresses. This could be changed to 0.0.0.0 or a public\n+         IP or DNS alias for the localhost to expose the services to other\n+         machines.\n+       * `services.default.primaryAccountName` is the default account to use\n+         where a configuration needs credentials for internal usage. For example\n+         the bakery. This is expected to reference one of the provider's\n+         `primaryAccount.name` properties, particularly where there are multiple\n+         providers.\n+\n+**default-spinnaker-local.yml**\n+\n+This file is not actually used by Spinnaker, rather it acts as a prototype\n+for creating a spinnaker-local.yml file rather than copying spinnaker.yml.\n+\n+**clouddriver.yml**\n+\n+Clouddriver is responsible for the platform integration so this likely\n+where you will find platform-specific configuration options. Clouddriver\n+is also responsible for managing the platform credentials.\n+\n+**echo.yml**\n+\n+Echo is responsible for messaging. Among other things, all the notification\n+services are configured here.\n+\n+**front50.yml**\n+\n+Front50 mediates Spinnaker's persistent data store.\n+\n+**gate.yml**\n+\n+Gate acts as a gateway server to present the different Spinnaker subsystems\n+as a single endpoint. There's probably nothing to specialize here since gate\n+is essentially mediating the other services.\n+\n+**igor.yml**\n+\n+Igor provides integration with Jenkins. If you are going to add additional\n+jenkins servers beyond the default specified in the `spinnaker-local.yml`\n+then this is where to specify them.\n+\n+**orca.yml**\n+\n+Orca provides the workflow orchestration within Spinnaker.\n+\n+**rosco.yml**\n+\n+Rosco implements Spinnaker's bakery. Most of the configuration is pulled from\n+`spinnaker.yml`\n+\n+**rush.yml**\n+\n+Rush provides support for the bakery.\n+\n+\n+## Additional configuration files\n+\n+**/etc/default/spinnaker**\n+\n+The environment variables referenced by `spinnaker.yml` are maintained in\n+`/etc/default/spinnaker`. These environment variables are not directly used\n+by Spinnaker. They are only used to resolve the default YAML values. There\n+is nothing particularly special about these, but these are typically populated\n+during automated installation and setup for convenience.\n+\n+**/var/www/settings.js**\n+\n+Deck, Spinnaker's web interface, provides its settings in this javascript\n+file rather than YAML files like the others.\n+\n+This file is generated from `/opt/spinnaker/config/settings.js` using the\n+script `/opt/spinnaker/reconfigure_spinnaker.sh`","path":"documentation/configuration.md","position":236,"original_position":236,"commit_id":"c1f2b2eff923c62219830d37be2a976b7ead3049","original_commit_id":"c1f2b2eff923c62219830d37be2a976b7ead3049","user":{"login":"rbuskens","id":6616961,"avatar_url":"https://avatars.githubusercontent.com/u/6616961?v=3","gravatar_id":"","url":"https://api.github.com/users/rbuskens","html_url":"https://github.com/rbuskens","followers_url":"https://api.github.com/users/rbuskens/followers","following_url":"https://api.github.com/users/rbuskens/following{/other_user}","gists_url":"https://api.github.com/users/rbuskens/gists{/gist_id}","starred_url":"https://api.github.com/users/rbuskens/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rbuskens/subscriptions","organizations_url":"https://api.github.com/users/rbuskens/orgs","repos_url":"https://api.github.com/users/rbuskens/repos","events_url":"https://api.github.com/users/rbuskens/events{/privacy}","received_events_url":"https://api.github.com/users/rbuskens/received_events","type":"User","site_admin":false},"body":"Add period at end of sentence.","created_at":"2015-12-06T23:29:48Z","updated_at":"2015-12-06T23:29:48Z","html_url":"https://github.com/spinnaker/spinnaker.github.io/pull/94#discussion_r46778255","pull_request_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/pulls/94","_links":{"self":{"href":"https://api.github.com/repos/spinnaker/spinnaker.github.io/pulls/comments/46778255"},"html":{"href":"https://github.com/spinnaker/spinnaker.github.io/pull/94#discussion_r46778255"},"pull_request":{"href":"https://api.github.com/repos/spinnaker/spinnaker.github.io/pulls/94"}}},"pull_request":{"url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/pulls/94","id":52635701,"html_url":"https://github.com/spinnaker/spinnaker.github.io/pull/94","diff_url":"https://github.com/spinnaker/spinnaker.github.io/pull/94.diff","patch_url":"https://github.com/spinnaker/spinnaker.github.io/pull/94.patch","issue_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/issues/94","number":94,"state":"open","locked":false,"title":"Added configuration guide.","user":{"login":"ewiseblatt","id":4367384,"avatar_url":"https://avatars.githubusercontent.com/u/4367384?v=3","gravatar_id":"","url":"https://api.github.com/users/ewiseblatt","html_url":"https://github.com/ewiseblatt","followers_url":"https://api.github.com/users/ewiseblatt/followers","following_url":"https://api.github.com/users/ewiseblatt/following{/other_user}","gists_url":"https://api.github.com/users/ewiseblatt/gists{/gist_id}","starred_url":"https://api.github.com/users/ewiseblatt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ewiseblatt/subscriptions","organizations_url":"https://api.github.com/users/ewiseblatt/orgs","repos_url":"https://api.github.com/users/ewiseblatt/repos","events_url":"https://api.github.com/users/ewiseblatt/events{/privacy}","received_events_url":"https://api.github.com/users/ewiseblatt/received_events","type":"User","site_admin":false},"body":"@duftler","created_at":"2015-12-04T06:51:14Z","updated_at":"2015-12-06T23:29:48Z","closed_at":null,"merged_at":null,"merge_commit_sha":"97387427ac731c1dcd1b9d6d4949f2abc25017c4","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/pulls/94/commits","review_comments_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/pulls/94/comments","review_comment_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/pulls/comments{/number}","comments_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/issues/94/comments","statuses_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/statuses/c1f2b2eff923c62219830d37be2a976b7ead3049","head":{"label":"ewiseblatt:configuration","ref":"configuration","sha":"c1f2b2eff923c62219830d37be2a976b7ead3049","user":{"login":"ewiseblatt","id":4367384,"avatar_url":"https://avatars.githubusercontent.com/u/4367384?v=3","gravatar_id":"","url":"https://api.github.com/users/ewiseblatt","html_url":"https://github.com/ewiseblatt","followers_url":"https://api.github.com/users/ewiseblatt/followers","following_url":"https://api.github.com/users/ewiseblatt/following{/other_user}","gists_url":"https://api.github.com/users/ewiseblatt/gists{/gist_id}","starred_url":"https://api.github.com/users/ewiseblatt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ewiseblatt/subscriptions","organizations_url":"https://api.github.com/users/ewiseblatt/orgs","repos_url":"https://api.github.com/users/ewiseblatt/repos","events_url":"https://api.github.com/users/ewiseblatt/events{/privacy}","received_events_url":"https://api.github.com/users/ewiseblatt/received_events","type":"User","site_admin":false},"repo":{"id":46518345,"name":"spinnaker.github.io","full_name":"ewiseblatt/spinnaker.github.io","owner":{"login":"ewiseblatt","id":4367384,"avatar_url":"https://avatars.githubusercontent.com/u/4367384?v=3","gravatar_id":"","url":"https://api.github.com/users/ewiseblatt","html_url":"https://github.com/ewiseblatt","followers_url":"https://api.github.com/users/ewiseblatt/followers","following_url":"https://api.github.com/users/ewiseblatt/following{/other_user}","gists_url":"https://api.github.com/users/ewiseblatt/gists{/gist_id}","starred_url":"https://api.github.com/users/ewiseblatt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ewiseblatt/subscriptions","organizations_url":"https://api.github.com/users/ewiseblatt/orgs","repos_url":"https://api.github.com/users/ewiseblatt/repos","events_url":"https://api.github.com/users/ewiseblatt/events{/privacy}","received_events_url":"https://api.github.com/users/ewiseblatt/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ewiseblatt/spinnaker.github.io","description":"Spinnaker's official site","fork":true,"url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io","forks_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/forks","keys_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/teams","hooks_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/hooks","issue_events_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/issues/events{/number}","events_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/events","assignees_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/assignees{/user}","branches_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/branches{/branch}","tags_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/tags","blobs_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/git/refs{/sha}","trees_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/statuses/{sha}","languages_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/languages","stargazers_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/stargazers","contributors_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/contributors","subscribers_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/subscribers","subscription_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/subscription","commits_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/commits{/sha}","git_commits_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/git/commits{/sha}","comments_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/comments{/number}","issue_comment_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/issues/comments{/number}","contents_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/contents/{+path}","compare_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/merges","archive_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/downloads","issues_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/issues{/number}","pulls_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/pulls{/number}","milestones_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/milestones{/number}","notifications_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/labels{/name}","releases_url":"https://api.github.com/repos/ewiseblatt/spinnaker.github.io/releases{/id}","created_at":"2015-11-19T20:28:17Z","updated_at":"2015-11-19T20:28:18Z","pushed_at":"2015-12-04T17:17:05Z","git_url":"git://github.com/ewiseblatt/spinnaker.github.io.git","ssh_url":"git@github.com:ewiseblatt/spinnaker.github.io.git","clone_url":"https://github.com/ewiseblatt/spinnaker.github.io.git","svn_url":"https://github.com/ewiseblatt/spinnaker.github.io","homepage":"http://spinnaker.io","size":2618,"stargazers_count":0,"watchers_count":0,"language":"CSS","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":"spinnaker:master","ref":"master","sha":"24cc826cfaac5bf3b255415b1b19bb8d0dca1c4e","user":{"login":"spinnaker","id":7634182,"avatar_url":"https://avatars.githubusercontent.com/u/7634182?v=3","gravatar_id":"","url":"https://api.github.com/users/spinnaker","html_url":"https://github.com/spinnaker","followers_url":"https://api.github.com/users/spinnaker/followers","following_url":"https://api.github.com/users/spinnaker/following{/other_user}","gists_url":"https://api.github.com/users/spinnaker/gists{/gist_id}","starred_url":"https://api.github.com/users/spinnaker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spinnaker/subscriptions","organizations_url":"https://api.github.com/users/spinnaker/orgs","repos_url":"https://api.github.com/users/spinnaker/repos","events_url":"https://api.github.com/users/spinnaker/events{/privacy}","received_events_url":"https://api.github.com/users/spinnaker/received_events","type":"Organization","site_admin":false},"repo":{"id":45926977,"name":"spinnaker.github.io","full_name":"spinnaker/spinnaker.github.io","owner":{"login":"spinnaker","id":7634182,"avatar_url":"https://avatars.githubusercontent.com/u/7634182?v=3","gravatar_id":"","url":"https://api.github.com/users/spinnaker","html_url":"https://github.com/spinnaker","followers_url":"https://api.github.com/users/spinnaker/followers","following_url":"https://api.github.com/users/spinnaker/following{/other_user}","gists_url":"https://api.github.com/users/spinnaker/gists{/gist_id}","starred_url":"https://api.github.com/users/spinnaker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spinnaker/subscriptions","organizations_url":"https://api.github.com/users/spinnaker/orgs","repos_url":"https://api.github.com/users/spinnaker/repos","events_url":"https://api.github.com/users/spinnaker/events{/privacy}","received_events_url":"https://api.github.com/users/spinnaker/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/spinnaker/spinnaker.github.io","description":"Spinnaker's official site","fork":false,"url":"https://api.github.com/repos/spinnaker/spinnaker.github.io","forks_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/forks","keys_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/keys{/key_id}","collaborators_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/teams","hooks_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/hooks","issue_events_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/issues/events{/number}","events_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/events","assignees_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/assignees{/user}","branches_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/branches{/branch}","tags_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/tags","blobs_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/git/refs{/sha}","trees_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/git/trees{/sha}","statuses_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/statuses/{sha}","languages_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/languages","stargazers_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/stargazers","contributors_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/contributors","subscribers_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/subscribers","subscription_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/subscription","commits_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/commits{/sha}","git_commits_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/git/commits{/sha}","comments_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/comments{/number}","issue_comment_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/issues/comments{/number}","contents_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/contents/{+path}","compare_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/compare/{base}...{head}","merges_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/merges","archive_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/downloads","issues_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/issues{/number}","pulls_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/pulls{/number}","milestones_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/milestones{/number}","notifications_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/labels{/name}","releases_url":"https://api.github.com/repos/spinnaker/spinnaker.github.io/releases{/id}","created_at":"2015-11-10T17:04:06Z","updated_at":"2015-12-05T13:56:22Z","pushed_at":"2015-12-04T22:36:11Z","git_url":"git://github.com/spinnaker/spinnaker.github.io.git","ssh_url":"git@github.com:spinnaker/spinnaker.github.io.git","clone_url":"https://github.com/spinnaker/spinnaker.github.io.git","svn_url":"https://github.com/spinnaker/spinnaker.github.io","homepage":"http://spinnaker.io","size":7385,"stargazers_count":19,"watchers_count":19,"language":"CSS","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":23,"mirror_url":null,"open_issues_count":3,"forks":23,"open_issues":3,"watchers":19,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/spinnaker/spinnaker.github.io/pulls/94"},"html":{"href":"https://github.com/spinnaker/spinnaker.github.io/pull/94"},"issue":{"href":"https://api.github.com/repos/spinnaker/spinnaker.github.io/issues/94"},"comments":{"href":"https://api.github.com/repos/spinnaker/spinnaker.github.io/issues/94/comments"},"review_comments":{"href":"https://api.github.com/repos/spinnaker/spinnaker.github.io/pulls/94/comments"},"review_comment":{"href":"https://api.github.com/repos/spinnaker/spinnaker.github.io/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/spinnaker/spinnaker.github.io/pulls/94/commits"},"statuses":{"href":"https://api.github.com/repos/spinnaker/spinnaker.github.io/statuses/c1f2b2eff923c62219830d37be2a976b7ead3049"}}}}