我正在写一个一次性的剧本来更新我的elasticsearch框上的一些grok规则(我可以手动完成,但我预计会做很多这样的任务,所以我想让它工作起来)。
我只想在8台主机上运行一个lineinfile:
#!/usr/bin/ansible-playbook -i /home/myself/workingdir/hosts
- name: update those lines
user: myself
hosts: elasticsearch_hosts
sudo: true
tasks:
- lineinfile:
dest: /opt/logstash/patterns/stuff
regexp: STUFF_AND_THINGS
line: STUFF_AND_THINGS [%{GREEDYDATA:big_h0nking_regex}\] ?.%{37_RANDOM_CHARACTERS:bologna} %{URIPATHPARAM:} %{*#&%$%@&@^$@:expletive}/%{NUMBER:some_more_crap} %{NUMBER:minutes_wasted} %{[idk,lol]1776}
- service: name=elasticsearch state=restarted这是我的hosts文件
192.168.1.98
192.168.2.76
192.168.3.54
192.168.4.32
192.168.5.10
192.168.6.123
[elasticsearch-hosts]
es-1 ansible_host=192.168.1.98
es-2 ansible_host=192.168.2.76
es-3 ansible_host=192.168.3.54
es-4 ansible_host=192.168.4.32
es-5 ansible_host=192.168.5.10
es-6 ansible_host=192.168.6.123当运行这段代码时,我得到:
PLAY [update them lines] ***************************************************
skipping: no hosts matched我知道我在清单文件中做了一些不正确的事情,但我不确定是什么,因为我只使用过,例如,rackspace rax模块在运行play时构建清单列表。
注意es-1、6是我在dns上定义的短名称可能也很有用,所以我可以这样做,例如ssh es-1,这样就可以了。它似乎不喜欢文件以前的迭代中的这些名称。
发布于 2016-07-23 02:17:45
问题在于我如何调用ansible-playbook。
#!/usr/bin/ansible-playbook -i /home/myself/workingdir/hosts这显然不是通过shebang传递参数的适当方式,因此ansible-playbook默认为/etc/ansible/hosts,它是空的。
https://stackoverflow.com/questions/38492398
复制相似问题