{"action":"created","comment":{"url":"https://api.github.com/repos/eucalyptus/eucaconsole/pulls/comments/27521625","id":27521625,"diff_hunk":"@@ -246,3 +248,267 @@ def get_controller_options_json(self):\n         }))\n \n \n+class CreateELBView(BaseView):\n+    \"\"\"Create ELB wizard\"\"\"\n+    TEMPLATE = '../templates/elbs/elb_wizard.pt'\n+\n+    def __init__(self, request):\n+        super(CreateELBView, self).__init__(request)\n+        self.ec2_conn = self.get_connection()\n+        self.iam_conn = self.get_connection(conn_type='iam')\n+        self.elb_conn = self.get_connection(conn_type='elb')\n+        self.autoscale_conn = self.get_connection(conn_type='autoscale')\n+        self.vpc_conn = self.get_connection(conn_type='vpc')\n+        self.is_vpc_supported = BaseView.is_vpc_supported(request)\n+        self.create_form = CreateELBForm(\n+            self.request, conn=self.ec2_conn, vpc_conn=self.vpc_conn, formdata=self.request.params or None)\n+        self.certificate_form = CertificateForm(self.request, conn=self.ec2_conn, iam_conn=self.iam_conn, elb_conn=self.elb_conn, formdata=self.request.params or None)\n+        self.backend_certificate_form = BackendCertificateForm(self.request, conn=self.ec2_conn, iam_conn=self.iam_conn, elb_conn=self.elb_conn, formdata=self.request.params or None)\n+        filter_keys = ['id', 'name', 'placement', 'state', 'tags', 'vpc_subnet_display', 'vpc_name']\n+        filters_form = ELBInstancesFiltersForm(\n+            self.request, ec2_conn=self.ec2_conn, autoscale_conn=self.autoscale_conn,\n+            iam_conn=None, vpc_conn=self.vpc_conn,\n+            cloud_type=self.cloud_type, formdata=self.request.params or None)\n+        search_facets = filters_form.facets\n+        self.render_dict = dict(\n+            create_form=self.create_form,\n+            certificate_form=self.certificate_form,\n+            backend_certificate_form=self.backend_certificate_form,\n+            security_group_placeholder_text=_(u'Select...'),\n+            is_vpc_supported=self.is_vpc_supported,\n+            avail_zones_placeholder_text=_(u'Select availability zones'),\n+            vpc_subnets_placeholder_text=_(u'Select VPC subnets'),\n+            filter_keys=filter_keys,\n+            search_facets=BaseView.escape_json(json.dumps(search_facets)),\n+            controller_options_json=self.get_controller_options_json(),\n+        )\n+\n+    @view_config(route_name='elb_new', renderer=TEMPLATE)\n+    def elb_view(self):\n+        return self.render_dict\n+\n+    def get_controller_options_json(self):\n+        return BaseView.escape_json(json.dumps({\n+            'resource_name': 'elb',\n+            'wizard_tab_list': self.get_wizard_tab_list(),\n+            'protocol_list': self.get_protocol_list(),\n+            'port_range_pattern':'^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$',\n+            'is_vpc_supported': self.is_vpc_supported,\n+            'default_vpc_network': self.get_default_vpc_network(),\n+            'vpc_subnet_choices': self.get_vpc_subnets(),\n+            'securitygroups_json_endpoint': self.request.route_path('securitygroups_json'),\n+            'instances_json_endpoint': self.request.route_path('instances_json')\n+        }))\n+\n+    def get_wizard_tab_list(self):\n+        tab_list = ()\n+        if self.cloud_type == 'aws' or self.is_vpc_supported:\n+            tab_list = ({ 'title': 'General', 'render': True, 'display_id': 1 }, \n+                        { 'title': 'Network', 'render': True, 'display_id': 2 },\n+                        { 'title': 'Instances', 'render': True, 'display_id': 3 },\n+                        { 'title': 'Health Check', 'render': True, 'display_id': 4 }) \n+        else:\n+            tab_list = ({ 'title': 'General', 'render': True, 'display_id': 1 }, \n+                        { 'title': 'Network', 'render': False, 'display_id': '' },\n+                        { 'title': 'Instances', 'render': True, 'display_id': 2 },\n+                        { 'title': 'Health Check', 'render': True, 'display_id': 3 }) \n+        return tab_list\n+\n+    def get_protocol_list(self):\n+        protocol_list = ()\n+        if self.cloud_type == 'aws':\n+            protocol_list = ({ 'name': 'HTTP', 'value': 'HTTP', 'port': '80' },\n+                             { 'name': 'TCP', 'value': 'TCP', 'port': '80' })\n+        else:\n+            protocol_list = ({ 'name': 'HTTP', 'value': 'HTTP', 'port': '80' },\n+                             { 'name': 'HTTPS', 'value': 'HTTPS', 'port': '443' },\n+                             { 'name': 'TCP', 'value': 'TCP', 'port': '80' },\n+                             { 'name': 'SSL', 'value': 'SSL', 'port': '443' })\n+        return protocol_list\n+\n+\n+    def get_default_vpc_network(self):\n+        default_vpc = self.request.session.get('default_vpc', [])\n+        if self.is_vpc_supported:\n+            if 'none' in default_vpc or 'None' in default_vpc:\n+                if self.cloud_type == 'aws':\n+                    return 'None'\n+                # for euca, return the first vpc on the list\n+                if self.vpc_conn:\n+                    with boto_error_handler(self.request):\n+                        vpc_networks = self.vpc_conn.get_all_vpcs()\n+                        if vpc_networks:\n+                            return vpc_networks[0].id\n+            else:\n+                return default_vpc[0]\n+        return 'None'\n+\n+    def get_vpc_subnets(self):\n+        subnets = []\n+        if self.vpc_conn:\n+            with boto_error_handler(self.request):\n+                vpc_subnets = self.vpc_conn.get_all_subnets()\n+                for vpc_subnet in vpc_subnets:\n+                    subnets.append(dict(\n+                        id=vpc_subnet.id,\n+                        vpc_id=vpc_subnet.vpc_id,\n+                        availability_zone=vpc_subnet.availability_zone,\n+                        state=vpc_subnet.state,\n+                        cidr_block=vpc_subnet.cidr_block,\n+                    ))\n+        return subnets\n+\n+    @view_config(route_name='elb_create', request_method='POST', renderer=TEMPLATE)\n+    def elb_create(self):\n+        if self.create_form.validate():\n+            name = self.request.params.get('name')\n+            elb_listener = self.request.params.get('elb_listener')\n+            certificate_arn = self.request.params.get('certificate_arn') or None\n+            listeners_args = self.get_listeners_args()\n+            vpc_network = self.request.params.get('vpc_network') or None\n+            if vpc_network == 'None':\n+                vpc_network = None\n+            vpc_subnet = self.request.params.get('vpc_subnet') or None\n+            if vpc_subnet == 'None':\n+                vpc_subnet = None\n+            securitygroup = self.request.params.getall('securitygroup') or None\n+            zone = self.request.params.getall('zone') or None\n+            cross_zone_enabled = self.request.params.get('cross_zone_enabled') or False\n+            instances = self.request.params.getall('instances') or None\n+            backend_certificates = self.request.params.get('backend_certificates') or None\n+            print name\n+            print elb_listener\n+            print certificate_arn \n+            print listeners_args\n+            print vpc_network\n+            print vpc_subnet\n+            print securitygroup\n+            print zone\n+            print cross_zone_enabled\n+\t    print instances\n+            print backend_certificates\n+            with boto_error_handler(self.request, self.request.route_path('elbs')):\n+                self.log_request(_(u\"Creating elastic load balancer {0}\").format(name))\n+                if vpc_subnet is None:\n+                    params = dict(complex_listeners=listeners_args)  \n+                    self.elb_conn.create_load_balancer(name, zone, **params)\n+                    self.elb_conn.enable_availability_zones(name, zone)\n+                else:\n+                    params = dict(subnets=vpc_subnet,\n+                              security_groups=securitygroup,\n+                              complex_listeners=listeners_args)  \n+                    self.elb_conn.create_load_balancer(name, None, **params)\n+                self.handle_configure_health_check(name)\n+                self.elb_conn.register_instances(name, instances)\n+                if cross_zone_enabled == 'y':\n+                    self.elb_conn.modify_lb_attribute(name, 'crossZoneLoadBalancing', True)\n+                #TEMP\n+                #if 1 == 1:\n+                if backend_certificates is not None and backend_certificates != '[]':\n+                    self.handle_backend_certificate_create(name)\n+                prefix = _(u'Successfully created elastic load balancer')\n+                msg = u'{0} {1}'.format(prefix, name)\n+                location = self.request.route_path('elbs')\n+                self.request.session.flash(msg, queue=Notification.SUCCESS)\n+                return HTTPFound(location=location)\n+        else:\n+            self.request.error_messages = self.create_form.get_errors_list()\n+            return self.render_dict\n+\n+    def get_listeners_args(self):\n+        listeners_json = self.request.params.get('elb_listener')\n+        certificate_arn = self.request.params.get('certificate_arn') or None\n+        listeners = json.loads(listeners_json) if listeners_json else []\n+        listeners_args = []\n+\n+        for listener in listeners:\n+            from_protocol = listener.get('fromProtocol')\n+            from_port = listener.get('fromPort')\n+            to_protocol = listener.get('toProtocol')\n+            to_port = listener.get('toPort')\n+            if from_protocol == 'HTTPS' or from_protocol == 'SSL':\n+                listeners_args.append((from_port, to_port, from_protocol, to_protocol, certificate_arn))\n+            else:\n+                listeners_args.append((from_port, to_port, from_protocol, to_protocol))\n+\n+        #TEMP\n+        #listeners_args.append((8888, 443, 'HTTP', 'HTTPS'))\n+\n+        return listeners_args\n+\n+    def handle_configure_health_check(self, name):\n+        ping_protocol = self.request.params.get('ping_protocol')\n+        ping_port = self.request.params.get('ping_port')\n+        ping_path = self.request.params.get('ping_path')\n+        response_timeout = self.request.params.get('response_timeout')\n+        time_between_pings = self.request.params.get('time_between_pings')\n+        failures_until_unhealthy = self.request.params.get('failures_until_unhealthy')\n+        passes_until_unhealthy = self.request.params.get('passes_until_unhealthy')\n+        ping_target = u\"{0}:{1}\".format(ping_protocol, ping_port)\n+        if ping_protocol == 'HTTP' or ping_protocol == 'HTTPS':\n+            ping_target = u\"{0}{1}\".format(ping_target, ping_path)\n+        hc = HealthCheck(\n+            timeout=response_timeout,\n+            interval=time_between_pings,\n+            healthy_threshold=passes_until_unhealthy,\n+            unhealthy_threshold=failures_until_unhealthy,\n+            target=ping_target \n+        )\n+        self.elb_conn.configure_health_check(name, hc)\n+\n+    @view_config(route_name='certificate_create', request_method='POST', renderer=TEMPLATE)\n+    def certificate_create(self):\n+        if self.certificate_form.validate():\n+            radio = self.request.params.get('certificate_type_radio')\n+            certificate_name = self.request.params.get('certificate_name')\n+            private_key = self.request.params.get('private_key')\n+            public_key_certificate = self.request.params.get('public_key_certificate')\n+            certificate_chain = self.request.params.get('certificate_chain')\n+            certificates = self.request.params.get('certificates')\n+            with boto_error_handler(self.request):\n+                certificate_result = self.iam_conn.upload_server_cert(certificate_name, public_key_certificate, private_key, cert_chain=None, path=None)\n+                prefix = _(u'Successfully uploaded server certificate')\n+                msg = u'{0} {1}'.format(prefix, certificate_name)\n+                certificate_arn = certificate_result.upload_server_certificate_result.server_certificate_metadata.arn\n+                return JSONResponse(status=200, message=msg, id=certificate_arn)\n+        else:\n+            form_errors = ', '.join(self.certificate_form.get_errors_list())\n+            return JSONResponse(status=400, message=form_errors)  # Validation failure = bad request\n+\n+    def handle_backend_certificate_create(self, elb_name):\n+        backend_certificates_json = self.request.params.get('backend_certificates')\n+        backend_certificates = json.loads(backend_certificates_json) if backend_certificates_json else []\n+        public_policy_attributes = dict() ","path":"eucaconsole/views/elbs.py","position":252,"original_position":252,"commit_id":"de396b7c85cdbf0ddd9444ab4b17edea95ed3f43","original_commit_id":"de396b7c85cdbf0ddd9444ab4b17edea95ed3f43","user":{"login":"kamalgill","id":133923,"avatar_url":"https://avatars.githubusercontent.com/u/133923?v=3","gravatar_id":"","url":"https://api.github.com/users/kamalgill","html_url":"https://github.com/kamalgill","followers_url":"https://api.github.com/users/kamalgill/followers","following_url":"https://api.github.com/users/kamalgill/following{/other_user}","gists_url":"https://api.github.com/users/kamalgill/gists{/gist_id}","starred_url":"https://api.github.com/users/kamalgill/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kamalgill/subscriptions","organizations_url":"https://api.github.com/users/kamalgill/orgs","repos_url":"https://api.github.com/users/kamalgill/repos","events_url":"https://api.github.com/users/kamalgill/events{/privacy}","received_events_url":"https://api.github.com/users/kamalgill/received_events","type":"User","site_admin":false},"body":"@kyolee310 : This variable is unused, so let's remove this line","created_at":"2015-03-31T20:49:35Z","updated_at":"2015-03-31T20:49:35Z","html_url":"https://github.com/eucalyptus/eucaconsole/pull/1326#discussion_r27521625","pull_request_url":"https://api.github.com/repos/eucalyptus/eucaconsole/pulls/1326","_links":{"self":{"href":"https://api.github.com/repos/eucalyptus/eucaconsole/pulls/comments/27521625"},"html":{"href":"https://github.com/eucalyptus/eucaconsole/pull/1326#discussion_r27521625"},"pull_request":{"href":"https://api.github.com/repos/eucalyptus/eucaconsole/pulls/1326"}}},"pull_request":{"url":"https://api.github.com/repos/eucalyptus/eucaconsole/pulls/1326","id":31006530,"html_url":"https://github.com/eucalyptus/eucaconsole/pull/1326","diff_url":"https://github.com/eucalyptus/eucaconsole/pull/1326.diff","patch_url":"https://github.com/eucalyptus/eucaconsole/pull/1326.patch","issue_url":"https://api.github.com/repos/eucalyptus/eucaconsole/issues/1326","number":1326,"state":"open","locked":false,"title":"GUI-1484 Create ELB wizard in progress -- Review Only","user":{"login":"kyolee310","id":1427392,"avatar_url":"https://avatars.githubusercontent.com/u/1427392?v=3","gravatar_id":"","url":"https://api.github.com/users/kyolee310","html_url":"https://github.com/kyolee310","followers_url":"https://api.github.com/users/kyolee310/followers","following_url":"https://api.github.com/users/kyolee310/following{/other_user}","gists_url":"https://api.github.com/users/kyolee310/gists{/gist_id}","starred_url":"https://api.github.com/users/kyolee310/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kyolee310/subscriptions","organizations_url":"https://api.github.com/users/kyolee310/orgs","repos_url":"https://api.github.com/users/kyolee310/repos","events_url":"https://api.github.com/users/kyolee310/events{/privacy}","received_events_url":"https://api.github.com/users/kyolee310/received_events","type":"User","site_admin":false},"body":"https://eucalyptus.atlassian.net/browse/GUI-1484","created_at":"2015-03-12T03:53:33Z","updated_at":"2015-03-31T20:49:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/eucalyptus/eucaconsole/pulls/1326/commits","review_comments_url":"https://api.github.com/repos/eucalyptus/eucaconsole/pulls/1326/comments","review_comment_url":"https://api.github.com/repos/eucalyptus/eucaconsole/pulls/comments{/number}","comments_url":"https://api.github.com/repos/eucalyptus/eucaconsole/issues/1326/comments","statuses_url":"https://api.github.com/repos/eucalyptus/eucaconsole/statuses/de396b7c85cdbf0ddd9444ab4b17edea95ed3f43","head":{"label":"eucalyptus:GUI-1484","ref":"GUI-1484","sha":"de396b7c85cdbf0ddd9444ab4b17edea95ed3f43","user":{"login":"eucalyptus","id":808244,"avatar_url":"https://avatars.githubusercontent.com/u/808244?v=3","gravatar_id":"","url":"https://api.github.com/users/eucalyptus","html_url":"https://github.com/eucalyptus","followers_url":"https://api.github.com/users/eucalyptus/followers","following_url":"https://api.github.com/users/eucalyptus/following{/other_user}","gists_url":"https://api.github.com/users/eucalyptus/gists{/gist_id}","starred_url":"https://api.github.com/users/eucalyptus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eucalyptus/subscriptions","organizations_url":"https://api.github.com/users/eucalyptus/orgs","repos_url":"https://api.github.com/users/eucalyptus/repos","events_url":"https://api.github.com/users/eucalyptus/events{/privacy}","received_events_url":"https://api.github.com/users/eucalyptus/received_events","type":"Organization","site_admin":false},"repo":{"id":13843551,"name":"eucaconsole","full_name":"eucalyptus/eucaconsole","owner":{"login":"eucalyptus","id":808244,"avatar_url":"https://avatars.githubusercontent.com/u/808244?v=3","gravatar_id":"","url":"https://api.github.com/users/eucalyptus","html_url":"https://github.com/eucalyptus","followers_url":"https://api.github.com/users/eucalyptus/followers","following_url":"https://api.github.com/users/eucalyptus/following{/other_user}","gists_url":"https://api.github.com/users/eucalyptus/gists{/gist_id}","starred_url":"https://api.github.com/users/eucalyptus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eucalyptus/subscriptions","organizations_url":"https://api.github.com/users/eucalyptus/orgs","repos_url":"https://api.github.com/users/eucalyptus/repos","events_url":"https://api.github.com/users/eucalyptus/events{/privacy}","received_events_url":"https://api.github.com/users/eucalyptus/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/eucalyptus/eucaconsole","description":"Eucalyptus Management Console","fork":false,"url":"https://api.github.com/repos/eucalyptus/eucaconsole","forks_url":"https://api.github.com/repos/eucalyptus/eucaconsole/forks","keys_url":"https://api.github.com/repos/eucalyptus/eucaconsole/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eucalyptus/eucaconsole/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eucalyptus/eucaconsole/teams","hooks_url":"https://api.github.com/repos/eucalyptus/eucaconsole/hooks","issue_events_url":"https://api.github.com/repos/eucalyptus/eucaconsole/issues/events{/number}","events_url":"https://api.github.com/repos/eucalyptus/eucaconsole/events","assignees_url":"https://api.github.com/repos/eucalyptus/eucaconsole/assignees{/user}","branches_url":"https://api.github.com/repos/eucalyptus/eucaconsole/branches{/branch}","tags_url":"https://api.github.com/repos/eucalyptus/eucaconsole/tags","blobs_url":"https://api.github.com/repos/eucalyptus/eucaconsole/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eucalyptus/eucaconsole/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eucalyptus/eucaconsole/git/refs{/sha}","trees_url":"https://api.github.com/repos/eucalyptus/eucaconsole/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eucalyptus/eucaconsole/statuses/{sha}","languages_url":"https://api.github.com/repos/eucalyptus/eucaconsole/languages","stargazers_url":"https://api.github.com/repos/eucalyptus/eucaconsole/stargazers","contributors_url":"https://api.github.com/repos/eucalyptus/eucaconsole/contributors","subscribers_url":"https://api.github.com/repos/eucalyptus/eucaconsole/subscribers","subscription_url":"https://api.github.com/repos/eucalyptus/eucaconsole/subscription","commits_url":"https://api.github.com/repos/eucalyptus/eucaconsole/commits{/sha}","git_commits_url":"https://api.github.com/repos/eucalyptus/eucaconsole/git/commits{/sha}","comments_url":"https://api.github.com/repos/eucalyptus/eucaconsole/comments{/number}","issue_comment_url":"https://api.github.com/repos/eucalyptus/eucaconsole/issues/comments{/number}","contents_url":"https://api.github.com/repos/eucalyptus/eucaconsole/contents/{+path}","compare_url":"https://api.github.com/repos/eucalyptus/eucaconsole/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eucalyptus/eucaconsole/merges","archive_url":"https://api.github.com/repos/eucalyptus/eucaconsole/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eucalyptus/eucaconsole/downloads","issues_url":"https://api.github.com/repos/eucalyptus/eucaconsole/issues{/number}","pulls_url":"https://api.github.com/repos/eucalyptus/eucaconsole/pulls{/number}","milestones_url":"https://api.github.com/repos/eucalyptus/eucaconsole/milestones{/number}","notifications_url":"https://api.github.com/repos/eucalyptus/eucaconsole/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eucalyptus/eucaconsole/labels{/name}","releases_url":"https://api.github.com/repos/eucalyptus/eucaconsole/releases{/id}","created_at":"2013-10-24T20:31:49Z","updated_at":"2015-03-31T19:36:03Z","pushed_at":"2015-03-31T20:17:07Z","git_url":"git://github.com/eucalyptus/eucaconsole.git","ssh_url":"git@github.com:eucalyptus/eucaconsole.git","clone_url":"https://github.com/eucalyptus/eucaconsole.git","svn_url":"https://github.com/eucalyptus/eucaconsole","homepage":"","size":38457,"stargazers_count":7,"watchers_count":7,"language":"HTML","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":16,"mirror_url":null,"open_issues_count":6,"forks":16,"open_issues":6,"watchers":7,"default_branch":"master"}},"base":{"label":"eucalyptus:master","ref":"master","sha":"4b65a3fe2f75091ff5a2f2e3993261a580ae3633","user":{"login":"eucalyptus","id":808244,"avatar_url":"https://avatars.githubusercontent.com/u/808244?v=3","gravatar_id":"","url":"https://api.github.com/users/eucalyptus","html_url":"https://github.com/eucalyptus","followers_url":"https://api.github.com/users/eucalyptus/followers","following_url":"https://api.github.com/users/eucalyptus/following{/other_user}","gists_url":"https://api.github.com/users/eucalyptus/gists{/gist_id}","starred_url":"https://api.github.com/users/eucalyptus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eucalyptus/subscriptions","organizations_url":"https://api.github.com/users/eucalyptus/orgs","repos_url":"https://api.github.com/users/eucalyptus/repos","events_url":"https://api.github.com/users/eucalyptus/events{/privacy}","received_events_url":"https://api.github.com/users/eucalyptus/received_events","type":"Organization","site_admin":false},"repo":{"id":13843551,"name":"eucaconsole","full_name":"eucalyptus/eucaconsole","owner":{"login":"eucalyptus","id":808244,"avatar_url":"https://avatars.githubusercontent.com/u/808244?v=3","gravatar_id":"","url":"https://api.github.com/users/eucalyptus","html_url":"https://github.com/eucalyptus","followers_url":"https://api.github.com/users/eucalyptus/followers","following_url":"https://api.github.com/users/eucalyptus/following{/other_user}","gists_url":"https://api.github.com/users/eucalyptus/gists{/gist_id}","starred_url":"https://api.github.com/users/eucalyptus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eucalyptus/subscriptions","organizations_url":"https://api.github.com/users/eucalyptus/orgs","repos_url":"https://api.github.com/users/eucalyptus/repos","events_url":"https://api.github.com/users/eucalyptus/events{/privacy}","received_events_url":"https://api.github.com/users/eucalyptus/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/eucalyptus/eucaconsole","description":"Eucalyptus Management Console","fork":false,"url":"https://api.github.com/repos/eucalyptus/eucaconsole","forks_url":"https://api.github.com/repos/eucalyptus/eucaconsole/forks","keys_url":"https://api.github.com/repos/eucalyptus/eucaconsole/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eucalyptus/eucaconsole/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eucalyptus/eucaconsole/teams","hooks_url":"https://api.github.com/repos/eucalyptus/eucaconsole/hooks","issue_events_url":"https://api.github.com/repos/eucalyptus/eucaconsole/issues/events{/number}","events_url":"https://api.github.com/repos/eucalyptus/eucaconsole/events","assignees_url":"https://api.github.com/repos/eucalyptus/eucaconsole/assignees{/user}","branches_url":"https://api.github.com/repos/eucalyptus/eucaconsole/branches{/branch}","tags_url":"https://api.github.com/repos/eucalyptus/eucaconsole/tags","blobs_url":"https://api.github.com/repos/eucalyptus/eucaconsole/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eucalyptus/eucaconsole/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eucalyptus/eucaconsole/git/refs{/sha}","trees_url":"https://api.github.com/repos/eucalyptus/eucaconsole/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eucalyptus/eucaconsole/statuses/{sha}","languages_url":"https://api.github.com/repos/eucalyptus/eucaconsole/languages","stargazers_url":"https://api.github.com/repos/eucalyptus/eucaconsole/stargazers","contributors_url":"https://api.github.com/repos/eucalyptus/eucaconsole/contributors","subscribers_url":"https://api.github.com/repos/eucalyptus/eucaconsole/subscribers","subscription_url":"https://api.github.com/repos/eucalyptus/eucaconsole/subscription","commits_url":"https://api.github.com/repos/eucalyptus/eucaconsole/commits{/sha}","git_commits_url":"https://api.github.com/repos/eucalyptus/eucaconsole/git/commits{/sha}","comments_url":"https://api.github.com/repos/eucalyptus/eucaconsole/comments{/number}","issue_comment_url":"https://api.github.com/repos/eucalyptus/eucaconsole/issues/comments{/number}","contents_url":"https://api.github.com/repos/eucalyptus/eucaconsole/contents/{+path}","compare_url":"https://api.github.com/repos/eucalyptus/eucaconsole/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eucalyptus/eucaconsole/merges","archive_url":"https://api.github.com/repos/eucalyptus/eucaconsole/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eucalyptus/eucaconsole/downloads","issues_url":"https://api.github.com/repos/eucalyptus/eucaconsole/issues{/number}","pulls_url":"https://api.github.com/repos/eucalyptus/eucaconsole/pulls{/number}","milestones_url":"https://api.github.com/repos/eucalyptus/eucaconsole/milestones{/number}","notifications_url":"https://api.github.com/repos/eucalyptus/eucaconsole/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eucalyptus/eucaconsole/labels{/name}","releases_url":"https://api.github.com/repos/eucalyptus/eucaconsole/releases{/id}","created_at":"2013-10-24T20:31:49Z","updated_at":"2015-03-31T19:36:03Z","pushed_at":"2015-03-31T20:17:07Z","git_url":"git://github.com/eucalyptus/eucaconsole.git","ssh_url":"git@github.com:eucalyptus/eucaconsole.git","clone_url":"https://github.com/eucalyptus/eucaconsole.git","svn_url":"https://github.com/eucalyptus/eucaconsole","homepage":"","size":38457,"stargazers_count":7,"watchers_count":7,"language":"HTML","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":16,"mirror_url":null,"open_issues_count":6,"forks":16,"open_issues":6,"watchers":7,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/eucalyptus/eucaconsole/pulls/1326"},"html":{"href":"https://github.com/eucalyptus/eucaconsole/pull/1326"},"issue":{"href":"https://api.github.com/repos/eucalyptus/eucaconsole/issues/1326"},"comments":{"href":"https://api.github.com/repos/eucalyptus/eucaconsole/issues/1326/comments"},"review_comments":{"href":"https://api.github.com/repos/eucalyptus/eucaconsole/pulls/1326/comments"},"review_comment":{"href":"https://api.github.com/repos/eucalyptus/eucaconsole/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/eucalyptus/eucaconsole/pulls/1326/commits"},"statuses":{"href":"https://api.github.com/repos/eucalyptus/eucaconsole/statuses/de396b7c85cdbf0ddd9444ab4b17edea95ed3f43"}}}}