ansible - 如果客户端不在广告域中,则运行 ansible 任务

目前我正在创建一个剧本来自动化我们为 ubuntu 服务器 20.04.4 LTS 设置的初始服务器。我创建了以下简单任务:

- name: Join Domain domain.group
    expect:
      command: realm join -U domainuser domain.group
      responses:
        Password for *: "{{domain_join_pw}}"

这工作得很好,但是一旦任务完成并且我再次运行播放,它就会被以下消息打断:

["realm: Already joined to this domain"]

有没有办法检查客户端是否已经在域中并且只在它不是时才运行任务?

我尝试了这样的 ansible_fqdn 和 ansible_domain 事实:

- name: Join Domain domain.group
    expect:
      command: realm join -U domainuser domain.group
      responses:
        Password for *: "{{domain_join_pw}}"
    when: ansible_fqdn != "domain.group"

我对 Ansible 很陌生,我认为这并不难,但不知道怎么做。感谢每一个遮阳篷。

回答1

假设域是在变量中注册的。

DOMAIN: "domain.group"

您可以使用以下通用且尚未测试的示例来增强您的用例。

- name: Check if system is already domain joined
  shell:
    cmd: realm list | grep {{ DOMAIN }}
  changed_when: false
  check_mode: false
  register: domain_joined
  failed_when: domain_joined.rc !=0 and domain_joined.rc !=1

并让任务仅在未加入域时运行,例如

when: not domain_joined | bool

...目前我只有加入域的系统,因此我无法使用未加入的系统运行完整的测试。

您可能还查看了命令

sssctl domain-status ${DOMAIN}
Online status: Online

Active servers:
AD Global Catalog: not connected
AD Domain Controller: ad.example.com

Discovered AD Global Catalog servers:
None so far.

Discovered AD Domain Controller servers:
- ad.example.com

{{ DOMAIN }} 当在 Ansible 中使用时,检查输出以及如何过滤和注册结果以供进一步使用。

相似文章

最新文章