我正在使用Ansible在ec2上构建一台机器。但我也有流浪汉在本地测试脚本。
这是我的剧本
- name: Provision ec2
hosts: all
user: vagrant
sudo: yes
gather_facts: true
vars:
gsutil_user_home: "vagrant"
如果我想将此剧本用于EC2,我必须将user
和gsutil_user_home
更改为ubuntu
才能使其生效。反正我是否可以将其作为一个变量,并根据一些参数告诉Ansible它需要运行哪个用户?
答案 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)
我建议您创建文件夹develop
,production
,staging
。在那里设置hosts
个文件,group_vars
,hosts_vars
并使用正确的变量并使用它们。
例如:
.
├── develop
│ └── hosts
├── production
│ └── hosts
├── test.yml
---
- hosts: localhost
gather_facts: no
connection: local
tasks:
- debug: var=ansible_ssh_user
[localhost]
127.0.0.1 ansible_ssh_user=vagrant
[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