自动化运维工具-Ansible PlayBook

自动化运维工具-Ansible PlayBook

PlayBook基本概念

PlayBook的组成

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

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

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

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

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

微信图片_20210812155522

注意:

在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
posted @ 2021-08-16 22:07  AnOldSong  阅读(140)  评论(0编辑  收藏  举报