使用ansible,向现有文件中添加一行的最佳方法是什么,该行取决于传递的变量的值--额外变量?

使用ansible,向现有文件中添加一行的最佳方法是什么,该行取决于传递的变量的值--额外变量?,ansible,Ansible,我有一个需要在标准系统文件中设置的数字配置(例如,某些配置的毫秒数)。我不想将整个配置文件保存在版本控制中,因为它是标准安装的一部分。是否有方法向文件中添加一行,并在该行中包含一些变量替换文本,这些文本可以依赖于指定的变量(例如,当使用--extra vars运行playbook时,通过命令行传递) 例如,以下内容(我迄今为止的最大努力): 使用ansible playbook-e“ring\u delay=10000” 如果我没有配置的变量值(例如,我只是硬编码行:'JVM_OPTS=“$JV

我有一个需要在标准系统文件中设置的数字配置(例如,某些配置的毫秒数)。我不想将整个配置文件保存在版本控制中,因为它是标准安装的一部分。是否有方法向文件中添加一行,并在该行中包含一些变量替换文本,这些文本可以依赖于指定的变量(例如,当使用
--extra vars
运行playbook时,通过命令行传递)

例如,以下内容(我迄今为止的最大努力):

使用
ansible playbook-e“ring\u delay=10000”
如果我没有配置的变量值(例如,我只是硬编码
行:'JVM_OPTS=“$JVM_OPTS-Dcassandra.ring_delay_ms=10000),上面的示例就可以正常工作“
,但我希望能够在运行playbook时从命令行手动指定值。有没有好的方法可以做到这一点?理想情况下,重新运行playbook会用新值覆盖ring_延迟


编辑:从这一点来看,我上面使用的
${ring\u delay}
符号似乎不是ansible的一个特性,尽管在web上有几个示例表明存在一些用于字符串替换的相关功能。请参阅“命名反向引用”,但我不确定它们是什么。

插值的正确语法是“{var}}”。“${var}”语法已经被弃用了一段时间了

按以下方式更改任务应该可以做到这一点:

-名称:设置振铃延迟
线条填充:
目的地:/etc/cassandra/cassandra-env.sh
国家:现在
regexp:'JVM_OPTS=“$JVM_OPTS-Dcassandra.ring_delay_ms=.*”'
行:“JVM_OPTS=“$JVM_OPTS-Dcassandra.ring_delay_ms={{ring_delay}}”
何时:定义环_延迟

这里不需要
backrefs
,因为regexp中没有捕获组


祝你好运。

插值的正确语法是“{var}”。“${var}”语法已经被弃用了一段时间了

按以下方式更改任务应该可以做到这一点:

-名称:设置振铃延迟
线条填充:
目的地:/etc/cassandra/cassandra-env.sh
国家:现在
regexp:'JVM_OPTS=“$JVM_OPTS-Dcassandra.ring_delay_ms=.*”'
行:“JVM_OPTS=“$JVM_OPTS-Dcassandra.ring_delay_ms={{ring_delay}}”
何时:定义环_延迟

这里不需要
backrefs
,因为regexp中没有捕获组


祝你好运。

在下线的那些“$”符号是什么?哎呀,它们是vim中可见的下线字符。删除它们。在下线的那些“$”符号是什么?哎呀,它们是vim中可见的下线字符。删除它们。谢谢,这很有效,但只有在
{ring u delay}
。但是,它不是幂等的。每次运行playbook时都会添加一行新行。您知道如何解决此问题吗?我找到的最佳解决方案是在此之前插入一个删除匹配行的任务,这也会在playbook在没有指定覆盖的情况下重新运行时删除配置。这是使用
完成的>lineinfle
使用
regexp
选项,注意转义美元符号,它在regexp中使用时与行尾匹配。谢谢,它起作用了,但只适用于
{ring\u delay}
。但是,它不是幂等的。每次运行playbook时都会添加一行新行。您知道如何解决此问题吗?我找到的最佳解决方案是在此之前插入一个删除匹配行的任务,这也会在playbook在没有指定覆盖的情况下重新运行时删除配置。这是使用
完成的>lineinfile
使用
regexp
选项,注意避开美元符号,当在regexp中使用时,美元符号与行尾匹配。
- name: Set ring delay
  lineinfile:
    dest: /etc/cassandra/cassandra-env.sh
    state: present
    regexp: 'JVM_OPTS="$JVM_OPTS -Dcassandra.ring_delay_ms=.*"'
    line: 'JVM_OPTS="$JVM_OPTS -Dcassandra.ring_delay_ms=${ring_delay}"'
    backrefs: yes
  when: ring_delay is defined