首页 > 解决方案 > ansible become 方法 - 在主机之间更改

问题描述

假设我有一本剧本:

---
- 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 

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

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

标签: linuxansiblesudo

解决方案


是的,这就是hostvars设计的目的:vars按主机声明。

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

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

只要您在使用具有become: yes它的任务之前这样做

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


推荐阅读