Ansible Playbook提供和保存主机以供以后使用

geowa4

我正在尝试制作一些Ansible剧本,以配置环境(n个数据库,m个网络服务器等)并保存这些主机以供以后使用,以便我可以对它们进行部署。我能想到的最好的方法是https://gist.github.com/geowa4/7686681(在下面复制)。这可以通过为各种服务器类型创建计算机并将它们保存到主机文件中而起作用。我将使用新生成的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'
阿什·威尔逊(Ash Wilson)

最新版本的Ansible(我正在使用1.4.1)中的Rackspace模块和动态清单确实可以对服务器进行分组!

rax模块接受存储在创建的服务器的元数据中“组”参数,Rackspace动态清单插件随后将提取该参数以创建Ansible组,因此后续播放可以使用您指定的组名。

但是,看起来库存仅在播放开始时才被查询。要在同一运行中使用新启动的服务器,您需要使用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

尽管提供程序不同,但在AWS上有一篇有关此操作的文章,其中涵盖了许多相同的高级概念。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 ansible playbook 中 Ping 主机

来自分类Dev

使用当前 ansible 进程中的变量从 ansible 主机运行 ansible-playbook 中的命令

来自分类Dev

Ansible:在 playbook 中使用 hosts.ini 的主机地址

来自分类Dev

nginx 无法使用 ansible playbook

来自分类Dev

Playbook中Ansible主机的默认值?

来自分类Dev

Ansible playbook 不选择主机变量

来自分类Dev

需要在Ansible中使用主机变量(ansible引擎2.8和ansible塔3.5)

来自分类Dev

Ansible:ansible-playbook委托错误

来自分类Dev

Ansible:Ansible-Playbook委托错误

来自分类Dev

Ansible Playbook Shell输出

来自分类Dev

ansible playbook role variable

来自分类Dev

我需要使用jinja2和ansible中的csv文件生成ansible-playbook

来自分类Dev

从主机Ansible Playbook内无法访问的主机中恢复

来自分类Dev

Ansible:删除主机

来自分类Dev

使用Python API运行Ansible-Playbook

来自分类Dev

使用Ansible Playbook执行curl -X

来自分类Dev

使用Ansible-Playbook隐藏额外的输出

来自分类Dev

在 Playbook 中使用 Ansible 库存 IP

来自分类Dev

无法使用 becomeUser 运行 ansible-playbook

来自分类Dev

如何使用 Ansible Playbook 将 nginx docker 容器挂载到主机中?

来自分类Dev

Ansible 最佳实践和 ansible.cfg

来自分类Dev

使用私钥和sudo用户的Ansible主机配置

来自分类Dev

每个主机具有特定回送IP的Ansible Playbook

来自分类Dev

在Ansible临时命令中使用Ansible事实

来自分类Dev

使用ansible_hostnames的Ansible循环

来自分类Dev

Ansible Playbook运行Shell命令

来自分类Dev

Ansible Playbook中的幂等性

来自分类Dev

Ansible Playbook中变量的变量

来自分类Dev

以编程方式识别 Ansible playbook