Ansible Become in role

上週在測試 playbook 時,發現 become 行為不如我預期。

我的 playbook 是這樣寫

---
- name: Main
  hosts: ap_servers
  become_user: jbossadm

  roles:
  - role: deploy.jboss
    become_user: jbossadm

deploy.jboss 這個 role 裡的 task ,我使用 shell 模組執行 whoami

---
- name: whoami
  shell: whoami

我連線到指定主機的使用者是 jenkins,可以切換為 jbossadm 身份。那我在執行以後,卻發現 whoami 仍然顯示為 jenkins,我百思不得其解。

經過詢問同事以後,才知道我的認知是錯的,我以為寫了 become_user: jbossadm 就會有切換使用者的效果,但實際不然,還需要加上 becomebecome_method 才會有效果。所以正確的寫法應該是

---
- name: Main
  hosts: ap_servers

  roles:
  - role: deploy.jboss
    become_user: jbossadm
    become_method: sudo
    become: yes

這樣才會是正確的。

參考資料