基于平台的Ansible条件用户

时间:2014-10-06 23:57:33

标签: ansible ansible-playbook

我希望根据平台使用不同的用户来运行ansible playbook。

例如,我有一个这样的剧本:

---
- hosts: all
  user: deploy
  tasks:
  - name: hello world
    shell: echo "Hello World"

我希望该用户能够"部署"在RedHat上运行时,以及Darwin / Mac系统上的环境变量$ USER。

我该如何设置?

2 个答案:

答案 0 :(得分:5)

在服务器故障方面有一个很好的问题,它可以通过以下几种方式解决这个问题:ansible playbook, different user by operating system,但它并不重复,因为它是一个不同的" board"

这也是Ansible常见问题解答How do I handle different machines needing different user accounts or ports to log in with?中的首要问题,它建议将其放在包含ansible_ssh_user的主机文件中。

"Ansible best practices" file suggests using group_vars,这是最干净的选择。

对于琐碎的案例,您还可以选择性地运行任务:

- name: run this on debian type systems
  debug msg="hello from debian"
  sudo: yes
  sudo_user: ubuntu
  when: ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu'

- name: run this on OSX type systems
  sudo: yes
  sudo_user: "{{ lookup('env','USER') }}"
  debug: msg="hello from osx"
  when: ansible_distribution == 'MacOSX'

答案 1 :(得分:0)

如果你只需要知道你是在处理linux还是Mac,你可以使用uname输出。在剧本中,这可能如下所示:

  - name: check operating system
    shell: uname
    ignore_errors: yes
    register: uname_result
  - name: install tensorflow
    sudo: yes
    shell: pip3 install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.11.0rc0-cp34-cp34m-linux_x86_64.whl
    when: uname_result.stdout == 'Linux'
  - name: install tensorflow
    sudo: yes
    shell: pip3 install --upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.11.0rc0-py3-none-any.whl
    when: uname_result.stdout == 'Darwin'