【发布时间】:2023-03-09 17:58:01
【问题描述】:
我想使用 Terraform 安装官方的 jenkins helm chart,然后调用 Ansible。
理想情况下,我会使用 Terraform helm 提供程序,但是当 being invoked 超过 tls 时,它有一个 severe limitation。
因此,我通过以下local-exec 安装来执行实际的helm 安装。
provisioner "local-exec" {
command = "ansible-playbook -vvv ${path.module}/playbooks/playbook.yaml -i ./playbooks/hosts --extra-vars \"{ \"k8s_cluster_name\": \"${local.k8s_name}\", \"zonename\": \"${var.zone}\", \"env_name\": \"${var.env_name}\", \"google_project_name\": \"${var.project_id}\", \"jenkins_master_image_tag\": \"${var.jenkins_master_image_tag}\", \"jenkins_agent_image_tag\": \"${var.jenkins_agent_image_tag}\", \"jenkins_plugins_list\": \"${var.jenkins_plugins_list}\" }\""
}
}
我的目的是能够将值文件中使用的插件列表作为参数(即额外变量)传递给ansible cmd。
因此我声明了以下变量:
variable "jenkins_plugins_list" {
description = "The list of jenkins' plugins to be installed"
type = "list"
default = ["kubernetes:1.21.2", "workflow-job:2.36", "workflow-aggregator:2.6", "credentials-binding:1.20", "git:4.0.0"]
}
将使用jenkins_plugins_list 变量的特定ansible 任务如下:
- name: Install Jenkins
register: jenkins_init
shell: "helm upgrade --force --tls --install --set master.installPlugins={{ jenkins_plugins_list }} --set master.tag={{ jenkins_master_image_tag }} --set agent.tag={{ jenkins_agent_image_tag }} -f {{ tempdir }}/{{ env_name }}-jenkins/jenkins-values.yaml jenkins-{{ env_name }} --namespace jenkins stable/jenkins"
retries: 5
delay: 30
until: jenkins_init.rc == 0
我正在尝试通过在 ansible 调用期间传递的 tf 变量显式设置 master.installPlugins 变量。
问题如下:
helm 命令接受列表,即对应于变量jenkins_plugins_list 的值如下:
helm upgrade --force --tls --install --set master.installPlugins="{kubernetes:1.21.2,git:4.0.0}"
即带引号和花括号。
但是我只设法产生以下输出:
helm upgrade --force --tls --install --set master.installPlugins=[u'kubernetes:1.21.2', u'workflow-job:2.36', u'workflow-aggregator:2.6', u'credentials-binding:1.20', u'git:4.0.0'] -f /org_files/tmp/myenv-jenkins/jenkins-values.yaml jenkins-myenv --namespace jenkins stable/jenkins"
【问题讨论】:
标签: kubernetes ansible terraform kubernetes-helm