通过 ansible 创建 openstack 虚拟机并部署应用(实战篇)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 前文 通过 ansible 创建 openstack 虚拟机并部署应用(配置篇) 接下来我们实战一下。 目录结构 ── ansible.cfg├── group_vars│ ├── all.yml├── openstack.

前文 通过 ansible 创建 openstack 虚拟机并部署应用(配置篇)

接下来我们实战一下。

目录结构

── ansible.cfg
├── group_vars
│ ├── all.yml
├── openstack.py
├── README.md
├── roles
│ ├── newtouch.MySQL
│ ├── newtouch.SystemConfig
│ ├── newtouch.UpdateRootPass
│ └── openstack.CreateServer
├── setup_mysql.yml

group_vars/all.yml 里需要设置

ansible_user: root
ansible_ssh_pass: xxxxxxxxxxx

前提是 openstack 集群里的虚拟机镜像,root 密码相同。

默认值配置文件 roles/openstack.CreateServer/defaults/main.yml

role 的默认值,根据实际情况,填入相关信息。以 vm_ 开头的变量是为了测试用,预设的。

auth:
  auth_url: http://192.168.205.2:5000/v2.0
  username: admin
  password: xxxxxxxxxxxxxxxxxx
  project_name: Haibin_Lee

# image_id
ubuntu_14_disk_50_v2: 5c67bf65-f699-49e8-955a-72152fb690f4
centos7_50_v2: f9391999-373b-4f0d-9c76-07c19e4e86e5

flavor:
  - {name: 1CPU_1G, id: e3aff42c-f260-4dea-ada5-1241b5853652}
  - {name: 2CPU_4G, id: 45b099ac-4ae4-4526-a6e2-f34cc2934e1b}

vm_state: present
vm_name: db1
vm_image: '{{ ubuntu_14_disk_50_v2 }}'
vm_key: lihaibin
vm_flavor: 1CPU_1G
vm_network: public
vm_group: poc

任务代码 roles/openstack.CreateServer/tasks/main.yml

- block:
    - name: Set the new instance's name
      debug:
        msg: "The new instance's name is {{ vm_name }}-{{ ansible_date_time.epoch }}"
    - name: Creating new instance
      os_server:
        state: '{{ vm_state }}'
        auth:
          auth_url: '{{ auth.auth_url }}'
          username: '{{ auth.username }}'
          password: '{{ auth.password }}'
          project_name: '{{ auth.project_name }}'
        name: "{{ vm_name }}-{{ ansible_date_time.epoch }}"
        image: '{{ vm_image }}'
        flavor: '{{ vm_flavor }}'
        network: '{{ vm_network }}'
        meta:
          hostname: "{{ vm_name }}-{{ ansible_date_time.epoch }}"
    - name: Gathering the new instance's facts
      os_server_facts:
        auth:
          auth_url: '{{ auth.auth_url }}'
          username: '{{ auth.username }}'
          password: '{{ auth.password }}'
          project_name: '{{ auth.project_name }}'
        server: "{{ vm_name }}-{{ ansible_date_time.epoch }}"
    - name: Get the new instance's IP address
      block:
        - set_fact:
            vm_ip: "{{ openstack_servers[0]['accessIPv4'] }}"
        - debug:
            msg: "The new instance's IP address is {{ vm_ip }}"
    - name: Waiting for the new instance up and run
      wait_for:
        host: '{{ vm_ip }}'
        port: 22
        search_regex: OpenSSH
        sleep: 10
        timeout: 3000
    - name: Add the new instance into inventory
      add_host:
        name: "{{ vm_name }}-{{ ansible_date_time.epoch }}"
        ansible_host: "{{ vm_ip }}"
  rescue:
    - name: Remove the new instance when failed
      os_server:
        state: absent
        auth:
          auth_url: '{{ auth.auth_url }}'
          username: '{{ auth.username }}'
          password: '{{ auth.password }}'
          project_name: '{{ auth.project_name }}'
        name: "{{ vm_name }}-{{ ansible_date_time.epoch }}"

这里我使用了 {{ vm_name }}-{{ ansible_date_time.epoch }} 作为新机器的名称,这样可以避免名称重复。如果创建过程中遇到任何失败,会执行删除虚拟机的操作,避免产生垃圾资源。

剧本 setup_mysql.yml

这个剧本的重点在于 post_tasks 里

  1. 在新虚拟机创建完成之后,我们还是要通过 openstack-connector 作为跳板机来访问新虚拟机,这样才能保证 {{ vm_name }}-{{ ansible_date_time.epoch }} 这个值是可以被读取到的。
  2. 基于这个模板,在 post_tasks 里,include_role 部分可以随意发挥,把你要执行的 role 加进来。这样你可以做到一键创建虚拟机并部署应用到虚拟机。
  3. 最后我们通过 openstack-connector 里的 sendmail,发出一封邮件,包含机器的相关信息。
- hosts: openstack-connector
  vars:
    new_password: newtouch
    mysql_user: root
    mysql_password: newtouch
    bind_address: 0.0.0.0
    max_connections: 256
    innodb_buffer_pool_size: "{{ (ansible_memtotal_mb * 0.5) | round | int }}M"
    owner_email: "haibin.li@newtouch.cn"
  roles:
    - openstack.CreateServer
  post_tasks:
    - block:
        - include_role:
            name: newtouch.SystemConfig
        - include_role:
            name: newtouch.MySQL
        - include_role:
            name: newtouch.UpdateRootPass
      delegate_to: "{{ vm_name }}-{{ ansible_date_time.epoch }}"
      delegate_facts: True
    - name: Send mail with instance info
      mail:
        host: localhost
        from: 'ansible@newtouch.com>'
        to: '{{ owner_email }}'
        subject: "Server {{ vm_name | upper }}-{{ ansible_date_time.epoch }} has been successfully created."
        body: |
          The server {{ vm_name | upper }}-{{ ansible_date_time.epoch }} info:

          - IP: {{ vm_ip }}
          - SYSTEM USER: root
          - SYSTEM PASS: {{ new_password }}
          - MYSQL USER:  {{ mysql_user }}
          - MYSQL PASS:  {{ mysql_password }}

          Please keep this email safe.
        charset: utf8

本剧本在 Ansible Tower 里也通过测试

我们通过问卷方式获取需要的变量值,一个简单的数据库虚拟机就可以实现一键创建了。开发人员再也不用等待运维人员的协助。

__2017_09_01_19_24_57

目录
相关文章
|
2月前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible实战应用
【9月更文挑战第33天】本文将带你深入理解Ansible,一个强大的自动化运维工具。我们将从基础概念开始,逐步探索其配置管理、任务调度等功能,并通过实际案例演示其在自动化部署和批量操作中的应用。文章旨在通过浅显易懂的语言和实例,为读者揭开Ansible的神秘面纱,展示其在简化运维工作中的强大能力。
171 64
|
3月前
|
运维 安全 应用服务中间件
自动化运维的利剑:Ansible实战应用
【9月更文挑战第24天】在现代IT基础设施的快速迭代与扩展中,自动化运维成为提升效率、保障稳定性的关键。本文将深入探讨Ansible这一流行的自动化工具,通过实际案例分析其如何简化日常运维任务,优化工作流程,并提高系统的可靠性和安全性。我们将从Ansible的基础概念入手,逐步深入到高级应用技巧,旨在为读者提供一套完整的Ansible应用解决方案。
|
26天前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
51 4
|
2月前
|
运维 关系型数据库 MySQL
自动化运维工具Ansible的实战应用
【10月更文挑战第9天】在现代IT运维领域,效率和可靠性是衡量一个系统是否健康的重要指标。自动化运维工具Ansible因其简洁、易用的特性,成为了众多企业和开发者的首选。本文将通过实际案例,展示如何利用Ansible进行日常的运维任务,包括配置管理、软件部署以及批量操作等,帮助读者深入理解Ansible的应用场景及其带来的效益。
|
2月前
|
存储 Linux 开发者
虚拟机centos7.9一键部署docker
本文介绍了如何在 CentOS 7.9 虚拟机上安装 Docker 社区版 (Docker-ce-20.10.20)。通过使用阿里云镜像源,利用 `wget` 下载并配置 Docker-ce 的 YUM 仓库文件,然后通过 `yum` 命令完成安装。安装后,通过 `systemctl` 设置 Docker 开机自启并启动 Docker 服务。最后,使用 `docker version` 验证安装成功,并展示了客户端与服务器的版本信息。文中还提供了列出所有可用 Docker-ce 版本的命令。
226 0
虚拟机centos7.9一键部署docker
|
3月前
|
运维 监控 应用服务中间件
自动化运维的新篇章:Ansible Playbooks入门与实战
【9月更文挑战第1天】在追求效率和稳定性的今天,自动化运维已经成为IT行业的必修课。本文将带你走进自动化工具Ansible的世界,通过实战案例深入理解Ansible Playbooks的编写和应用。文章不仅介绍基础概念,更通过具体代码示例,展示如何利用Ansible简化日常运维任务,提升工作效率。无论你是运维新手还是希望深化自动化技能的资深人士,本指南都将为你开启一段新的学习旅程。
|
4月前
|
运维 安全 应用服务中间件
自动化运维的利器:Ansible入门与实战网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【8月更文挑战第30天】在当今快速发展的IT时代,自动化运维已成为提升效率、减少错误的关键。本文将介绍Ansible,一种流行的自动化运维工具,通过简单易懂的语言和实际案例,带领读者从零开始掌握Ansible的使用。我们将一起探索如何利用Ansible简化日常的运维任务,实现快速部署和管理服务器,以及如何处理常见问题。无论你是运维新手还是希望提高工作效率的资深人士,这篇文章都将为你开启自动化运维的新篇章。
|
4月前
|
运维 Ubuntu 应用服务中间件
自动化运维的利器:Ansible入门与实战应用
【8月更文挑战第28天】在现代IT运维领域,自动化已成为提升效率、确保一致性和可靠性的关键。本文将引导读者了解Ansible——一种流行的自动化工具,它通过简化配置管理、部署和任务自动化流程,助力运维人员轻松应对日常挑战。从基础安装到高级用法,我们将一步步探索Ansible的魔力,并通过实际案例展示如何有效利用Ansible优化运维工作。无论你是初学者还是有经验的管理员,这篇文章都将为你提供宝贵的知识和技能,让你的运维之旅更加顺畅。
|
4月前
|
消息中间件 缓存 Shell
跟我一起来学OpenStack部署
跟我一起来学OpenStack部署
320 0
|
5月前
|
存储 数据安全/隐私保护 Docker
Kolla-ansible部署openStack
Kolla-ansible部署openStack
445 11