【问题标题】:How to skip role when host is unreachable?主机无法访问时如何跳过角色?
【发布时间】:2019-06-13 12:36:58
【问题描述】:

我有disable_root 角色,它创建admin 用户并禁止root 用户通过ssh 连接到服务器。 当我第二次使用此角色重新运行剧本时,我收到 unreachable 错误(没关系,因为我刚刚禁用了它)。

在这种情况下,我想跳过此角色并继续使用其他角色(将以管理员用户身份运行)。我该怎么做?

这是我的剧本(disbale_root 使用ansible_user: root var)

- hosts: webservers
  roles:
    - disable_root
    - common
    - nginx

【问题讨论】:

  • 我猜如果“用户存在”没有有效的 ansible_user,那么之前很难猜到。如果 ssh 登录本身失败,Ansible 将无能为力。所以,我猜你想在 disable_root 失败的情况下切换到“admin”用户,然后你可以添加另一个用户变量并在失败的情况下全局更新 ansible_user。
  • 如果你只是想抓住那个失败,做一些事情,请检查stackoverflow.com/questions/54540617/…

标签: ansible ansible-2.x


【解决方案1】:

如果需要,一个 playbook 应以 root 身份连接到远程主机,如果该用户已创建,则以 admin 身份连接到远程主机。这可以通过 remote_user 完成(参见Ansible remote_user vs ansible_user )。

让我们创建 playbook 来禁用 root 并启用 admin

> cat play-disable-root.yml
- hosts: webservers
  remote_user: 'root'
  tasks:
    - include_role:
        name: disable_root
      when: play_disable_root|default(false)

如果 admin 无法连接到远程主机,则在第一次播放中导入此 playbook

- hosts: webservers
  remote_user: 'admin'
  tasks:
    - delegate_to: localhost
      command: ping -c1 "{{ inventory_hostname }}"
      register: result
      ignore_errors: true
    - set_fact:
        play_disable_root: true
      when: result.rc != 0

- import_playbook: play-disable-root.yml

在第二场戏中继续扮演其他角色

- hosts: webservers
  remote_user: 'admin'
  roles:
    - common
    - nginx

第一个和第二个剧本都可以放在一个剧本中。

(代码未测试)

更新:

  • 无法有条件地导入剧本

【讨论】:

    猜你喜欢
    • 2018-06-07
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    相关资源
    最近更新 更多