gpt4 book ai didi

Ansible concat 默认变量和文字字符串

转载 作者:行者123 更新时间:2023-12-01 06:12:12 24 4
gpt4 key购买 nike

我无法做一件非常简单的事情。

在我的任务中,我试图将两个默认变量与文字字符串连接起来以创建路径

- name: "Uploading File"
copy:
src: "{{ installer_iso_src_location }}"/"{{ installer_version }}"/filename.iso
dest: /opt/temp/filename.iso

这给了我一个错误。知道如何连接变量和文字字符串吗?

最佳答案

首先, YAML

  • 您的语法必须符合 YAML:

    Strings (scalars) are ordinarily unquoted, but may be enclosed in double-quotes ("), or single-quotes (').



    所以你可以写:
    parameter: value

    或者
    parameter: 'value'

    或者
    parameter: "value"

    以下不是有效的 YAML:
    "{{ installer_iso_src_location }}"/"{{ installer_version }}"/filename.iso
  • 如果您的 value以花括号 { 开头Ansible 将尝试将其解析为字典(YAML 是 JSON 的超集,因此用大括号括起来的字典/关联数组是有效的语法)。

    Associative arrays are represented using the colon space (: ) in the form key: value, either one per line or enclosed in curly braces ({ }) and separated by comma space (, ).



    如果它不是一个有效的 JSON 数组,Ansible 将报告一个语法错误。

  • 其次, 金贾2 :
  • Ansible 中的大多数参数(when 的值是一个值得注意的异常(exception))是 Jinja2 模板(字符串)。

    要引用 Ansible-variable-value,请使用 Jinja2 expression{{ 分隔和 }} (不涉及引号):
    {{ variable }}

    对于您的案例,有两种方法可以将字符串与变量值连接起来:
    {{ installer_iso_src_location }}/{{ installer_version }}/filename.iso

    或者
    {{ installer_iso_src_location + '/' + installer_version + '/filename.iso' }}

  • 现在,YAML 和 Jinja2 结合起来:
  • 由于您的参数(字符串)以 { 开头字符并且它不是有效的 YAML/JSON 字典,YAML 解析器将失败(参见上述 YAML 要求的 2. 点)。

    因此,要让 YAML 解析器将您的值视为字符串,您必须将值(Jinja2 模板)括在引号中:
    src: "{{ installer_iso_src_location }}/{{ installer_version }}/filename.iso"

    或者
    src: "{{ installer_iso_src_location + '/' + installer_version + '/filename.iso' }}"

    或单引号和双引号的其他组合。
  • 如果您的参数值以 { 以外的字符串开头,你可以不带引号使用它,就像第一个例子中的 1. 多于。


  • 最后,有两个值得注意的异常(exception)情况,即 value 不应该遵循 YAML 规则:
  • 具有由 = 连接的键值对的模块的 Ansible 速记语法
  • 自由格式参数,例如 commandshell模块
  • 关于Ansible concat 默认变量和文字字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44686674/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com