【问题标题】:Use curly braces instead of brackets for Terraform list对 Terraform 列表使用花括号而不是方括号
【发布时间】: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


    【解决方案1】:

    您将列表作为...列表,这是一件好事;)

    您需要将其转换为您需要的“任何格式”,即用逗号分隔并用花括号括起来的元素列表。

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

    ---
    - 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      相关资源
      最近更新 更多