我正在尝试将文件中的变量值放入Ansible变量中,以便使用它。
这是我得到的:
- name: extract Unique Key
shell: "grep UNIQUE_KEY ../config.py | cut -d' ' -f 3"
register: command_output
- set_fact:
unique_key: x{{ command_output.stdout | regex_replace("^'", '') | regex_replace('^"', '') | regex_replace("'$", '') | regex_replace('"$', '') }}
- set_fact:
unique_key: "{{ unique_key | regex_replace('^x', '') }}"
- debug: var=unique_key
这是可行的,但感觉笨拙,看起来很丑。
我已经尝试过将sed添加到我原来的shell模块中,但是我不知道如何正确地转义引号,也不知道如何转义regex_replace以使其在单个变量赋值中工作。
有没有一个更简单的方法来解决这个问题:
"TEST"
或
'TEST'
改为:
TEST
在Ansible中?(我也是Ansible的新手,所以这也没有帮助)
编辑:在我最初接受的@Vladimir-Botka的回答后,我发现了这个问题:
如果我不去掉引号并将该变量嵌入到另一个变量中,它会保留引号:
我需要使用这个值来构造一个路径:
vars:
service_location: "/opt/{{ unique_key }}-scheduler-service"
如果我不使用上面的方法删除引号,变量将包含引号,如调试语句的输出:
ok: [fedorasvr1] => {
"service_location": "/opt/'TEST'-scheduler-service"
}
2条答案
按热度按时间rsl1atfo1#
如果引号是字符串的一部分,简短的回答是“省略第一个和最后一个字符
内部解释都是一样的。引号控制变量的展开。参见7.3.1双引号和7.3.2单引号。
举个例子。下面的剧本
所述模板
给予
引号,如果是字符串的一部分,可以被删除.作为一个例子,下面的剧本
给予
也可以使用定制的filter_plugins/string_filters.py,这可能比复杂的转义构造更方便。
举个例子。下面的剧本
给予
FWIW,参见其他examples of filter_plugins。
ioekq8ef2#
略有不同,但可能相关:我在使用查找来初始化一个变量时得到了不需要的引号,该变量随后被用于“blockinfile”任务中。但结果发现引号是由“blockinfile”而不是查找引起的,即:
从这一行中删除引号起作用了: