自动化运维工具-Ansible PlayBook

2023-07-29,,

自动化运维工具-Ansible PlayBook

PlayBook基本概念

PlayBook的组成

PlayBook即"剧本","兵书"之意,PlayBook是由以下部分组成的

play: 定义的是主机的角色。(主角还是配角)

task: 定义的是具体执行的任务。(角色的台词和动作)

playbook: 由一个或多个play(角色)组成,一个play(角色)可以包含多个task(台词,动作)。

简单理解为: 使用不同的模块完成一件事情

注意:

在Ansible中"剧本文件"是以yml结尾的文件。

在SaltStack中"剧本文件"是以sls结尾的文件。

但是语法,使用的都是yaml语法

PlayBook与ad-hoc的区别

1.PlayBook功能比ad-hoc更全,是对ad-hoc的一种编排.

2.PlayBook能很好的控制先后执行顺序, 以及依赖关系.

3.PlayBook语法展现更加的直观.

4.playbook可以持久使用,ad-hoc无法持久使用.

YAML语法

语法 描述
缩进 YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成, 不能使用TAB
冒号 以冒号结尾的除外,其他所有冒号后面所有必须有空格
短横线 表示列表项,使用一个短横杠加一个空格,多个项使用同样的缩进级别作为同一列表

编写playbook安装httpd

- hosts: backup
tasks:
- name: an zhuang httpd
yum:
name: httpd
state: present
- name: qi dong httpd
service:
name: httpd
state: started
## playbook检测语法
ansible-playbook --syntax-check install_httpd.yml ## 只测试不执行
ansible-playbook -C install_httpd.yml

使用playbook部署网站kaoshi

# 1.发送公钥
[root@m01 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.7
[root@m01 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1. # 2.先决条件
kaoshi.tgz包
httpd配置文件 [root@m01 httpd]$ ll
total 40
-rw-r--r-- 1 root root 11747 Aug 12 09:10 httpd.conf
-rw-r--r-- 1 root root 26875 Aug 12 09:09 kaoshi.tgz
[root@m01 httpd]$ pwd /root/httpd

编辑playbook

[root@m01 httpd]$ vim web.yml
- hosts: web_group
tasks:
- name: Create www group
group:
name: www
gid: '666' - name: Create www user
user:
name: www
uid: '666'
group: '666'
shell: /sbin/nologin
create_home: no - name: Disabled selinux
selinux:
state: disabled - name: Stop firewalld
service:
name: firewalld
state: stopped - name: Install httpd and php server
yum:
name:
- httpd
- php
state: present - name: Copy httpd conf
copy:
src: /root/httpd/httpd.conf
dest: /etc/httpd/conf/httpd.conf - name: Unarchive code
unarchive:
src: /root/httpd/kaoshi.tgz
dest: /var/www/html
- name: quanxian
file:
path: /var/www/html
state: directory
owner: www
group: www - name: Start httpd server
service:
name: httpd
state: started
enabled: yes ## 检测语法
[root@m01 httpd]$ ansible-playbook --syntax-check web.yml playbook: web.yml ## 执行playbook
[root@m01 httpd]$ ansible-playbook web.yml

playbook 部署rsync

环境准备

主机名 外网IP 内网IP 角色
backup 10.0.0.41 172.16.1.41 rsync服务端、被控端
m01 10.0.0.61 172.16.1.61 ansible管理端
# 1.先决条件
## 公钥推送
### rsync配置文件
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup # 2.编写playbook
vim rsync.yml
- hosts: backup
tasks:
- name: Stop firewalld server
service:
name: firewalld
state: stopped - name: Stop selinux server
selinux:
state: disabled - name: Create www group
group:
name: www
gid: '666'
state: present - name: Create www user
user:
name: www
uid: '666'
group: '666'
shell: /sbin/nologin
create_home: no
state: present - name: Install rsyncd server
yum:
name: rsync
state: present - name: Configure rsync conf
copy:
src: /root/rsyncd/rsyncd.conf
dest: /etc/rsyncd.conf
owner: root
group: root
mode: 0644 - name: Create rsync passwd file
copy:
content: rsync_backup:123
dest: /etc/rsync.passwd
owner: root
group: root
mode: 0600 - name: Create backup directory
file:
path: /backup
state: directory
owner: www
group: www
mode: 0755 - name: Start rsync server
service:
name: rsyncd
state: started
enabled: yes ## 测试语法
[root@m01 rsyncd]$ ansible-playbook --syntax-check rsync.yml
playbook: rsync.yml ## 执行playbook
[root@m01 rsyncd]$ ansible-playbook rsync.yml ## 测试rsync推送
[root@m01 rsyncd]$ rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
passwd

ansible操作数据库

# 数据库端操作:创建用户并指定可操作的库以及权限,设置用户密码
grant all on *.* to wp_user@'%' identified by '123';

mysql_user 模块

-name:创建用户的名字
-password:用户的密码
-priv:'*.*:ALL'
-host:指定可连接的主机
-login_user:连接数据库的用户
-login_password:连接数据库的密码
-host_all:
-yes:类似于 % ,允许所有主机连接
-no:默认,不允许所有主机连接
-state:
-present:创建
-absent:删除

mysql_db 模块

-name:数据库名字
-state:
-import:导入数据
-dump:导出数据
-present:创建数据库
-absent:删除数据库
target:指定导入数据的sql文件
encoding:指定字符集

利用playbook远程创建数据库

# 远程的终端
- hosts: db01
# 定义变量:root用户密码
vars:
mysql_password: '123'
# 执行的动作
tasks:
# 注释当前模块的操作
- name: Install Mariadb Server
# 使用的ansible模块
yum:
name:
- mariadb-server
- MySQL-python
state: present - name: Start Mariadb Server
service:
name: mariadb
state: started
enabled: yes - name: Create wordpress User
mysql_user:
# 用root用户登录数据库
login_user: root
# root用户的密码
login_password: "{{ mysql_password }}"
# 创建数据库用户的名称
name: zh2
# 动作:创建
state: present
# 创建的用户能操作的库和表,ALL是指定权限
priv: '*.*:ALL'
# 该用户所有主机都能连接
host: '%'
# 创建用户的密码
password: '123' - name: Create wordpress Database
mysql_db:
# 用root用户登录数据库
login_user: root
# root用户的密码
login_password: "{{ mysql_password }}"
# 创建的数据库的名称
name: zh2
# 动作:创建
state: present
# 指定字符集
encoding: utf8

自动化运维工具-Ansible PlayBook的相关教程结束。

《自动化运维工具-Ansible PlayBook.doc》

下载本文的Word格式文档,以方便收藏与打印。