Kubernetes 对于地形列表,请使用大括号而不是括号

Kubernetes 对于地形列表,请使用大括号而不是括号,kubernetes,ansible,terraform,kubernetes-helm,Kubernetes,Ansible,Terraform,Kubernetes Helm,我想使用Terraform安装jenkins官方头盔,然后调用Ansible 理想情况下,我会使用Terraform头盔提供程序,但它有一个结束时 因此,我正在通过以下本地exec安装执行实际的helm安装 provisioner "local-exec" { command = "ansible-playbook -vvv ${path.module}/playbooks/playbook.yaml -i ./playbooks/hosts --extra-vars \"{ \"k

我想使用Terraform安装jenkins官方头盔,然后调用Ansible

理想情况下,我会使用Terraform头盔提供程序,但它有一个结束时

因此,我正在通过以下本地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}\" }\""
  }
}
我的目的是能够将values文件中使用的插件列表作为参数传递给ansible cmd,即额外的var

因此,我声明了以下变量:

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变量显式设置变量

问题如下:


    - 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
helm命令接受列表,即对应于变量jenkins_plugins_list的值,如下所示:

helm upgrade --force --tls --install --set master.installPlugins="{kubernetes:1.21.2,git:4.0.0}"
i、 e.带引号和大括号

但是,我仅成功地产生了以下输出:

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"

你得到的名单是。。。列表,这是一件好事

您需要将其转换为所需的任何格式,即由comas分隔并用大括号包围的元素列表

请参见下面的示例。要绕过表达式中导致解释错误的三个大括号,语法有点棘手:

---
- hosts: localhost
  gather_facts: false

  vars:
    jenkins_plugins_list: ['kubernetes:1.21.2', 'workflow-job:2.36', 'workflow-aggregator:2.6', 'credentials-binding:1.20', 'git:4.0.0']

  tasks:
    - debug:
        msg: "{{ '{' + jenkins_plugins_list | join(',') + '}' }}"

PLAY [localhost] ********************************************************************************************************************************************************************************************************************************************************

TASK [debug] ************************************************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "{kubernetes:1.21.2,workflow-job:2.36,workflow-aggregator:2.6,credentials-binding:1.20,git:4.0.0}"
}

PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0