ansible-playbook使用
目录
一、playbook入门
(一)、简述
- playbook和ad-hoc相比,是一种完全不同的ansible运行方式,功能非常强大。
- playbooks是资源简单的配置管理系统和多机器部署的基础。
- 基于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
(三)、主机和用户
-
主机
--- - hosts: nginx
-
用户
--- - remote_user: root
(四)、变量
-
变量
vars: http_port: 80 max_clients: 200
-
注册变量
- name: 查询端口信息 shell: | netstat -anput | grep 80 register: result - debug: var=result.stdout
(五)、任务列表
-
单文件管理
--- tasks: - name: task1 shell: | echo task1 - name: task2 shell: | echo task2
-
多文件管理
. ├── main.yml └── config.yml
# main.yml --- - import_tasks: config.yml
# config.yml --- - name: config1 shell: | echo config1
(六)、流程控制
-
条件判断when
--- - name: 健康检查 shell: sh check.sh when: ischeck == 'true'
-
普通循环遍历with_items
--- - name: 复制nginx文件 copy: src={{ item }} dest=/etc/nginx/conf.d with_items: - 'test.conf' - 'app.conf'
-
循环遍历目录文件with_fileglob
--- - name: 复制nginx文件 copy: src={{ item }} dest=/etc/nginx/conf.d with_fileglob: - 'test.conf' - 'app.conf'
(七)、模板
-
定义
playbook采用jinja2模板,可以进行条件判断和循环等操作
-
for
{{% set list=['01','02','03'] %}} {{% for u in list %}} {{ i }} {{% endfor %}}
-
if
{{% if not loop.last %}} , {{% endif %}}
-
to_yaml
# vars/main.yml - input_type: log enabled: true paths: - /data/Log/**/*.log document_type:test-log
{{ filebeat_inputs | to_yaml }}
-
to_json
{{ filebeat_inputs | to_json }}
(八)、标签控制
-
简述
通过自定义标签选择性执行任务列表
-
定义
--- - name: mytags shell: | echo tags tags: mytags
(九)、语法检查和调试
二、常用模块书写
(一)、shell
-
执行命令
- name: 执行结果输出的文件 shell: test.sh >> test.log
-
切换目录
- name: 切换目录执行命令 shell: cmd: ls -lha | grep *.log chdir: /root/test
-
编写脚本
- name: 编写脚本 shell: | if [ a -eq b ]; then echo info > /tmp/result else echo error > /tmp/result fi args: executable: /bin/bash
(二)、copy
-
文件拷贝
- name: 文件拷贝 copy: src: /root/test desc: /tmp
-
文件权限
- 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
-
创建目录
- name: 创建目录 file: path: /root/test state: directory mode: 0755
-
删除文件
- name: 删除文件 file: path: /root/test/test.txt state: absent
-
递归删除目录
- name: 删除目录 file: path: /root/test state: absent
(四)、yum
-
安装
- name: 安装 yum: name: nginx state: present - name: 安装列表包 yum: name: - nginx - vim - wget state: present
-
安装最新
- name: 最新版 yum: name: httpd state: latest
-
卸载
- name: 卸载 yum: name=httpd state=absent
(五)、service/systemd
-
启动
- name: 启动服务 service: name: nginx state: started enabled: yes
-
重启
- name: 重启 systemd: name=docker state=restarted enabled=yes daemon_reload=yes
(六)、unarchive
-
解压文件
- name: 解压 unarchive: src: /tmp/test.tar.gz dest: /root/test
(六)、debug
-
msg
- name: 打印msg debug: msg: System {{ inventory_hostname }} has uuid {{ ansible_product_uuid }}
-
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
(三)、执行任务
-
普通执行
ansible-playbook deploy.yml -uroot -k
-
根据标签执行
ansible-playbook deploy.yml -uroot -k --tags mytags