ansible:sudo -iu用于交互式shell

时间:2014-09-05 08:30:27

标签: ubuntu automation ansible

当需要交互式shell时,是否有更好的方法为ansible中的每个命令编写sudo -iu username -command-

示例:

- name: Install nodejs {{ node_version }}
  shell: sudo -iu {{ nvm_user }} nvm install {{ node_version }} && sudo -iu {{ nvm_user }} nvm alias default {{ node_version }}
  when: not np.stat.isdir is defined

1 个答案:

答案 0 :(得分:3)

您可以向Ansible询问sudo,并直接调用bash

- name: Install nodejs {{ node_version }}
   sudo_user: "{{ nvm_user }}"
   sudo: true
   shell: bash -lc 'nvm install {{ node_version }} && nvm alias default {{ node_version }}'
   when: np.stat.isdir is not defined

一些注意事项:

  • Install nodejs {{ node_version }}不会进行插值
  • 您可以使用更自然的not x is defined
  • 替换x is not defined
  • 您可能希望添加“changed_when:来控制命令的更改状态,因此您的taks是幂等的(但似乎您只在某个目录不存在时才运行任务,所以我猜任务状态只能是skipped / changed