{"action":"created","comment":{"url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/pulls/comments/182533772","pull_request_review_id":113313462,"id":182533772,"diff_hunk":"@@ -4,251 +4,258 @@\n \n > **Time**: Approximately 10 minutes\n \n-In this exercise you will write a task with metadata. Including a task that supports_noop.\n+In this exercise you will write a task with metadata. \n \n # Prerequisites\n-\n-For the following exercises you should already have `bolt` installed and have a few nodes (either Windows or Linux) available to run commands against. The following guides will help:\n+Complete the following before you start this lesson:\n \n 1. [Installing Bolt](../1-installing-bolt)\n 1. [Acquiring nodes](../2-acquiring-nodes)\n 1. [Writing tasks](../5-writing-tasks)\n \n-# Writing your first task with metadata\n+# About task metadata\n+Task metadata files describe task parameters, validate input, and control tasks are executed.  Adding metadata to your tasks helps others use them.  You write metadata for a task in JSON and save it with the same name as your task. For example, if you write a task called `great_metadata.py` its corresponding metadata file is named `great_metadata.json`.  \n \n-Writing metadata helps those that consume your tasks know how to provide input to the tasks that you write.  Metadata for a task is written in JSON and is expected to have the same name as your task with a `.json` extension. So if you write a task called `foo_bar.py` you should write a corresponding `foo_bar.json`.  Let's start by writing a simple task that formats the parameters a user gives it.\n-\n-Save the following file to `modules/exercise8/tasks/great_metadata.py`:\n-```\n-#!/usr/bin/env python\n-\n-\"\"\"\n-This script prints the values and types passed to it via standard in.  It will\n-return a JSON string with a parameters key containing objects that describe\n-the parameters passed by the user.\n-\"\"\"\n-\n-import json\n-import sys\n-\n-def make_serializable(object):\n-  if isinstance(object, unicode):\n-    return object.encode('utf-8')\n-  else:\n-    return object\n-\n-data = json.load(sys.stdin)\n-\n-message = \"Congratulations on writing your metadata!  Here are the keys and the values that you passed to this task.\"\n-\n-result = {'message': message, 'parameters': []}\n-for key in data:\n-    k = make_serializable(key)\n-    v = make_serializable(data[key])\n-    t = type(data[key]).__name__\n-    param = {'key': k, 'value': v, 'type': t}\n-    result['parameters'].append(param)\n-\n-print(json.dumps(result))\n-```\n-\n-Now let's write the accompanying metadata.  We'll specify the parameters as types such as `\"type\": \"Integer\"`  which will help us validate the users input as an `Integer`.  Save the following file to `modules/exercise8/tasks/great_metadata.json`:\n-```\n-{\n-  \"description\": \"An exercise in writing great metadata\",\n-  \"input_method\": \"stdin\",\n-\n-  \"parameters\": {\n-    \"name\": {\n-      \"description\": \"The description for the 'name' parameter\",\n-      \"type\": \"String\"\n-    },\n-    \"recursive\": {\n-      \"description\": \"The description for the 'recursive' parameter\",\n-      \"type\": \"Boolean\"\n-    },\n-    \"action\": {\n-      \"description\": \"The description for the 'action' parameter\",\n-      \"type\": \"Enum[stop, start, restart]\"\n-    },\n-    \"timeout\": {\n-      \"description\": \"The description for the 'timeout' parameter\",\n-      \"type\": \"Optional[Integer]\"\n+# Writing your first task with metadata\n+Write a simple task that formats the parameters a user gives it.\n+\n+1. Save the following file to `modules/exercise8/tasks/great_metadata.py`:\n+\n+    ```\n+    #!/usr/bin/env python\n+    \n+    \"\"\"\n+    This script prints the values and types passed to it via standard in.  It will\n+    return a JSON string with a parameters key containing objects that describe\n+    the parameters passed by the user.\n+    \"\"\"\n+    \n+    import json\n+    import sys\n+    \n+    def make_serializable(object):\n+      if isinstance(object, unicode):\n+        return object.encode('utf-8')\n+      else:\n+        return object\n+    \n+    data = json.load(sys.stdin)\n+    \n+    message = \"Congratulations on writing your metadata!  Here are the keys and the values that you passed to this task.\"\n+    \n+    result = {'message': message, 'parameters': []}\n+    for key in data:\n+        k = make_serializable(key)\n+        v = make_serializable(data[key])\n+        t = type(data[key]).__name__\n+        param = {'key': k, 'value': v, 'type': t}\n+        result['parameters'].append(param)\n+    \n+    print(json.dumps(result))\n+    ```\n+\n+2. Write the accompanying metadata. Specify the parameters as types such as `\"type\": \"Integer\"`  which help validate user input as an `Integer`.  \n+    ```\n+    {\n+      \"description\": \"An exercise in writing great metadata\",\n+      \"input_method\": \"stdin\",\n+    \n+      \"parameters\": {\n+        \"name\": {\n+          \"description\": \"The description for the 'name' parameter\",\n+          \"type\": \"String\"\n+        },\n+        \"recursive\": {\n+          \"description\": \"The description for the 'recursive' parameter\",\n+          \"type\": \"Boolean\"\n+        },\n+        \"action\": {\n+          \"description\": \"The description for the 'action' parameter\",\n+          \"type\": \"Enum[stop, start, restart]\"\n+        },\n+        \"timeout\": {\n+          \"description\": \"The description for the 'timeout' parameter\",\n+          \"type\": \"Optional[Integer]\"\n+        }\n+      }\n     }\n-  }\n-}\n-```\n+    ```\n+3. Save the file to `modules/exercise8/tasks/great_metadata.json`.\n \n # Using your task with metadata\n \n-Use the following command to show that your task is listed with its description.\n-\n-```\n-$ bolt task show --modulepath ./modules\n-...\n-exercise8::great_metadata     An exercise in writing great metadata\n-facter_task                   Inspect the value of system facts\n-install_puppet                Install the puppet 5 agent package\n-...\n-```\n-\n-\n-Now use the bolt task show command to inspect the parameters used by your task.  This will show you the parameters with descriptions and expected type.\n-\n-```\n-$ bolt task show exercise8::great_metadata --modulepath ./modules\n-exercie8::great_metadata - An exercise in writing great metadata\n-\n-USAGE:\n-bolt task run --nodes, -n <node-name> exercise8::great_metadata name=<value> [user=<value>] password=<value> action=<value>\n-\n-PARAMETERS:\n-- name: String\n-    The description for the 'name' parameter\n-- recursive: Boolean\n-    The description for the 'password' parameter\n-- action: Enum['restart', 'start', 'stop']\n-    The description for the 'action' parameter\n-- timeout: Optional[Integer]\n-    The description for the 'timeout' parameter\n-```\n-\n-# Testing our task's metadata validation\n-\n-Bolt can use the types that you have specified in your metadata to validate parameters passed to your task.  Let's attempt to run your task with an incorrect value passed to the `action` parameter.  We will pass the params as a JSON string.\n-\n-```\n-$ bolt task run exercise8::great_metadata --nodes all --modulepath ./modules --params '{\"name\":\"poppey\",\"action\":\"spinach\",\"recursive\":true}'\n-Task exercise8::great_metadata:\n- parameter 'action' expects a match for Enum['restart', 'start', 'stop'], got 'spinach'\n-```\n-\n-If we correct our mistake we can see the task working correctly.\n-```\n-$ bolt task run exercise8::great_metadata --nodes all --modulepath ./modules --params '{\"name\":\"poppey\",\"action\":\"start\",\"recursive\":true}'\n-\n-  {\n-    \"message\": \"Congratulations on writing your metadata!  Here are the keys and the values that you passed to this task.\",\n-    \"parameters\": [\n-      {\n-        \"type\": \"unicode\",\n-        \"value\": \"start\",\n-        \"key\": \"action\"\n-      },\n+1. Run 'bolt task show' to verify that the task you created appears with its description in the list of available tasks.\n+\n+    ```\n+    $ bolt task show --modulepath ./modules\n+    ...\n+    exercise8::great_metadata     An exercise in writing great metadata\n+    facter_task                   Inspect the value of system facts\n+    install_puppet                Install the puppet 5 agent package\n+    ...\n+    ```\n+\n+2. Run `bolt task show <task-name>` to view the parameters that your task uses.\n+\n+    ```\n+    $ bolt task show exercise8::great_metadata --modulepath ./modules\n+    exercie8::great_metadata - An exercise in writing great metadata\n+    \n+    USAGE:\n+    bolt task run --nodes, -n <node-name> exercise8::great_metadata name=<value> [user=<value>] password=<value> action=<value>\n+    \n+    PARAMETERS:\n+    - name: String\n+        The description for the 'name' parameter\n+    - recursive: Boolean\n+        The description for the 'password' parameter\n+    - action: Enum['restart', 'start', 'stop']\n+        The description for the 'action' parameter\n+    - timeout: Optional[Integer]\n+        The description for the 'timeout' parameter\n+    ```\n+\n+# Testing your task's metadata validation\n+\n+Bolt can use the types that you have specified in your metadata to validate parameters passed to your task.  Run your task with an incorrect value for the `action` parameter and see what happens.  \n+\n+1. Run your task and pass the following parameters as a JSON string.\n+\n+    ```\n+    $ bolt task run exercise8::great_metadata --nodes all --modulepath ./modules --params '{\"name\":\"poppey\",\"action\":\"spinach\",\"recursive\":true}'\n+    Task exercise8::great_metadata:\n+     parameter 'action' expects a match for Enum['restart', 'start', 'stop'], got 'spinach'\n+    ```\n+\n+2. Correct the value for the action parameter and run the task again.\n+    ```\n+    $ bolt task run exercise8::great_metadata --nodes all --modulepath ./modules --params '{\"name\":\"poppey\",\"action\":\"start\",\"recursive\":true}'\n+    \n       {\n-        \"type\": \"unicode\",\n-        \"value\": \"poppey\",\n-        \"key\": \"name\"\n-      },\n-      {\n-        \"type\": \"bool\",\n-        \"value\": true,\n-        \"key\": \"recursive\"\n+        \"message\": \"Congratulations on writing your metadata!  Here are the keys and the values that you passed to this task.\",\n+        \"parameters\": [\n+          {\n+            \"type\": \"unicode\",\n+            \"value\": \"start\",\n+            \"key\": \"action\"\n+          },\n+          {\n+            \"type\": \"unicode\",\n+            \"value\": \"poppey\",\n+            \"key\": \"name\"\n+          },\n+          {\n+            \"type\": \"bool\",\n+            \"value\": true,\n+            \"key\": \"recursive\"\n+          }\n+        ]\n+      }\n+    Ran on 1 node in 0.73 seconds\n+    ```\n+\n+# Creating a task that supports no-operation mode (noop)\n+\n+You can write tasks that support that no-operation mode (noop). You use noop to see what changes changes a task would make, but without taking any action.","path":"8-writing-advanced-tasks/README.md","position":283,"original_position":283,"commit_id":"1b7c9544acd695ceaeba527ed7950508c14e20fa","original_commit_id":"1b7c9544acd695ceaeba527ed7950508c14e20fa","user":{"login":"nicklewis","id":115494,"avatar_url":"https://avatars1.githubusercontent.com/u/115494?v=4","gravatar_id":"","url":"https://api.github.com/users/nicklewis","html_url":"https://github.com/nicklewis","followers_url":"https://api.github.com/users/nicklewis/followers","following_url":"https://api.github.com/users/nicklewis/following{/other_user}","gists_url":"https://api.github.com/users/nicklewis/gists{/gist_id}","starred_url":"https://api.github.com/users/nicklewis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nicklewis/subscriptions","organizations_url":"https://api.github.com/users/nicklewis/orgs","repos_url":"https://api.github.com/users/nicklewis/repos","events_url":"https://api.github.com/users/nicklewis/events{/privacy}","received_events_url":"https://api.github.com/users/nicklewis/received_events","type":"User","site_admin":false},"body":"\"that support that\" and \"changes changes\"","created_at":"2018-04-18T18:53:52Z","updated_at":"2018-04-18T19:01:05Z","html_url":"https://github.com/puppetlabs/tasks-hands-on-lab/pull/44#discussion_r182533772","pull_request_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/pulls/44","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/pulls/comments/182533772"},"html":{"href":"https://github.com/puppetlabs/tasks-hands-on-lab/pull/44#discussion_r182533772"},"pull_request":{"href":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/pulls/44"}}},"pull_request":{"url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/pulls/44","id":181977662,"html_url":"https://github.com/puppetlabs/tasks-hands-on-lab/pull/44","diff_url":"https://github.com/puppetlabs/tasks-hands-on-lab/pull/44.diff","patch_url":"https://github.com/puppetlabs/tasks-hands-on-lab/pull/44.patch","issue_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/issues/44","number":44,"state":"open","locked":false,"title":"Copy edits to hands-on-lab","user":{"login":"katelopresti","id":35381747,"avatar_url":"https://avatars3.githubusercontent.com/u/35381747?v=4","gravatar_id":"","url":"https://api.github.com/users/katelopresti","html_url":"https://github.com/katelopresti","followers_url":"https://api.github.com/users/katelopresti/followers","following_url":"https://api.github.com/users/katelopresti/following{/other_user}","gists_url":"https://api.github.com/users/katelopresti/gists{/gist_id}","starred_url":"https://api.github.com/users/katelopresti/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/katelopresti/subscriptions","organizations_url":"https://api.github.com/users/katelopresti/orgs","repos_url":"https://api.github.com/users/katelopresti/repos","events_url":"https://api.github.com/users/katelopresti/events{/privacy}","received_events_url":"https://api.github.com/users/katelopresti/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-04-16T20:22:48Z","updated_at":"2018-04-18T19:01:05Z","closed_at":null,"merged_at":null,"merge_commit_sha":"21e914e4cca8350ddb94f039cc41e27cffb6433c","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/pulls/44/commits","review_comments_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/pulls/44/comments","review_comment_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/pulls/comments{/number}","comments_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/issues/44/comments","statuses_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/statuses/1b7c9544acd695ceaeba527ed7950508c14e20fa","head":{"label":"katelopresti:BOLT-416","ref":"BOLT-416","sha":"1b7c9544acd695ceaeba527ed7950508c14e20fa","user":{"login":"katelopresti","id":35381747,"avatar_url":"https://avatars3.githubusercontent.com/u/35381747?v=4","gravatar_id":"","url":"https://api.github.com/users/katelopresti","html_url":"https://github.com/katelopresti","followers_url":"https://api.github.com/users/katelopresti/followers","following_url":"https://api.github.com/users/katelopresti/following{/other_user}","gists_url":"https://api.github.com/users/katelopresti/gists{/gist_id}","starred_url":"https://api.github.com/users/katelopresti/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/katelopresti/subscriptions","organizations_url":"https://api.github.com/users/katelopresti/orgs","repos_url":"https://api.github.com/users/katelopresti/repos","events_url":"https://api.github.com/users/katelopresti/events{/privacy}","received_events_url":"https://api.github.com/users/katelopresti/received_events","type":"User","site_admin":false},"repo":{"id":129799796,"name":"tasks-hands-on-lab","full_name":"katelopresti/tasks-hands-on-lab","owner":{"login":"katelopresti","id":35381747,"avatar_url":"https://avatars3.githubusercontent.com/u/35381747?v=4","gravatar_id":"","url":"https://api.github.com/users/katelopresti","html_url":"https://github.com/katelopresti","followers_url":"https://api.github.com/users/katelopresti/followers","following_url":"https://api.github.com/users/katelopresti/following{/other_user}","gists_url":"https://api.github.com/users/katelopresti/gists{/gist_id}","starred_url":"https://api.github.com/users/katelopresti/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/katelopresti/subscriptions","organizations_url":"https://api.github.com/users/katelopresti/orgs","repos_url":"https://api.github.com/users/katelopresti/repos","events_url":"https://api.github.com/users/katelopresti/events{/privacy}","received_events_url":"https://api.github.com/users/katelopresti/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/katelopresti/tasks-hands-on-lab","description":"A step-by-step set of exercises to get up and running with Puppet Tasks","fork":true,"url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab","forks_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/forks","keys_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/keys{/key_id}","collaborators_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/teams","hooks_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/hooks","issue_events_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/issues/events{/number}","events_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/events","assignees_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/assignees{/user}","branches_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/branches{/branch}","tags_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/tags","blobs_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/git/refs{/sha}","trees_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/git/trees{/sha}","statuses_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/statuses/{sha}","languages_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/languages","stargazers_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/stargazers","contributors_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/contributors","subscribers_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/subscribers","subscription_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/subscription","commits_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/commits{/sha}","git_commits_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/git/commits{/sha}","comments_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/comments{/number}","issue_comment_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/issues/comments{/number}","contents_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/contents/{+path}","compare_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/compare/{base}...{head}","merges_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/merges","archive_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/downloads","issues_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/issues{/number}","pulls_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/pulls{/number}","milestones_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/milestones{/number}","notifications_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/labels{/name}","releases_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/releases{/id}","deployments_url":"https://api.github.com/repos/katelopresti/tasks-hands-on-lab/deployments","created_at":"2018-04-16T20:12:58Z","updated_at":"2018-04-16T20:13:00Z","pushed_at":"2018-04-16T23:30:02Z","git_url":"git://github.com/katelopresti/tasks-hands-on-lab.git","ssh_url":"git@github.com:katelopresti/tasks-hands-on-lab.git","clone_url":"https://github.com/katelopresti/tasks-hands-on-lab.git","svn_url":"https://github.com/katelopresti/tasks-hands-on-lab","homepage":"https://github.com/puppetlabs/bolt","size":182,"stargazers_count":0,"watchers_count":0,"language":"Shell","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"puppetlabs:master","ref":"master","sha":"5f07b2088feeb500534323a11d070b0794c9f74b","user":{"login":"puppetlabs","id":234268,"avatar_url":"https://avatars0.githubusercontent.com/u/234268?v=4","gravatar_id":"","url":"https://api.github.com/users/puppetlabs","html_url":"https://github.com/puppetlabs","followers_url":"https://api.github.com/users/puppetlabs/followers","following_url":"https://api.github.com/users/puppetlabs/following{/other_user}","gists_url":"https://api.github.com/users/puppetlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/puppetlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/puppetlabs/subscriptions","organizations_url":"https://api.github.com/users/puppetlabs/orgs","repos_url":"https://api.github.com/users/puppetlabs/repos","events_url":"https://api.github.com/users/puppetlabs/events{/privacy}","received_events_url":"https://api.github.com/users/puppetlabs/received_events","type":"Organization","site_admin":false},"repo":{"id":105275680,"name":"tasks-hands-on-lab","full_name":"puppetlabs/tasks-hands-on-lab","owner":{"login":"puppetlabs","id":234268,"avatar_url":"https://avatars0.githubusercontent.com/u/234268?v=4","gravatar_id":"","url":"https://api.github.com/users/puppetlabs","html_url":"https://github.com/puppetlabs","followers_url":"https://api.github.com/users/puppetlabs/followers","following_url":"https://api.github.com/users/puppetlabs/following{/other_user}","gists_url":"https://api.github.com/users/puppetlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/puppetlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/puppetlabs/subscriptions","organizations_url":"https://api.github.com/users/puppetlabs/orgs","repos_url":"https://api.github.com/users/puppetlabs/repos","events_url":"https://api.github.com/users/puppetlabs/events{/privacy}","received_events_url":"https://api.github.com/users/puppetlabs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/puppetlabs/tasks-hands-on-lab","description":"A step-by-step set of exercises to get up and running with Puppet Tasks","fork":false,"url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab","forks_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/forks","keys_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/keys{/key_id}","collaborators_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/teams","hooks_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/hooks","issue_events_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/issues/events{/number}","events_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/events","assignees_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/assignees{/user}","branches_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/branches{/branch}","tags_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/tags","blobs_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/git/refs{/sha}","trees_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/git/trees{/sha}","statuses_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/statuses/{sha}","languages_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/languages","stargazers_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/stargazers","contributors_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/contributors","subscribers_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/subscribers","subscription_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/subscription","commits_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/commits{/sha}","git_commits_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/git/commits{/sha}","comments_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/comments{/number}","issue_comment_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/issues/comments{/number}","contents_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/contents/{+path}","compare_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/compare/{base}...{head}","merges_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/merges","archive_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/downloads","issues_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/issues{/number}","pulls_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/pulls{/number}","milestones_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/milestones{/number}","notifications_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/labels{/name}","releases_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/releases{/id}","deployments_url":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/deployments","created_at":"2017-09-29T13:31:27Z","updated_at":"2018-04-16T21:58:15Z","pushed_at":"2018-04-16T23:30:03Z","git_url":"git://github.com/puppetlabs/tasks-hands-on-lab.git","ssh_url":"git@github.com:puppetlabs/tasks-hands-on-lab.git","clone_url":"https://github.com/puppetlabs/tasks-hands-on-lab.git","svn_url":"https://github.com/puppetlabs/tasks-hands-on-lab","homepage":"https://github.com/puppetlabs/bolt","size":148,"stargazers_count":30,"watchers_count":30,"language":"Shell","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":22,"mirror_url":null,"archived":false,"open_issues_count":8,"license":null,"forks":22,"open_issues":8,"watchers":30,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/pulls/44"},"html":{"href":"https://github.com/puppetlabs/tasks-hands-on-lab/pull/44"},"issue":{"href":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/issues/44"},"comments":{"href":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/issues/44/comments"},"review_comments":{"href":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/pulls/44/comments"},"review_comment":{"href":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/pulls/44/commits"},"statuses":{"href":"https://api.github.com/repos/puppetlabs/tasks-hands-on-lab/statuses/1b7c9544acd695ceaeba527ed7950508c14e20fa"}},"author_association":"NONE"}}
{"actor":{"display_login":"nicklewis"}}