Anisible

Ansible之剧本

image

1.剧本(playbook)

PlauBook即"剧本"
	Play(host):定义主机
	Book(task):定义具体任务
	playbook:由一个或多个play组成,可以包含多个task
	"""剧本的格式是一个YAML文件格式"""

1.1 YAML 语法

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

2.组成

hosts  :指定需要操作饿主机
vars   :指定变量(非必须)
tasks  :具体执行的任务
remote_user :执行时使用的用户(非必须)
eg:
	- hosts: 主机名
	  remote_user: 操作用户
	  vars: 变量:变量值
	  tasks:
	    -name: 内容名称
	     模块名: 操作内容

image

3.剧本的变量

1.全局变量
	- hosts: 主机名
	  vars:
	    package_name: mariadb
	  tasks:
          yum:
            name: "{{ package_name }}"
            state: present
            
2.局部变量
	- hosts: 主机名
	  tasks:
	    yum:
	      - name: 安装mariadb
	        vars: 
               package_name: mariadb
             yum:
               name: "{{ package_name }}"
               state: present
	  
3.配置清单变量
	/etc/ansible/hosts
	 [主机名:vars]
	 package_name=mariadb
	 
4.命令行中变量
	ansible-playbook test.yaml -e 'package_name=mariadb'
	
变量的优先级:
	在命令行中设置变量 > 局部变量 > 全局变量 > 配置清单

4.流程控制

1.1,条件判断(when)
判断nginx是否起动:
(1):制作一个脚本
vim 1.sh
    #!/bin/bash
    function main() {
        RES=`systemctl is-active nginx`
        if [ $RES == 'unknown' ];then
          return 1
        else
          return 0
        fi
    }
    main
(2):写入playbook
    - hosts: web01
      tasks:
        - name: nginx服务监测
          script: './1.sh'
          register: check_nginx
        - name: 查看check_nginx变量
          debug: var=check_nginx
        - name: 启动Nginx
          service:
            name: nginx
            state: started
          when: check_nginx.rc == 0

1.2,循环流程(while_item,item)
    - hosts: web01
      tasks:
        - name: 安装Nginx
          yum:
            name: "{{ item }}"
            state: present
          with_items:
            - nginx
            - mariadb
   安装:nginx, 卸载:mariadb     
    - hosts: web01
      tasks:
        - name: 安装Nginx
          yum:
            name: "{{ item.name }}"
            state: "{{ item.state }}"
          with_items:
            - {"name":"nginx","state":"present"}
            - {"name":"mariadb","state":"absent"}	

image

5.执行条件任务

要求:安装nginx后立即启动
- hosts: web01
  tasks:
    - name: 安装nginx
      yum:
        name: nginx
        state: present
      notify: 启动nginx
   handlers:
     - name: 启动nginx
       service:
         name: nginx
         state: started

6.标签

- hosts: web01
  tasks:
    - name: 安装nginx
      yum:
        name: nginx
        state: present
    - name: 安装mariadb
      yum:
        name: mariadb
        state: present
        
标签使用:
  ansible-playbook test.yaml -t
  mariadb,nginx
 "使用时输入内容名称即可"

image

posted @ 2022-02-22 21:07  代小白菜  阅读(138)  评论(0)    收藏  举报