IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> ansible playbook 转换成role格式 -> 正文阅读

[系统运维]ansible playbook 转换成role格式

上一篇文档讲述了如何写一个playbook Ansible快速部署web application
这篇文章,讲述一下我们如何把playbook转换成role格式.

创建roles的目录结构

# ls
app.py  inventory.txt  playbook.yml  roles

# cd roles
# ansible-galaxy init flask_web
# ansible-galaxy init mysql_db
# ansible-galaxy init python
# ls
flask_web  mysql_db  python
# ls flask_web/
defaults  files  handlers  meta  README.md  tasks  templates  tests  vars
这里可以看到 ansible-galaxy init 创建的目录结构都一样。接下来,我们开始填充roles目录里的内容。

mysql_db role为例

修改 tasks/main.yml ,填入mysql 安装,设置密码,建库,建表的操作。

---
# tasks file for mysql_db
    - name: Add repository
      yum_repository:
        name: mysql57-community
        description: MySQL 5.7 Community Server
        baseurl: http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
        gpgkey: http://repo.mysql.com/RPM-GPG-KEY-mysql

    - name: Install and Configure Database
      yum: name=mysql-community-server state=present
        
    - name: Start MySQL Service
      service: name=mysqld state=started enabled=yes
    
    - name: check file /tmp/init-mysql.log exist 
      stat:
        path: /tmp/init-mysql.log
      register: init_mysql_log

    - name: Init mysql password
      shell: mysql -uroot -p`grep 'temporary password' /var/log/mysqld.log| awk '{print $NF}'` --connect-expired-password -e "alter user root@localhost identified by '{{ db_password }}' ;" > /tmp/init-mysql.log
      when: not init_mysql_log.stat.exists

    - name: Create application Database
      mysql_db: name={{ db_name }} login_host=127.0.0.1 login_user=root login_password={{ db_password }} state=present 
    
    - name: Create Database User 
      mysql_user: name={{ db_user }} host=% password={{ db_password }} priv='*.*:ALL' login_user=root login_password={{ db_password }} state=present

    - name: check file /tmp/table-mysql.log exist 
      stat:
        path: /tmp/table-mysql.log
      register: table_mysql_log

    - name: Create Table and insert data
      shell: |
        mysql -uroot -p{{ db_password }} --connect-expired-password -e "USE employee_db;CREATE TABLE employees (name VARCHAR(20));INSERT INTO employees VALUES ('JasonLong');" > /tmp/table-mysql.log
      when: not init_mysql_log.stat.exists

修改 vars/main.yml , 存放mysql_db role的变量

---
# vars file for mysql_db
db_name: employee_db
db_user: db_user
db_password: zaq1@WSX123

templates/目录存放模板文件
files/目录存放所需的配置文件
我这里没有用到,就不做说明。

flask_web role的 tasks/main.yml

---
# tasks file for flask_web
    - name: pip update to 20.2.4
      shell: /usr/bin/python -m pip install --upgrade pip==20.2.4

    - name: pip update to latest
      shell: /usr/bin/python -m pip install --upgrade pip

    - name: Install Python Flask dependency
      pip:  
        name: ['flask', 'flask-mysql']
        state: present
    
    - name: Copy source code
      copy: src=app.py dest=/opt/app.py
    
    - name: Running flask app
      shell:  FLASK_APP=/opt/app.py nohup flask run --host=0.0.0.0 &   

python role的 tasks/main.yml

    - name: Install all required dependencies
      yum: 
        name: [ 'python', 'python-setuptools', 'python-pip', 'MySQL-python' ]
        state: present

最后我们写一个调用role的playbook

[root@master-1 web_applications_roles]# ls
app.py  inventory.txt  playbook.yml  roles
[root@master-1 web_applications_roles]# cat playbook.yml
- name: Deploy a web application with role
  hosts: app
  roles:
    - python
    - mysql_db
    - flask_web

playbook.yml

- name: Deploy a web application with role
  hosts: app
  roles:
    - python
    - mysql_db
    - flask_web

调用命令

[root@master-1 web]# ansible-playbook playbook.yml -i inventory.txt

PLAY [Deploy a web application] ****************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
ok: [db_and_web_server-2]

TASK [Install all required dependencies] *******************************************************************************
ok: [db_and_web_server-2]

TASK [Add repository] **************************************************************************************************
ok: [db_and_web_server-2]

TASK [Install and Configure Database] **********************************************************************************
ok: [db_and_web_server-2]

TASK [Start MySQL Service] *********************************************************************************************
ok: [db_and_web_server-2]

TASK [check file /tmp/init-mysql.log exist] ****************************************************************************
ok: [db_and_web_server-2]

TASK [Init mysql password] *********************************************************************************************
changed: [db_and_web_server-2]

TASK [Create application Database] *************************************************************************************
changed: [db_and_web_server-2]

TASK [Create Database User] ********************************************************************************************
[WARNING]: Module did not set no_log for update_password
changed: [db_and_web_server-2]

TASK [check file /tmp/table-mysql.log exist] ***************************************************************************
ok: [db_and_web_server-2]

TASK [Create Table and insert data] ************************************************************************************
changed: [db_and_web_server-2]

TASK [pip update to 20.2.4] ********************************************************************************************
changed: [db_and_web_server-2]

TASK [pip update to latest] ********************************************************************************************
changed: [db_and_web_server-2]

TASK [Install Python Flask dependency] *********************************************************************************
changed: [db_and_web_server-2]

TASK [Copy source code] ************************************************************************************************
changed: [db_and_web_server-2]

TASK [Running flask app] ***********************************************************************************************
changed: [db_and_web_server-2]

PLAY RECAP *************************************************************************************************************
db_and_web_server-2        : ok=16   changed=9    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

最后网页访问 http://192.168.5.202:5000/ 即可

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 14:23:11  更:2022-01-01 14:24:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 6:34:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码