我正在尝试制作一些Ansible手册,它将提供一个环境(n个数据库,m个Web服务器等)并保存这些主机以供日后使用,以便我可以对它们进行部署。我能想到的最好的是https://gist.github.com/geowa4/7686681(复制如下)。这适用于它为各种服务器类型创建机器并将它们保存到hosts文件。我将使用新生成的hosts文件的部署脚本确保在部署源代码之前正确安装和配置了正确的软件包。这是使用Ansible完成配置和部署的唯一方法吗?如果我想动态添加新的Web服务器怎么办?我是否必须手动编辑静态主机文件?到目前为止,使用Rackspace的动态库存脚本,它只列出了一大堆服务器,无法按类型对它们进行分组。如果我能做到这一点,我会欣喜若狂。
hosts.j2:
[a]
{% for a in a_provision.instances %}
{{ a.rax_accessipv4 }}
{% endfor %}
[b]
{% for b in b_provision.instances %}
{{ b.rax_accessipv4 }}
{% endfor %}
main.yml:
---
- name: a - build request
local_action:
module: rax
username: username
api_key: key
name: test-a
count: 1
flavor: 3
image: a-image-id
files:
/root/.ssh/authorized_keys: ~/.ssh/id_rsa.pub
state: present
wait: yes
wait_timeout: 1000
networks:
- private
- public
register: a_provision
- name: b - build request
local_action:
module: rax
username: username
api_key: key
name: test-b
flavor: 5
image: b-image-id
files:
/root/.ssh/authorized_keys: ~/.ssh/id_rsa.pub
state: present
wait: yes
wait_timeout: 1000
networks:
- private
- public
register: b_provision
- name: add new nodes to hosts configuration
template: 'src=hosts.j2 dest=provisioned_hosts'
答案 0 :(得分:5)
最近版本的Ansible中的Rackspace模块和动态库存(我使用的是1.4.1)可以让您对服务器进行分组!
rax
模块接受存储在创建的服务器元数据中的"group" parameter,然后Rackspace动态广告资源插件将extract to create Ansible groups,因此后续播放可以使用您的组名称已指定。
但是,看起来只在比赛开始时查询了广告资源。要在同一次运行中使用新启动的服务器,您需要使用add-host模块在运行时将它们添加到清单中:
- name: build webservers
local_action:
module: rax
name: webserver
group: webservers
exact_count: true
credentials: ~/.rackspace_cloud_credentials
flavor: 2
image: df27d481-63a5-40ca-8920-3d132ed643d9
files:
/root/.ssh/authorized_keys: ~/.ssh/id_rsa.pub
state: present
disk_config: manual
wait: yes
wait_timeout: 10000
register: webserversvar
- name: add newly provisioned webservers to a group
local_action: add_host hostname={{ item.accessIPv4 }} groupname=webservers
with_items: webserversvar.instances
- name: build databases
local_action:
module: rax
name: database
group: databases
exact_count: true
credentials: ~/.rackspace_cloud_credentials
flavor: 2
image: df27d481-63a5-40ca-8920-3d132ed643d9
files:
/root/.ssh/authorized_keys: ~/.ssh/id_rsa.pub
state: present
disk_config: manual
wait: yes
wait_timeout: 10000
register: databasesvar
- name: add newly provisioned databases to a group
local_action: add_host hostname={{ item.accessIPv4 }} groupname=databases
with_items: databasesvar.instances
有一个writeup about doing this on AWS涵盖了许多相同的高级概念,即使提供者不同。