Ansible Playbook为以后提供和保存主机

 jrs2078148 发布于 2023-02-13 14:05

我正在尝试制作一些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'

Ash Wilson.. 5

最近版本的Ansible中的Rackspace模块和动态库存(我使用的是1.4.1)可以让您对服务器进行分组!

rax模块接受一个"组"参数中所储存的创建服务器的元数据,其中,Rackspace公司动态库存plugin将解压到创建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上执行此操作的文章,其中涵盖了许多相同的高级概念,即使提供者不同.

1 个回答
  • 最近版本的Ansible中的Rackspace模块和动态库存(我使用的是1.4.1)可以让您对服务器进行分组!

    rax模块接受一个"组"参数中所储存的创建服务器的元数据,其中,Rackspace公司动态库存plugin将解压到创建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上执行此操作的文章,其中涵盖了许多相同的高级概念,即使提供者不同.

    2023-02-13 14:06 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有