如何告诉ansible在不同的环境中使用不同的用户?

时间:2015-08-07 19:52:24

标签: amazon-ec2 vagrant ansible ansible-playbook

我正在使用Ansible在ec2上构建一台机器。但我也有流浪汉在本地测试脚本。

这是我的剧本

- name: Provision ec2
  hosts: all
  user: vagrant
  sudo: yes
  gather_facts: true
  vars:
    gsutil_user_home: "vagrant"

如果我想将此剧本用于EC2,我必须将usergsutil_user_home更改为ubuntu才能使其生效。反正我是否可以将其作为一个变量,并根据一些参数告诉Ansible它需要运行哪个用户?

2 个答案:

答案 0 :(得分:2)

如果这些值在您的剧本持续时间内通常是一致的,那么您通常会将它们设置为广告资源中的组/主机变量,并针对不同的环境设置不同的库存或组。但如果你真的想用vars做这件事并将其传递给-e,那也很好:

- name: Provision ec2
  hosts: all
  user: {{ my_ec2_user }}
  sudo: yes
  gather_facts: true
  vars:
    gsutil_user_home: {{ gsutil_user_home }}

答案 1 :(得分:2)

我建议您创建文件夹developproductionstaging。在那里设置hosts个文件,group_varshosts_vars并使用正确的变量并使用它们。

例如:

文件夹结构

.
├── develop
│   └── hosts
├── production
│   └── hosts
├── test.yml

test.yml

---
- hosts: localhost
  gather_facts: no
  connection: local
  tasks:
    - debug: var=ansible_ssh_user

hosts - develop

[localhost]
127.0.0.1 ansible_ssh_user=vagrant

hosts - dproduction

[localhost]
127.0.0.1 ansible_ssh_user=ec2-user

运行它:

$ ansible-playbook -i develop/ test.yml 

PLAY [localhost] ************************************************************** 

TASK: [debug var=ansible_ssh_user] ******************************************** 
ok: [127.0.0.1] => {
    "var": {
        "ansible_ssh_user": "vagrant"
    }
}

PLAY RECAP ******************************************************************** 
127.0.0.1                  : ok=1    changed=0    unreachable=0    failed=0   

$ ansible-playbook -i production/ test.yml 

PLAY [localhost] ************************************************************** 

TASK: [debug var=ansible_ssh_user] ******************************************** 
ok: [127.0.0.1] => {
    "var": {
        "ansible_ssh_user": "ec2-user"
    }
}

PLAY RECAP ******************************************************************** 
127.0.0.1                  : ok=1    changed=0    unreachable=0    failed=0