YAML语法要点
详见 链接
---文件开头- 只能空格缩进,禁止Tab
#注释-代表列表项{{ var }}Jinja2变量模板。
Play 顶层常用参数
---
- name: 部署Nginx的play # play名称,可选
hosts: webservers # 必填,目标主机/主机组,来自inventory清单
gather_facts: true # 默认true,执行前收集被控主机系统信息(ansible_facts);关闭提速 false
remote_user: root # 远程登录用户
become: true # 开启sudo提权(相当于sudo)
become_user: root # 提权到哪个用户
vars: # 本play内变量
nginx_port: 80
vars_files: # 外部变量文件
- vars/nginx.yml
handlers: # 触发器,只有被notify触发才执行
tasks: # 任务列表,核心
Tasks 任务核心语法
每个 task 调用一个模块,推荐写 name(日志输出可读性强)。
tasks:
- name: 安装nginx
yum:
name: nginx
state: present # present安装,absent卸载,latest最新版
常用内置模块
yum/apt:包管理器copy:本地文件复制到远端template:Jinja2模板渲染后下发(支持变量)service:管理系统服务(start/stop/restart/enabled)file:创建目录、修改权限、删除文件debug:打印调试信息shell:执行shell命令(非幂等,慎用)command:执行命令,不支持管道、重定向,比shell安全
例子:nginx部署(使用centos)
编辑playbook文件,执行下面命令:
vim playbook_nginx.yml
内容:
---
- name: 批量部署Nginx # 剧本名,可略
hosts: all # 目标主机/主机组,来自inventory清单
become: true # 开启sudo提权
tasks:
- name: 安装nginx # 任务名
yum: # 使用yum模块,适用于centos系统上执行安装
name: nginx # 安装nginx
state: present # 表示安装操作
- name: 启动nginx,并设置开机自启
service: # 调用serivce模块
name: nginx # 设置nginx服务
state: started # 启动服务
enabled: yes # 开机自启
例子:nginx部署(使用ubuntu)
编辑playbook文件,执行下面命令:
vim playbook_nginx.yml
内容:
---
- name: 批量部署Nginx # 剧本名,可略
hosts: all # 目标主机/主机组,来自inventory清单
become: true # 开启sudo提权
tasks:
- name: 安装nginx # 任务名
apt: # 使用apt模块,适用于ubuntu系统上执行安装
name: nginx # 安装nginx
state: present # 表示安装操作
- name: 启动nginx,并设置开机自启
service: # 调用serivce模块
name: nginx # 设置nginx服务
state: started # 启动服务
enabled: yes # 开机自启
执行命令
语法检查
检查 playbook 的语法,不会执行操作
ansible-playbook playbook_nginx.yml --syntax-check -i ansible_client.ini
跑测试,模拟执行,不改动真实机器(推荐)
ansible-playbook playbook_nginx.yml --check -i ansible_client.ini
或者
ansible-playbook playbook_nginx.yml -C -i ansible_client.ini
执行剧本
ansible-playbook playbook_nginx.yml
指定主机清单文件
ansible-playbook playbook_nginx.yml -i ansible_client.ini
只针对部分主机执行
ansible-playbook playbook_nginx.yml -i ansible_client.ini -l 192.168.1.100
返回结果说明
ok:任务已满足状态,无变更changed:Ansible对主机做了修改failed:任务执行失败,该主机停止后续任务skipped:when条件不满足,跳过任务
注意
- 优先使用原生模块,尽量少用
shell/command,破坏幂等性; - YAML缩进严格,空格数量必须对齐,不要Tab;
- 生产执行前,一定先
--check干跑; - 复杂项目拆分为Role,不要写超大单文件playbook;
- 尽量开启
gather_facts做系统判断,不需要再关闭提速; - 敏感密码不要明文写yaml,使用
ansible-vault加密文件。
