我使用ansible一段时间使用独立的playbooks,现在想在我的环境中配置角色结构。 这是文件夹结构(例如,摘要)
├── hosts
├── playbooks
│ ├── project1-staging.yml
│ └── project1-production.yml
├── roles
│ └── project1-compile
│ ├── files
│ │ └── project1.conf
│ ├── handlers
│ │ └── main.yml
│ ├── meta
│ │ └── main.yml
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ └── vars
│ └── main.yml
│ └── ec2-create
│ ├── handlers
│ │ └── main.yml
│ ├── meta
│ │ └── main.yml
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ └── vars
│ └── main.yml
│ └── project1-deploy
│ ├── handlers
│ │ └── main.yml
│ ├── meta
│ │ └── main.yml
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ └── vars
│ └── main.yml
├── vars.yml
看起来很简单。 我想执行project1-staging.yml playbook来为特定版本创建一个新的临时环境,就像那样; ansible-playbook project1-staging.yml -e'version = 1'
和下面的剧本;
---
- name: deploy project1 (staging) {{ version }}
hosts: local
connection: local
roles:
#- project1-compile version={{ version }}
- { role: ec2-create, project: project1, count:1 }
- { role: project1-compile, version: {{ version }} }
- { role: project1-deploy, version: {{ version }}, target: {{last_ec2}} }
这个结构有一些问题,我也不喜欢它。 - 那是正确的方法吗? - 我如何使用ec2-create角色的结果,我想将代码部署到刚创建的服务器,我不知道id。 - 是否有另一种方法将参数传递给角色?
答案 0 :(得分:0)
看看Inventory Modules。更具体地说是add_host模块。
概要
使用变量在库存中创建新主机和组以供使用 以后播放相同的剧本。采用变量以便您定义 新主机更全面。
实施例
# add host to group 'just_created' with variable foo=42
- add_host: name={{ ip_from_ec2 }} groups=just_created foo=42
# add a host with a non-standard port local to your machines
- add_host: name={{ new_ip }}:{{ new_port }}
# add a host alias that we reach through a tunnel
- add_host: hostname={{ new_ip }}
ansible_ssh_host={{ inventory_hostname }}
ansible_ssh_port={{ new_port }}