ansible:角色结构和变量

时间:2014-06-25 21:07:49

标签: ansible role ansible-playbook

我使用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。 - 是否有另一种方法将参数传递给角色?

1 个答案:

答案 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 }}