diff --git a/docs/manual_install.md b/docs/manual_install.md index d898583..3177fea 100644 --- a/docs/manual_install.md +++ b/docs/manual_install.md @@ -27,10 +27,14 @@ Also, you can check the workflow template in Argo UI. $ argo template list NAME -helmrelease +lma +lma-federation +service-mesh +openstack-components +openstack-infra ``` Run Workflow and check your argo UI. ```console -$ argo submit decapod-flow/workflows/v2/lma-federation-wf.tpl +$ argo submit --from wftmpl/lma-federation -nargo ``` diff --git a/workflows/v2/lma-federation-wf.yaml b/templates/decapod-apps/lma-federation-wftpl.yaml similarity index 98% rename from workflows/v2/lma-federation-wf.yaml rename to templates/decapod-apps/lma-federation-wftpl.yaml index 6bb6d94..fb3e132 100644 --- a/workflows/v2/lma-federation-wf.yaml +++ b/templates/decapod-apps/lma-federation-wftpl.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 -kind: Workflow +kind: WorkflowTemplate metadata: - generateName: lma-federation- + name: lma-federation namespace: argo spec: entrypoint: deploy diff --git a/workflows/v2/lma-wf.yaml b/templates/decapod-apps/lma-wftpl.yaml similarity index 98% rename from workflows/v2/lma-wf.yaml rename to templates/decapod-apps/lma-wftpl.yaml index 9df999b..bbd642b 100644 --- a/workflows/v2/lma-wf.yaml +++ b/templates/decapod-apps/lma-wftpl.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 -kind: Workflow +kind: WorkflowTemplate metadata: - generateName: lma- + name: lma namespace: argo spec: entrypoint: deploy diff --git a/workflows/v2/openstack-components-wf.yaml b/templates/decapod-apps/openstack-components-wf.yaml similarity index 96% rename from workflows/v2/openstack-components-wf.yaml rename to templates/decapod-apps/openstack-components-wf.yaml index 3dc935a..6482171 100644 --- a/workflows/v2/openstack-components-wf.yaml +++ b/templates/decapod-apps/openstack-components-wf.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 -kind: Workflow +kind: WorkflowTemplate metadata: - generateName: openstack-components- + name: openstack-components namespace: argo spec: entrypoint: deploy diff --git a/workflows/v2/openstack-infra-wf.yaml b/templates/decapod-apps/openstack-infra-wftpl.yaml similarity index 92% rename from workflows/v2/openstack-infra-wf.yaml rename to templates/decapod-apps/openstack-infra-wftpl.yaml index 5485c50..086f397 100644 --- a/workflows/v2/openstack-infra-wf.yaml +++ b/templates/decapod-apps/openstack-infra-wftpl.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 -kind: Workflow +kind: WorkflowTemplate metadata: - generateName: openstack-infra- + name: openstack-infra namespace: argo spec: entrypoint: deploy diff --git a/workflows/v2/service-mesh-wf.yaml b/templates/decapod-apps/service-mesh-wf.yaml similarity index 96% rename from workflows/v2/service-mesh-wf.yaml rename to templates/decapod-apps/service-mesh-wf.yaml index 433f6da..de343fb 100644 --- a/workflows/v2/service-mesh-wf.yaml +++ b/templates/decapod-apps/service-mesh-wf.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 -kind: Workflow +kind: WorkflowTemplate metadata: - generateName: service-mesh- + name: service-mesh namespace: argo spec: entrypoint: deploy diff --git a/templates/decapod-yaml/prepare-manifest-wftpl.yaml b/templates/decapod-yaml/prepare-manifest-wftpl.yaml deleted file mode 100644 index def0e73..0000000 --- a/templates/decapod-yaml/prepare-manifest-wftpl.yaml +++ /dev/null @@ -1,155 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: WorkflowTemplate -metadata: - name: prepare-manifest -spec: - entrypoint: startpoint - arguments: - parameters: - - name: base_yaml_url - value: "https://github.com/openinfradev/decapod-base-yaml.git" - - name: base_yaml_tag - value: "main" - - name: site_yaml_url - value: "https://github.com/openinfradev/decapod-site.git" - - name: site_yaml_tag - value: "main" - - name: git_username - value: "" - - name: git_password - value: "" - - name: site_name - value: "hanu-deploy-apps" - volumeClaimTemplates: - - metadata: - name: workdir - spec: - accessModes: ["ReadWriteOnce"] - resources: - requests: - storage: 10Mi - storageClassName: rbd - templates: - - name: startpoint - steps: - - - name: "render" - template: render-site-yaml - arguments: - parameters: - - { name: base_yaml_url, value: "{{workflow.parameters.base_yaml_url}}" } - - { name: base_yaml_tag, value: "{{workflow.parameters.base_yaml_tag}}" } - - { name: site_yaml_url, value: "{{workflow.parameters.site_yaml_url}}" } - - { name: site_yaml_tag, value: "{{workflow.parameters.site_yaml_tag}}" } - - { name: git_username, value: "{{workflow.parameters.git_username}}" } - - { name: git_password, value: "{{workflow.parameters.git_password}}" } - - { name: site_name, value: "{{workflow.parameters.site_name}}" } - - - name: "update" - template: update-manifest-configmap - arguments: - parameters: - - { name: site_name, value: "{{workflow.parameters.site_name}}" } - - - name: render-site-yaml - inputs: - parameters: - - name: base_yaml_url - - name: base_yaml_tag - - name: site_yaml_url - - name: site_yaml_tag - - name: git_username - - name: git_password - - name: site_name - container: - name: 'render' - image: sktdev/decapod-kustomize:latest - command: - - /bin/bash - - -c - - | - set -e - cd /mnt/workdir - if [[ "${GIT_USERNAME}" != "" ]] && [[ "${GIT_PASSWORD}" != "" ]]; then - CLONE_URL=$(echo $SITE_YAML_URL | sed 's/\/\//\/\/'"$GIT_USERNAME"':'"$GIT_PASSWORD"'@/') - else - CLONE_URL=$SITE_YAML_URL - fi - - # Clone base-yaml, site-yaml - git clone -b $SITE_YAML_TAG $CLONE_URL site-yaml - git clone -b $BASE_YAML_TAG $BASE_YAML_URL base-yaml && cd site-yaml - if [ $? -ne 0 ]; then - exit $? - fi - - for APP_NAME in `ls $SITE_NAME | grep -v docs | sed 's/\///'` - do - SITE_PATH="$SITE_NAME/$APP_NAME" - if [ ! -d "$SITE_PATH" ]; then - echo "[INFO] $APP_NAME of $SITE_NAME is not exist" - exit 1 - fi - - echo "[INFO] Try to render $APP_NAME for $SITE_NAME site" - cp -r ../base-yaml/$APP_NAME/base $SITE_NAME/ - OUTPUT_PATH="$SITE_NAME/$APP_NAME/$APP_NAME-manifest.yaml" - - echo "[INFO] Rendering $APP_NAME-manifest.yaml" - kustomize build --enable_alpha_plugins $SITE_PATH -o $OUTPUT_PATH - - if [ $? -ne 0 ]; then - echo "[ERROR] kustomize build error" - exit $? - fi - - if [ -f "$OUTPUT_PATH" ]; then - echo "[INFO] Successfully Completed!" - else - echo "[INFO] Failed to render $APP_NAME-manifest.yaml" - exit 1 - fi - rm -rf $SITE_NAME/base - done - env: - - name: BASE_YAML_URL - value: "{{inputs.parameters.base_yaml_url}}" - - name: BASE_YAML_TAG - value: "{{inputs.parameters.base_yaml_tag}}" - - name: SITE_YAML_URL - value: "{{inputs.parameters.site_yaml_url}}" - - name: SITE_YAML_TAG - value: "{{inputs.parameters.site_yaml_tag}}" - - name: GIT_USERNAME - value: "{{inputs.parameters.git_username}}" - - name: GIT_PASSWORD - value: "{{inputs.parameters.git_password}}" - - name: SITE_NAME - value: "{{inputs.parameters.site_name}}" - volumeMounts: - - name: workdir - mountPath: /mnt/workdir - - - name: update-manifest-configmap - inputs: - parameters: - - name: site_name - container: - name: 'update' - image: k8s.gcr.io/hyperkube:v1.17.6 - command: - - /bin/bash - - -c - - | - set -xe - cd /mnt/workdir - find . -regex ".*$SITE_NAME.*\/.*-manifest.yaml" | while read -r path ; do - echo $path - NAME=$(echo $path | sed -E 's/.*\/(.*)-manifest.yaml/\1/') - kubectl create configmap "$NAME" --from-file=$path --dry-run -oyaml | kubectl apply -f- - done - env: - - name: SITE_NAME - value: "{{inputs.parameters.site_name}}" - volumeMounts: - - name: workdir - mountPath: /mnt/workdir - diff --git a/templates/helm-operator/cleanup-hr-wftpl.yaml b/templates/helm-operator/cleanup-hr-wftpl.yaml deleted file mode 100644 index 2dfcb4d..0000000 --- a/templates/helm-operator/cleanup-hr-wftpl.yaml +++ /dev/null @@ -1,46 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: WorkflowTemplate -metadata: - name: cleanup-helmreleases -spec: - entrypoint: startpoint - templates: - - name: startpoint - activeDeadlineSeconds: 180 - container: - name: 'cleanup' - image: k8s.gcr.io/hyperkube:v1.17.6 - command: - - /bin/bash - - -c - - | - function log() { - level=$1 - msg=$2 - date=$(date '+%F %H:%M:%S') - echo "[$date] $level $msg" - } - - list=$(kubectl get hr -ndefault -ojsonpath={.items[*].metadata.name}) - non_operator_charts=$(echo $list | sed 's/[a-z]*-operator//g') - - # delete non operator's HelmRelease - log "INFO" "Deleting except operator charts: $non_operator_charts" - kubectl delete hr $non_operator_charts -ndefault - - if [[ $? =~ 1 ]]; then - log "WARNING" "kubectl delete not working properly." - else - # wait 60 seconds to delete resources - sleep 60s - fi - - # delete operator's HelmRelease - operator_charts=$(kubectl get hr -ndefault -ojsonpath={.items[*].metadata.name}) - log "INFO" "Deleting operator charts: $operator_charts" - kubectl delete hr $operator_charts -ndefault - if [[ $? =~ 1 ]]; then - log "ERROR" "kubectl delete not working properly." - fi - - log "INFO" "HelmReleases are successfully deleted!" diff --git a/templates/helm-operator/helmrelease-rbac.yaml b/templates/helm-operator/helmrelease-rbac.yaml deleted file mode 100644 index 9438cfe..0000000 --- a/templates/helm-operator/helmrelease-rbac.yaml +++ /dev/null @@ -1,55 +0,0 @@ ---- -# Service account for the cleanup job. -apiVersion: v1 -kind: ServiceAccount -metadata: - name: argo-deploy-sa - namespace: argo ---- -kind: ClusterRoleBinding -apiVersion: rbac.authorization.k8s.io/v1beta1 -metadata: - name: argo-deploy-crb -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: argo-deploy-role -subjects: -- kind: ServiceAccount - name: argo-deploy-sa - namespace: argo ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: argo-deploy-role -rules: -- apiGroups: - - "" - resources: - - pods - - namespaces - verbs: - - get - - watch - - patch - - create - - list -- apiGroups: - - apiextensions.k8s.io - resources: - - customresourcedefinitions - verbs: - - get - - delete -- apiGroups: - - helm.fluxcd.io - resources: - - helmreleases - verbs: - - create - - get - - delete - - list - - patch - diff --git a/templates/helm-operator/helmrelease-wftpl.yaml b/templates/helm-operator/helmrelease-wftpl.yaml deleted file mode 100644 index 77c879c..0000000 --- a/templates/helm-operator/helmrelease-wftpl.yaml +++ /dev/null @@ -1,116 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: WorkflowTemplate -metadata: - name: deploy-helmrelease -spec: - arguments: - parameters: - - name: app_name - value: "" ## Required parameter. "lma", "openstack", "sona" and so on. - templates: - - name: deployHelmRelease - retryStrategy: - limit: 2 - inputs: - parameters: - - name: chart_name - volumes: - - name: manifest - configMap: - name: "{{workflow.parameters.app_name}}" - activeDeadlineSeconds: 900 - container: - name: 'deploy' - image: k8s.gcr.io/hyperkube:v1.17.6 - command: - - /bin/bash - - -c - - | - function log() { - level=$1 - msg=$2 - date=$(date '+%F %H:%M:%S') - echo "[$date] $level $msg" - } - - function checkReleased() { - releaseStatus=$(kubectl get hr ${CHART_NAME} -ndefault -ojsonpath={.status.releaseStatus}) - if [[ $releaseStatus =~ deployed ]]; then - log "INFO" "HelmRelease $CHART_NAME is already released." - exit 0 - fi - } - - function createNamespace() { - targetNs=$(kubectl apply -f /manifest/${APP}-manifest.yaml -lname=${CHART_NAME} --dry-run -ojsonpath={.spec.targetNamespace}) - kubectl get namespace $targetNs - if [[ $? =~ 1 ]]; then - log "INFO" "Not Exist $targetNs namespace" - kubectl create ns $targetNs - kubectl label ns $targetNs name=$targetNs - fi - } - - # create targetNamespace if not exists - createNamespace - - # deploy HelmRelease - log "INFO" "kubectl apply -f /manifest/${APP}-manifest.yaml -lname=${CHART_NAME}" - kubectl apply -f /manifest/${APP}-manifest.yaml -lname=${CHART_NAME} -ndefault - - if [[ $? =~ 1 ]]; then - log "ERROR" "kubectl apply not working properly. please check your manifest." - exit 1 - fi - - # wait first 30 sec for chart sync - sleep 30s - - # check if it released. - checkReleased - - # wait until deployment completed. - until [ $(kubectl get hr $CHART_NAME -ndefault -ojsonpath={.status.phase}) = "Succeeded" ] - do - kubectl get hr $CHART_NAME -ndefault - if [[ $? =~ 1 ]]; then - log "ERROR" "Can't get HelmRelease $CHART_NAME" - exit 1 - fi - - phase=$(kubectl get hr $CHART_NAME -ndefault -ojsonpath={.status.phase}) - - log "INFO" "HelmRelease Phase: $phase... waiting for Succeeded..." - # exit with error code 1 when phase is one of below strings. - # - ChartFetchFailed: failed to get helm chart - # - Failed: failed to helm chart deploy - # - RollbackFailed: failed to roll back - if [[ $phase =~ ^(Failed|RollbackFailed)$ ]]; then - reason=$(kubectl get hr $CHART_NAME -ndefault -ojsonpath={.status.conditions[0].message}) - log "ERROR" "Deploy HelmRelease phase: $phase.\n Detailed: $reason" - exit 1 - fi - sleep 10s # interval - done - log "INFO" "$CHART_NAME deployment successfully completed." - - volumeMounts: - - name: manifest - mountPath: /manifest - env: - - name: CHART_NAME - value: "{{inputs.parameters.chart_name}}" - - name: APP - value: "{{workflow.parameters.app_name}}" - - - name: ChartGroup - inputs: - parameters: - - name: chart_list - steps: - - - name: "HelmRelease" - template: deployHelmRelease - arguments: - parameters: - - {name: chart_name, value: "{{item}}"} - withParam: "{{inputs.parameters.chart_list}}" diff --git a/workflows/v1/lma-federation-wf.yaml b/workflows/v1/lma-federation-wf.yaml deleted file mode 100644 index 00a26b7..0000000 --- a/workflows/v1/lma-federation-wf.yaml +++ /dev/null @@ -1,100 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Workflow -metadata: - generateName: lma- - namespace: argo -spec: - entrypoint: deploy - serviceAccountName: argo-deploy-sa - arguments: - parameters: - - name: app_name - value: "lma" - templates: - - name: deploy - dag: - tasks: - - name: operator - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "prometheus-operator", - "eck-operator", - "fluentbit-operator" - ] - dependencies: [] - - name: logging - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "eck-resource", - "fluentbit", - "kubernetes-event-exporter" - ] - dependencies: [operator] - - name: prepare-lma - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "thanos-config" - ] - dependencies: [operator] - - name: prometheus - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "prometheus", - "kube-state-metrics", - "prometheus-process-exporter", - "prometheus-pushgateway", - "prometheus-node-exporter", - "prometheus-adapter", - "addons" - ] - dependencies: [prepare-lma] - - name: federation - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "prometheus-fed-master", - "fed-addons", - "thanos" - ] - dependencies: [prometheus,logging] - - name: grafana - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "grafana" - ] - dependencies: [federation] diff --git a/workflows/v1/lma-wf.yaml b/workflows/v1/lma-wf.yaml deleted file mode 100644 index 9705210..0000000 --- a/workflows/v1/lma-wf.yaml +++ /dev/null @@ -1,85 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Workflow -metadata: - generateName: lma- - namespace: argo -spec: - entrypoint: deploy - serviceAccountName: argo-deploy-sa - arguments: - parameters: - - name: app_name - value: "lma" - templates: - - name: deploy - dag: - tasks: - - name: operator - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "prometheus-operator", - "eck-operator", - "fluentbit-operator" - ] - dependencies: [] - - name: logging - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "eck-resource", - "kubernetes-event-exporter" - ] - dependencies: [operator] - - name: prepare-lma - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "thanos-config" - ] - dependencies: [operator] - - name: fluentbit - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "fluentbit" - ] - dependencies: [logging] - - name: prometheus - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "prometheus", - "kube-state-metrics", - "prometheus-process-exporter", - "prometheus-pushgateway", - "prometheus-node-exporter", - "prometheus-adapter", - "addons" - ] - dependencies: [prepare-lma] diff --git a/workflows/v1/openstack-components-wf.yaml b/workflows/v1/openstack-components-wf.yaml deleted file mode 100644 index c26e252..0000000 --- a/workflows/v1/openstack-components-wf.yaml +++ /dev/null @@ -1,70 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Workflow -metadata: - generateName: openstack-deploy- - namespace: argo -spec: - entrypoint: deploy - serviceAccountName: argo-deploy-sa - arguments: - parameters: - - name: app_name - value: openstack - templates: - - name: deploy - dag: - tasks: - - name: base - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "keystone", - "glance", - "cinder" - ] - dependencies: [] - - name: compute-kit - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "libvirt", - "nova", - "neutron" - ] - dependencies: [base] - - name: addon - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "horizon", - "heat", - "prometheus-openstack-exporter" - ] - dependencies: [base,compute-kit] - - name: sona - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "sona" - ] - dependencies: [addon] diff --git a/workflows/v1/openstack-infra-wf.yaml b/workflows/v1/openstack-infra-wf.yaml deleted file mode 100644 index 16cf758..0000000 --- a/workflows/v1/openstack-infra-wf.yaml +++ /dev/null @@ -1,32 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Workflow -metadata: - generateName: openstack-infra- - namespace: argo -spec: - entrypoint: deploy - serviceAccountName: argo-deploy-sa - arguments: - parameters: - - name: app_name - value: openstack - templates: - - name: deploy - dag: - tasks: - - name: infra - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "ceph-provisioners", - "ingress", - "memcached", - "rabbitmq", - "mariadb" - ] - dependencies: [] diff --git a/workflows/v1/service-mesh-wf.yaml b/workflows/v1/service-mesh-wf.yaml deleted file mode 100644 index ae7397d..0000000 --- a/workflows/v1/service-mesh-wf.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Workflow -metadata: - generateName: service-mesh- - namespace: argo -spec: - entrypoint: deploy - serviceAccountName: argo-deploy-sa - arguments: - parameters: - - name: app_name - value: "service-mesh" - templates: - - name: deploy - dag: - tasks: - - name: operator - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "istio-operator", - "jaeger-operator" - ] - dependencies: [] - - name: resource - templateRef: - name: deploy-helmrelease - template: ChartGroup - arguments: - parameters: - - name: chart_list - value: | - [ - "kiali-operator", - "service-mesh-controlplane", - "service-mesh-gateway" - ] - dependencies: [operator]