ansible become 方法 - 主机之间的变化

ansible become method - change between hosts

假设我有一本剧本:

---
- name
  host: testserver
  become_method = sudo
  become_user = root
  tasks:
    - name: copystuff
      module: copy
        do stuff
    - name: copy stuff
      delegate_to: localhost
      module: copy
        do stuff 

我在本地主机和测试服务器上有相同的用户和相同的密码。但是在测试服务器上,我必须使用 sudo 才能成为 root,但在本地主机上,我必须使用 dzdo 才能成为 root。

所以我想知道是否有办法让我使用其中任何一种,如果一种方法不起作用?

是的,这就是 hostvars 的设计目的:为每个主机声明 vars

如果您有库存文件(或在大多数动态库存源中),您可以在库存文件中执行此操作,如精美手册中所示。或者,如果您 运行 是一个更临时的清单列表(例如 -i machine1,localhost,machine99),那么您可以使用条件 set_fact: 在 ansible 启动后声明该 hostvar 运行 :

- set_fact:
    ansible_become_method: dzdo
  when: inventory_hostname == "localhost"

只要您在使用具有 become: yes 的任务之前执行此操作

您可能也对 pre_tasks: 关键字感兴趣