![](/img/trans.png)
[英]How to apply Kubernetes YAML files to AWS EKS using Ansible Tower/AWX?
[英]How to dynamically set values containing URLs (with slashes) in Kubernetes yaml files & prevent: bad flag in substitute command
我们使用 Tekton 作为我们的 CI/CD 解决方案,并希望在我们的pipeline-run.yml
中替换{{DASHBOARD_HOST}}
的值,如下所示:
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
generateName: buildpacks-test-pipeline-run-
spec:
serviceAccountName: buildpacks-service-account-gitlab # Only needed if you set up authorization
pipelineRef:
name: buildpacks-test-pipeline
workspaces:
- name: source-workspace
subPath: source
persistentVolumeClaim:
claimName: buildpacks-source-pvc
- name: cache-workspace
subPath: cache
persistentVolumeClaim:
claimName: buildpacks-source-pvc
- name: maven-repo-cache
subPath: maven-repo-cache
persistentVolumeClaim:
claimName: buildpacks-source-pvc
params:
- name: IMAGE
value: registry.gitlab.com/jonashackt/microservice-api-spring-boot # This defines the name of output image
- name: REPO_PATH_ONLY
value: jonashackt/microservice-api-spring-boot
- name: SOURCE_REVISION
value: 3c4131f8566ef157244881bacc474543ef96755d
- name: DASHBOARD_PORT
value: 8765
- name: DASHBOARD_HOST
value: {{DASHBOARD_HOST}}
我们尝试使用此方法中描述的sed
方法,因此请回答:
DASHBOARD_HOST=http://abd1c6f-123246.eu-central-1.elb.amazonaws.com
sed "s/{{DASHBOARD_HOST}}/$DASHBOARD_HOST/g" pipeline-run.yml | kubectl apply -f -
但得到以下错误:
bad flag in substitute command: '/'
关于如何使用sed
替换{{DASHBOARD_HOST}}
变量的任何想法?
您要替换的变量包含斜杠 - 和sed "s/{{DASHBOARD_HOST}}/$DASHBOARD_HOST/g"
告诉sed
使用/
作为分隔符。 这会产生错误。 但是由于 sed s
命令可以使用任何字符作为分隔符,我们可以使用s#
而不是s/
来优化解决方案,如下所示:
sed "s#{{DASHBOARD_HOST}}#$DASHBOARD_HOST#g" app-deployment.yaml | kubectl apply -f -
我们也可以省略sed
所说的cat
,因为sed能够自行读取文件。 我们要在app-deployment.yaml
中替换的变量可能看起来像这样:
...
params:
- name: DASHBOARD_HOST
value: {{DASHBOARD_HOST}}
...
使用 sed 您甚至可以替换 yaml 文件中的多个变量。 假设您的app-deployment.yaml
具有以下内容:
...
params:
- name: DASHBOARD_HOST
value: {{DASHBOARD_HOST}}
- name: DASHBOARD_PORT
value: {{DASHBOARD_PORT}}
...
现在在 shell 中设置两个变量:
DASHBOARD_HOST=http://abd1c6f-123246.eu-central-1.elb.amazonaws.com
DASHBOARD_PORT=9785
然后使用 ; 链接 sed s#
命令;
像这样:
sed "s#{{DASHBOARD_HOST}}#$DASHBOARD_HOST#g;s#{{DASHBOARD_PORT}}#$DASHBOARD_PORT#g" app-deployment.yaml | kubectl apply -f -
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.