手机版 欢迎访问it开发者社区(www.mfbz.cn)网站

当前位置: > 开发

自动化部署工具ansible-playbook(二)

时间:2021/4/12 0:30:32|来源:|点击: 次

文章目录

  • 一、Templates模块
  • 二、tags模块
  • 三、roles模块

一、Templates模块

主:192.168.100.110
远程主机:192.168.100.120

vim /etc/ansible/hosts

[webserver]
192.168.100.120 http_port=192.168.100.120:80 access_num=100 server_name=www.wei.com:80


yum install -y httpd
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2

vim /opt/httpd.conf.j2
#修改
Listen {{http_port}}
ServerName {{server——name}}
MaxClients {{access_num}}

#创建yml文件


- hosts: webserver
  remote_user: root
  vars:
   - package: httpd
   - service: httpd
  tasks:
   - name: install httpd package
     yum: name={{package}} state=latest
   - name: install configure file
     template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
     notify:
      - restart httpd
   - name: start httpd server
     service: name={{service}} enabled=true state=started
  handlers:
   - name: restart httpd
     service: name={{service}} state=restarted

#运行
ansible-playbook apache.yml

#远程主机上查看

grep -i listen /etc/httpd/conf/httpd.conf
grep -i maxClient /etc/httpd/conf/httpd.conf
grep -i servername /etc/httpd/conf/httpd.conf

二、tags模块

在一个playbook中,我们一般会定义很多个task,如果我们只想执行其中的某一个task或多个task时就可以使用tags标签功能了,格式如下:

vim hosts.yml

- hosts: webserver
  remote_user: root
  tasks:
   - name: Copy
     copy: src=/etc/hosts dest=/opt/hosts
     tags:
     - only
   - name: touch
     file: path=/opt/hosts01 state=touch

事实上,不光可以为单个或多个task指定同一个tags。playbook还提供了一个特殊的tags为always。作用就是当使用always当tags为标签时task就能一直被执行。

- hosts: webserver
  remote_user: root
  tasks:
   - name: Copy
     copy: src=/etc/hosts dest=/opt/hosts
     tags:
     - only
   - name: touch
     file: path=/opt/hosts01 state=touch
     tags:
     - always

三、roles模块

roles能够根据层次型结构自动装载变量文件、task以及handlers等
roles内各目录含义

files用来存放有copy模块或script模块调用的文件
templates用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件
tasks此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其他的位于此目录的task文件
handlers此目录应当包含一个main.yml文件,用于定义此角色中处罚条件时执行的动作
vars此目录应当包含一个main.yml文件,用于定义此角色用到的变量
defaults此目录应当包含一个main.yml文件,用于为当前角色设定默认变量
meta此目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系

1、创建以roles命令的目录

mkdir -p /etc/ansible/roles        # yum装完默认就有

2、创建全局变量目录

mkdir -p /etc/ansible/group_vars
touch /etc/ansible/group_vars/all   # 文件名称可以自定义,但是在引用的时候需要注意下

3、在roles目录中分别创建以各角色名称命令的目录;例如httpd

mkdir -p /etc/ansible/roles/command

4、在每个角色命令的目录中分别创建files,templates,tasks,handlers,vars,defaults,meta,用不到的目录可以为空

mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p

5、在每个角色的defaults,vars,tasks,meta,handlers目录下创建main.yml文件,不能自定义

touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml

6、在playbook文件中,调用各角色

vim /etc/ansible/test.yml
- hosts: test01
  remote_user: root
  roles:
    - httpd
 - mysql

7、搭建lanp架构

#准备需要目录

mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} -p

#准备main.yml文件

touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml

#编写httpd模块

vim /etc/ansible/roles/httpd/tasks/main.yml
- name: ensure apache is at the latest version
  yum: pkg= {{servername}} state=latest
  
vim /etc/ansible/roles/httpd/vars/main.yml
servername: httpd

#编写mysql模块

vim /etc/ansible/roles/mysql/tasks/main.yml
- name: ensure mysql is at the latest version
  yum: pkg= {{servername}} state=latest
  
vim /etc/ansible/roles/mysql/vars/main.yml
servername: mariadb*

#编写PHP模块

vim /etc/ansible/roles/php/tasks/main.yml
- name: ensure php is at the latest version
  yum: pkg= {{servername}} state=latest

vim /etc/ansible/roles/php/vars/main.yml
servername: php

#创建剧本

vim /etc/ansible/lamp.yml
- hosts: test01
  remote_user: root
  roles:
    - httpd
 - mysql
 - php
ansible-playbook lamp.yml

Copyright © 2002-2019 某某自媒体运营 版权所有