{"action":"created","comment":{"url":"https://api.github.com/repos/Tendrl/tendrl-ansible/pulls/comments/172190917","pull_request_review_id":101161355,"id":172190917,"diff_hunk":"@@ -39,55 +73,206 @@ tools (such as `ceph-installer` and `gdeploy`):\n * `ceph-installer`\n * `gluster-gdeploy-copr`\n \n-See sample ansible playbook `site.yml.sample` to check how it fits together.\n+Playbook files:\n \n-## Basic setup\n+* `prechecks.yml`: playbook checking requirements before Tendrl installation\n+  (see comments inside the playbook file for references)\n+* `site.yml`: main playbook of tendrl-ansible, which one will use to install\n+  Tendrl\n \n-Ansible Driven installation:\n \n-1) Install ansible >= 2.3\n-2) Get the code: `git clone https://github.com/Tendrl/tendrl-ansible.git`\n-3) Create Ansible inventory file with groups for `tendrl-server`\n-   and `gluster-servers`. Here is an example of inventory\n-   file for 4 node cluster with Gluster:\n+## Where are the roles and playbooks if I use rpm package?\n \n-```\n-[gluster-servers]\n-gl1.example.com\n-gl2.example.com\n-gl3.example.com\n-gl4.example.com\n-\n-[tendrl-server]\n-tendrl.example.com\n-```\n+Ansible roles are available in `/usr/share/ansible/roles/` directory, where\n+the role directories are prefixed with `tendrl-ansible.`, for example:\n+`/usr/share/ansible/roles/tendrl-ansible.tendrl-server`.\n+Each role has it's own `README.md` file, where you can find all details about\n+it's usage.\n+\n+Playbooks are available in `/usr/share/doc/tendrl-ansible-1.6.0/` directory,\n+where `1.6.0` is version of tendrl-ansible package.\n+\n+\n+## What should I know before using tendrl-ansible?\n+\n+You need to know [how to use\n+ansbile](https://docs.ansible.com/ansible/latest/intro.html) and how to deploy\n+and use ssh public keys.\n+\n+Moreover since this README file can't provide all details about Tendrl, you\n+should read [Tendrl installation\n+documentation](https://github.com/Tendrl/documentation/wiki/Tendrl-release-latest)\n+as well.\n+\n+And last but not least, both `tendrl-server` and `tendrl-storage-node` contains\n+many variables which one can use to tweak the installation. See README files of\n+the roles for their description.\n+\n+\n+## What installation steps from Tendrl installation documentation are not part of tendrl-ansible?\n+\n+This is should be clear from [Tendrl installation\n+documentation](https://github.com/Tendrl/documentation/wiki/Tendrl-release-latest)\n+itself, but for the sake of convenience, here is the\n+list of installation or deployment steps which are out of scope of\n+tendrl-ansible:\n+\n+* Deployment and installation of machines (either virtual or bare metal), which\n+  includes setup of networking, partitioning of disks, deployment of ssh public\n+  keys and so on.\n+* Installation and configuration of GlusterFS on the machines, see\n+  [gdeploy](https://gdeploy.readthedocs.io/en/latest/) for automation of this\n+  task.\n+* Setup of dedicated disk for etcd and graphite data directories.\n+* Setup of https for Tendrl web and api.\n+* Deployment of tls certificates and keys for etcd tls based client server\n+  encryption and authentication (this means communication between various\n+  tendrl components and etcd instance).\n+\n+\n+## How do I install Tendrl with tendrl-ansbile?\n+\n+1)  Install tendrl-ansible:\n+\n+    ```\n+    # yum install tendrl-ansible\n+    ```\n+\n+    See section \"How to get tendrl-ansible?\" in this README file for more\n+    details.\n+\n+2)  Create [Ansible inventory\n+    file](https://docs.ansible.com/ansible/latest/intro_inventory.html) with\n+    groups for `tendrl-server` and `gluster-servers`. Here is an example of\n+    inventory file for 4 node cluster with Gluster:\n+\n+    ```\n+    [gluster-servers]\n+    gl1.example.com\n+    gl2.example.com\n+    gl3.example.com\n+    gl4.example.com\n+\n+    [tendrl-server]\n+    tendrl.example.com\n+    ```\n+\n+3)  Add mandatory ansible variables into the inventory file you created in the\n+    previous step.\n+\n+    This includes:\n+\n+    * `etcd_ip_address` configures where etcd instance is listening\n+    * `etcd_fqdn` configure tendrl components to be able to connect to etcd\n+      instance\n+    * `graphite_fqdn` configures tendrl components (this value doesn't\n+       reconfigure graphite itself!) to be able to connect to graphite instance\n+\n+    For simple example cluster from previous step, assuming there is only\n+    single network interface on all machines, the code you need to add into\n+    the inventory file would look like:\n+\n+    ```\n+    [all:vars]\n+    etcd_ip_address=192.0.2.1\n+    etcd_fqdn=tendrl.example.com\n+    graphite_fqdn=tendrl.example.com\n+    ```\n+\n+    Where `192.0.2.1` is ip address of tendrl server, `tendrl.example.com` is\n+    a hostname of tendrl server and `tendrl.example.com` hostname is translated\n+    to `192.0.2.1` ip address.\n+\n+    See full description in README file of tendrl-server role and pay attention\n+    to the values you specify there when you use multiple network interfaces\n+    on the machines.\n+\n+    Note: you can define these variables anywhere else you like (eg. in\n+    variable files or from command line directly), but including them into the\n+    inventory provides you with a single file with full description of\n+    tendrl-ansible setup for future reference (eg. reruning tendrl-ansible\n+    later when you need to expand cluster or make sure the configuration still\n+    holds).\n+\n+4)  Add optional ansible variables into the invenory file.\n+\n+    Based on Tendrl documentation and description in README files of\n+    tendrl-ansible roles, specify values for variables you like to tweak.\n+\n+    This is important because some features tendrl-ansible can help you\n+    with are disabled by default as they require additional user input.\n+\n+    This includes etcd tls client authentication and tendrl notifier\n+    configuration for snmp or smtp. Other features such as firewalld setup\n+    for Tendrl can be disabled if needed.\n+\n+5)  If you use tendrl-ansible from rpm package, copy `site.yml` playbook into\n+    local directory (where you already store the inventory file):\n+\n+    ```\n+    $ cp /usr/share/doc/tendrl-ansible-VERSION/site.yml site.yml\n+    ```\n+\n+    Do the same for prechecks playbook:\n+\n+    ```\n+    $ cp /usr/share/doc/tendrl-ansible-VERSION/prechecks.yml prechecks.yml\n+    ```\n+\n+6)  Check that ssh can connect to all machines from the inventory file without\n+    asking for password or validation of public key by running:\n+\n+    ```\n+    $ ansible -i inventory_file -m ping all\n+    ```\n+\n+    You should see ansible to show `\"pong\"` message for all machines.\n+    In case of any problems, you need to fix it before going on. If you are not\n+    sure what's wrong, consult documentation of ansible and/or ssh.\n+\n+7)  Now you can run prechecks playbook to verify if minimal requirements and\n+    setup for Tendrl are satisfied. Any problem with the pre checks will make\n+    the playbook run fail immediately, pointing you to a particular\n+    requirement or problem with configuration before the installation itself\n+    (preventing you to spend time with unnecessary debugging after\n+    installation).\n+\n+    For **production deployment**, run the full check:\n+\n+    ```\n+    $ ansible-playbook -i inventory_file prechecks.yml\n+    ```\n+\n+    While for **proof of concept deployments**, you can avoid checking of\n+    stringent production requirements using `production` tag:\n+\n+    ```\n+    $ ansible-playbook -i inventory_file prechecks.yml --skip-tags \"production\"\n+    ```\n+\n+    If you are not sure why a particular check is there or what is checked\n+    exactly, open the playbook file and see comments and/or implementation of\n+    the check.\n+\n+8)  Then we are ready to run ansible to install Tendrl:\n+\n+    ```\n+    $ ansible-playbook -i inventory_file site.yml\n+    ```\n+\n+    Assuming we have deployed ssh keys on the machines and have a cluster\n+    already installed and running there.\n+\n+9)  Log in to your tendrl server at ``http://ip.of.tendrl.server`` with","path":"README.md","position":303,"original_position":303,"commit_id":"ce30f4dc1be0a8efa289768da58adbdbc5b341dc","original_commit_id":"ce30f4dc1be0a8efa289768da58adbdbc5b341dc","user":{"login":"dahorak","id":4759779,"avatar_url":"https://avatars3.githubusercontent.com/u/4759779?v=4","gravatar_id":"","url":"https://api.github.com/users/dahorak","html_url":"https://github.com/dahorak","followers_url":"https://api.github.com/users/dahorak/followers","following_url":"https://api.github.com/users/dahorak/following{/other_user}","gists_url":"https://api.github.com/users/dahorak/gists{/gist_id}","starred_url":"https://api.github.com/users/dahorak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dahorak/subscriptions","organizations_url":"https://api.github.com/users/dahorak/orgs","repos_url":"https://api.github.com/users/dahorak/repos","events_url":"https://api.github.com/users/dahorak/events{/privacy}","received_events_url":"https://api.github.com/users/dahorak/received_events","type":"User","site_admin":false},"body":"I would use ``http://tendrl.example.com`` instead of ``http://ip.of.tendrl.server`` (maybe with some note describing what it is - pointing back to the example inventory file). I think it is not necessary to use IP address (instead of hostname).","created_at":"2018-03-05T13:47:27Z","updated_at":"2018-03-05T13:48:44Z","html_url":"https://github.com/Tendrl/tendrl-ansible/pull/82#discussion_r172190917","pull_request_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/pulls/82","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/Tendrl/tendrl-ansible/pulls/comments/172190917"},"html":{"href":"https://github.com/Tendrl/tendrl-ansible/pull/82#discussion_r172190917"},"pull_request":{"href":"https://api.github.com/repos/Tendrl/tendrl-ansible/pulls/82"}}},"pull_request":{"url":"https://api.github.com/repos/Tendrl/tendrl-ansible/pulls/82","id":172723973,"html_url":"https://github.com/Tendrl/tendrl-ansible/pull/82","diff_url":"https://github.com/Tendrl/tendrl-ansible/pull/82.diff","patch_url":"https://github.com/Tendrl/tendrl-ansible/pull/82.patch","issue_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/issues/82","number":82,"state":"open","locked":false,"title":"wip: immutable playbook","user":{"login":"mbukatov","id":4759819,"avatar_url":"https://avatars3.githubusercontent.com/u/4759819?v=4","gravatar_id":"","url":"https://api.github.com/users/mbukatov","html_url":"https://github.com/mbukatov","followers_url":"https://api.github.com/users/mbukatov/followers","following_url":"https://api.github.com/users/mbukatov/following{/other_user}","gists_url":"https://api.github.com/users/mbukatov/gists{/gist_id}","starred_url":"https://api.github.com/users/mbukatov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbukatov/subscriptions","organizations_url":"https://api.github.com/users/mbukatov/orgs","repos_url":"https://api.github.com/users/mbukatov/repos","events_url":"https://api.github.com/users/mbukatov/events{/privacy}","received_events_url":"https://api.github.com/users/mbukatov/received_events","type":"User","site_admin":false},"body":"This change default site.yml.example playbook file to be usable without changes. All ansible variables are now suggested to be placed in the inventory file (or variable file).\r\n\r\nThis is work in progress, waiting for feedback.\r\n\r\ntendrl-bug-id: https://github.com/Tendrl/tendrl-ansible/issues/74","created_at":"2018-03-04T15:09:55Z","updated_at":"2018-03-05T13:48:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a1d351d6e6c55a9f7e00782ca6642485950bc009","assignee":{"login":"mbukatov","id":4759819,"avatar_url":"https://avatars3.githubusercontent.com/u/4759819?v=4","gravatar_id":"","url":"https://api.github.com/users/mbukatov","html_url":"https://github.com/mbukatov","followers_url":"https://api.github.com/users/mbukatov/followers","following_url":"https://api.github.com/users/mbukatov/following{/other_user}","gists_url":"https://api.github.com/users/mbukatov/gists{/gist_id}","starred_url":"https://api.github.com/users/mbukatov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbukatov/subscriptions","organizations_url":"https://api.github.com/users/mbukatov/orgs","repos_url":"https://api.github.com/users/mbukatov/repos","events_url":"https://api.github.com/users/mbukatov/events{/privacy}","received_events_url":"https://api.github.com/users/mbukatov/received_events","type":"User","site_admin":false},"assignees":[{"login":"mbukatov","id":4759819,"avatar_url":"https://avatars3.githubusercontent.com/u/4759819?v=4","gravatar_id":"","url":"https://api.github.com/users/mbukatov","html_url":"https://github.com/mbukatov","followers_url":"https://api.github.com/users/mbukatov/followers","following_url":"https://api.github.com/users/mbukatov/following{/other_user}","gists_url":"https://api.github.com/users/mbukatov/gists{/gist_id}","starred_url":"https://api.github.com/users/mbukatov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbukatov/subscriptions","organizations_url":"https://api.github.com/users/mbukatov/orgs","repos_url":"https://api.github.com/users/mbukatov/repos","events_url":"https://api.github.com/users/mbukatov/events{/privacy}","received_events_url":"https://api.github.com/users/mbukatov/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"r0h4n","id":369941,"avatar_url":"https://avatars0.githubusercontent.com/u/369941?v=4","gravatar_id":"","url":"https://api.github.com/users/r0h4n","html_url":"https://github.com/r0h4n","followers_url":"https://api.github.com/users/r0h4n/followers","following_url":"https://api.github.com/users/r0h4n/following{/other_user}","gists_url":"https://api.github.com/users/r0h4n/gists{/gist_id}","starred_url":"https://api.github.com/users/r0h4n/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/r0h4n/subscriptions","organizations_url":"https://api.github.com/users/r0h4n/orgs","repos_url":"https://api.github.com/users/r0h4n/repos","events_url":"https://api.github.com/users/r0h4n/events{/privacy}","received_events_url":"https://api.github.com/users/r0h4n/received_events","type":"User","site_admin":false},{"login":"julienlim","id":5589919,"avatar_url":"https://avatars1.githubusercontent.com/u/5589919?v=4","gravatar_id":"","url":"https://api.github.com/users/julienlim","html_url":"https://github.com/julienlim","followers_url":"https://api.github.com/users/julienlim/followers","following_url":"https://api.github.com/users/julienlim/following{/other_user}","gists_url":"https://api.github.com/users/julienlim/gists{/gist_id}","starred_url":"https://api.github.com/users/julienlim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/julienlim/subscriptions","organizations_url":"https://api.github.com/users/julienlim/orgs","repos_url":"https://api.github.com/users/julienlim/repos","events_url":"https://api.github.com/users/julienlim/events{/privacy}","received_events_url":"https://api.github.com/users/julienlim/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":{"url":"https://api.github.com/repos/Tendrl/tendrl-ansible/milestones/8","html_url":"https://github.com/Tendrl/tendrl-ansible/milestone/8","labels_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/milestones/8/labels","id":3115524,"number":8,"title":"Milestone 3 (2018)","description":"","creator":{"login":"r0h4n","id":369941,"avatar_url":"https://avatars0.githubusercontent.com/u/369941?v=4","gravatar_id":"","url":"https://api.github.com/users/r0h4n","html_url":"https://github.com/r0h4n","followers_url":"https://api.github.com/users/r0h4n/followers","following_url":"https://api.github.com/users/r0h4n/following{/other_user}","gists_url":"https://api.github.com/users/r0h4n/gists{/gist_id}","starred_url":"https://api.github.com/users/r0h4n/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/r0h4n/subscriptions","organizations_url":"https://api.github.com/users/r0h4n/orgs","repos_url":"https://api.github.com/users/r0h4n/repos","events_url":"https://api.github.com/users/r0h4n/events{/privacy}","received_events_url":"https://api.github.com/users/r0h4n/received_events","type":"User","site_admin":false},"open_issues":3,"closed_issues":3,"state":"open","created_at":"2018-02-14T06:35:08Z","updated_at":"2018-03-05T09:53:02Z","due_on":"2018-03-02T08:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/pulls/82/commits","review_comments_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/pulls/82/comments","review_comment_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/issues/82/comments","statuses_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/statuses/ce30f4dc1be0a8efa289768da58adbdbc5b341dc","head":{"label":"mbukatov:issue_74_immutable_playbook","ref":"issue_74_immutable_playbook","sha":"ce30f4dc1be0a8efa289768da58adbdbc5b341dc","user":{"login":"mbukatov","id":4759819,"avatar_url":"https://avatars3.githubusercontent.com/u/4759819?v=4","gravatar_id":"","url":"https://api.github.com/users/mbukatov","html_url":"https://github.com/mbukatov","followers_url":"https://api.github.com/users/mbukatov/followers","following_url":"https://api.github.com/users/mbukatov/following{/other_user}","gists_url":"https://api.github.com/users/mbukatov/gists{/gist_id}","starred_url":"https://api.github.com/users/mbukatov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbukatov/subscriptions","organizations_url":"https://api.github.com/users/mbukatov/orgs","repos_url":"https://api.github.com/users/mbukatov/repos","events_url":"https://api.github.com/users/mbukatov/events{/privacy}","received_events_url":"https://api.github.com/users/mbukatov/received_events","type":"User","site_admin":false},"repo":{"id":94219101,"name":"tendrl-ansible","full_name":"mbukatov/tendrl-ansible","owner":{"login":"mbukatov","id":4759819,"avatar_url":"https://avatars3.githubusercontent.com/u/4759819?v=4","gravatar_id":"","url":"https://api.github.com/users/mbukatov","html_url":"https://github.com/mbukatov","followers_url":"https://api.github.com/users/mbukatov/followers","following_url":"https://api.github.com/users/mbukatov/following{/other_user}","gists_url":"https://api.github.com/users/mbukatov/gists{/gist_id}","starred_url":"https://api.github.com/users/mbukatov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbukatov/subscriptions","organizations_url":"https://api.github.com/users/mbukatov/orgs","repos_url":"https://api.github.com/users/mbukatov/repos","events_url":"https://api.github.com/users/mbukatov/events{/privacy}","received_events_url":"https://api.github.com/users/mbukatov/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mbukatov/tendrl-ansible","description":"Ansible playbook for Tendrl!","fork":true,"url":"https://api.github.com/repos/mbukatov/tendrl-ansible","forks_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/forks","keys_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/teams","hooks_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/hooks","issue_events_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/issues/events{/number}","events_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/events","assignees_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/assignees{/user}","branches_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/branches{/branch}","tags_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/tags","blobs_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/git/refs{/sha}","trees_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/statuses/{sha}","languages_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/languages","stargazers_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/stargazers","contributors_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/contributors","subscribers_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/subscribers","subscription_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/subscription","commits_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/commits{/sha}","git_commits_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/git/commits{/sha}","comments_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/comments{/number}","issue_comment_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/issues/comments{/number}","contents_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/contents/{+path}","compare_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/merges","archive_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/downloads","issues_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/issues{/number}","pulls_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/pulls{/number}","milestones_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/milestones{/number}","notifications_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/labels{/name}","releases_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/releases{/id}","deployments_url":"https://api.github.com/repos/mbukatov/tendrl-ansible/deployments","created_at":"2017-06-13T14:00:11Z","updated_at":"2018-02-20T18:33:53Z","pushed_at":"2018-03-05T09:51:05Z","git_url":"git://github.com/mbukatov/tendrl-ansible.git","ssh_url":"git@github.com:mbukatov/tendrl-ansible.git","clone_url":"https://github.com/mbukatov/tendrl-ansible.git","svn_url":"https://github.com/mbukatov/tendrl-ansible","homepage":"","size":214,"stargazers_count":0,"watchers_count":0,"language":"Makefile","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"lgpl-2.1","name":"GNU Lesser General Public License v2.1","spdx_id":"LGPL-2.1","url":"https://api.github.com/licenses/lgpl-2.1"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"Tendrl:master","ref":"master","sha":"e67cd8dfcff539c8cad9dd4f573762313229a3ec","user":{"login":"Tendrl","id":19151627,"avatar_url":"https://avatars0.githubusercontent.com/u/19151627?v=4","gravatar_id":"","url":"https://api.github.com/users/Tendrl","html_url":"https://github.com/Tendrl","followers_url":"https://api.github.com/users/Tendrl/followers","following_url":"https://api.github.com/users/Tendrl/following{/other_user}","gists_url":"https://api.github.com/users/Tendrl/gists{/gist_id}","starred_url":"https://api.github.com/users/Tendrl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Tendrl/subscriptions","organizations_url":"https://api.github.com/users/Tendrl/orgs","repos_url":"https://api.github.com/users/Tendrl/repos","events_url":"https://api.github.com/users/Tendrl/events{/privacy}","received_events_url":"https://api.github.com/users/Tendrl/received_events","type":"Organization","site_admin":false},"repo":{"id":78214178,"name":"tendrl-ansible","full_name":"Tendrl/tendrl-ansible","owner":{"login":"Tendrl","id":19151627,"avatar_url":"https://avatars0.githubusercontent.com/u/19151627?v=4","gravatar_id":"","url":"https://api.github.com/users/Tendrl","html_url":"https://github.com/Tendrl","followers_url":"https://api.github.com/users/Tendrl/followers","following_url":"https://api.github.com/users/Tendrl/following{/other_user}","gists_url":"https://api.github.com/users/Tendrl/gists{/gist_id}","starred_url":"https://api.github.com/users/Tendrl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Tendrl/subscriptions","organizations_url":"https://api.github.com/users/Tendrl/orgs","repos_url":"https://api.github.com/users/Tendrl/repos","events_url":"https://api.github.com/users/Tendrl/events{/privacy}","received_events_url":"https://api.github.com/users/Tendrl/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Tendrl/tendrl-ansible","description":"Ansible playbook for Tendrl!","fork":false,"url":"https://api.github.com/repos/Tendrl/tendrl-ansible","forks_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/forks","keys_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/teams","hooks_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/hooks","issue_events_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/issues/events{/number}","events_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/events","assignees_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/assignees{/user}","branches_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/branches{/branch}","tags_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/tags","blobs_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/git/refs{/sha}","trees_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/statuses/{sha}","languages_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/languages","stargazers_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/stargazers","contributors_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/contributors","subscribers_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/subscribers","subscription_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/subscription","commits_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/commits{/sha}","git_commits_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/git/commits{/sha}","comments_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/comments{/number}","issue_comment_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/issues/comments{/number}","contents_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/contents/{+path}","compare_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/merges","archive_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/downloads","issues_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/issues{/number}","pulls_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/pulls{/number}","milestones_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/milestones{/number}","notifications_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/labels{/name}","releases_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/releases{/id}","deployments_url":"https://api.github.com/repos/Tendrl/tendrl-ansible/deployments","created_at":"2017-01-06T14:57:27Z","updated_at":"2018-02-26T08:52:41Z","pushed_at":"2018-03-05T09:51:01Z","git_url":"git://github.com/Tendrl/tendrl-ansible.git","ssh_url":"git@github.com:Tendrl/tendrl-ansible.git","clone_url":"https://github.com/Tendrl/tendrl-ansible.git","svn_url":"https://github.com/Tendrl/tendrl-ansible","homepage":"","size":206,"stargazers_count":1,"watchers_count":1,"language":"Makefile","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":8,"mirror_url":null,"archived":false,"open_issues_count":15,"license":{"key":"lgpl-2.1","name":"GNU Lesser General Public License v2.1","spdx_id":"LGPL-2.1","url":"https://api.github.com/licenses/lgpl-2.1"},"forks":8,"open_issues":15,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Tendrl/tendrl-ansible/pulls/82"},"html":{"href":"https://github.com/Tendrl/tendrl-ansible/pull/82"},"issue":{"href":"https://api.github.com/repos/Tendrl/tendrl-ansible/issues/82"},"comments":{"href":"https://api.github.com/repos/Tendrl/tendrl-ansible/issues/82/comments"},"review_comments":{"href":"https://api.github.com/repos/Tendrl/tendrl-ansible/pulls/82/comments"},"review_comment":{"href":"https://api.github.com/repos/Tendrl/tendrl-ansible/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Tendrl/tendrl-ansible/pulls/82/commits"},"statuses":{"href":"https://api.github.com/repos/Tendrl/tendrl-ansible/statuses/ce30f4dc1be0a8efa289768da58adbdbc5b341dc"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"dahorak"}}