From 31ff6b511d0ed322c9d7d6a7f51d9be1a026e5d8 Mon Sep 17 00:00:00 2001 From: fumingwei Date: Tue, 20 Aug 2024 19:05:39 +0800 Subject: [PATCH] feature:TSG-22337:Support install tsg cm in OS. --- .../roles/tsg-cm/files/tsg-cm-chart-0.1.0.tgz | Bin 0 -> 38618 bytes ansible/roles/tsg-cm/tasks/main.yml | 3 +++ installer/app_bundle_install.sh | 9 +++++++ make/Makefile.x86_64_COTS_APP_BUNDLE | 13 +++++++-- tools/pull_container_images.sh | 25 ++++++++++++++++++ 5 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 ansible/roles/tsg-cm/files/tsg-cm-chart-0.1.0.tgz create mode 100644 ansible/roles/tsg-cm/tasks/main.yml create mode 100644 tools/pull_container_images.sh diff --git a/ansible/roles/tsg-cm/files/tsg-cm-chart-0.1.0.tgz b/ansible/roles/tsg-cm/files/tsg-cm-chart-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..f00fb1223e6d2e0975fa7f2ab1af7fe22ba83211 GIT binary patch literal 38618 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

tFBwcUfKIiNVWp<#Hr=kxL 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 M|KXXk765bt0Pe0Lh5!Hn literal 0 HcmV?d00001 diff --git a/ansible/roles/tsg-cm/tasks/main.yml b/ansible/roles/tsg-cm/tasks/main.yml new file mode 100644 index 00000000..c3fd0656 --- /dev/null +++ b/ansible/roles/tsg-cm/tasks/main.yml @@ -0,0 +1,3 @@ +--- +- name: "testing tsg-cm role" + shell: echo "testing" \ No newline at end of file diff --git a/installer/app_bundle_install.sh b/installer/app_bundle_install.sh index e0be8440..de56f5f7 100644 --- a/installer/app_bundle_install.sh +++ b/installer/app_bundle_install.sh @@ -6,6 +6,8 @@ INJECT_HELM_CHART_TAR="%%INJECT_HELM_CHART_TAR%%" MRZCPD_HELM_CHART_TAR="%%MRZCPD_HELM_CHART_TAR%%" TREX_HELM_CHART_TAR="%%TREX_HELM_CHART_TAR%%" DP_TRACE_HELM_CHART_TAR="%%DP_TRACE_HELM_CHART_TAR%%" +TSG_CM_HELM_CHART_TAR="%%TSG_CM_HELM_CHART_TAR%%" +TSG_CM_CONTAINER_IMAGE_TAR="%%TSG_CM_CONTAINER_IMAGE_TAR%%" charts_dest_dir="/var/lib/rancher/k3s/server/static/charts" images_dest_dir="/var/lib/rancher/k3s/agent/images" @@ -90,6 +92,12 @@ function load_images() #function define end +function install_tsg_cm() +{ + sed -ie "s/^tsg_cm_chart_name=.*/tsg_cm_chart_name=${TSG_CM_HELM_CHART_TAR}/g" ${clixon_conf_path} + cp -r ${src_dir}/${TSG_CM_HELM_CHART_TAR} ${charts_dest_dir} + cp -r ${src_dir}/${TSG_CM_CONTAINER_IMAGE_TAR} ${images_dest_dir} +} #function exec start read_charts_dest_dir_from_env read_images_dest_dir_from_env @@ -99,5 +107,6 @@ read_load_images_switch_from_env copy_charts_to_dest copy_images_to_dest replace_clixon_chart_name +install_tsg_cm load_images #function exec end diff --git a/make/Makefile.x86_64_COTS_APP_BUNDLE b/make/Makefile.x86_64_COTS_APP_BUNDLE index 3d83203d..e7a573d0 100644 --- a/make/Makefile.x86_64_COTS_APP_BUNDLE +++ b/make/Makefile.x86_64_COTS_APP_BUNDLE @@ -24,8 +24,11 @@ DP_TRACE_HELM_FILE_PATH := /ansible/roles/dp-trace-telemetry/files/helm NIC_UIO_BINDER_FILE_PATH := /ansible/roles/k3s-install/files/nic-uio-binder.yaml LOG_COLLECTOR_FILE_PATH := /ansible/roles/k3s-install/files/log-collector.yaml +TSG_CM_CONTAINER_IMAGE_TAR := tsg-cm-${OS_RELEASE_VER}-docker.tar +TSG_CM_HELM_CHART_TAR := tsg-cm-chart-0.1.0.tgz -.PHONY: all build_dir installer clean_installer_dir prebuild_container_images build_container_images build_helm_charts build_app_bundle_bin + +.PHONY: all build_dir installer clean_installer_dir prebuild_container_images build_container_images build_helm_charts build_app_bundle_bin pull_tsg_cm all: build_app_bundle_bin @@ -50,6 +53,8 @@ installer: build_dir sed -i -e "s/%%HELM_CHART_TAR_GLOB%%/$(HELM_CHART_TAR_GLOB)/" $(TARGET_INSTALLER_DIR)/install.sh sed -i -e "s/%%NIC_UIO_BINDER_IMAGE_TAR%%/$(NIC_UIO_BINDER_IMAGE_TAR)/" $(PROJECTDIR)/$(NIC_UIO_BINDER_FILE_PATH) sed -i -e "s/%%LOG_COLLECTOR_IMAGE_TAR%%/$(LOG_COLLECTOR_IMAGE_TAR)/" $(PROJECTDIR)/$(LOG_COLLECTOR_FILE_PATH) + sed -i -e "s/%%TSG_CM_HELM_CHART_TAR%%/$(TSG_CM_HELM_CHART_TAR)/" $(TARGET_INSTALLER_DIR)/install.sh + sed -i -e "s/%%TSG_CM_CONTAINER_IMAGE_TAR%%/$(TSG_CM_CONTAINER_IMAGE_TAR)/" $(TARGET_INSTALLER_DIR)/install.sh prebuild_container_images: ifeq ($(ENABLE_LICENSE_PROTECTED),1) @@ -73,7 +78,11 @@ build_helm_charts: build_dir $(PROJECTDIR)/tools/build_helm_charts.sh $(PROJECTDIR) $(OS_RELEASE_VER) $(HELM_CHART_VER) $(TARGET_INSTALLER_DIR) $(TREX_HELM_FILE_PATH) $(PROJECTDIR)/tools/build_helm_charts.sh $(PROJECTDIR) $(OS_RELEASE_VER) $(HELM_CHART_VER) $(TARGET_INSTALLER_DIR) $(DP_TRACE_HELM_FILE_PATH) -build_app_bundle_bin: clean_installer_dir installer build_helm_charts build_container_images +pull_tsg_cm: build_dir + chmod 0755 $(PROJECTDIR)/tools/build_helm_charts.sh; $(PROJECTDIR)/tools/pull_container_images.sh $(TARGET_INSTALLER_DIR) $(TSG_CM_CONTAINER_IMAGE_TAR) + cp -a $(PROJECTDIR)/ansible/roles/tsg-cm/files/$(TSG_CM_HELM_CHART_TAR) $(TARGET_INSTALLER_DIR) + +build_app_bundle_bin: clean_installer_dir installer build_helm_charts pull_tsg_cm build_container_images mkdir -p $(TARGET_BUILD_DIR)/app-bundle-cook-bits chmod 0755 $(TOOLSDIR)/app-bundle-cook-bits $(TOOLSDIR)/app-bundle-cook-bits $(TARGET_BUILD_DIR) $(TARGET_BUILD_DIR)/app-bundle-cook-bits $(IMAGEDIR_BASE)/$(APP_BUNDLE_BIN) diff --git a/tools/pull_container_images.sh b/tools/pull_container_images.sh new file mode 100644 index 00000000..6324a829 --- /dev/null +++ b/tools/pull_container_images.sh @@ -0,0 +1,25 @@ +#!/bin/sh -e +EXPORT_IMAGES_DIR=$1 +EXPORT_IMAGES_NAME=$2 + +TSG_CM_REGISTRY_SERVER="ci1.bj.geedge.net" + +TSG_CM_REGISTRY="${TSG_CM_REGISTRY_SERVER}/tsg/cm/tsg-cm" +TSG_CM_IMAGE_TAG="api_v24.09_2024083006" + +TSG_CM_MARIADB_REGISTRY="${TSG_CM_REGISTRY_SERVER}/common/mariadb" +TSG_CM_MARIADB_IMAGE_TAG="10.11.8" + +TSG_CM_POLICY_VERIFY_REGISTRY="${TSG_CM_REGISTRY_SERVER}/tsg/cm/cm-verify" +TSG_CM_POLICY_VERIFY_IMAGE_TAG="tsg_v24.09_2024082801" + +buildah login -u ${TSG_CM_IMAGE_REGISTRY_AUTH_USERNAME} -p ${TSG_CM_IMAGE_REGISTRY_AUTH_PASSWORD} ${TSG_CM_REGISTRY_SERVER} + +buildah pull ${TSG_CM_REGISTRY}:${TSG_CM_IMAGE_TAG} +buildah pull ${TSG_CM_MARIADB_REGISTRY}:${TSG_CM_MARIADB_IMAGE_TAG} +buildah pull ${TSG_CM_POLICY_VERIFY_REGISTRY}:${TSG_CM_POLICY_VERIFY_IMAGE_TAG} + +podman save -o ${EXPORT_IMAGES_DIR}/${EXPORT_IMAGES_NAME} -m \ + ${TSG_CM_REGISTRY}:${TSG_CM_IMAGE_TAG} \ + ${TSG_CM_MARIADB_REGISTRY}:${TSG_CM_MARIADB_IMAGE_TAG} \ + ${TSG_CM_POLICY_VERIFY_REGISTRY}:${TSG_CM_POLICY_VERIFY_IMAGE_TAG}