仅当满足条件并在Ansible Playbook中重新启动SSH服务时,才处理Ansible循环中的项目
在Ansible剧本中,我有几个简单的任务:仅当满足条件并在Ansible Playbook中重新启动SSH服务时,才处理Ansible循环中的项目,ssh,firewall,ansible,ansible-playbook,Ssh,Firewall,Ansible,Ansible Playbook,在Ansible剧本中,我有几个简单的任务: tasks: - name: Reset firewall action: shell ufw --force reset - name: Manage firewall ports ufw: rule=allow port={{ item }} proto=tcp with_items: - "{{ ssh_port }}" - "{{ 80 if myvar == 'yes' else
tasks:
- name: Reset firewall
action: shell ufw --force reset
- name: Manage firewall ports
ufw: rule=allow port={{ item }} proto=tcp
with_items:
- "{{ ssh_port }}"
- "{{ 80 if myvar == 'yes' else '' }}"
- "{{ 8080 if myvar == 'no' else '' }}"
- name: Enable firewall
ufw: state=enabled
notify: restart ssh
handlers:
- name: restart ssh
service:
name=sshd
state=restarted
enabled=yes
和关于此任务的两个简单问题:
- 如果不满足条件,是否可以完全忽略上述循环中的
项
- 在使用
管理端口后,如何使用Ansible“正确”地重新启动ufw
服务(因为在我的情况下,在尝试重新启动sshd
时,我可以理解Ansible的连接错误)sshd
- name: Manage firewall ports
ufw: rule=allow port={{ item }} proto=tcp
with_items:
- "{{ ssh_port }}"
- "{{ 80 if myvar == 'yes' else 8080 }}"
…这会让你得到同样的结果。在其他情况下,您可以使用when
限定符控制哪些项触发操作:
- debug: msg="using item {{item}}"
with_items:
- one
- two
- three
when: "'o' in item"
其结果是:
TASK: [debug msg="using item {{item}}"] ***************************************
ok: [localhost] => (item=one) => {
"item": "one",
"msg": "using item one"
}
ok: [localhost] => (item=two) => {
"item": "two",
"msg": "using item two"
}
skipping: [localhost] => (item=three)
如何使用Ansible“正确”重新启动sshd服务
使用ufw管理端口(因为在我的情况下,我可以理解得到
尝试重新启动sshd时Ansible的连接错误)
重新启动
sshd
服务不应中断现有ssh会话。如果它阻止了ansible的后续连接,您可以使用ansible的wait_for
模块延迟,直到ssh准备好接受连接。谢谢!items
的问题现在可以完美解决:)不知道何时会影响循环中的每个项。。。关于重启SSH服务,问题是我在SSH中配置了很多东西,不仅仅是我更改了端口,所以我不确定wait\u for
是否可以在这里帮助我。。。如果可以的话,你能简单地解释一下如何处理它吗?我也不知道什么时候直到刚刚测试出来:)。关于ssh
,如果您正在更改它正在侦听的端口,我不确定除了将您的剧本一分为二之外还有什么好的解决方案,然后用不同的ansible配置选项运行它们。问题是,我确实将我的剧本分成了2个部分——比如说使用不同配置的前ssh配置和后ssh配置。我还将防火墙任务放在pre-ssh playbook的最后一部分,并将重新启动ssh服务作为其中的最后一项任务。这意味着ssh和防火墙已配置,但从未应用,因为ssh服务从未正确重新启动,因此我很难连接这两种配置中的任何一种。最后,我被迫重新启动机器以应用ssh/fw设置:(