playbooks介绍
playbooks是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是playbook是通过YAML格式来进行描述定义的。
playbooks基础组件
playbooks中tasks语法使用
file: 操作文件,比如创建文件或目录、删除文件或目录、修改文件权限等
常用参数:
directory - 与path结合说明我们要操作的是一个目录
touch - 与path结合说明我们要操作的是一个文件
link - 创建软连接
hard - 创建硬链接
absent - 删除目标
简单示例:
- name: 创建一个testfile文件
file: path=/tmp/testfile state=touch
- name: 创建一个目录,并指定目录权限
file: path=/tmp/data state=directory mode=0755
- name: 删除一个目录
file: path=/tmp/data state=absent
- name: recurse默认为no,指定为yes代表以递归方式指定文件权限
file: dest=/user/bin mode=0755 recurse=yes
lineinfile:修改文件某一行文本
常用参数:
简单示例:
- name: 替换文件中包含line123的行为testline
lineinfile: path=/tmp/test regexp="^line" line="testline"
replace:根据正则表达式替换文件内容
常用参数:
简单示例:
- name: 将/tmp/test文件中的ABC替换成abc
repace:path=/tmp/test regexp="ABC" replace=abc
shell:执行脚本命令
简单示例:
- shell: mkdir /tmp/mytest
- shell: echo "export JAVA_HOME=/opt/jdk" >> /etc/profile
template/copy: 模板作用类似于copy,可将文件分发到不同节点上
常用参数:
简单示例:
- template: src=/mytemplates/foo.j2 dest=/etc/file.conf
- template: src=/mytemplates/foo.j2 dest=/etc/file.conf group=wheel mode=0644
- template: src=/mytemplates/sudoers.j2 dest=/etc/sudoers validate='visudo -cf %s'
fetch:功能与copy类似,但是是用于从远程主机中拷贝文件到管理主机,不能拷贝目录
常用参数:
简单示例:
- fetch: src=/tmp/test dest=/tmp/
unarchive:解压缩,将压缩文件解压分发到不同节点上
常用参数:
简单示例:
- unarchive: src=/myfiltes/jdk.tar.gz dest=/opt
wait_for:等待某些操作完成以后再进行后续操作
常用参数:
简单示例:
- name: 每隔10s检查一次,等待8080端口正常监听,才开始下一个任务,直到超时
wait_for: port=8080 state=started delay=10
- name: 等待文件创建
wait_for: path=/tmp/foo
when:条件判断,满足后再执行任务
简单示例:
- name: 判断变量foo是否定义
shell: echo "I've got {{ foo }}"
when: foo is defined
pause:暂停一定时间
常用参数:
简单示例:
- name: 等待用户30s用于输入
pause: seconds=30 prompt="ENTER to continue CTRL-C a to quit"
register:用于注册一个变量,保存命令的结果,常与when结合使用
简单示例:
- name: 执行pwd
shell: /bin/pwd
register: pwd_result
- name: 当路径中包含"home"显示路径
shell: echo {{ pwd_result }}
when: pwd_result.stdout.find('home') != -1
set_fact:用于定义新的变量
简单示例:
- name: 获取IP地址
set_fact: ipaddress={{hostvars[inventory_hostname].ansible_default_ipv4.address}}
- set_fact: hostname={{hostvars[inventory_hostname].ansible_facts.hostname}}
run_once:指定该task只能在某一台机器上执行一次,可以和delegate_to结合使用,如果没有delegate_to,那么这个task会在第一台机器上执行
简单示例:
- name: 在web01.example.org机器上刷新环境变量
shell: source /etc/profile
run_once: true
debug:用于在调试中输出信息
简单示例:
- name: 显示调试信息
debug: var=pwd_result
delegate_to:任务委派功能,指定在某一台机器上执行一个操作
local_action:本地操作功能,在运行ansible命令机器上执行一个操作
ignore_errors:忽略错误的命令,通常情况下当出现执行失败时ansible会停止运行,有时候你会想要继续执行下去就需要添加这个
简单示例:
- name: 删除临时目录
shell: rm /tmp/data
ignore_errors:yes
become:是否进行权限提升,true/false
become_method:权限提升的方式,默认为sudo
become_user:提升为哪个用户的权限,默认为root
user:用户的管理
group:用户组的管理
常用参数:
present:增加
absent:删除
yum:软件包的管理
常用参数:
present:确保软件包已经安装了
installed:安装
latest:安装最新的软件包
removed/absent:删除对应的软件包
简单示例:
- name:安装httpd服务
yum: name=httpd state=latest
- name: 删除旧版gcc
yum: name = {{ item }} state=removed
with_items:
- gcc
- httpd
- php
cron:定时任务,功能相当于crontab
常用参数:
简单示例:
- name: 新增一个定时查看路径任务
cron: name=check minute=5 job='pwd'
文章目录: