我无法做一件非常简单的事情。
在我的任务中,我试图将两个默认变量与文字字符串连接起来以创建路径
- name: "Uploading File"
copy:
src: "{{ installer_iso_src_location }}"/"{{ installer_version }}"/filename.iso
dest: /opt/temp/filename.iso
这给了我一个错误。知道如何连接变量和文字字符串吗?
我无法做一件非常简单的事情。
在我的任务中,我试图将两个默认变量与文字字符串连接起来以创建路径
- name: "Uploading File"
copy:
src: "{{ installer_iso_src_location }}"/"{{ installer_version }}"/filename.iso
dest: /opt/temp/filename.iso
这给了我一个错误。知道如何连接变量和文字字符串吗?
首先,YAML
您的语法必须符合 YAML:
字符串(标量)通常不加引号,但可以用双引号 (") 或单引号 (') 括起来。
所以你可以写:
parameter: value
或者
parameter: 'value'
或者
parameter: "value"
以下不是有效的 YAML:
"{{ installer_iso_src_location }}"/"{{ installer_version }}"/filename.iso
如果您value
以花括号开头,{
Ansible 将尝试将其解析为字典(YAML 是 JSON 的超集,因此用花括号括起来的字典/关联数组是有效的语法)。
关联数组以 key: value 形式使用冒号空格 (:) 表示,每行一个或括在花括号 ({ }) 中并用逗号空格 (, ) 分隔。
如果它不是一个有效的 JSON 数组,Ansible 将报告一个语法错误。
其次,Jinja2:
Ansible 中的大多数参数(when
作为一个值得注意的例外的值)是 Jinja2 模板(字符串)。
要引用 Ansible-variable-value,请使用由and分隔的Jinja2 表达式(不涉及引号):{{
}}
{{ 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.点中的第一个示例所示。
最后,有两个值得注意的例外情况,价值不应该遵循 YAML 规则:
=
command
orshell
模块中