ansible-playbook剧本

ansible-playbook

介绍:

​ playbook剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

​ playbook是ansible用于配置,部署,和管理被控节点的剧本。通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态。playbook就像Ansible控制器给被控节点列出的的一系列to-do-list,而被控节点必须要完成。
​ playbook 字面意思,即剧本,现实中由演员按照剧本表演,在Ansible中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。

  • 将多个要执行ansible操作安装顺序整合到一个文件中,这个文件就是yaml
  • 执行yaml文件的方法是通过ansible-playbook执行

yaml文件

yaml文件中的元素

  • 变量
  • 循环
  • 判断
变量

变量命名规则

  • 只能以字母为开头
  • 构成只能有数字、字母、下划线

变量类别

  • 自定义
  • 内置变量

获取内置变量

[root@localhost ~]#  ansible all -m setup

执行a.yaml,同时传递变量name=tom,age=20

[root@localhost ~]#  ansible-playbook a.yaml --extra-vars "name=tom, age=20"

案例:安装httpd,要求设置apache的端口为808,网站跟目录/myweb

- host: all                     # 指定要操作的主机组
  remoute_user: root            # 指定在远程主机上以哪个用户身份执行tasks
  vars:                         # 定义变量
  - port: 808                   # 变量名、变量值
  - root: /myweb                # 变量名、变量值
  tasks:                        # 指定要执行的操作列表
  - name: install httpd                # 设置一个名称,用于给用户提示正在执行操作
    yum: name=httpd state=latest       # yum是模块名,后面是参数
  - name: start httpd              
    service: name=httpd state=started  # service是模块名,后面的参数

yaml文件中主要构成

  • host:
  • tasks:
  • vars:
  • remote_user:

案例:通过一个yaml文件实现如下要求:

在被管理主机上新建一个用户组,组名mygp1,组id是800

再在每个被管理主机上新建用户tom01,将tom加入到这个组中

将当前主机上/etc/inittab分发到所有被管理主机的/tmp下

# 创建yaml文件
[root@localhost ~]#  vim user.yaml
- hosts: all
  remote_user: root
  tasks:
  - name: create gropu
    group: name=mygp1 gid=800 state=present
  - name: create user
    user: name=tom group=mygp1 state=present
  - name: send file
    copy: src=/etc/inittab dest=/tmp
# 执行yaml文件
[root@localhost ~]#  ansible-playbook user.yaml

案例1:在所有被管理节点安装httpd,然后启动httpd

- hosts: all
  remote_user: root
  tasks:
  - name: install httpd
    yum: name=httpd state=present
  - name: start httpd
    service: name=httpd state=started enabled=true
触发器
  • 让一个task在特定的情况下才会被执行

案例2:在所有被管理节点安装httpd,然后启动httpd,要求httpd启动端口是8080

- hosts: all
  remote_user: root
  tasks:
  - name: install httpd
    yum: name=httpd state=present 
  - name: start httpd
    service: name=httpd state=started enabled=true
  - name: send httpd.conf
    copy: src=/root/httpd.conf.template dest=/etc/httpd/conf/httpd.conf
    notify:
    - restart httpd
  handlers:
  - name: restart httpd
    service: name=httpd state=restarted
yaml使用变量

(1)自定义变量

- hosts: all
  remote_user: root
  vars:
  - package_name: mysql-server     # mariadb-server
  - service_name: mysqld           # mariadb
  tasks:
  - name: install mysql server
    yum: name={{ package_name }} state=latest
  - name: start mysql server
    service: name={{ service_name }} state=started

(2)使用ansible的内置变量

案例:

在每个被管理主机上创建一个用户,用户名和主机名相同

在每个被管理主机上创建一个和主机同名的目录

# 查询内置变量
[root@localhost ~]#  ansible all -m setup | grep fqdn
        "ansible_fqdn": "centos6-2", 
[root@localhost ~]#  cat c.yaml
- hosts: all
  tasks:
  - name: create user
    user: name={{ ansible_fqdn }} state=present
  - name: create file
    file: name=/tmp/{{ ansible_fqdn }} state=touch

(3)主机清单变量

# 定义主机变量
[webservers]
11.11.11.12 userid=1050
11.11.11.13 userid=1060

# 定义主机组变量
[webservers:vars]
username=jerry
- hosts: all
  tasks:
  - name: create user
    user: name={{ username }} uid={{ userid }} state=present
template
  • template称为模板
  • 模板的用处是用来动态生成服务的配置文件
判断
  • 格式:when 条件
  • 做用:判断满足条件,才执行操作

案例:用playbook实现如下功能

1:在所有被管理主机上安装zsh

2:在主机名为centos7-2的主机上创建用户tom3,其他主机不创建

- hosts: all
  tasks:
  - name: install zsh
    yum: name=zsh state=present
  - name: create user tom3
    user: name=tom3 state=present
    when: ansible_fqdn == "centos7-5"
循环

格式:

  • 内置变量:item
  • 循环格式:with_items 列表

注意:

  • playbook中的循环一般用于循环次数少,而且简单的情况
  • 循环次数多,而且复杂,肯定是在本地创建shell脚本,然后使用script模块执行

案例:在所有被管理主机上创建5个用户u1 u2 u3 u4 u5

- hosts: all
  tasks:
  - name: create user
    user: name={{ item }} state=present
    with_items:
    - u1
    - u2
    - u3
    - u4
    - u5
tags

作用:给某个task设置一个表情,用于仅仅执行某个task

案例:

- hosts: all
  tasks:
  - name: isntall
    shell: yum install httpd -y
  - name: send file
    copy: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf
    notify:
    - restart httpd
    tags:
    - senfile
  - name: start httpd
    shell: systemctl start httpd
  handlers:
  - name: restart httpd
    shell: systemctl restart httpd
[root@localhost ~]# ansible-playbook 4.yaml --tags="senfile"

amsbile-playbool应用1

安装ansible并配置远程主机免密连接

[root@master ~]# yum install epel-release -y
[root@master ~]# yum install ansible -y
[root@master ~]# ssh-keygen -t rsa
[root@master ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.31.64
[root@master ~]# vi /etc/ansible/hosts
[server]
192.168.31.64

2)(编写lnmp.yml,以下所有操作必须写在playbook中)

准备php测试页面

[root@master ~]# vi /roo/a.php 
<?php
phpinfo();
?>

准备nginx配置文件

[root@master ~]# yum install epel-release -y 
[root@master ~]# yum install nginx -y
[root@master ~]# cp /etc/nginx/nginx.conf.default /root/nginx.conf

修改三个位置

  location / {
            root   /var/www/html;
            index  index.html index.htm;
        }

   location ~ \.php$ {
        root           /var/www/html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

编写yaml文件

- hosts: all
  tasks:
  - name: create dir
    shell: mkdir -pv /var/www/html
  - name: install basic soft
    shell: yum install make gcc gcc-c++ zlib-devel pcre-devel ncurses-devel -y
  - name: send nginx package
    copy: src=/root/nginx-1.17.10.tar.gz dest=/usr/local/
  - name: install nginx
    shell: cd /usr/local/ && tar xf nginx-1.17.10.tar.gz && cd nginx-1.17.10 && ./configure --prefix=/usr/local/nginx && make && make install 
  - name: send nginx.conf
    copy: src=/root/nginx.conf dest=/usr/local/nginx/conf/nginx.conf
  - name: start nginx
    shell: /usr/local/nginx/sbin/nginx
  - name: install php and mysql
    shell: yum install php-fpm mariadb-server -y
  - name: start php and mysql
    shell: systemctl start php-fpm && systemctl start mariadb
  - name: send test page
    copy: src=/root/a.php dest=/var/www/html

使用ansible模块分发源码包、安装包

3)使用ansible模块安装nginx依赖环境

4)编译安装nginx

5)推送配置文件并启动nginx

6)安装mysql和php相关服务

7)配置nginx和php整合

8)重启nginx并配置php测试页面为hello world

9)成功运行playbook

[root@master ~]# ansible-playbook a.yaml
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值