Esempio n. 1
0
    def create_config_groups(self, plugin_id, build_version, config_group):
        plugin_config_meta_list = []
        config_items_list = []
        if config_group:
            for config in config_group:
                options = config["options"]
                plugin_config_meta = PluginConfigGroup(
                    plugin_id=plugin_id,
                    build_version=build_version,
                    config_name=config["config_name"],
                    service_meta_type=config["service_meta_type"],
                    injection=config["injection"])
                plugin_config_meta_list.append(plugin_config_meta)

                for option in options:
                    config_item = PluginConfigItems(
                        plugin_id=plugin_id,
                        build_version=build_version,
                        service_meta_type=config["service_meta_type"],
                        attr_name=option.get("attr_name", ""),
                        attr_alt_value=option.get("attr_alt_value", ""),
                        attr_type=option.get("attr_type", "string"),
                        attr_default_value=option.get("attr_default_value",
                                                      None),
                        is_change=option.get("is_change", False),
                        attr_info=option.get("attr_info", ""),
                        protocol=option.get("protocol", ""))
                    config_items_list.append(config_item)

        config_group_repo.bulk_create_plugin_config_group(
            plugin_config_meta_list)
        config_item_repo.bulk_create_items(config_items_list)
Esempio n. 2
0
 def copy_group_items(self, plugin_id, old_version, new_version):
     config_items = config_item_repo.get_config_items_by_id_and_version(
         plugin_id, old_version)
     config_items_copy = []
     for item in config_items:
         item_dict = model_to_dict(item)
         # 剔除主键
         item_dict.pop("ID")
         item_dict["build_version"] = new_version
         config_items_copy.append(PluginConfigItems(**item_dict))
     config_item_repo.bulk_create_items(config_items_copy)
Esempio n. 3
0
    def save_new_plugins(self):
        plugins = []
        build_versions = []
        config_groups = []
        config_items = []
        for plugin in self.new_app.new_plugins:
            plugins.append(plugin.plugin)
            build_versions.append(plugin.build_version)
            config_groups.extend(plugin.config_groups)
            config_items.extend(plugin.config_items)

        plugin_repo.bulk_create(plugins)
        build_version_repo.bulk_create(build_versions)
        config_group_repo.bulk_create_plugin_config_group(config_groups)
        config_item_repo.bulk_create_items(config_items)
Esempio n. 4
0
    def create_config_items(self, plugin_id, build_version, service_meta_type,
                            *options):
        config_items_list = []
        for option in options:
            config_item = PluginConfigItems(
                plugin_id=plugin_id,
                build_version=build_version,
                service_meta_type=service_meta_type,
                attr_name=option["attr_name"],
                attr_alt_value=option["attr_alt_value"],
                attr_type=option.get("attr_type", "string"),
                attr_default_value=option.get("attr_default_value", None),
                is_change=option.get("is_change", False),
                attr_info=option.get("attr_info", ""))
            config_items_list.append(config_item)

        config_item_repo.bulk_create_items(config_items_list)
Esempio n. 5
0
    def add_default_plugin(self,
                           user,
                           tenant,
                           region,
                           plugin_type="perf_analyze_plugin"):
        plugin_base_info = None
        try:
            all_default_config = None
            module_dir = os.path.dirname(__file__)
            file_path = os.path.join(module_dir, 'default_config.json')
            with open(file_path) as f:
                all_default_config = json.load(f)
            if not all_default_config:
                raise Exception("no config was found")

            needed_plugin_config = all_default_config[plugin_type]
            code, msg, plugin_base_info = self.create_tenant_plugin(
                tenant, user.user_id, region, needed_plugin_config["desc"],
                needed_plugin_config["plugin_alias"],
                needed_plugin_config["category"],
                needed_plugin_config["build_source"],
                needed_plugin_config["image"],
                needed_plugin_config["code_repo"])
            plugin_base_info.origin = "local_market"
            plugin_base_info.origin_share_id = plugin_type
            plugin_base_info.save()

            plugin_build_version = plugin_version_service.create_build_version(
                region, plugin_base_info.plugin_id, tenant.tenant_id,
                user.user_id, "", "unbuild", 64)

            plugin_config_meta_list = []
            config_items_list = []
            config_group = needed_plugin_config["config_group"]
            if config_group:
                for config in config_group:
                    options = config["options"]
                    plugin_config_meta = PluginConfigGroup(
                        plugin_id=plugin_build_version.plugin_id,
                        build_version=plugin_build_version.build_version,
                        config_name=config["config_name"],
                        service_meta_type=config["service_meta_type"],
                        injection=config["injection"])
                    plugin_config_meta_list.append(plugin_config_meta)

                    for option in options:
                        config_item = PluginConfigItems(
                            plugin_id=plugin_build_version.plugin_id,
                            build_version=plugin_build_version.build_version,
                            service_meta_type=config["service_meta_type"],
                            attr_name=option["attr_name"],
                            attr_alt_value=option["attr_alt_value"],
                            attr_type=option.get("attr_type", "string"),
                            attr_default_value=option.get(
                                "attr_default_value", None),
                            is_change=option.get("is_change", False),
                            attr_info=option.get("attr_info", ""),
                            protocol=option.get("protocol", ""))
                        config_items_list.append(config_item)

                config_group_repo.bulk_create_plugin_config_group(
                    plugin_config_meta_list)
                config_item_repo.bulk_create_items(config_items_list)

                event_id = make_uuid()
                plugin_build_version.event_id = event_id
                plugin_build_version.plugin_version_status = "fixed"

                self.create_region_plugin(region, tenant, plugin_base_info)

                self.build_plugin(region, plugin_base_info,
                                  plugin_build_version, user, tenant, event_id)
                plugin_build_version.build_status = "build_success"
                plugin_build_version.save()
        except Exception as e:
            logger.exception(e)
            if plugin_base_info:
                self.delete_plugin(region, tenant, plugin_base_info.plugin_id)
            raise e
    def add_default_plugin(self,
                           user,
                           tenant,
                           region,
                           plugin_type="perf_analyze_plugin"):
        plugin_base_info = None
        try:
            if not self.all_default_config:
                raise Exception("no config was found")
            needed_plugin_config = self.all_default_config[plugin_type]
            image = needed_plugin_config.get("image", "")
            build_source = needed_plugin_config.get("build_source", "")
            image_tag = "latest"
            if image and build_source and build_source == "image":
                ref = reference.Reference.parse(image)
                if ref["tag"]:
                    image_tag = ref["tag"]
                if "goodrain.me" in image:
                    _, name = ref.split_hostname()
                    image = settings.IMAGE_REPO + "/" + name
                else:
                    image = image.split(":")[0]
            plugin_params = {
                "tenant_id": tenant.tenant_id,
                "region": region,
                "create_user": user.user_id,
                "desc": needed_plugin_config["desc"],
                "plugin_alias": needed_plugin_config["plugin_alias"],
                "category": needed_plugin_config["category"],
                "build_source": build_source,
                "image": image,
                "code_repo": needed_plugin_config["code_repo"],
                "username": "",
                "password": ""
            }
            code, msg, plugin_base_info = self.create_tenant_plugin(
                plugin_params)
            plugin_base_info.origin = "local_market"
            plugin_base_info.origin_share_id = plugin_type
            plugin_base_info.save()

            plugin_build_version = plugin_version_service.create_build_version(
                region,
                plugin_base_info.plugin_id,
                tenant.tenant_id,
                user.user_id,
                "",
                "unbuild",
                64,
                image_tag=image_tag)

            plugin_config_meta_list = []
            config_items_list = []
            config_group = needed_plugin_config["config_group"]
            if config_group:
                for config in config_group:
                    options = config["options"]
                    plugin_config_meta = PluginConfigGroup(
                        plugin_id=plugin_build_version.plugin_id,
                        build_version=plugin_build_version.build_version,
                        config_name=config["config_name"],
                        service_meta_type=config["service_meta_type"],
                        injection=config["injection"])
                    plugin_config_meta_list.append(plugin_config_meta)

                    for option in options:
                        config_item = PluginConfigItems(
                            plugin_id=plugin_build_version.plugin_id,
                            build_version=plugin_build_version.build_version,
                            service_meta_type=config["service_meta_type"],
                            attr_name=option["attr_name"],
                            attr_alt_value=option["attr_alt_value"],
                            attr_type=option.get("attr_type", "string"),
                            attr_default_value=option.get(
                                "attr_default_value", None),
                            is_change=option.get("is_change", False),
                            attr_info=option.get("attr_info", ""),
                            protocol=option.get("protocol", ""))
                        config_items_list.append(config_item)

                config_group_repo.bulk_create_plugin_config_group(
                    plugin_config_meta_list)
                config_item_repo.bulk_create_items(config_items_list)

                event_id = make_uuid()
                plugin_build_version.event_id = event_id
                plugin_build_version.plugin_version_status = "fixed"

                self.create_region_plugin(region, tenant, plugin_base_info)

                self.build_plugin(region, plugin_base_info,
                                  plugin_build_version, user, tenant, event_id)
                plugin_build_version.build_status = "build_success"
                plugin_build_version.save()
        except Exception as e:
            logger.exception(e)
            if plugin_base_info:
                self.delete_plugin(region, tenant, plugin_base_info.plugin_id)
            raise e