我想使用blockinfile为我的ElasticSearch配置添加一个文本块,但每次运行我的playbook时,该块都会被添加到文件中 - 即使它已经存在.这是一个问题,因为ElasticSearch不只是取最后一个值,它在启动时会说"你有这个值的多个条目"(或类似的东西).
我的游戏看起来像这样:
- name: configure elasticsearch
blockinfile:
dest: /etc/elasticsearch/elasticsearch.yml
marker: "## added by ansible configuration"
block: |
network.host: 0.0.0.0
path.data: /var/lib
path.logs: /var/log/elasticsearch
path.repo: /home/chris/elastic-backups
state: present
Run Code Online (Sandbox Code Playgroud)
但在第二次运行我的剧本后,我的elasticsearch.yml文件看起来像:
## added by ansible configuration
network.host: 0.0.0.0
path.data: /var/lib
path.logs: /var/log/elasticsearch
path.repo: /home/chris/elastic-backups
## added by ansible configuration
network.host: 0.0.0.0
path.data: /var/lib
path.logs: /var/log/elasticsearch
path.repo: /home/chris/elastic-backups
## added by ansible configuration
Run Code Online (Sandbox Code Playgroud)
有没有办法只添加块,如果它还不存在?
tec*_*raf 14
您应该{mark}在marker参数中指定关键字:
marker: "## {mark} added by ansible (configuration elasticsearch)"
Run Code Online (Sandbox Code Playgroud)
这将导致Ansible在开始和在块替换的端部插入一个线{mark}与相应的BEGIN和END:
## BEGIN added by ansible (configuration elasticsearch)
network.host: 0.0.0.0
path.data: /var/lib
path.logs: /var/log/elasticsearch
path.repo: /home/chris/elastic-backups
## END added by ansible (configuration elasticsearch)
Run Code Online (Sandbox Code Playgroud)
否则Ansible没有线索,块开始的地方和结束的位置,所以在每次运行时它认为块不存在并插入一个新的块.