ansible-playbook使用

一、playbook入门


(一)、简述

  1. playbook和ad-hoc相比,是一种完全不同的ansible运行方式,功能非常强大。
  2. playbooks是资源简单的配置管理系统和多机器部署的基础。
  3. 基于yaml格式文件声明式配置执行任务

(二)、单文件示例

---
- hosts: nginx
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: 1.安装nginx
    yum: pkg=nginx state=latest
  - name: 2.配置nginx.conf
    template: src=nginx.j2 dest=/etc/nginx/nginx.conf
    notify:
    - restart nginx
  - name: 3.启动nginx
    service: name=nginx state=started
  handlers:
    - name: restart nginx
      service: name=nginx state=restarted

(三)、主机和用户

  1. 主机

    ---
    - hosts: nginx
    
  2. 用户

    ---
    - remote_user: root
    

(四)、变量

  1. 变量

    vars:
    	http_port: 80
    	max_clients: 200
    
  2. 注册变量

    - name: 查询端口信息
      shell: |
    		netstat -anput | grep 80
    	register: result
    - debug: var=result.stdout
    

(五)、任务列表

  1. 单文件管理

    --- 
    tasks:
    - name: task1
      shell: |
      	echo task1
    - name: task2
      shell: |
      	echo task2 
    
  2. 多文件管理

    .
    ├── main.yml
    └── config.yml
    
    # main.yml
    ---
    - import_tasks: config.yml
    
    
    # config.yml
    ---
    - name: config1
      shell: |
      	echo config1
    

(六)、流程控制

  1. 条件判断when

    ---
    - name: 健康检查
      shell: sh check.sh
      when: ischeck == 'true'
    
  2. 普通循环遍历with_items

    ---
    - name: 复制nginx文件
      copy: src={{ item }} dest=/etc/nginx/conf.d
      with_items:
       - 'test.conf'
       - 'app.conf'
    
  3. 循环遍历目录文件with_fileglob

    ---
    - name: 复制nginx文件
      copy: src={{ item }} dest=/etc/nginx/conf.d
      with_fileglob:
       - 'test.conf'
       - 'app.conf'
    

(七)、模板

  1. 定义

    playbook采用jinja2模板,可以进行条件判断和循环等操作

  2. for

    {{% set list=['01','02','03'] %}}
    {{% for u in list %}}
    	{{ i }}
    {{% endfor %}}
    
  3. if

    {{% if not loop.last %}}
    ,
    {{% endif %}}
    
  4. to_yaml

    # vars/main.yml
    
    - input_type: log
      enabled: true
      paths:
        - /data/Log/**/*.log
      document_type:test-log
    
    {{ filebeat_inputs | to_yaml }}
    
  5. to_json

    {{ filebeat_inputs | to_json }}
    

(八)、标签控制

  1. 简述

    通过自定义标签选择性执行任务列表

  2. 定义

    ---
    - name: mytags
    	shell: |
    		echo tags
    	tags: mytags
    

(九)、语法检查和调试

二、常用模块书写


(一)、shell

  1. 执行命令

    - name: 执行结果输出的文件
      shell: test.sh >> test.log
    
  2. 切换目录

    - name: 切换目录执行命令
      shell:
        cmd: ls -lha | grep *.log
        chdir: /root/test
    
  3. 编写脚本

    - name: 编写脚本
      shell: |
          if [ a -eq b ]; then
             echo info > /tmp/result
          else
             echo error > /tmp/result
          fi
      args:
        executable: /bin/bash
    

(二)、copy

  1. 文件拷贝

    - name: 文件拷贝
      copy:
        src: /root/test
        desc: /tmp
    
  2. 文件权限

    - name: 拷贝文件
      copy:
        src: /root/test/test.conf
        dest: /etc/test.conf
        owner: test
        group: test
        mode: u=rw,g=r,o=r
        backup: yes
    

(三)、file

  1. 创建目录

    - name: 创建目录
      file:
        path: /root/test
        state: directory
        mode: 0755
    
  2. 删除文件

    - name: 删除文件
      file:
        path: /root/test/test.txt
        state: absent
    
  3. 递归删除目录

    - name: 删除目录
      file:
        path: /root/test
        state: absent
    

(四)、yum

  1. 安装

    - name: 安装
      yum:
        name: nginx
        state: present
    - name: 安装列表包
      yum:
        name:
          - nginx
          - vim
          - wget
        state: present
    
  2. 安装最新

    - name: 最新版
      yum: 
        name: httpd
        state: latest
    
  3. 卸载

    - name: 卸载
      yum: name=httpd state=absent
    

(五)、service/systemd

  1. 启动

    - name: 启动服务
      service:
        name: nginx
        state: started
        enabled: yes
    
  2. 重启

    - name: 重启
      systemd: name=docker state=restarted enabled=yes daemon_reload=yes
    

(六)、unarchive

  1. 解压文件

    - name: 解压
      unarchive:
        src: /tmp/test.tar.gz
        dest: /root/test
    

(六)、debug

  1. msg

    - name: 打印msg
      debug:
        msg: System {{ inventory_hostname }} has uuid {{ ansible_product_uuid }}
    
  2. var

    - name: 显示主机已知的所有变量
      debug:
        var: hostvars[inventory_hostname]
    

三、Roles


(一)、简述

​ Roles是基于已知文件结构自动加载某些变量文件,任务和处理程序的方法。按角色对内容进行分组,适合构建复杂的部署环境。

(二)、目录结构

├── ansible.cfg # 系统配置文件
├── bin_package # 部署二进制文件
├── deploy.yml # 部署文件
├── group_vars
│   └── all.yml # 全局变量配置
├── hosts # 主机信息
└── roles # 角色组
	├── test
    │  ├── defaults # 默认变量
    │  │   └── main.yml
    │  ├── files # 部署文件脚本
    │  ├── handlers # 包含的处理程序
    │  │   └── main.yml
    │  ├── meta # 元数据
    │  │   └── main.yml
    │  ├── README.md # 文档
    │  ├── tasks # 任务列表
    │  │   └── main.yml
    │  ├── templates # 模块
    │  ├── tests # 测试
    │  │   ├── inventory
    │  │   └── test.yml
    │  └── vars # 其他变量
    │      └── main.yml
    └── jdk

(三)、执行任务

  1. 普通执行

    ansible-playbook deploy.yml -uroot -k
    
  2. 根据标签执行

    ansible-playbook deploy.yml -uroot -k --tags mytags
    
posted @ 2021-01-28 16:02  qms19  阅读(147)  评论(0编辑  收藏  举报