Exemplo n.º 1
0
    def take_action(self, parsed_args):
        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")
        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)

        # contruct paylod for backend
        payload = {}
        payload['opcode'] = 'issu_finalize'
        payload['old_cluster'] = parsed_args.cluster_id_old
        payload['new_cluster'] = parsed_args.cluster_id_new

        if (not parsed_args.no_confirm):
            msg = "Switch from cluster %s to %s? (y/N) :" %(
                      parsed_args.cluster_id_old, parsed_args.cluster_id_new)
            user_input = raw_input(msg).lower()
            if user_input not in ["y", "yes"]:
                sys.exit()
        # end if

        resp = smgrutils.send_REST_request(self.smgr_ip, self.smgr_port,
                                           obj="server/provision",
                                           payload=payload, method="POST")
        self.app.stdout.write("\n" + str(smgrutils.print_rest_response(resp)) + "\n")
    def take_action(self, parsed_args):
        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")
        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)

        rest_api_params = None
        rest_api_params = self.set_server_status(parsed_args)
        if rest_api_params:
            resp = smgrutils.send_REST_request(self.smgr_ip, self.smgr_port, obj="server_status",
                                              match_key=rest_api_params['match_key'],
                                              match_value=rest_api_params['match_value'])
            json_format = getattr(parsed_args, "json", False)
            if json_format:
                self.app.stdout.write(str(smgrutils.print_rest_response(resp)) + "\n")
            else:
                table_format_output = smgrutils.convert_json_to_table(obj="server", json_resp=resp)
                self.app.stdout.write("\n" + str(smgrutils.print_rest_response(str(table_format_output))) + "\n")
    def take_action(self, parsed_args):
        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")
        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)
        rest_api_params = None
        obj = getattr(parsed_args, "which", None)
        if obj == "server":
            rest_api_params = self.delete_server(parsed_args)
        elif obj == "cluster":
            rest_api_params = self.delete_cluster(parsed_args)
        elif obj == "image":
            rest_api_params = self.delete_image(parsed_args)
        elif obj == "tag":
            rest_api_params = self.delete_tag(parsed_args)

        if rest_api_params:
            resp = smgrutils.send_REST_request(self.smgr_ip, self.smgr_port, obj=rest_api_params["object"],
                                              match_key=rest_api_params["match_key"],
                                              match_value=rest_api_params["match_value"],
                                              method="DELETE")
            smgrutils.print_rest_response(resp)
            self.app.stdout.write("\n" + str(smgrutils.print_rest_response(resp)) + "\n")
    def take_action(self, parsed_args):
        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")
        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)

        # contruct paylod for backend
        payload = {}
        payload['opcode'] = 'issu_finalize'
        payload['old_cluster'] = parsed_args.cluster_id_old
        payload['new_cluster'] = parsed_args.cluster_id_new

        if (not parsed_args.no_confirm):
            msg = "Switch from cluster %s to %s? (y/N) :" %(
                      parsed_args.cluster_id_old, parsed_args.cluster_id_new)
            user_input = raw_input(msg).lower()
            if user_input not in ["y", "yes"]:
                sys.exit()
        # end if

        resp = smgrutils.send_REST_request(self.smgr_ip, self.smgr_port,
                                           obj="server/provision",
                                           payload=payload, method="POST")
        self.app.stdout.write("\n" + str(smgrutils.print_rest_response(resp)) + "\n")
    def take_action(self, parsed_args):
        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")
        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)

        rest_api_params = None
        rest_api_params = self.set_server_status(parsed_args)
        if rest_api_params:
            resp = smgrutils.send_REST_request(
                self.smgr_ip,
                self.smgr_port,
                obj="server_status",
                match_key=rest_api_params['match_key'],
                match_value=rest_api_params['match_value'])
            json_format = getattr(parsed_args, "json", False)
            if json_format:
                self.app.stdout.write(
                    str(smgrutils.print_rest_response(resp)) + "\n")
            else:
                table_format_output = smgrutils.convert_json_to_table(
                    obj="server", json_resp=resp)
                self.app.stdout.write("\n" + str(
                    smgrutils.print_rest_response(str(table_format_output))) +
                                      "\n")
Exemplo n.º 6
0
    def take_action(self, parsed_args):
        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")
        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)

        try:
            image_id = getattr(parsed_args, "id", None)
            image_version = getattr(parsed_args, "version", None)
            image_type = getattr(parsed_args, "type", None)
            image_category = getattr(parsed_args, "category", None)
            openstack_sku = ''
            if getattr(parsed_args, "openstack_sku", None):
                openstack_sku = getattr(parsed_args, "openstack_sku", None)
            kickstart = kickseed = ''
            if getattr(parsed_args, "kickstart", None):
                kickstart = getattr(parsed_args, "kickstart", None)
            # end args.kickstart
            if getattr(parsed_args, "kickseed", None):
                kickseed = getattr(parsed_args, "kickseed", None)
            # end args.kickseed
            file_name = getattr(parsed_args, "file_name", None)
            payload = dict()
            payload['id'] = image_id
            payload['version'] = image_version
            payload['type'] = image_type
            payload['category'] = image_category
            payload["file"] = (pycurl.FORM_FILE, file_name)
            if openstack_sku:
                payload["openstack_sku"] = openstack_sku
            if kickstart:
                payload["kickstart"] = (pycurl.FORM_FILE, kickstart)
            if kickseed:
                payload["kickseed"] = (pycurl.FORM_FILE, kickseed)
            for param in payload:
                if not payload[param]:
                    self.app.stdout.write("\nMissing mandatory parameter: " +
                                          str(param) + "\n")
                    sys.exit(0)
            if image_id:
                resp = smgrutils.send_REST_request(self.smgr_ip,
                                                   self.smgr_port,
                                                   obj="image/upload",
                                                   payload=payload,
                                                   method="PUT")
                self.app.stdout.write(
                    "\n" + str(smgrutils.print_rest_response(resp)) + "\n")
        except Exception as e:
            sys.exit("Exception: %s : Error uploading image" % e.message)
    def take_action(self, parsed_args):
        detail = getattr(parsed_args, 'detail', None)
        rest_api_params = {}

        # end except
        if parsed_args.which == "server":
            rest_api_params = self.show_server(parsed_args)
        elif parsed_args.which == "image":
            rest_api_params = self.show_image(parsed_args)
        elif parsed_args.which == "cluster":
            rest_api_params = self.show_cluster(parsed_args)
        elif parsed_args.which == 'tag':
            rest_api_params = self.show_tag()
        elif parsed_args.which == 'all':
            rest_api_params = self.show_all()
        elif parsed_args.which == 'monitoring':
            rest_api_params = mon_querying_obj.show_mon_details(parsed_args)
        elif parsed_args.which == 'inventory':
            rest_api_params = inv_querying_obj.show_inv_details(parsed_args)
        elif parsed_args.which == "columns":
            rest_api_params = self.show_columns(parsed_args)

        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")
        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)
        resp = smgrutils.send_REST_request(self.smgr_ip, self.smgr_port, rest_api_params=rest_api_params,
                                          detail=detail, method='GET')

        json_format = getattr(parsed_args, "json", False)

        detail = getattr(parsed_args, "detail", None)
        if detail:
            json_format = True

        if (parsed_args.which == 'monitoring' or parsed_args.which == 'inventory') and not rest_api_params["select"]:
            json_format = True
        elif parsed_args.which == 'all':
            json_format = True
        elif parsed_args.which == "columns":
            json_format = True

        if resp.startswith("Error"):
            self.app.stdout.write(resp + "\n")
        elif json_format:
            self.app.stdout.write(str(smgrutils.print_rest_response(resp)) + "\n")
        else:
            table_format_output = smgrutils.convert_json_to_table(parsed_args.which, resp, rest_api_params["select"])
            self.app.stdout.write(str(table_format_output) + "\n")
Exemplo n.º 8
0
    def take_action(self, parsed_args):
        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")
        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)

        match_key = None
        match_value = None
        payload = {}
        if getattr(parsed_args, "server_id", None):
            match_key = 'id'
            match_value = getattr(parsed_args, "server_id", None)
        elif getattr(parsed_args, "cluster_id", None):
            match_key = 'cluster_id'
            match_value = getattr(parsed_args, "cluster_id", None)
        elif getattr(parsed_args, "server_id", None):
            match_key = 'tag'
            match_value = getattr(parsed_args, "cluster_id", None)
        elif getattr(parsed_args, "server_id", None):
            match_key = 'where'
            match_value = getattr(parsed_args, "cluster_id", None)
        else:
            pass

        payload['base_image_id'] = getattr(parsed_args, "base_image_id", None)
        payload['package_image_id'] = getattr(parsed_args, "package_image_id", None)

        if getattr(parsed_args, "no_reboot", None):
            payload['no_reboot'] = "y"
        if match_key:
            payload[match_key] = match_value

        if not getattr(parsed_args, "no_confirm", None):
            if getattr(parsed_args, "base_image_id", None):
                image_str = getattr(parsed_args, "base_image_id", None)
            else:
                image_str = "configured"
            msg = "Reimage servers (%s:%s) with %s? (y/N) :" % (
                match_key, match_value, image_str)
            user_input = raw_input(msg).lower()
            if user_input not in ["y", "yes"]:
                sys.exit()
        # end if

        if payload:
            #self.app.print_error_message_and_quit("Payload = " + str(payload) + "\n\n")
            resp = smgrutils.send_REST_request(self.smgr_ip, self.smgr_port, obj="server/reimage",
                                               payload=payload, method="POST")
            self.app.stdout.write("\n" + str(smgrutils.print_rest_response(resp)) + "\n")
Exemplo n.º 9
0
    def take_action(self, parsed_args):
        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")
        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)
        match_key = None
        match_value = None
        match_param = None
        payload = {}

        if getattr(parsed_args, "server_id", None):
            match_key = 'id'
            match_value = getattr(parsed_args, "server_id", None)
        elif getattr(parsed_args, "cluster_id", None):
            match_key = 'cluster_id'
            match_value = getattr(parsed_args, "cluster_id", None)
        elif getattr(parsed_args, "tag", None):
            match_key = 'tag'
            match_value = getattr(parsed_args, "tag", None)
        elif getattr(parsed_args, "where", None):
            match_key = 'where'
            match_value = getattr(parsed_args, "where", None)
        else:
            pass

        if match_key:
            payload[match_key] = match_value
        if getattr(parsed_args, "net_boot", None):
            payload['net_boot'] = "y"

        if not getattr(parsed_args, "no_confirm", None):
            msg = "Restart servers (%s:%s)? (y/N) :" % (match_key, match_value)
            user_input = raw_input(msg).lower()
            if user_input not in ["y", "yes"]:
                sys.exit()
        # end if

        if payload:
            resp = smgrutils.send_REST_request(self.smgr_ip,
                                               self.smgr_port,
                                               obj="server/restart",
                                               payload=payload,
                                               method="POST")
            self.app.stdout.write("\n" +
                                  str(smgrutils.print_rest_response(resp)) +
                                  "\n")
    def take_action(self, parsed_args):
        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")
        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)

        try:
            image_id = getattr(parsed_args, "id", None)
            image_version = getattr(parsed_args, "version", None)
            image_type = getattr(parsed_args, "type", None)
            image_category = getattr(parsed_args, "category", None)
            openstack_sku = ''
            if getattr(parsed_args, "openstack_sku", None):
                openstack_sku = getattr(parsed_args, "openstack_sku", None)
            kickstart = kickseed = ''
            if getattr(parsed_args, "kickstart", None):
                kickstart = getattr(parsed_args, "kickstart", None)
            # end args.kickstart
            if getattr(parsed_args, "kickseed", None):
                kickseed = getattr(parsed_args, "kickseed", None)
            # end args.kickseed
            file_name = getattr(parsed_args, "file_name", None)
            payload = dict()
            payload['id'] = image_id
            payload['version'] = image_version
            payload['type'] = image_type
            payload['category'] = image_category
            payload["file"] = (pycurl.FORM_FILE, file_name)
            if openstack_sku:
                payload["openstack_sku"] = openstack_sku
            if kickstart:
                payload["kickstart"] = (pycurl.FORM_FILE, kickstart)
            if kickseed:
                payload["kickseed"] = (pycurl.FORM_FILE, kickseed)
            for param in payload:
                if not payload[param]:
                    self.app.stdout.write("\nMissing mandatory parameter: " + str(param) + "\n")
                    sys.exit(0)
            if image_id:
                resp = smgrutils.send_REST_request(self.smgr_ip, self.smgr_port, obj="image/upload",
                                                   payload=payload, method="PUT")
                self.app.stdout.write("\n" + str(smgrutils.print_rest_response(resp)) + "\n")
        except Exception as e:
            sys.exit("Exception: %s : Error uploading image" % e.message)
    def take_action(self, parsed_args):
        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")
        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)
        match_key = None
        match_value = None
        match_param = None
        payload = {}

        if getattr(parsed_args, "server_id", None):
            match_key = 'id'
            match_value = getattr(parsed_args, "server_id", None)
        elif getattr(parsed_args, "cluster_id", None):
            match_key = 'cluster_id'
            match_value = getattr(parsed_args, "cluster_id", None)
        elif getattr(parsed_args, "tag", None):
            match_key = 'tag'
            match_value = getattr(parsed_args, "tag", None)
        elif getattr(parsed_args, "where", None):
            match_key = 'where'
            match_value = getattr(parsed_args, "where", None)
        else:
            pass

        if match_key:
            payload[match_key] = match_value
        if getattr(parsed_args, "net_boot", None):
            payload['net_boot'] = "y"

        if not getattr(parsed_args, "no_confirm", None):
            msg = "Restart servers (%s:%s)? (y/N) :" % (
                match_key, match_value)
            user_input = raw_input(msg).lower()
            if user_input not in ["y", "yes"]:
                sys.exit()
        # end if

        if payload:
            resp = smgrutils.send_REST_request(self.smgr_ip, self.smgr_port, obj="server/restart",
                                               payload=payload, method="POST")
            self.app.stdout.write("\n" + str(smgrutils.print_rest_response(resp)) + "\n")
Exemplo n.º 12
0
    def take_action(self, parsed_args):
        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")
        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)

        payload = {}
        match_key = None
        match_value = None
        if getattr(parsed_args, "server_id", None):
            match_key = 'id'
            match_value = getattr(parsed_args, "server_id", None)
        elif getattr(parsed_args, "cluster_id", None):
            match_key = 'cluster_id'
            match_value = getattr(parsed_args, "cluster_id", None)
        elif getattr(parsed_args, "tag", None):
            match_key = 'tag'
            match_value = getattr(parsed_args, "tag", None)
        else:
            pass

        if match_key:
            payload[match_key] = match_value

        if not getattr(parsed_args, "no_confirm", False):
            msg = "Run Inventory on servers matching: (%s:%s)? (y/N) :" % (
                match_key, match_value)
            user_input = raw_input(msg).lower()
            if user_input not in ["y", "yes"]:
                sys.exit()
        # end if

        if payload:
            resp = smgrutils.send_REST_request(self.smgr_ip, self.smgr_port, obj="run_inventory",
                                               payload=payload, method="POST")
            if "Error" not in resp:
                self.app.stdout.write("\n" + str(smgrutils.print_rest_response(resp)) + "\n")
            else:
                self.app.stdout.write("\nError Returned:\n" + str(smgrutils.print_rest_response(resp)) +
                                      "\nPlease check that inventory and monitoring have been configured correctly.\n")
Exemplo n.º 13
0
 def verify_edited_tags(self, obj, obj_payload):
     existing_tags = smgrutils.send_REST_request(
         self.smgr_ip, self.smgr_port,
         obj="tag", detail=True, method="GET")
     tag_dict = json.loads(existing_tags)
     tag_dict_idx_list = [str(key) for key in tag_dict.keys()]
     rev_tag_dict = dict((v, k) for k, v in tag_dict.iteritems())
     allowed_tag_indices = self.object_dict["tag"].keys()
     if obj == "tag":
         for tag_idx in obj_payload:
             if tag_idx not in allowed_tag_indices:
                 self.app.print_error_message_and_quit("\nThe tag index " + str(tag_idx) +
                                                       " is not a valid tag index. Please use tags1-7\n\n")
             elif tag_idx not in tag_dict_idx_list:
                 self.app.print_error_message_and_quit("\nThe tag " + str(tag_idx) +
                                                       " with this index hasn't been added, it cannot be edited."
                                                       "Use the add tag command to add a tag to this index.\n"
                                                       "List is" + str(tag_dict_idx_list) + "\n")
     elif obj == "server":
         edited_tag_dict = obj_payload["tag"]
         edited_tags = edited_tag_dict.keys()
         for tag in edited_tags:
             if tag not in rev_tag_dict:
                 self.app.print_error_message_and_quit("\nThe tag " + str(tag) +
                                                       " has been added to server config but hasn't been"
                                                       " added as a user defined tag. Add this tag first\n\n")
Exemplo n.º 14
0
 def get_default_object(self, obj):
     # Get the code defaults from two levels:
     # 1. defaults in ini file
     # 2. Template can be supplied with template id as parameter
     # Precedence order: backend_code_defaults < ini file at backend < ini file at client < template < json
     payload = {}
     resp = smgrutils.send_REST_request(
         self.smgr_ip, self.smgr_port, obj="tag", payload=payload, detail=True, method="GET"
     )
     tag_dict = json.loads(resp)
     rev_tag_dict = dict((v, k) for k, v in tag_dict.iteritems())
     default_object = {}
     config_ini_object_defaults = self.get_object_config_ini_entries(obj)
     if not config_ini_object_defaults:
         return default_object
     default_object["parameters"] = {}
     default_object["tag"] = {}
     for key, value in config_ini_object_defaults.iteritems():
         if key in self.object_dict[obj]:
             default_object[key] = value
         elif key in self.object_dict[obj]["parameters"]:
             default_object["parameters"][key] = value
         elif key in rev_tag_dict:
             default_object["tag"][key] = value
     return default_object
Exemplo n.º 15
0
 def get_default_object(self, obj):
     # Get the code defaults from two levels:
     # 1. defaults in ini file
     # 2. Template can be supplied with template id as parameter
     # Precedence order: backend_code_defaults < ini file at backend < ini file at client < template < json
     payload = {}
     resp = smgrutils.send_REST_request(self.smgr_ip,
                                        self.smgr_port,
                                        obj="tag",
                                        payload=payload,
                                        detail=True,
                                        method="GET")
     tag_dict = json.loads(resp)
     rev_tag_dict = dict((v, k) for k, v in tag_dict.iteritems())
     default_object = {}
     config_ini_object_defaults = self.get_object_config_ini_entries(obj)
     if not config_ini_object_defaults:
         return default_object
     default_object["parameters"] = {}
     default_object["tag"] = {}
     for key, value in config_ini_object_defaults.iteritems():
         if key in self.object_dict[obj]:
             default_object[key] = value
         elif key in self.object_dict[obj]["parameters"]:
             default_object["parameters"][key] = value
         elif key in rev_tag_dict:
             default_object["tag"][key] = value
     return default_object
Exemplo n.º 16
0
 def auto_complete_command(self, chosen_command, line, last_arg=None):
     obj = None
     files = None
     smgr_dict = self.parent_app.get_smgr_config()
     ip = smgr_dict["smgr_ip"]
     port = smgr_dict["smgr_port"]
     rest_api_params = None
     return_list = list()
     if chosen_command in ['reimage', 'provision']:
         obj = 'image'
         rest_api_params = {
             'object': "image",
             'select': "id,category"
         }
     else:
         files = self.auto_complete_file_list(last_arg)
     if obj:
         rest_api_params["match_key"] = None
         rest_api_params["match_value"] = None
         resp = smgrutils.send_REST_request(ip, port, rest_api_params=rest_api_params, detail=False, method="GET")
         if resp:
             json_dict = ast.literal_eval(resp)
             new_json_dict = dict()
             new_json_dict[obj] = list()
             for data_dict in json_dict[obj]:
                 new_dict = dict()
                 data_dict = dict(data_dict)
                 if (data_dict["category"] == "image" and chosen_command == "reimage") or \
                         (data_dict["category"] == "package" and chosen_command == "provision"):
                     new_dict["id"] = data_dict["id"]
                     new_json_dict[obj].append(new_dict)
             auto_fill_list = smgrutils.convert_json_to_list(obj=obj, json_resp=new_json_dict)
             return_list = [
                 str(str(line).rsplit(' ', 1)[0] + " " + af_option)
                 for af_option in auto_fill_list
                 if str(str(line).rsplit(' ', 1)[0] + " " + af_option).startswith(line)
             ]
     elif files:
         return_list = [
             str(str(line).rsplit(' ', 1)[0] + " " + f)
             for f in files
             if str(str(line).rsplit(' ', 1)[0] + " " + f).startswith(line)
         ]
     return return_list
Exemplo n.º 17
0
    def take_action(self, parsed_args):
        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")
        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)

        # contruct paylod for backend
        payload = {}
        payload['opcode'] = 'issu'
        payload['old_cluster'] = parsed_args.cluster_id_old
        payload['new_cluster'] = parsed_args.cluster_id_new
        payload['new_image'] = parsed_args.new_image
        if parsed_args.compute_all:
            payload['compute_tag'] = "all_computes"
        elif parsed_args.tag:
            payload['compute_tag'] = parsed_args.tag
        elif parsed_args.server_id:
            payload['compute_tag'] = "__server__id__" + parsed_args.server_id
        else:
            payload['compute_tag'] = ""

        if (not parsed_args.no_confirm):
            msg = "Upgrade cluster %s to %s, Contrail Image:%s? (y/N) :" %(
                         parsed_args.cluster_id_old, parsed_args.cluster_id_new,
                         parsed_args.new_image)
            user_input = raw_input(msg).lower()
            if user_input not in ["y", "yes"]:
                sys.exit()
        # end if

        resp = smgrutils.send_REST_request(self.smgr_ip, self.smgr_port,
                                           obj="server/provision",
                                           payload=payload, method="POST")
        self.app.stdout.write("\n" + str(smgrutils.print_rest_response(resp)) + "\n")
Exemplo n.º 18
0
    def object_exists(self, obj, object_id_key, object_id_value, payload):
        # post a request for each object
        resp = smgrutils.send_REST_request(self.smgr_ip, self.smgr_port,
                                 obj=obj, payload=payload, match_key=object_id_key,
                                 match_value=object_id_value, detail=True, method="GET")
        if resp:
            smgr_object_dict = json.loads(resp)
            if len(smgr_object_dict[obj]):
                return True

        return False
    def object_exists(self, obj, object_id_key, object_id_value, payload):
        # post a request for each object
        resp = smgrutils.send_REST_request(self.smgr_ip, self.smgr_port,
                                 obj=obj, payload=payload, match_key=object_id_key,
                                 match_value=object_id_value, detail=True, method="GET")
        if resp:
            smgr_object_dict = json.loads(resp)
            if len(smgr_object_dict[obj]):
                return True

        return False
Exemplo n.º 20
0
 def verify_added_tags(self, smgr_obj, obj_payload):
     existing_tags = smgrutils.send_REST_request(self.smgr_ip, self.smgr_port, obj="tag", detail=True, method="GET")
     tag_dict = json.loads(existing_tags)
     rev_tag_dict = dict((v, k) for k, v in tag_dict.iteritems())
     allowed_tags = self.object_dict["tag"].keys()
     if smgr_obj == "tag":
         for tag_idx in obj_payload:
             if tag_idx not in allowed_tags:
                 self.app.print_error_message_and_quit(
                     "\nThe tag " + str(tag_idx) + " is not a valid tag index. Please use tags1-7\n\n"
                 )
     elif smgr_obj == "server":
         added_tag_dict = obj_payload["tag"]
         added_tags = added_tag_dict.keys()
         for tag in added_tags:
             if tag not in rev_tag_dict:
                 self.app.print_error_message_and_quit(
                     "\nThe tag " + str(tag) + " has been added to server config but hasn't been"
                     " added as a user defined tag. Add this tag first\n\n"
                 )
Exemplo n.º 21
0
 def verify_added_tags(self, smgr_obj, obj_payload):
     existing_tags = smgrutils.send_REST_request(
         self.smgr_ip, self.smgr_port,
         obj="tag", detail=True, method="GET")
     tag_dict = json.loads(existing_tags)
     rev_tag_dict = dict((v, k) for k, v in tag_dict.iteritems())
     allowed_tags = self.object_dict["tag"].keys()
     if smgr_obj == "tag":
         for tag_idx in obj_payload:
             if tag_idx not in allowed_tags:
                 self.app.print_error_message_and_quit("\nThe tag " + str(tag_idx) +
                                                       " is not a valid tag index. Please use tags1-7\n\n")
     elif smgr_obj == "server":
         added_tag_dict = obj_payload["tag"]
         added_tags = added_tag_dict.keys()
         for tag in added_tags:
             if tag not in rev_tag_dict:
                 self.app.print_error_message_and_quit("\nThe tag " + str(tag) +
                                                       " has been added to server config but hasn't been"
                                                       " added as a user defined tag. Add this tag first\n\n")
Exemplo n.º 22
0
    def take_action(self, parsed_args, remaining_args=None):

        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")

        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)

        smgr_obj = getattr(parsed_args, "object", None)
        payload = None

        try:
            if getattr(parsed_args, "file_name", None) and smgr_obj in self.smgr_objects:
                payload = json.load(open(parsed_args.file_name))
                if smgr_obj == "tag":
                    self.verify_added_tags(smgr_obj, payload)
                elif smgr_obj == "config":
                    for obj in payload.keys():
                        for obj_payload in payload[obj]:
                            if "id" not in obj_payload:
                                self.app.print_error_message_and_quit("No id specified for object %s being added\n" % (obj))
                else:
                    for obj_payload in payload[str(smgr_obj)]:
                        if "tag" in obj_payload and smgr_obj == "server":
                            self.verify_added_tags(smgr_obj, obj_payload)
                        if "id" not in obj_payload and (smgr_obj != "tag" and smgr_obj != "dhcp_host" and smgr_obj != "dhcp_subnet"):
                            self.app.print_error_message_and_quit("No id specified for object being added\n")
            elif not (getattr(parsed_args, "id", None) or getattr(parsed_args, "mac_address", None)) \
                    and smgr_obj != "tag" and smgr_obj != "dhcp_subnet":
                # Check if parsed args has id for object
                self.app.print_error_message_and_quit("\nYou need to specify the id or mac_address to add an object"
                                                      " (Arguement --id/--mac_address).\n")
            elif smgr_obj not in self.smgr_objects:
                self.app.print_error_message_and_quit(
                    "\nThe object: " + str(smgr_obj) + " is not a valid one.\n")
            elif smgr_obj == "tag":
                payload = self.add_tag(parsed_args, remaining_args)
                self.verify_added_tags(smgr_obj, payload)
            else:
                payload = {}
                payload[smgr_obj] = list()
                # Collect object payload from parsed_args and remaining args
                payload[smgr_obj].append(self.add_object(smgr_obj, parsed_args, remaining_args))
                # Verify tags and mandatory params added for given object
                for obj_payload in payload[smgr_obj]:
                    if "tag" in obj_payload and smgr_obj == "server":
                        self.verify_added_tags(smgr_obj, obj_payload)
                    mandatory_params_set = set(self.mandatory_params[smgr_obj])
                    added_params_set = set(obj_payload.keys())
                    if mandatory_params_set.difference(added_params_set):
                        self.app.stdout.write("\nMandatory parameters for object " + str(smgr_obj) + " not entered\n")
                        self.app.print_error_message_and_quit("\nList of missing mandatory parameters are: " + str(list(
                            mandatory_params_set.difference(added_params_set))) + "\n")
            # Merge obj_payload with ini defaults, in code defaults (same func)
            self.merge_with_defaults(smgr_obj, payload)
        except ValueError as e:
            self.app.stdout.write("\nError in CLI Format - ValueError: " + str(e) + "\n")
            self.app.stdout.write("\nError Message: " + str(e.message) + "\n")
            self.app.stdout.write("\nPayload: " + str(payload) + "\n")
        except Exception as e:
            self.app.stdout.write("\nException here:" + str(e) + "\n")
        if payload:
            resp = smgrutils.send_REST_request(self.smgr_ip, self.smgr_port, obj=smgr_obj, payload=payload, method="PUT")
            smgrutils.print_rest_response(resp)
            self.app.stdout.write("\n" + str(smgrutils.print_rest_response(resp)) + "\n")
        else:
            self.app.stdout.write("\nNo payload for object " + str(smgr_obj) + "\nPlease enter params\n")
Exemplo n.º 23
0
 def auto_complete_sub_option(self, chosen_sub_option, chosen_sub_command, line, last_arg=None):
     obj = None
     files = None
     smgr_dict = self.parent_app.get_smgr_config()
     ip = smgr_dict["smgr_ip"]
     port = smgr_dict["smgr_port"]
     rest_api_params = None
     return_list = list()
     if chosen_sub_option in ['--server_id']:
         obj = 'server'
         rest_api_params = {
             'object': "server",
             'select': "id"
         }
     elif chosen_sub_option in ['--tag']:
         obj = 'tag'
         rest_api_params = {
             'object': "tag",
             'select': None
         }
     elif chosen_sub_option in ['--cluster_id']:
         obj = 'cluster'
         rest_api_params = {
             'object': "cluster",
             'select': None
         }
     elif chosen_sub_option in ['--image_id', '--package_image_id']:
         obj = 'image'
         rest_api_params = {
             'object': "image",
             'select': None
         }
     elif chosen_sub_option in ['--mac']:
         obj = 'mac'
         rest_api_params = {
             'object': "server",
             'select': "mac_address"
         }
     elif chosen_sub_option in ['--ip']:
         obj = 'ip'
         rest_api_params = {
             'object': "server",
             'select': "ip_address"
         }
     elif chosen_sub_option in ['-f', '--file_name']:
         files = self.auto_complete_file_list(last_arg)
     else:
         return []
     if obj:
         rest_api_params["match_key"] = None
         rest_api_params["match_value"] = None
         resp = smgrutils.send_REST_request(ip, port, rest_api_params=rest_api_params, method="GET")
         if resp:
             json_dict = ast.literal_eval(str(resp))
             auto_fill_list = smgrutils.convert_json_to_list(obj=obj, json_resp=json_dict)
             return_list = [
                 str(str(line).rsplit(' ', 1)[0] + " " + af_option)
                 for af_option in auto_fill_list
                 if str(str(line).rsplit(' ', 1)[0] + " " + af_option).startswith(line)
             ]
     elif files:
         return_list = [
             str(str(line).rsplit(' ', 1)[0] + " " + f)
             for f in files
             if str(str(line).rsplit(' ', 1)[0] + " " + f).startswith(line)
         ]
     return return_list
Exemplo n.º 24
0
    def take_action(self, parsed_args, remaining_args=None):

        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")

        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)

        smgr_obj = getattr(parsed_args, "object", None)
        if not smgr_obj:
            self.app.print_error_message_and_quit("\nNo object entered for editing\n")
        payload = None

        try:
            if getattr(parsed_args, "file_name", None) and smgr_obj in self.smgr_objects:
                payload = json.load(open(parsed_args.file_name))
                if smgr_obj == "tag":
                    self.verify_edited_tags(smgr_obj, payload)
                else:
                    for obj_payload in payload[str(smgr_obj)]:
                        if "tag" in obj_payload and smgr_obj == "server":
                            self.verify_edited_tags(smgr_obj, obj_payload)
                        if "id" not in obj_payload and smgr_obj != "tag":
                            self.app.print_error_message_and_quit("No id specified for object being edited")
            elif not (getattr(parsed_args, "id", None) or getattr(parsed_args, "mac_address", None)) \
                    and smgr_obj != "tag":
                # 1. Check if parsed args has id for object
                self.app.print_error_message_and_quit(
                    "\nYou need to specify the id or mac_address to edit an object (Arguement --id/--mac_address).\n")
            elif smgr_obj not in self.smgr_objects:
                self.app.print_error_message_and_quit(
                    "\nThe object: " + str(smgr_obj) + " is not a valid one.\n")
            elif smgr_obj == "tag":
                payload = self.edit_tag(parsed_args, remaining_args)
                self.verify_edited_tags(smgr_obj, payload)
            else:
                payload = {}
                # 2. Check that id exists for this added object
                resp = smgrutils.send_REST_request(
                    self.smgr_ip, self.smgr_port,
                    obj=smgr_obj, detail=True, method="GET")
                existing_objects_dict = json.loads(resp)
                existing_objects = existing_objects_dict[smgr_obj]
                obj_id_list = list()
                edited_obj_id = getattr(parsed_args, "id", None)
                for ex_obj in existing_objects:
                    obj_id_list.append(ex_obj["id"])
                    if edited_obj_id == ex_obj["id"]:
                        edited_obj_config = ex_obj
                if edited_obj_id not in obj_id_list:
                    self.app.print_error_message_and_quit(
                        "\n" + str(smgr_obj) + " with this id doesn't already exist. You need to add it first.\n")
                payload[smgr_obj] = list()
                # 3. Collect object payload from parsed_args and remaining args
                payload[smgr_obj].append(self.edit_object(smgr_obj, parsed_args, remaining_args))
                # 4. Verify tags and mandatory params added for given object
                for obj_payload in payload[smgr_obj]:
                    if "tag" in obj_payload and smgr_obj == "server":
                        self.verify_edited_tags(smgr_obj, obj_payload)
        except ValueError as e:
            self.app.print_error_message_and_quit("\nError in CLI Format - ValueError: " + str(e) + "\n")
        except Exception as e:
            self.app.print_error_message_and_quit("\nException here:" + str(e) + "\n")
        if payload:
            resp = smgrutils.send_REST_request(
                self.smgr_ip, self.smgr_port, obj=smgr_obj, payload=payload, method="PUT")
            smgrutils.print_rest_response(resp)
            self.app.stdout.write("\n" + str(smgrutils.print_rest_response(resp)) + "\n")
        else:
            self.app.stdout.write("\nNo payload for object " + str(smgr_obj) + "\nPlease enter params\n")
Exemplo n.º 25
0
    def take_action(self, parsed_args):
        detail = getattr(parsed_args, 'detail', None)
        rest_api_params = {}

        # end except
        if parsed_args.which == "server":
            rest_api_params = self.show_server(parsed_args)
        elif parsed_args.which == "image":
            rest_api_params = self.show_image(parsed_args)
        elif parsed_args.which == "cluster":
            rest_api_params = self.show_cluster(parsed_args)
        elif parsed_args.which == 'tag':
            rest_api_params = self.show_tag()
        elif parsed_args.which == 'all':
            rest_api_params = self.show_all()
        elif parsed_args.which == 'monitoring':
            rest_api_params = mon_querying_obj.show_mon_details(parsed_args)
        elif parsed_args.which == 'inventory':
            rest_api_params = inv_querying_obj.show_inv_details(parsed_args)
        elif parsed_args.which == "columns":
            rest_api_params = self.show_columns(parsed_args)

        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")
        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)
        resp = smgrutils.send_REST_request(self.smgr_ip,
                                           self.smgr_port,
                                           rest_api_params=rest_api_params,
                                           detail=detail,
                                           method='GET')

        json_format = getattr(parsed_args, "json", False)

        detail = getattr(parsed_args, "detail", None)
        if detail:
            json_format = True

        if (parsed_args.which == 'monitoring' or parsed_args.which
                == 'inventory') and not rest_api_params["select"]:
            json_format = True
        elif parsed_args.which == 'all':
            json_format = True
        elif parsed_args.which == "columns":
            json_format = True

        if resp.startswith("Error"):
            self.app.stdout.write(resp + "\n")
        elif json_format:
            self.app.stdout.write(
                str(smgrutils.print_rest_response(resp)) + "\n")
        else:
            table_format_output = smgrutils.convert_json_to_table(
                parsed_args.which, resp, rest_api_params["select"])
            self.app.stdout.write(str(table_format_output) + "\n")
Exemplo n.º 26
0
    def take_action(self, parsed_args, remaining_args=None):

        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")

        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)

        smgr_obj = getattr(parsed_args, "object", None)
        payload = None

        try:
            if getattr(parsed_args, "file_name",
                       None) and smgr_obj in self.smgr_objects:
                payload = json.load(open(parsed_args.file_name))
                if smgr_obj == "tag":
                    self.verify_added_tags(smgr_obj, payload)
                else:
                    for obj_payload in payload[str(smgr_obj)]:
                        if "tag" in obj_payload and smgr_obj == "server":
                            self.verify_added_tags(smgr_obj, obj_payload)
                        if "id" not in obj_payload and smgr_obj != "tag":
                            self.app.print_error_message_and_quit(
                                "No id specified for object being added")
            elif not (getattr(parsed_args, "id", None) or getattr(parsed_args, "mac_address", None)) \
                    and smgr_obj != "tag" and smgr_obj != "dhcp_subnet":
                # Check if parsed args has id for object
                self.app.print_error_message_and_quit(
                    "\nYou need to specify the id or mac_address to add an object"
                    " (Arguement --id/--mac_address).\n")
            elif smgr_obj not in self.smgr_objects:
                self.app.print_error_message_and_quit("\nThe object: " +
                                                      str(smgr_obj) +
                                                      " is not a valid one.\n")
            elif smgr_obj == "tag":
                payload = self.add_tag(parsed_args, remaining_args)
                self.verify_added_tags(smgr_obj, payload)
            else:
                payload = {}
                payload[smgr_obj] = list()
                # Collect object payload from parsed_args and remaining args
                payload[smgr_obj].append(
                    self.add_object(smgr_obj, parsed_args, remaining_args))
                # Verify tags and mandatory params added for given object
                for obj_payload in payload[smgr_obj]:
                    if "tag" in obj_payload and smgr_obj == "server":
                        self.verify_added_tags(smgr_obj, obj_payload)
                    mandatory_params_set = set(self.mandatory_params[smgr_obj])
                    added_params_set = set(obj_payload.keys())
                    if mandatory_params_set.difference(added_params_set):
                        self.app.stdout.write(
                            "\nMandatory parameters for object " +
                            str(smgr_obj) + " not entered\n")
                        self.app.print_error_message_and_quit(
                            "\nList of missing mandatory parameters are: " +
                            str(
                                list(
                                    mandatory_params_set.difference(
                                        added_params_set))) + "\n")
            # Merge obj_payload with ini defaults, in code defaults (same func)
            self.merge_with_defaults(smgr_obj, payload)
        except ValueError as e:
            self.app.stdout.write("\nError in CLI Format - ValueError: " +
                                  str(e) + "\n")
            self.app.stdout.write("\nError Message: " + str(e.message) + "\n")
            self.app.stdout.write("\nPayload: " + str(payload) + "\n")
        except Exception as e:
            self.app.stdout.write("\nException here:" + str(e) + "\n")
        if payload:
            resp = smgrutils.send_REST_request(self.smgr_ip,
                                               self.smgr_port,
                                               obj=smgr_obj,
                                               payload=payload,
                                               method="PUT")
            smgrutils.print_rest_response(resp)
            self.app.stdout.write("\n" +
                                  str(smgrutils.print_rest_response(resp)) +
                                  "\n")
        else:
            self.app.stdout.write("\nNo payload for object " + str(smgr_obj) +
                                  "\nPlease enter params\n")
    def take_action(self, parsed_args):
        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")
        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)

        provision_params = {}
        payload = {}
        match_key = None
        match_value = None
        match_param = None
        contrail_img_id = None
        tasks = None
        if getattr(parsed_args, "server_id", None):
            match_key = 'id'
            match_value = getattr(parsed_args, "server_id", None)
        elif getattr(parsed_args, "cluster_id", None):
            match_key = 'cluster_id'
            match_value = getattr(parsed_args, "cluster_id", None)
        elif getattr(parsed_args, "tag", None):
            match_key = 'tag'
            match_value = getattr(parsed_args, "tag", None)
        elif getattr(parsed_args, "where", None):
            match_key = 'where'
            match_value = getattr(parsed_args, "where", None)
        elif getattr(parsed_args, "interactive", None):
            provision_params = self.get_provision_params()
        elif getattr(parsed_args, "provision_params_file", None):
            provision_params = json.load(open(getattr(parsed_args, "provision_params_file", None)))
        else:
            pass

        if getattr(parsed_args, "contrail_image_id", None):
            contrail_img_id = getattr(parsed_args, "contrail_image_id", None)
        payload['package_image_id'] = getattr(parsed_args, "package_image_id", None)
        if contrail_img_id != None:
            payload['contrail_image_id'] = contrail_img_id
        if match_key and match_value:
            payload[match_key] = match_value
        if provision_params:
            payload['provision_parameters'] = provision_params

        if getattr(parsed_args, "tasks", None):
            tasks =  getattr(parsed_args, "tasks", None)
        if tasks != None:
            payload['tasks'] = tasks

	if getattr(parsed_args, "no_run", None):
            payload['no_run'] = 1;

        if not getattr(parsed_args, "no_confirm", None):
            if getattr(parsed_args, "package_image_id", None):
                pkg_id_str = getattr(parsed_args, "package_image_id", None)
            else:
                pkg_id_str = "configured package"
            if match_key:
                if tasks:
                    msg = "Provision servers (%s:%s) with %s and tasks %s? (y/N) :" % (
                        match_key, match_value, pkg_id_str, tasks)
                else:
                    msg = "Provision servers (%s:%s) with %s? (y/N) :" % (
                    match_key, match_value, pkg_id_str)
            else:
                msg = "Provision servers with %s? (y/N) :" % (pkg_id_str)
            user_input = raw_input(msg).lower()
            if user_input not in ["y", "yes"]:
                sys.exit()
        # end if

        if payload:
            resp = smgrutils.send_REST_request(self.smgr_ip, self.smgr_port, obj="server/provision",
                                               payload=payload, method="POST")
            self.app.stdout.write("\n" + str(smgrutils.print_rest_response(resp)) + "\n")
Exemplo n.º 28
0
    def take_action(self, parsed_args, remaining_args=None):

        try:
            self.smgr_ip = self.smgr_port = None
            smgr_dict = self.app.get_smgr_config()

            if smgr_dict["smgr_ip"]:
                self.smgr_ip = smgr_dict["smgr_ip"]
            else:
                self.app.report_missing_config("smgr_ip")
            if smgr_dict["smgr_port"]:
                self.smgr_port = smgr_dict["smgr_port"]
            else:
                self.app.report_missing_config("smgr_port")

        except Exception as e:
            sys.exit("Exception: %s : Error getting smgr config" % e.message)

        smgr_obj = getattr(parsed_args, "object", None)
        payload = None

        try:
            if getattr(parsed_args, "file_name", None) and smgr_obj in self.smgr_objects:
                payload = json.load(open(parsed_args.file_name))
                if smgr_obj == "tag":
                    self.verify_added_tags(smgr_obj, payload)
                else:
                    for obj_payload in payload[str(smgr_obj)]:
                        if "tag" in obj_payload and smgr_obj == "server":
                            self.verify_added_tags(smgr_obj, obj_payload)
                        if "id" not in obj_payload and smgr_obj != "tag":
                            self.app.print_error_message_and_quit("No id specified for object being added")
            elif (
                not (getattr(parsed_args, "id", None) or getattr(parsed_args, "mac_address", None))
                and smgr_obj != "tag"
            ):
                # 1. Check if parsed args has id for object
                self.app.print_error_message_and_quit(
                    "\nYou need to specify the id or mac_address to add an object" " (Arguement --id/--mac_address).\n"
                )
            elif smgr_obj not in self.smgr_objects:
                self.app.print_error_message_and_quit("\nThe object: " + str(smgr_obj) + " is not a valid one.\n")
            elif smgr_obj == "tag":
                payload = self.add_tag(parsed_args, remaining_args)
                self.verify_added_tags(smgr_obj, payload)
            else:
                payload = {}
                # 2. Check that id duplicate doesn't exist for this added object
                resp = smgrutils.send_REST_request(
                    self.smgr_ip, self.smgr_port, obj=smgr_obj, detail=True, method="GET"
                )
                existing_objects_dict = json.loads(resp)
                existing_objects = existing_objects_dict[smgr_obj]
                obj_id_list = list()
                added_obj_id = getattr(parsed_args, "id", None)
                for ex_obj in existing_objects:
                    obj_id_list.append(ex_obj["id"])
                if added_obj_id in obj_id_list:
                    self.app.print_error_message_and_quit(
                        "\n" + str(smgr_obj) + " with this id already exists. You cannot add it again.\n"
                    )
                payload[smgr_obj] = list()
                # 3. Collect object payload from parsed_args and remaining args
                payload[smgr_obj].append(self.add_object(smgr_obj, parsed_args, remaining_args))
                # 4. Merge obj_payload with ini defaults, in code defaults (same func)
                self.merge_with_defaults(smgr_obj, payload)
                # 5. Verify tags and mandatory params added for given object
                for obj_payload in payload[smgr_obj]:
                    if "tag" in obj_payload and smgr_obj == "server":
                        self.verify_added_tags(smgr_obj, obj_payload)
                    mandatory_params_set = set(self.mandatory_params[smgr_obj])
                    added_params_set = set(obj_payload.keys())
                    if mandatory_params_set.difference(added_params_set):
                        self.app.stdout.write("\nMandatory parameters for object " + str(smgr_obj) + " not entered\n")
                        self.app.print_error_message_and_quit(
                            "\nList of missing mandatory parameters are: "
                            + str(list(mandatory_params_set.difference(added_params_set)))
                            + "\n"
                        )
        except ValueError as e:
            self.app.stdout.write("\nError in CLI Format - ValueError: " + str(e) + "\n")
            self.app.stdout.write("\nError Message: " + str(e.message) + "\n")
            self.app.stdout.write("\nPayload: " + str(payload) + "\n")
        except Exception as e:
            self.app.stdout.write("\nException here:" + str(e) + "\n")
        if payload:
            resp = smgrutils.send_REST_request(
                self.smgr_ip, self.smgr_port, obj=smgr_obj, payload=payload, method="PUT"
            )
            smgrutils.print_rest_response(resp)
            self.app.stdout.write("\n" + str(smgrutils.print_rest_response(resp)) + "\n")
        else:
            self.app.stdout.write("\nNo payload for object " + str(smgr_obj) + "\nPlease enter params\n")