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

Run ansible task if the client is not in ad domain

目前我正在创建一个 playbook 来自动化我们的 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 的新手,我认为这并不难,但不知道怎么做。 感谢每一个遮阳篷。

假定域已在变量中注册。

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 中使用时,检查输出以及如何过滤和注册结果以供进一步使用。