{"action":"created","comment":{"url":"https://api.github.com/repos/SatelliteQE/automation-tools/pulls/comments/81285581","pull_request_review_id":2275751,"id":81285581,"diff_hunk":"@@ -1,367 +1,185 @@\n-\"\"\"A set of upgrade tasks for upgrading Satellite and Capsule.\n+\"\"\"A set of upgrade tasks for upgrading Satellite, Capsule and Client.\n \n Many commands are affected by environment variables. Unless stated otherwise,\n all environment variables are required.\n \"\"\"\n import os\n import sys\n-import time\n-from tasks import (\n-    create_rhevm_instance, delete_rhevm_instance,\n-    sync_capsule_tools_repos_to_upgrade\n-)\n-from tools import copy_ssh_key, host_pings, reboot\n-from automation_tools import (\n-    foreman_debug,\n-    set_yum_debug_level,\n-    setup_satellite_firewall,\n-    setup_capsule_firewall,\n-    subscribe,\n-)\n-from automation_tools.repository import enable_repos, disable_repos\n-from automation_tools.satellite6.capsule import generate_capsule_certs\n-from automation_tools.utils import distro_info, update_packages\n-from fabric.api import env, execute, put, run\n-if sys.version_info[0] is 2:\n-    from StringIO import StringIO  # (import-error) pylint:disable=F0401\n-else:  # pylint:disable=F0401,E0611\n-    from io import StringIO\n+\n+from automation_tools import foreman_debug\n+from capsule import satellite6_capsule_setup, satellite6_capsule_upgrade\n+from client import satellite6_client_setup, satellite6_client_upgrade\n+from fabric.api import execute\n+from satellite import satellite6_setup, satellite6_upgrade\n \n # =============================================================================\n-# Satellite and Capsule Upgrade\n+# Satellite, Capsule and Client Upgrade\n # =============================================================================\n \n \n-def satellite6_upgrade():\n-    \"\"\"Upgrades satellite from old version to latest version.\n-\n-    :param admin_password: A string. Defaults to 'changeme'.\n-        Foreman admin password for hammer commands.\n-\n-    The following environment variables affect this command:\n+def check_necessary_env_variables_for_upgrade(product):\n+    \"\"\"Checks if necessary Environment Variables are provided\n \n-    ADMIN_PASSWORD\n-        Optional, defaults to 'changeme'. Foreman admin password.\n-    BASE_URL\n-        Optional, defaults to available satellite version in CDN.\n-        URL for the compose repository.\n-    TO_VERSION\n-        Satellite version to upgrade to and enable repos while upgrading.\n-        e.g '6.1','6.2'\n+    :param string product: The product name to upgrade\n     \"\"\"\n-    to_version = os.environ.get('TO_VERSION')\n-    rhev_sat_host = os.environ.get('RHEV_SAT_HOST')\n-    base_url = os.environ.get('BASE_URL')\n-    if to_version not in ['6.1', '6.2']:\n-        print('Wrong Satellite Version Provided to upgrade to. '\n-              'Provide one of 6.1, 6.2')\n+    _failure = ''\n+    # ------------------- The upgrade product ----------------------\n+    products = ['satellite', 'capsule', 'client']\n+    if product not in products:\n+        _failure += 'Product name should be one of {0}.\\n'.format(\n+            ', '.join(products))\n+    # -------------------- From which version to upgrade ------------\n+    if os.environ.get('FROM_VERSION') not in ['6.1', '6.0']:\n+        _failure += 'Wrong Upgrade Version Provided to upgrade from. '\n+        'Provide one of 6.1, 6.0.\\n'\n+    # ---------------------- To which version to upgrade ------------\n+    if os.environ.get('TO_VERSION') not in ['6.1', '6.2']:\n+        _failure += 'Wrong Upgrade Version Provided to upgrade to. '\n+        'Provide one of 6.1, 6.2\\n'\n+    # Check If OS is set for creating an instance name in rhevm\n+    os_version = os.environ.get('OS')\n+    if not os_version:\n+        _failure += 'Please provide OS version as rhel7 or rhel6, '\n+        'And retry !'\n+    if not _failure:\n+        print('WARNING! Cannot Proceed Upgrade as:')\n+        print(_failure)\n         sys.exit(1)\n-    # Sync capsule and tools repo\n-    admin_password = os.environ.get('ADMIN_PASSWORD', 'changeme')\n-    # Setting yum stdout log level to be less verbose\n-    set_yum_debug_level()\n-    # Setup firewall rules on Satellite\n-    setup_satellite_firewall()\n-    # Removing rhel-released and rhel-optional repo\n-    run('rm -rf /etc/yum.repos.d/rhel-{optional,released}.repo')\n-    print('Wait till Packages update ... ')\n-    update_packages(quiet=True)\n-    # Rebooting the system to see possible errors\n-    if rhev_sat_host:\n-        reboot(120)\n-    # Setting Satellite to_version Repos\n-    major_ver = distro_info()[1]\n-    # Following disables the old satellite repo and extra repos enabled\n-    # during subscribe e.g Load balancer Repo\n-    disable_repos('*', silent=True)\n-    enable_repos('rhel-{0}-server-rpms'.format(major_ver))\n-    enable_repos('rhel-server-rhscl-{0}-rpms'.format(major_ver))\n-    # If CDN upgrade then enable satellite latest version repo\n-    if base_url is None:\n-        enable_repos('rhel-{0}-server-satellite-{1}-rpms'.format(\n-            major_ver, to_version))\n-    # Else, consider this as Downstream upgrade\n-    else:\n-        # Add Sat6 repo from latest compose\n-        satellite_repo = StringIO()\n-        satellite_repo.write('[sat6]\\n')\n-        satellite_repo.write('name=satellite 6\\n')\n-        satellite_repo.write('baseurl={0}\\n'.format(base_url))\n-        satellite_repo.write('enabled=1\\n')\n-        satellite_repo.write('gpgcheck=0\\n')\n-        put(local_path=satellite_repo,\n-            remote_path='/etc/yum.repos.d/sat6.repo')\n-        satellite_repo.close()\n-    # Stop katello services, except mongod\n-    run('katello-service stop')\n-    if to_version == '6.1':\n-        run('service-wait mongod start')\n-    run('yum clean all', warn_only=True)\n-    # Updating the packages again after setting sat6 repo\n-    print('Wait till packages update ... ')\n-    print('YUM UPDATE started at: {0}'.format(time.ctime()))\n-    update_packages(quiet=False)\n-    print('YUM UPDATE finished at: {0}'.format(time.ctime()))\n-    # Rebooting the system again for possible errors\n-    # Only for RHEV based satellite and not for personal one\n-    if rhev_sat_host:\n-        reboot(120)\n-        if to_version == '6.1':\n-            # Stop the service again which started in restart\n-            # This step is not required with 6.2 upgrade as installer itself\n-            # stop all the services before upgrade\n-            run('katello-service stop')\n-            run('service-wait mongod start')\n-    # Verifying impact of BZ #1357655 on upgrade\n-    if rhev_sat_host:\n-        run('katello-installer --help', quiet=True)\n-    # Running Upgrade\n-    print('SATELLITE UPGRADE started at: {0}'.format(time.ctime()))\n-    if to_version == '6.1':\n-        run('katello-installer --upgrade')\n-    else:\n-        run('satellite-installer --scenario satellite --upgrade')\n-    print('SATELLITE UPGRADE finished at: {0}'.format(time.ctime()))\n-    # Test the Upgrade is successful\n-    run('hammer -u admin -p {0} ping'.format(admin_password), warn_only=True)\n-    # Test The status of all katello services\n-    run('katello-service status', warn_only=True)\n-\n+    return os_version\n \n-def satellite6_capsule_upgrade():\n-    \"\"\"Upgrades capsule from existing version to latest version.\n \n-    The following environment variables affect this command:\n-\n-    ADMIN_PASSWORD\n-        Optional, defaults to 'changeme'. Foreman admin password.\n-    CAPSULE_URL\n-        Optional, defaults to available capsule version in CDN.\n-        URL for capsule of latest compose to upgrade.\n-    FROM_VERSION\n-        Capsule current version, to disable repos while upgrading.\n-        e.g '6.1','6.0'\n-    TO_VERSION\n-        Capsule version to upgrade to and enable repos while upgrading.\n-        e.g '6.1','6.2'\n+def setup_products_for_upgrade(product, os_version):\n+    \"\"\"Sets up product(s) to perform upgrade on\n \n+    :param string product: The product name to setup before upgrade\n+    :param string os_version: The os version on which product is installed\n+        e.g: rhel6, rhel7\n     \"\"\"\n-    sat_host = env.get('satellite_host')\n-    cap_host = env.get('capsule_host')\n-    from_version = os.environ.get('FROM_VERSION')\n-    to_version = os.environ.get('TO_VERSION')\n-    # Setup firewall rules on capsule node\n-    setup_capsule_firewall()\n-    # Setting Capsule61 Repos\n-    major_ver = distro_info()[1]\n-    # Re-register Capsule for 6.2\n-    # AS per host unification feature: if there is a host registered where the\n-    # Host and Content Host are in different organizations (e.g. host not in\n-    # org, and content host in one), the content host will be unregistered as\n-    # part of the upgrade process.\n-    if to_version == '6.2':\n-        ak_name = os.environ.get('CAPSULE_SUBSCRIPTION').split(',')[2].strip(\n-            ) if os.environ.get('CAPSULE_SUBSCRIPTION') else os.environ.get(\n-            'RHEV_CAPSULE_AK')\n-        run('subscription-manager register --org=\"Default_Organization\" '\n-            '--activationkey={0} --force'.format(ak_name))\n-    # if CDN Upgrade enable cdn repo\n-    if os.environ.get('CAPSULE_URL') is None:\n-        enable_repos('rhel-{0}-server-satellite-capsule-{1}-rpms'.format(\n-            major_ver, to_version))\n-    disable_repos('rhel-{0}-server-satellite-capsule-{1}-rpms'.format(\n-        major_ver, from_version))\n-    if from_version == '6.1' and major_ver == '6':\n-        enable_repos('rhel-server-rhscl-{0}-rpms'.format(major_ver))\n-    if from_version == '6.0':\n-        # Stop katello services, except mongod\n-        run('for i in qpidd pulp_workers pulp_celerybeat '\n-            'pulp_resource_manager httpd; do service $i stop; done')\n-    run('yum clean all', warn_only=True)\n-    print('Wait till packages update ... ')\n-    print('YUM UPDATE started at: {0}'.format(time.ctime()))\n-    update_packages(quiet=False)\n-    print('YUM UPDATE finished at: {0}'.format(time.ctime()))\n-    if from_version == '6.0':\n-        run('yum install -y capsule-installer', warn_only=True)\n-        # Copy answer file from katello to capule installer\n-        run('cp /etc/katello-installer/answers.capsule-installer.yaml.rpmsave '\n-            '/etc/capsule-installer/answers.capsule-installer.yaml',\n-            warn_only=True)\n-    # Generates Capsule Certs file on satelltie and copies in capsule\n-    execute(\n-        generate_capsule_certs,\n-        cap_host,\n-        True,\n-        host=sat_host\n-    )\n-    # Copying the capsule cert to capsule\n-    execute(lambda: run(\"scp -o 'StrictHostKeyChecking no' {0}-certs.tar \"\n-                        \"root@{0}:/home/\".format(cap_host)), host=sat_host)\n-    # Rebooting the system to see possible errors\n-    if os.environ.get('RHEV_CAP_HOST'):\n-        reboot(120)\n-        if to_version == '6.1':\n-            # Stopping the services again which started in reboot\n-            run('for i in qpidd pulp_workers pulp_celerybeat '\n-                'pulp_resource_manager httpd; do service $i stop; done')\n-    # Setting Up firewall rules\n-    setup_capsule_firewall()\n-    # Upgrading Katello installer\n-    print('CAPSULE UPGRADE started at: {0}'.format(time.ctime()))\n-    if to_version == '6.1':\n-        run('capsule-installer --upgrade --certs-tar '\n-            '/home/{0}-certs.tar'.format(cap_host))\n-    else:\n-        run('satellite-installer --scenario capsule --upgrade '\n-            '--certs-tar /home/{0}-certs.tar'.format(cap_host))\n-    print('CAPSULE UPGRADE finished at: {0}'.format(time.ctime()))\n-    # Test The status of all katello services\n-    run('katello-service status', warn_only=True)\n+    # ----------------- Satellite Upgrade Setup ------------------\n+    sat_host = satellite6_setup(os_version)\n+    if product == 'capsule':\n+        # -------------------- Capsule Upgrade Setup ----------------\n+        cap_hosts = satellite6_capsule_setup(sat_host, os_version)\n+    if product == 'client':\n+        # -------------- Client Upgrade Setup ------------------\n+        clients6, clients7 = satellite6_client_setup()\n+    return sat_host, cap_hosts, clients6, clients7\n \n \n def product_upgrade(product):\n     \"\"\"Task which upgrades the product.\n \n-    Product is satellite or capsule.\n+    Product is satellite or capsule or client.\n+    If product is satellite then upgrade only satellite\n+    If product is capsule then upgrade satellite and capsule\n+    If product is client then upgrade satellite and client\n+\n+    :param string product: product name wanted to upgrade.\n \n-    :param product: A string. product name wanted to upgrade.\n-    :param sat_image: A string. Openstack Satellite image name\n-        from which instance to create.\n-    :param cap_image: A string. Openstack Capsule image name\n-        from which instance to create.\n+    Environment Variables necessary to proceed Upgrade:\n+    -----------------------------------------------------\n+\n+    FROM_VERSION\n+        The satellite/capsule current version to upgrade to latest.\n+        e.g '6.1','6.0'\n+    TO_VERSION\n+        To which Satellite/Capsule version to upgrade.\n+        e.g '6.1','6.2'\n+    OS\n+        The OS Version on which the satellite is installed.\n+        e.g 'rhel7','rhel6'\n \n-    The following environment variables affect this command:\n+    Environment variables populated from jenkins:\n+    ------------------------------------------------------\n \n     RHN_USERNAME\n         Red Hat Network username to register the system.\n     RHN_PASSWORD\n         Red Hat Network password to register the system.\n     RHN_POOLID\n         Optional. Red Hat Network pool ID. Determines what software will be\n-        available from RHN.\n-    ADMIN_PASSWORD\n-        Optional, defaults to 'changeme'. Foreman admin password.\n+        available from RHN\n     BASE_URL\n         URL for the compose repository.\n     CAPSULE_URL\n         The url for capsule repo from latest satellite compose.\n-        Optional, defaults to latest available capsule version in CDN.\n-    FROM_VERSION\n-        The satellite/capsule current version to upgrade to latest.\n-        e.g '6.1','6.0'\n-    TO_VERSION\n-        To which Satellite/Capsule version to upgrade.\n-        e.g '6.1','6.2'\n-    OS\n-        The OS Version on which the satellite is installed.\n-        e.g 'rhel7','rhel6'\n+        If CDN, defaults to latest available capsule version\n+    TOOLS_URL_RHEL6\n+        The url for rhel6 tools repo from latest satellite compose\n+        If CDN, defaults to latest available tools version\n+    TOOLS_URL_RHEL7\n+        The url for rhel7 tools repo from latest satellite compose\n+        If CDN, defaults to latest available tools version\n+\n+    Environment variables required to run upgrade on Personal Products:\n+    --------------------------------------------------------------------\n+\n     SATELLITE_HOSTNAME\n-        The Satellite hostname to run upgrade on.\n-        Optional, If want to run upgrade on specific satellite.\n+        The Satellite hostname to run upgrade on\n     CAPSULE_HOSTNAME\n-        The Satellite hostname to run upgrade on.\n-        Optional, If want to run upgrade on specific capsule.\n+        The Satellite hostname to run upgrade on\n+    CLIENT6_HOSTS\n+        The RHEL6 clients hostnames to run upgrade on\n+    CLIENT7_HOSTS\n+        The RHEL7 clients hostnames to run upgrade on.\n     CAPSULE_SUBSCRIPTION\n         List of cv_name, environment, ak_name attached to subscription of\n-        capsule in defined sequence.\n+        capsule in defined sequence\n+    CLIENT_SUBSCRIPTION\n+        List of cv_name, environment, ak_name attached to subscription of\n+        client in defined sequence\n+\n+    Environment variables required to run upgrade on RHEVM Products and","path":"automation_tools/satellite6/upgrade/__init__.py","position":359,"original_position":359,"commit_id":"197db7d16b963063239d57834a597e85dc7ba83d","original_commit_id":"197db7d16b963063239d57834a597e85dc7ba83d","user":{"login":"sghai","id":620852,"avatar_url":"https://avatars.githubusercontent.com/u/620852?v=3","gravatar_id":"","url":"https://api.github.com/users/sghai","html_url":"https://github.com/sghai","followers_url":"https://api.github.com/users/sghai/followers","following_url":"https://api.github.com/users/sghai/following{/other_user}","gists_url":"https://api.github.com/users/sghai/gists{/gist_id}","starred_url":"https://api.github.com/users/sghai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sghai/subscriptions","organizations_url":"https://api.github.com/users/sghai/orgs","repos_url":"https://api.github.com/users/sghai/repos","events_url":"https://api.github.com/users/sghai/events{/privacy}","received_events_url":"https://api.github.com/users/sghai/received_events","type":"User","site_admin":false},"body":"`upgrade on RHEVM Setup`","created_at":"2016-09-30T06:44:53Z","updated_at":"2016-09-30T06:44:53Z","html_url":"https://github.com/SatelliteQE/automation-tools/pull/429#discussion_r81285581","pull_request_url":"https://api.github.com/repos/SatelliteQE/automation-tools/pulls/429","_links":{"self":{"href":"https://api.github.com/repos/SatelliteQE/automation-tools/pulls/comments/81285581"},"html":{"href":"https://github.com/SatelliteQE/automation-tools/pull/429#discussion_r81285581"},"pull_request":{"href":"https://api.github.com/repos/SatelliteQE/automation-tools/pulls/429"}}},"pull_request":{"url":"https://api.github.com/repos/SatelliteQE/automation-tools/pulls/429","id":87314489,"html_url":"https://github.com/SatelliteQE/automation-tools/pull/429","diff_url":"https://github.com/SatelliteQE/automation-tools/pull/429.diff","patch_url":"https://github.com/SatelliteQE/automation-tools/pull/429.patch","issue_url":"https://api.github.com/repos/SatelliteQE/automation-tools/issues/429","number":429,"state":"open","locked":false,"title":"Client Upgrade with Reorganized Upgrade Code","user":{"login":"jyejare","id":11752425,"avatar_url":"https://avatars.githubusercontent.com/u/11752425?v=3","gravatar_id":"","url":"https://api.github.com/users/jyejare","html_url":"https://github.com/jyejare","followers_url":"https://api.github.com/users/jyejare/followers","following_url":"https://api.github.com/users/jyejare/following{/other_user}","gists_url":"https://api.github.com/users/jyejare/gists{/gist_id}","starred_url":"https://api.github.com/users/jyejare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jyejare/subscriptions","organizations_url":"https://api.github.com/users/jyejare/orgs","repos_url":"https://api.github.com/users/jyejare/repos","events_url":"https://api.github.com/users/jyejare/events{/privacy}","received_events_url":"https://api.github.com/users/jyejare/received_events","type":"User","site_admin":false},"body":"This PR has :\r\n\r\n1. The most awaited client upgrade (thousands of clients can be installed and upgraded now):\r\n       - Personal satellite Clients Upgrade\r\n       - RHEVM satellite Clients Upgrade\r\n2. The Reorganized upgrade code:\r\n       - Separate module for satellite, capsule and client\r\n       - Functions for setup and upgrade in each module\r\n3. Improvements from Last Upgrade Automation:\r\n       - Now more than one capsules can be upgraded at a time\r\n       - Improvements in some helper functions\r\n\r\nEnjoy !!","created_at":"2016-09-29T13:37:00Z","updated_at":"2016-09-30T06:44:53Z","closed_at":null,"merged_at":null,"merge_commit_sha":"82cf4b05c00cb43a958ed4cbb778fc89c68a4b76","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/SatelliteQE/automation-tools/pulls/429/commits","review_comments_url":"https://api.github.com/repos/SatelliteQE/automation-tools/pulls/429/comments","review_comment_url":"https://api.github.com/repos/SatelliteQE/automation-tools/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SatelliteQE/automation-tools/issues/429/comments","statuses_url":"https://api.github.com/repos/SatelliteQE/automation-tools/statuses/197db7d16b963063239d57834a597e85dc7ba83d","head":{"label":"jyejare:client_upgrade","ref":"client_upgrade","sha":"197db7d16b963063239d57834a597e85dc7ba83d","user":{"login":"jyejare","id":11752425,"avatar_url":"https://avatars.githubusercontent.com/u/11752425?v=3","gravatar_id":"","url":"https://api.github.com/users/jyejare","html_url":"https://github.com/jyejare","followers_url":"https://api.github.com/users/jyejare/followers","following_url":"https://api.github.com/users/jyejare/following{/other_user}","gists_url":"https://api.github.com/users/jyejare/gists{/gist_id}","starred_url":"https://api.github.com/users/jyejare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jyejare/subscriptions","organizations_url":"https://api.github.com/users/jyejare/orgs","repos_url":"https://api.github.com/users/jyejare/repos","events_url":"https://api.github.com/users/jyejare/events{/privacy}","received_events_url":"https://api.github.com/users/jyejare/received_events","type":"User","site_admin":false},"repo":{"id":63147984,"name":"automation-tools","full_name":"jyejare/automation-tools","owner":{"login":"jyejare","id":11752425,"avatar_url":"https://avatars.githubusercontent.com/u/11752425?v=3","gravatar_id":"","url":"https://api.github.com/users/jyejare","html_url":"https://github.com/jyejare","followers_url":"https://api.github.com/users/jyejare/followers","following_url":"https://api.github.com/users/jyejare/following{/other_user}","gists_url":"https://api.github.com/users/jyejare/gists{/gist_id}","starred_url":"https://api.github.com/users/jyejare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jyejare/subscriptions","organizations_url":"https://api.github.com/users/jyejare/orgs","repos_url":"https://api.github.com/users/jyejare/repos","events_url":"https://api.github.com/users/jyejare/events{/privacy}","received_events_url":"https://api.github.com/users/jyejare/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jyejare/automation-tools","description":"A set of tools to help automating testing Foreman with Robottelo (https://github.com/SatelliteQE/robottelo)","fork":true,"url":"https://api.github.com/repos/jyejare/automation-tools","forks_url":"https://api.github.com/repos/jyejare/automation-tools/forks","keys_url":"https://api.github.com/repos/jyejare/automation-tools/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jyejare/automation-tools/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jyejare/automation-tools/teams","hooks_url":"https://api.github.com/repos/jyejare/automation-tools/hooks","issue_events_url":"https://api.github.com/repos/jyejare/automation-tools/issues/events{/number}","events_url":"https://api.github.com/repos/jyejare/automation-tools/events","assignees_url":"https://api.github.com/repos/jyejare/automation-tools/assignees{/user}","branches_url":"https://api.github.com/repos/jyejare/automation-tools/branches{/branch}","tags_url":"https://api.github.com/repos/jyejare/automation-tools/tags","blobs_url":"https://api.github.com/repos/jyejare/automation-tools/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jyejare/automation-tools/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jyejare/automation-tools/git/refs{/sha}","trees_url":"https://api.github.com/repos/jyejare/automation-tools/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jyejare/automation-tools/statuses/{sha}","languages_url":"https://api.github.com/repos/jyejare/automation-tools/languages","stargazers_url":"https://api.github.com/repos/jyejare/automation-tools/stargazers","contributors_url":"https://api.github.com/repos/jyejare/automation-tools/contributors","subscribers_url":"https://api.github.com/repos/jyejare/automation-tools/subscribers","subscription_url":"https://api.github.com/repos/jyejare/automation-tools/subscription","commits_url":"https://api.github.com/repos/jyejare/automation-tools/commits{/sha}","git_commits_url":"https://api.github.com/repos/jyejare/automation-tools/git/commits{/sha}","comments_url":"https://api.github.com/repos/jyejare/automation-tools/comments{/number}","issue_comment_url":"https://api.github.com/repos/jyejare/automation-tools/issues/comments{/number}","contents_url":"https://api.github.com/repos/jyejare/automation-tools/contents/{+path}","compare_url":"https://api.github.com/repos/jyejare/automation-tools/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jyejare/automation-tools/merges","archive_url":"https://api.github.com/repos/jyejare/automation-tools/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jyejare/automation-tools/downloads","issues_url":"https://api.github.com/repos/jyejare/automation-tools/issues{/number}","pulls_url":"https://api.github.com/repos/jyejare/automation-tools/pulls{/number}","milestones_url":"https://api.github.com/repos/jyejare/automation-tools/milestones{/number}","notifications_url":"https://api.github.com/repos/jyejare/automation-tools/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jyejare/automation-tools/labels{/name}","releases_url":"https://api.github.com/repos/jyejare/automation-tools/releases{/id}","deployments_url":"https://api.github.com/repos/jyejare/automation-tools/deployments","created_at":"2016-07-12T10:09:06Z","updated_at":"2016-07-12T10:09:07Z","pushed_at":"2016-09-29T13:27:45Z","git_url":"git://github.com/jyejare/automation-tools.git","ssh_url":"git@github.com:jyejare/automation-tools.git","clone_url":"https://github.com/jyejare/automation-tools.git","svn_url":"https://github.com/jyejare/automation-tools","homepage":"","size":738,"stargazers_count":0,"watchers_count":0,"language":"Python","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":"SatelliteQE:master","ref":"master","sha":"b97bf94cdacd41949d11b5b06829d95fa3aa66d8","user":{"login":"SatelliteQE","id":8754276,"avatar_url":"https://avatars.githubusercontent.com/u/8754276?v=3","gravatar_id":"","url":"https://api.github.com/users/SatelliteQE","html_url":"https://github.com/SatelliteQE","followers_url":"https://api.github.com/users/SatelliteQE/followers","following_url":"https://api.github.com/users/SatelliteQE/following{/other_user}","gists_url":"https://api.github.com/users/SatelliteQE/gists{/gist_id}","starred_url":"https://api.github.com/users/SatelliteQE/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SatelliteQE/subscriptions","organizations_url":"https://api.github.com/users/SatelliteQE/orgs","repos_url":"https://api.github.com/users/SatelliteQE/repos","events_url":"https://api.github.com/users/SatelliteQE/events{/privacy}","received_events_url":"https://api.github.com/users/SatelliteQE/received_events","type":"Organization","site_admin":false},"repo":{"id":22513327,"name":"automation-tools","full_name":"SatelliteQE/automation-tools","owner":{"login":"SatelliteQE","id":8754276,"avatar_url":"https://avatars.githubusercontent.com/u/8754276?v=3","gravatar_id":"","url":"https://api.github.com/users/SatelliteQE","html_url":"https://github.com/SatelliteQE","followers_url":"https://api.github.com/users/SatelliteQE/followers","following_url":"https://api.github.com/users/SatelliteQE/following{/other_user}","gists_url":"https://api.github.com/users/SatelliteQE/gists{/gist_id}","starred_url":"https://api.github.com/users/SatelliteQE/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SatelliteQE/subscriptions","organizations_url":"https://api.github.com/users/SatelliteQE/orgs","repos_url":"https://api.github.com/users/SatelliteQE/repos","events_url":"https://api.github.com/users/SatelliteQE/events{/privacy}","received_events_url":"https://api.github.com/users/SatelliteQE/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SatelliteQE/automation-tools","description":"A set of tools to help automating testing Foreman with Robottelo (https://github.com/SatelliteQE/robottelo)","fork":false,"url":"https://api.github.com/repos/SatelliteQE/automation-tools","forks_url":"https://api.github.com/repos/SatelliteQE/automation-tools/forks","keys_url":"https://api.github.com/repos/SatelliteQE/automation-tools/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SatelliteQE/automation-tools/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SatelliteQE/automation-tools/teams","hooks_url":"https://api.github.com/repos/SatelliteQE/automation-tools/hooks","issue_events_url":"https://api.github.com/repos/SatelliteQE/automation-tools/issues/events{/number}","events_url":"https://api.github.com/repos/SatelliteQE/automation-tools/events","assignees_url":"https://api.github.com/repos/SatelliteQE/automation-tools/assignees{/user}","branches_url":"https://api.github.com/repos/SatelliteQE/automation-tools/branches{/branch}","tags_url":"https://api.github.com/repos/SatelliteQE/automation-tools/tags","blobs_url":"https://api.github.com/repos/SatelliteQE/automation-tools/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SatelliteQE/automation-tools/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SatelliteQE/automation-tools/git/refs{/sha}","trees_url":"https://api.github.com/repos/SatelliteQE/automation-tools/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SatelliteQE/automation-tools/statuses/{sha}","languages_url":"https://api.github.com/repos/SatelliteQE/automation-tools/languages","stargazers_url":"https://api.github.com/repos/SatelliteQE/automation-tools/stargazers","contributors_url":"https://api.github.com/repos/SatelliteQE/automation-tools/contributors","subscribers_url":"https://api.github.com/repos/SatelliteQE/automation-tools/subscribers","subscription_url":"https://api.github.com/repos/SatelliteQE/automation-tools/subscription","commits_url":"https://api.github.com/repos/SatelliteQE/automation-tools/commits{/sha}","git_commits_url":"https://api.github.com/repos/SatelliteQE/automation-tools/git/commits{/sha}","comments_url":"https://api.github.com/repos/SatelliteQE/automation-tools/comments{/number}","issue_comment_url":"https://api.github.com/repos/SatelliteQE/automation-tools/issues/comments{/number}","contents_url":"https://api.github.com/repos/SatelliteQE/automation-tools/contents/{+path}","compare_url":"https://api.github.com/repos/SatelliteQE/automation-tools/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SatelliteQE/automation-tools/merges","archive_url":"https://api.github.com/repos/SatelliteQE/automation-tools/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SatelliteQE/automation-tools/downloads","issues_url":"https://api.github.com/repos/SatelliteQE/automation-tools/issues{/number}","pulls_url":"https://api.github.com/repos/SatelliteQE/automation-tools/pulls{/number}","milestones_url":"https://api.github.com/repos/SatelliteQE/automation-tools/milestones{/number}","notifications_url":"https://api.github.com/repos/SatelliteQE/automation-tools/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SatelliteQE/automation-tools/labels{/name}","releases_url":"https://api.github.com/repos/SatelliteQE/automation-tools/releases{/id}","deployments_url":"https://api.github.com/repos/SatelliteQE/automation-tools/deployments","created_at":"2014-08-01T14:27:34Z","updated_at":"2016-03-31T14:58:31Z","pushed_at":"2016-09-29T13:37:00Z","git_url":"git://github.com/SatelliteQE/automation-tools.git","ssh_url":"git@github.com:SatelliteQE/automation-tools.git","clone_url":"https://github.com/SatelliteQE/automation-tools.git","svn_url":"https://github.com/SatelliteQE/automation-tools","homepage":"","size":1064,"stargazers_count":5,"watchers_count":5,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":19,"mirror_url":null,"open_issues_count":18,"forks":19,"open_issues":18,"watchers":5,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/SatelliteQE/automation-tools/pulls/429"},"html":{"href":"https://github.com/SatelliteQE/automation-tools/pull/429"},"issue":{"href":"https://api.github.com/repos/SatelliteQE/automation-tools/issues/429"},"comments":{"href":"https://api.github.com/repos/SatelliteQE/automation-tools/issues/429/comments"},"review_comments":{"href":"https://api.github.com/repos/SatelliteQE/automation-tools/pulls/429/comments"},"review_comment":{"href":"https://api.github.com/repos/SatelliteQE/automation-tools/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SatelliteQE/automation-tools/pulls/429/commits"},"statuses":{"href":"https://api.github.com/repos/SatelliteQE/automation-tools/statuses/197db7d16b963063239d57834a597e85dc7ba83d"}}}}
{"actor":{"display_login":"sghai"}}