Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅当满足条件并在Ansible Playbook中重新启动SSH服务时,才处理Ansible循环中的项目_Ssh_Firewall_Ansible_Ansible Playbook - Fatal编程技术网

仅当满足条件并在Ansible Playbook中重新启动SSH服务时,才处理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

在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 '' }}"
      - "{{ 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
和关于此任务的两个简单问题:

  • 如果不满足条件,是否可以完全忽略上述循环中的
  • 在使用
    ufw
    管理端口后,如何使用Ansible“正确”地重新启动
    sshd
    服务(因为在我的情况下,在尝试重新启动
    sshd
    时,我可以理解Ansible的连接错误)
若不满足条件,是否可以完全忽略上述循环中的项

我只想把它改为:

- 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设置:(