{"action":"created","comment":{"url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/pulls/comments/34454659","id":34454659,"diff_hunk":"@@ -0,0 +1,435 @@\n+# Introduction to Enterprise Container Management: *Atomic Enterprise Platform*\n+\n+[//]: # (This is a first attempt at framing a story for how AE enhances)\n+[//]: # (the stock capabilities. Right now it sounds like a whine-fest. It)\n+[//]: # (will need re-wording to make the limitations of Kubernetes to appear)\n+[//]: # (-correctly- a natural outcome of its design scoping)\n+\n+Project Atomic - Atomic Enterprise is an enhanced container\n+orchestration and management platform, based on a set of open-source\n+container deployment and management projects, and extended to provide\n+additional capabilities and services.\n+\n+Atomic Enterprise is meant to provide the administrators and users the\n+means to create, deploy and manage complex applications in a container\n+service environment.\n+\n+This document lays a foundation for understanding software containers,\n+container management and the challanges and potential for large scale\n+container management services. It does not assume a lot of prior\n+knowledge of existing software container systems. Where necessary,\n+references are provided so that the reader can choose to read in more\n+depth about the technologies under discussion. Finally, this document\n+highlights the enhancements and benefits which Atomic Enterprise\n+brings above the capabilities of the software on which it is based.\n+\n+The outline here uses two of the currently prevailing tools, Docker\n+and Kubernetes, as the basis for discussion. This is largely because\n+these are also the technologies which underlie Atomic Enterprise, but\n+the concepts apply equally to related technologies.\n+\n+<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n+<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n+\n+\n+- [Preface - The Layers of Containers and Container Management](#preface---the-layers-of-containers-and-container-management)\n+  - [Container Basics](#container-basics)\n+    - [Container Image](#container-image)\n+    - [Container Service](#container-service)\n+    - [Container Host](#container-host)\n+  - [Container Service Orchestration](#container-service-orchestration)\n+    - [Orchestration Layer 1: Host Resource Management](#orchestration-layer-1-host-resource-management)\n+    - [Orchestration Layer 2: Host Clustering](#orchestration-layer-2-host-clustering)\n+    - [Orchestration Layer 3: Network Resources and Publication](#orchestration-layer-3-network-resources-and-publication)\n+  - [Resource Management, Access Control and Policy](#resource-management-access-control-and-policy)\n+  - [Summary of Container Management Concepts](#summary-of-container-management-concepts)\n+- [Containers and Orchestration with Kubernetes](#containers-and-orchestration-with-kubernetes)\n+  - [Container Deployment](#container-deployment)\n+  - [Resource Allocation](#resource-allocation)\n+  - [Networking](#networking)\n+  - [Publication and External Access](#publication-and-external-access)\n+  - [Network Storage](#network-storage)\n+  - [Continuous Integration/Development Hooks](#continuous-integrationdevelopment-hooks)\n+  - [Installation and Administration](#installation-and-administration)\n+  - [Summary of Capabilities and Limitations of Kubernetes](#summary-of-capabilities-and-limitations-of-kubernetes)\n+- [Atomic Enterprise](#atomic-enterprise)\n+  - [Container Deployment - Regions and Zones](#container-deployment---regions-and-zones)\n+  - [Software Defined Networking - Open vSwitch](#software-defined-networking---open-vswitch)\n+  - [Inbound Access and Publication - HAProxy and integrated SkyDNS](#inbound-access-and-publication---haproxy-and-integrated-skydns)\n+    - [Inbound Access to Container Services](#inbound-access-to-container-services)\n+    - [Application Publication and Discovery](#application-publication-and-discovery)\n+  - [Network Storage - native Gluster and Ceph](#network-storage---native-gluster-and-ceph)\n+  - [Installation and Administration - Unified common services](#installation-and-administration---unified-common-services)\n+  - [Hooks for CI/CD and build processes.](#hooks-for-cicd-and-build-processes)\n+- [References](#references)\n+- [Glossary](#glossary)\n+\n+<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n+\n+## Preface - The Layers of Containers and Container Management\n+\n+The first section is a brief (?) recap of the functional structure of\n+a generalized container deployment ecosystem. If you're familiar with\n+the complete stack then you can skip to the\n+[next section](#containers-and-orchestration-with-kubernetes)\n+\n+Software container applications are still a young technology (at least\n+in terms of common use and availablility). The introduction of Docker\n+made container development and execution accessible, and opened\n+peoples' minds to the explore the possibilites that containers may\n+offer. Since then the ideas and implimentations have come in a flood,\n+with all of the promise for change (and chaos) that this implies.\n+\n+The chaos of exploration and the rush to implementation and\n+productization has lead to some confusion. Container applications are\n+as complex (more complex?) than conventional applications and\n+services. The development, composition and deployment patterns are\n+different. The first impulse to treat containers like virtual machines\n+or like traditional host based processes has masked the actual\n+patterns that are inherent to the actual characteristics of container\n+systems.\n+\n+The characteristics of containers and of the systems which host them\n+define a set of rings of scope.  Each ring defines a set of resources\n+and responsibilities which must be provided to the container\n+system. Each ring has an inward and outward boundary and these\n+boundaries define the scope of a subsystem of a complete container\n+management system.\n+\n+### Container Basics\n+\n+[Add discussion of the base - out of scope, but background]\n+\n+#### Container Image\n+\n+The container image is often ignored as an artifact rather than a\n+component of the service. In the model here the container image is the\n+centermost component of the system. It defines the passive contents of\n+the container as well as providing metadata to the container service\n+which will be used to create the containment environment and to start\n+the container processes. This metadata is the first example of the\n+boundary communications which typify the behavior of the layers of a\n+container system. These communications will pass information both in\n+and out of each layer so that the systems above and below. \n+\n+#### Container Service\n+\n+The container service is the first ring. It creates containers on a\n+single host. Containers are defined by a set of files on a host (from\n+the container image), a limited view of the host filesystems and\n+network, and a single root process running in that context.\n+\n+The container service uses host resources to build the container\n+runtime context and then to run the container process in that context\n+on the host.\n+\n+The container service does not add or remove resources on the host,\n+though it may modify some host configurations such as adding virtual\n+network interfaces (to the existing real interfaces) or trigger NFS\n+automounts to the host and then import the local view into the\n+container.\n+\n+The container service adds and removes containers on the request of\n+some outside agent; a user or an orchestration system.\n+\n+*NOTE*: The container service may also be responsible for retrieving\n+ container images and building them. These are outside the scope of\n+ this discussion.\n+\n+#### Container Host\n+\n+The container host is the place where individual containers are\n+created and executed. It has memory, local storage and at least one\n+network interface. The container host can run on bare metal or in a\n+virtual machine. It can be running a general purpose operating system\n+or a minimized distribution tuned for containers.\n+\n+The container host provides the local resources that the containers\n+need to run. It provides connectivity through the network to\n+additional resources such as distributed filesystems. Any resources\n+that are not statically configured to the host must be provided\n+on-demand by the orchestration system. (see below)\n+\n+### Container Service Orchestration\n+\n+[Improve segue - here's the first meat]\n+\n+Orchestration is a blanket term for \"making stuff happen automatically\n+and in concert\" (in the non-musical sense.) In terms of the scoping\n+rings of a complete container management system, orchestration has\n+three different responsibilities corresponding to three rings: facing\n+in to the host, connecting hosts into a cluster, and facing out of the\n+cluster to additional resources and to users.\n+\n+Each of the elements of container orchestration bridges a gap between\n+the container and some resource that the container needs to do it's job.\n+\n+#### Orchestration Layer 1: Host Resource Management\n+\n+The Host Resource Management function of the orchestration system\n+bridges the boundaries between remote resources or non-existant host\n+resources and the container system.\n+\n+The first part of the orchestration system is an agent which runs on\n+the container host. This agent can make changes to the host to provide\n+additional resources to its containers. For example, the orchestration\n+system can manipulate the ISCI targets to add shared physical storage\n+to the host so that the container system can mount them into new\n+containers. It can communicate with the SDN service to provide new\n+virtual interfaces to connect local and remote containers, or to route\n+inbound network connections to the local containers.\n+\n+#### Orchestration Layer 2: Host Clustering\n+\n+The Host Clustering function of the orchestration system also makes\n+use of the host agent. The clustering function binds container hosts\n+together, allowing new containers to be run on any host in the\n+cluster.\n+\n+Somewhere an orchestration master service runs. Each host that\n+participates in the cluster is running an agent process which connects\n+to the master and accepts requests from the master. The master service\n+places containers onto members of the cluster and then can instruct\n+the agents to create and manage network connections between\n+containers.\n+\n+By itself the host clustering layer does not make intelligent resource\n+allocation decisions. Without guidance it merely places each new\n+container on some available host.\n+\n+#### Orchestration Layer 3: Network Resources and Publication\n+\n+All of the focus up until now has been on activities within the\n+container host cluster: Creating and connecting containers with each\n+other. The third layer of the orchestration system looks outside the\n+cluster to bring resources in for the containers to use.\n+\n+The most common external resources are network storage and inbound\n+connectivity. The first is a pull operation, bringing known resources\n+to the container hosts and making them available to the container\n+system. The second is a kind of push operation and requires two steps:\n+\n+1. Establish an inbound access point and a path to the container(s)\n+1. Publish the inbound access point\n+\n+### Resource Management, Access Control and Policy\n+\n+Properly, resource management is outside the scope of the\n+orchestration system. The decisions about resource allocation are made\n+by a policy engine such as _Mesos_. However, the orchestration system\n+must be able to reflect and report on the resources that are\n+available, and it must be able to accept allocation requests which\n+respect the decisions of the policy engine. This means it must be able\n+to both label resources and allow the policy engine to make requests\n+using those labels.\n+\n+### Summary of Container Management Concepts\n+\n+[TBD]\n+\n+## Containers and Orchestration with Kubernetes\n+\n+[Improve Segue - addressing the frameworks - skipping right to orchestration]\n+\n+When you want to use software containers to build and run complete\n+applications and services, it quickly becomes evident that creating\n+single containers on individual hosts will become time consuming and\n+unwieldy. Containers run on single hosts. To make services span\n+multiple hosts, each host must be prepared with identical remote\n+storage and networking resources independent of the container service.\n+\n+### Container Deployment\n+\n+_Kubernetes_, an orchestration and clustering layer above the container\n+systems provides a means to create individual containers and related\n+groups of containers. It provides a way to describe individual\n+containers or clusters of containers (_Pods_) which will run together\n+and will be assigned to a single container host. It also provides a\n+means to create and maintain a specified number of replicas of each\n+pod. Replicas will be placed on different nodes.\n+\n+### Resource Allocation\n+\n+Kubernetes allocation mechanism is fairly simple. It does not offer\n+any way to partition the cluster or to assign pods to sub-sets of the\n+cluster for resource or policy management purposes. A Kubernetes\n+cluster is flat and uniform. Other than the constraint that \n+\n+### Networking\n+\n+Kubernetes also provides a simple mechanism for networking within the\n+cluster, the _kube-proxy_.  The kube-proxies can route connections\n+between containers anywhere within the cluster, but it does not\n+provide functions like VLANs, VPNs or other more complex SDN (software\n+defined network) features. Kubernetes can work with _flannel_, an\n+overlay network service which provides a unique IP address to each\n+container within the cluster and which can be configured to do more\n+than the simple routing offered by the kube-proxy service. Flannel too\n+does not provide complex routing capabilities that are possible with a\n+proper SDN service.\n+\n+When running in a commercial cloud service such as Google GCE or\n+Amazon EC2, Kubernetes does not provide tight integration and control\n+with the networking services that are available.\n+\n+### Publication and External Access\n+\n+Because Kubernetes is concerned mostly with creating and running\n+containers within the cluster, it does not offer integrated mechanisms\n+for publishing the services to external users. It can provide\n+listeners on well known ports on one or more external facing hosts\n+running special kube-proxy processes, but Kubernetes provides no means\n+to make applications running in the cluster accessable to clients\n+outside. These capabilities must be managed manually.\n+\n+### Network Storage\n+\n+On the nodes, kubernetes acts to bridge the boundaries between the\n+host and the containers. By itself though, it can only make use of the\n+resources that have been configured on the host. For example,\n+Kubernetes has the capability to mount NFS filesystems onto the host\n+and then into new containers, but only if the host has already been\n+configured to act as an NFS client. [check this. Better example? MAL]\n+\n+In commercial cloud services Kubernetes does that the ability to reach\n+native block storage for GCE and EC2/EBS, but it cannot access network\n+file services such as Gluster or Ceph without prior uniform\n+configuration on the container host.\n+\n+### Continuous Integration/Development Hooks\n+\n+[TBD]\n+\n+### Installation and Administration\n+\n+Each host in a fully functional Kubernetes cluster will have a number\n+of different service processes running. On the master there is an\n+app-server process, an etcd and probably a kube-proxy and flanneld.\n+On the nodes there will be a kubelet, a kube-proxy, and a\n+flanneld. Additional services such as DNS to provide application\n+publishing and inbound routing must be added and managed by the\n+cluster admins.\n+\n+### Summary of Capabilities and Limitations of Kubernetes\n+\n+[TBD]\n+\n+## Atomic Enterprise\n+\n+Atomic Enterprise provides the additional capabilities that fill in\n+the gaps between the orchestration of containers within the cluster and\n+access to the resources outside the cluster (client networking,\n+publishing and discovery, network storage). It also provides the means\n+to partition the cluster and to create and use placement policies for\n+containers within those partitions.\n+\n+[This needs more/clearer introduction]\n+\n+### Container Deployment - Regions and Zones\n+\n+Atomic Enterprise adds a couple of features to the cluster which allow\n+the users and the cluster managers to provide different resource\n+levels to different users or applications within a single cluster.\n+\n+### Software Defined Networking - Open vSwitch\n+\n+[Explain how AE adds networking capabilities both internally and on the boundary of the cluster]\n+\n+[Contributors?]\n+\n+### Inbound Access and Publication - HAProxy and integrated SkyDNS\n+\n+When applications and services run in a containerized environment, the\n+container mangement system establishes the connections between the\n+containers so that they can work as a unit. By itself, this is not\n+sufficient to make these applications available to users outside the\n+container service, the actual intended audience. Making hosted\n+services accessable to users requires two additional related","path":"introduction.md","position":347,"original_position":347,"commit_id":"ebb641067e8a689b048bfc5204e1a700f7a712ed","original_commit_id":"ebb641067e8a689b048bfc5204e1a700f7a712ed","user":{"login":"miminar","id":1478803,"avatar_url":"https://avatars.githubusercontent.com/u/1478803?v=3","gravatar_id":"","url":"https://api.github.com/users/miminar","html_url":"https://github.com/miminar","followers_url":"https://api.github.com/users/miminar/followers","following_url":"https://api.github.com/users/miminar/following{/other_user}","gists_url":"https://api.github.com/users/miminar/gists{/gist_id}","starred_url":"https://api.github.com/users/miminar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/miminar/subscriptions","organizations_url":"https://api.github.com/users/miminar/orgs","repos_url":"https://api.github.com/users/miminar/repos","events_url":"https://api.github.com/users/miminar/events{/privacy}","received_events_url":"https://api.github.com/users/miminar/received_events","type":"User","site_admin":false},"body":"s/accessable/accessible/","created_at":"2015-07-13T11:38:04Z","updated_at":"2015-07-13T11:38:04Z","html_url":"https://github.com/projectatomic/atomic-enterprise-training/pull/19#discussion_r34454659","pull_request_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/pulls/19","_links":{"self":{"href":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/pulls/comments/34454659"},"html":{"href":"https://github.com/projectatomic/atomic-enterprise-training/pull/19#discussion_r34454659"},"pull_request":{"href":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/pulls/19"}}},"pull_request":{"url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/pulls/19","id":39707870,"html_url":"https://github.com/projectatomic/atomic-enterprise-training/pull/19","diff_url":"https://github.com/projectatomic/atomic-enterprise-training/pull/19.diff","patch_url":"https://github.com/projectatomic/atomic-enterprise-training/pull/19.patch","issue_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/issues/19","number":19,"state":"open","locked":false,"title":"Introduction to Atomic Enterprise Platform - Background, Problem Statement, New Capabilities","user":{"login":"markllama","id":217372,"avatar_url":"https://avatars.githubusercontent.com/u/217372?v=3","gravatar_id":"","url":"https://api.github.com/users/markllama","html_url":"https://github.com/markllama","followers_url":"https://api.github.com/users/markllama/followers","following_url":"https://api.github.com/users/markllama/following{/other_user}","gists_url":"https://api.github.com/users/markllama/gists{/gist_id}","starred_url":"https://api.github.com/users/markllama/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/markllama/subscriptions","organizations_url":"https://api.github.com/users/markllama/orgs","repos_url":"https://api.github.com/users/markllama/repos","events_url":"https://api.github.com/users/markllama/events{/privacy}","received_events_url":"https://api.github.com/users/markllama/received_events","type":"User","site_admin":false},"body":"This PR adds a single document which introduces Atomic Enterprise in terms of the problems it means so solve.\r\n\r\nThe document provides a framework for understanding where Atomic Enterprise fits in the container service space.  It describes the existing layers and technologies, indicating the capabilities each provides and the boundaries and limitations. Finally it details the problems Atomic Enterprise means to address and the features it brings to enable the creation of an enterprise quality container management service.\r\n\r\nThis document serves as a beginner's introduction to \"Why Choose Atomic Enterprise\" as well as a touch-point for evaluating additional capabilities and where they should be placed in the container management stack.\r\n\r\nCurrently the capability set details are left open pending input from designers and developers. Additional capabilities can be added and detailed as needed.  Contributors are encouraged to comment and add content.","created_at":"2015-07-10T17:51:56Z","updated_at":"2015-07-13T11:38:04Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8c6a96785a709a8d74615bbbd8989750e86da39f","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/pulls/19/commits","review_comments_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/pulls/19/comments","review_comment_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/pulls/comments{/number}","comments_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/issues/19/comments","statuses_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/statuses/ebb641067e8a689b048bfc5204e1a700f7a712ed","head":{"label":"markllama:introduction","ref":"introduction","sha":"ebb641067e8a689b048bfc5204e1a700f7a712ed","user":{"login":"markllama","id":217372,"avatar_url":"https://avatars.githubusercontent.com/u/217372?v=3","gravatar_id":"","url":"https://api.github.com/users/markllama","html_url":"https://github.com/markllama","followers_url":"https://api.github.com/users/markllama/followers","following_url":"https://api.github.com/users/markllama/following{/other_user}","gists_url":"https://api.github.com/users/markllama/gists{/gist_id}","starred_url":"https://api.github.com/users/markllama/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/markllama/subscriptions","organizations_url":"https://api.github.com/users/markllama/orgs","repos_url":"https://api.github.com/users/markllama/repos","events_url":"https://api.github.com/users/markllama/events{/privacy}","received_events_url":"https://api.github.com/users/markllama/received_events","type":"User","site_admin":false},"repo":{"id":38693800,"name":"atomic-enterprise-training","full_name":"markllama/atomic-enterprise-training","owner":{"login":"markllama","id":217372,"avatar_url":"https://avatars.githubusercontent.com/u/217372?v=3","gravatar_id":"","url":"https://api.github.com/users/markllama","html_url":"https://github.com/markllama","followers_url":"https://api.github.com/users/markllama/followers","following_url":"https://api.github.com/users/markllama/following{/other_user}","gists_url":"https://api.github.com/users/markllama/gists{/gist_id}","starred_url":"https://api.github.com/users/markllama/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/markllama/subscriptions","organizations_url":"https://api.github.com/users/markllama/orgs","repos_url":"https://api.github.com/users/markllama/repos","events_url":"https://api.github.com/users/markllama/events{/privacy}","received_events_url":"https://api.github.com/users/markllama/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/markllama/atomic-enterprise-training","description":"Atomic Enterprise Training","fork":true,"url":"https://api.github.com/repos/markllama/atomic-enterprise-training","forks_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/forks","keys_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/keys{/key_id}","collaborators_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/teams","hooks_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/hooks","issue_events_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/issues/events{/number}","events_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/events","assignees_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/assignees{/user}","branches_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/branches{/branch}","tags_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/tags","blobs_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/git/refs{/sha}","trees_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/git/trees{/sha}","statuses_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/statuses/{sha}","languages_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/languages","stargazers_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/stargazers","contributors_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/contributors","subscribers_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/subscribers","subscription_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/subscription","commits_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/commits{/sha}","git_commits_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/git/commits{/sha}","comments_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/comments{/number}","issue_comment_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/issues/comments{/number}","contents_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/contents/{+path}","compare_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/compare/{base}...{head}","merges_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/merges","archive_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/downloads","issues_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/issues{/number}","pulls_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/pulls{/number}","milestones_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/milestones{/number}","notifications_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/labels{/name}","releases_url":"https://api.github.com/repos/markllama/atomic-enterprise-training/releases{/id}","created_at":"2015-07-07T14:41:34Z","updated_at":"2015-07-07T15:04:06Z","pushed_at":"2015-07-10T19:10:05Z","git_url":"git://github.com/markllama/atomic-enterprise-training.git","ssh_url":"git@github.com:markllama/atomic-enterprise-training.git","clone_url":"https://github.com/markllama/atomic-enterprise-training.git","svn_url":"https://github.com/markllama/atomic-enterprise-training","homepage":"","size":323,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_downloads":true,"has_wiki":true,"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":"projectatomic:master","ref":"master","sha":"c1b069e26e0e4e7559d16d03f7bbc54ca4610299","user":{"login":"projectatomic","id":6852258,"avatar_url":"https://avatars.githubusercontent.com/u/6852258?v=3","gravatar_id":"","url":"https://api.github.com/users/projectatomic","html_url":"https://github.com/projectatomic","followers_url":"https://api.github.com/users/projectatomic/followers","following_url":"https://api.github.com/users/projectatomic/following{/other_user}","gists_url":"https://api.github.com/users/projectatomic/gists{/gist_id}","starred_url":"https://api.github.com/users/projectatomic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/projectatomic/subscriptions","organizations_url":"https://api.github.com/users/projectatomic/orgs","repos_url":"https://api.github.com/users/projectatomic/repos","events_url":"https://api.github.com/users/projectatomic/events{/privacy}","received_events_url":"https://api.github.com/users/projectatomic/received_events","type":"Organization","site_admin":false},"repo":{"id":37070950,"name":"atomic-enterprise-training","full_name":"projectatomic/atomic-enterprise-training","owner":{"login":"projectatomic","id":6852258,"avatar_url":"https://avatars.githubusercontent.com/u/6852258?v=3","gravatar_id":"","url":"https://api.github.com/users/projectatomic","html_url":"https://github.com/projectatomic","followers_url":"https://api.github.com/users/projectatomic/followers","following_url":"https://api.github.com/users/projectatomic/following{/other_user}","gists_url":"https://api.github.com/users/projectatomic/gists{/gist_id}","starred_url":"https://api.github.com/users/projectatomic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/projectatomic/subscriptions","organizations_url":"https://api.github.com/users/projectatomic/orgs","repos_url":"https://api.github.com/users/projectatomic/repos","events_url":"https://api.github.com/users/projectatomic/events{/privacy}","received_events_url":"https://api.github.com/users/projectatomic/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/projectatomic/atomic-enterprise-training","description":"Atomic Enterprise Training","fork":false,"url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training","forks_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/forks","keys_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/keys{/key_id}","collaborators_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/teams","hooks_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/hooks","issue_events_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/issues/events{/number}","events_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/events","assignees_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/assignees{/user}","branches_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/branches{/branch}","tags_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/tags","blobs_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/git/refs{/sha}","trees_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/git/trees{/sha}","statuses_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/statuses/{sha}","languages_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/languages","stargazers_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/stargazers","contributors_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/contributors","subscribers_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/subscribers","subscription_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/subscription","commits_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/commits{/sha}","git_commits_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/git/commits{/sha}","comments_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/comments{/number}","issue_comment_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/issues/comments{/number}","contents_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/contents/{+path}","compare_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/compare/{base}...{head}","merges_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/merges","archive_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/downloads","issues_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/issues{/number}","pulls_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/pulls{/number}","milestones_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/milestones{/number}","notifications_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/labels{/name}","releases_url":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/releases{/id}","created_at":"2015-06-08T14:13:22Z","updated_at":"2015-07-07T18:43:42Z","pushed_at":"2015-07-12T00:29:48Z","git_url":"git://github.com/projectatomic/atomic-enterprise-training.git","ssh_url":"git@github.com:projectatomic/atomic-enterprise-training.git","clone_url":"https://github.com/projectatomic/atomic-enterprise-training.git","svn_url":"https://github.com/projectatomic/atomic-enterprise-training","homepage":"","size":448,"stargazers_count":1,"watchers_count":1,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":8,"mirror_url":null,"open_issues_count":1,"forks":8,"open_issues":1,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/pulls/19"},"html":{"href":"https://github.com/projectatomic/atomic-enterprise-training/pull/19"},"issue":{"href":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/issues/19"},"comments":{"href":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/issues/19/comments"},"review_comments":{"href":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/pulls/19/comments"},"review_comment":{"href":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/pulls/19/commits"},"statuses":{"href":"https://api.github.com/repos/projectatomic/atomic-enterprise-training/statuses/ebb641067e8a689b048bfc5204e1a700f7a712ed"}}}}