Openstack热与Ansible。虚拟机启动和应用程序部署

Sabeepeace

我正在使用openstack heat模板拆分新的VM,并获取新拆分的VM的IP列表。我正在使用Ansible脚本。

我可以从热中获得新的IP列表,并且可以使用with_items依次部署应用程序。

如何使用Ansible脚本并行进行部署,以使“ n”台服务器上的总部署时间与一台服务器上的总部署时间相同。

幼虫

一种选择是创建一个动态清单脚本,该脚本将从Heat中获取实例ip,并将其提供给Ansible。考虑一个看起来像这样的Heat模板:

heat_template_version: 2014-10-16

resources:

  nodes:
    type: OS::Heat::ResourceGroup
    properties:
      count: 3
      resource_def:
        type: node.yaml

outputs:

  nodes:
    value: {get_attr: [nodes, public_ip]}

这将定义三个nova实例,每个实例定义为:

heat_template_version: 2014-10-16

resources:

  node:
    type: OS::Nova::Server
    properties:
      image: rhel-atomic-20150615
      flavor: m1.small
      key_name: lars
      networks:
        - port: {get_resource: node_eth0}

  node_eth0:
    type: OS::Neutron::Port
    properties:
      network: net0
      security_groups:
        - default
      fixed_ips:
        - subnet: 82d04267-635f-4eec-8211-10e40fcecef0

  node_floating:
    type: OS::Neutron::FloatingIP
    properties:
      floating_network: public
      port_id: {get_resource: node_eth0}

outputs:

  public_ip:
    value: {get_attr: [node_floating, floating_ip_address]}

部署此堆栈后,我们可以获取如下的公共ip列表:

$ heat output-show mystack nodes
[
  "172.24.4.234", 
  "172.24.4.233", 
  "172.24.4.238"
]

我们可以编写一个简单的Python脚本来实现动态广告资源接口:

#!/usr/bin/python

import os
import argparse
import json
import subprocess

def parse_args():
    p = argparse.ArgumentParser()
    p.add_argument('--list',
                   action='store_true')
    p.add_argument('--host')
    return p.parse_args()

def get_hosts():
    hosts = subprocess.check_output([
        'heat', 'output-show', 'foo', 'nodes'])

    hosts = json.loads(hosts)
    return hosts

def main():
    args = parse_args()

    hosts = get_hosts()

    if args.list:
        print json.dumps(dict(all=hosts))
    elif args.host:
        print json.dumps({})
    else:
        print 'Use --host or --list'
        print hosts

if __name__ == '__main__':
    main()

我们可以对其进行测试,以查看它是否有效:

$ ansible all -i inventory.py -m ping
172.24.4.238 | success >> {
    "changed": false,
    "ping": "pong"
}

172.24.4.234 | success >> {
    "changed": false,
    "ping": "pong"
}

172.24.4.233 | success >> {
    "changed": false,
    "ping": "pong"
}

假设我们有以下Ansible剧本:

- hosts: all
  gather_facts: false
  tasks:
  - command: sleep 60

这将sleep 60在每个主机上运行命令。并行运行内容大约需要一分钟,而序列化则大约需要三分钟。

测试一下:

$ time ansible-playbook -i inventory.py playbook.yaml
PLAY [all] ******************************************************************** 

TASK: [command sleep 60] ****************************************************** 
changed: [172.24.4.233]
changed: [172.24.4.234]
changed: [172.24.4.238]

PLAY RECAP ******************************************************************** 
172.24.4.233               : ok=1    changed=1    unreachable=0    failed=0   
172.24.4.234               : ok=1    changed=1    unreachable=0    failed=0   
172.24.4.238               : ok=1    changed=1    unreachable=0    failed=0   


real    1m5.141s
user    0m1.771s
sys 0m0.302s

如您所见,该命令正在所有三台主机上并行执行,这就是您要寻找的行为(但是请注意此线程该线程描述了Ansible在不告诉您的情况下进行序列化的情况)。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法启动我的Android应用程序。“关闭虚拟机”错误

来自分类Dev

在应用程序之间共享虚拟机

来自分类Dev

在容器中运行 Spring Boot 应用程序?还是虚拟机?还是虚拟机内的容器?

来自分类Dev

GPU会使虚拟机中的应用程序更快吗?

来自分类Dev

有什么方法可以在应用程序内部的虚拟机中运行Linux?

来自分类Dev

如何分析在KVM guest虚拟机中运行的应用程序

来自分类Dev

在Windows Azure虚拟机VM上安装FTP应用程序FileZilla Server

来自分类Dev

.NET应用程序使用在Linux(虚拟机)上运行的Redis数据库

来自分类Dev

虚拟机在打开应用程序时出现问题

来自分类Dev

如何从互联网连接虚拟机中的快速应用程序?

来自分类Dev

ART虚拟机将如何影响现有应用程序?

来自分类Dev

当应用程序停止运行时退出虚拟机

来自分类Dev

修改Dalvik虚拟机以拦截应用程序代码的方法

来自分类Dev

.NET应用程序使用在Linux(虚拟机)上运行的Redis数据库

来自分类Dev

Wine或虚拟机(VirtualBox)来运行应用程序(例如Photoshop)

来自分类Dev

如何设置防火墙以测试虚拟机中的Web应用程序?

来自分类Dev

GPU 会使虚拟机中的应用程序更快吗?

来自分类Dev

虚拟机和虚拟机监控程序之间的区别

来自分类Dev

是否可以在不打开VMWare应用程序(和其他窗口)的情况下打开VMWare Fusion虚拟机的电源?

来自分类Dev

虚拟机,双启动和SSD上的数据磁盘

来自分类Dev

由于虚拟机管理程序未运行,因此无法启动虚拟机,这是虚拟机在vcenter服务器中运行

来自分类Dev

如何使用Rails应用程序将现有虚拟机与dropmain.rb配合使用?

来自分类Dev

BASH:确定是否从虚拟机(Ubuntu)或W10 bash应用程序调用了脚本?

来自分类Dev

当我尝试访问应用程序时出现错误:“ Smalltalk / V”“虚拟机堆栈溢出”

来自分类Dev

单击Gnu / Linux主机中的文件,以在VirtualBox的MS-Windows guest虚拟机中安装的应用程序打开

来自分类Dev

在Azure虚拟机中部署Uipath

来自分类Dev

虚拟机/实例的多次部署

来自分类Dev

我的应用程序服务是否与其他人的应用程序服务共享虚拟机/外发IP?

来自分类Dev

Ansible-使用不同的配置部署多个虚拟机

Related 相关文章

  1. 1

    无法启动我的Android应用程序。“关闭虚拟机”错误

  2. 2

    在应用程序之间共享虚拟机

  3. 3

    在容器中运行 Spring Boot 应用程序?还是虚拟机?还是虚拟机内的容器?

  4. 4

    GPU会使虚拟机中的应用程序更快吗?

  5. 5

    有什么方法可以在应用程序内部的虚拟机中运行Linux?

  6. 6

    如何分析在KVM guest虚拟机中运行的应用程序

  7. 7

    在Windows Azure虚拟机VM上安装FTP应用程序FileZilla Server

  8. 8

    .NET应用程序使用在Linux(虚拟机)上运行的Redis数据库

  9. 9

    虚拟机在打开应用程序时出现问题

  10. 10

    如何从互联网连接虚拟机中的快速应用程序?

  11. 11

    ART虚拟机将如何影响现有应用程序?

  12. 12

    当应用程序停止运行时退出虚拟机

  13. 13

    修改Dalvik虚拟机以拦截应用程序代码的方法

  14. 14

    .NET应用程序使用在Linux(虚拟机)上运行的Redis数据库

  15. 15

    Wine或虚拟机(VirtualBox)来运行应用程序(例如Photoshop)

  16. 16

    如何设置防火墙以测试虚拟机中的Web应用程序?

  17. 17

    GPU 会使虚拟机中的应用程序更快吗?

  18. 18

    虚拟机和虚拟机监控程序之间的区别

  19. 19

    是否可以在不打开VMWare应用程序(和其他窗口)的情况下打开VMWare Fusion虚拟机的电源?

  20. 20

    虚拟机,双启动和SSD上的数据磁盘

  21. 21

    由于虚拟机管理程序未运行,因此无法启动虚拟机,这是虚拟机在vcenter服务器中运行

  22. 22

    如何使用Rails应用程序将现有虚拟机与dropmain.rb配合使用?

  23. 23

    BASH:确定是否从虚拟机(Ubuntu)或W10 bash应用程序调用了脚本?

  24. 24

    当我尝试访问应用程序时出现错误:“ Smalltalk / V”“虚拟机堆栈溢出”

  25. 25

    单击Gnu / Linux主机中的文件,以在VirtualBox的MS-Windows guest虚拟机中安装的应用程序打开

  26. 26

    在Azure虚拟机中部署Uipath

  27. 27

    虚拟机/实例的多次部署

  28. 28

    我的应用程序服务是否与其他人的应用程序服务共享虚拟机/外发IP?

  29. 29

    Ansible-使用不同的配置部署多个虚拟机

热门标签

归档