欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ansible playbook剧本

程序员文章站 2022-05-11 11:13:24
...

playbook介绍

定义一个配置文件,写入需要安装的服务,配置文件,变量等信息,使他们可以按照事先定义好的机制完成一个任务·。playbook使用YAML语法结构,ansible-palybook 命令根据自上而下的顺序依次执行。

playbook语法:

#任何 playbook 文件(其实就是 yaml 文件)都要以这个开头
---
#选择的主机组
- hosts: webservers
#这个是变量
vars:
http_port: 80
max_clients: 200
tasks:
#利用 yum 模块来操作
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
#触发重启服务器(只要上面的 httpd.conf 文件变化了,就触发 handlers 中的 restart
apache)
notify:
- restart apache
- name: ensure apache is running
service: name=httpd state=started
#这里的 restart apache 和上面的触发是配对的。这就是 handlers 的作用。相当于 tag
handlers:
36
- name: restart apache
service: name=httpd state=restarted

playbook命令参数:

Usage: ansible-playbook playbook.yml
Options:
-u REMOTE_USER, --user=REMOTE_USER ssh 连接的用户名,ansible.cfg 中可以配置
-k, --ask-pass 提示输入 ssh 登录密码,当使用密码验证登录的时候用
-s, --sudo sudo 运行
-U SUDO_USER, --sudo-user=SUDO_USER sudo 到哪个用户,默认为 root
-K, --ask-sudo-pass 提示输入 sudo 密码,当不是 NOPASSWD 模式时使用
-T TIMEOUT, --timeout=TIMEOUT ssh 连接超时时间,默认 10 秒
-C, --check 指定该参数后,执行 playbook 文件不会真正去执行,而是模拟执行一遍,然后输出本次执行会对远程主机造成的修改
-c CONNECTION 连接类型(default=smart)
-D, --diff 如果 file 和 template 模块改变,会显示改变的内容,应该和--check 一起
-e EXTRA_VARS, --extra-vars=EXTRA_VARS 设置额外的变量如:key=value or
YAML/JSON,以空格分隔变量,或用多个-e
-f FORKS, --forks=FORKS fork 多少个进程并发处理,默认 5
-i INVENTORY, --inventory-file=INVENTORY 指定 hosts 文件路径,默认default=/etc/ansible/hosts
-l SUBSET, --limit=SUBSET 指定一个 pattern,对- hosts:匹配到的主机再过滤一次
--list-hosts 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook
--list-tasks 列出该 playbook 中会被执行的 task
-M MODULE_PATH, --module-path=MODULE_PATH 模块所在路径,默认/usr/share/ansible/
--private-key=PRIVATE_KEY_FILE 私钥路径
--start-at-task=START_AT start the playbook at the task matching this name
--step 同一时间只执行一个 task,每个 task 执行前都会提示确认一遍
--syntax-check 只检测 playbook 文件语法是否有问题,不会执行该 playbook
-t TAGS, --tags=TAGS 当 play 和 task 的 tag 为该参数指定的值时才执行,多个 tag逗号分隔
--skip-tags=SKIP_TAGS 当 play 和 task 的 tag 不匹配该参数指定的值时,才执行
-v, --verbose verbose mode (-vvv for more, -vvvv to enable connection debugging)

playbook构成:

playbook 是由一个或多个“play”组成的列表。play 的主要功能在于将事先归并为一组
的主机装扮成事先通过 ansible 中的 task 定义好的角色。从根本上来讲所谓 task 无非是调用ansible 的一个 module。将多个 play 组织在一个 playbook 中即可以让它们联同起来按事先编排的机制同唱一台大戏。

playbook组成:

 Target section: 定义将要执行 playbook 的远程主机组
 Variable section: 定义playbook 运行时需要使用的变量
 Task section: 定义将要在远程主机上执行的任务列表
 Handlersection: 定义 task 执行完成以后需要调用的任务

而其对应的目录层为五个:

  1.  vars 变量层
  2.  tasks 任务层
  3.  handlers 触发条件
  4.  files 文件
  5.  template 模板

四层结构:

1、hosts和users

playbook 中的每一个 play 的目的都是为了让某个或某些主机以某个指定的用户身份执
行任务。
hosts 用于指定要执行指定任务的主机其可以是一个或多个由冒号分隔主机组。
user 执行该任务组的用户
remote_user 则用于指定远程主机上的执行任务的用户,与 user 相同。不过remote_user 也可用于各 task 中。也可以通过指定其通过 sudo 的方式在远程主机上执行的任务其可用于 play 全局或某任务。此外甚至可以在 sudo 时使用 sudo_user 指定 sudo 时切换的用户。
sudo 如果设置为 yes,执行该任务组的用户在执行任务时,获取 root 权限。
sudo_user 如果设置 user 为 tom,sudo 为 yes,sudo_user 为 jerry,则 tom 用户会获取jerry 用户的权限。
connection 通过什么方式连接到远程主机,默认为 ssh。
gather_facts 除非明确说明不需要在远程主机上执行 setup 模块,否则默认会自动执行。
如果确实不需要 setup 模块所传递过来的变量,可以启用该选项。

2、任务列表和action

play 的主体部分是 task list。
task list 中的各任务按次序逐个在 hosts 中指定的所有主机上执行即在所有主机上完成
第一个任务后再开始第二个。在运行自上而下某 playbook 时如果中途发生错误所有已执行任务都将回滚因此在更正 playbook 后重新执行一次即可。
task 的目的是使用指定的参数执行模块而在模块参数中可以使用变量。模块执行是幂等
的这意味着多次执行是安全的因为其结果均一致。每个 task 都应该有其 name 用于 playbook的执行结果输出建议其内容尽可能清晰地描述任务执行步骤。如果未提供 name 则 action 的结果将用于输出。
定义 task 的可以使用“action: module options”或“module: options”的格式推荐使用后者以实现向后兼容。如果 action 一行的内容过多也中使用在行首使用几个空白字符进行换

ansible playbook剧本
3、handles

用于关注的资源发生变化时采取一定的措施。

“notify”这个 action 可用于在每个 play 的最后被触发这样可以避免多次有改变发生时
每次都执行指定的操作取而代之仅在所有的变化发生完成后一次性地执行指定操作。
在 notify 中列出的操作称为 handler 也即 notify 中调用 handler 中定义的操作。
注意:在 notify 中定义内容一定要和 tasks 中定义的 - name 内容一样,这样才能达到
触发的效果,否则会不生效。
ansible playbook剧本
4、tags

tags 用于让用户选择运行或略过 playbook 中的部分代码。

 当命令 ansible-playbook 有-t 参数时,只会执行-t 指定的 tag
 当命令 ansible-playbook 有--skip-tags 参数时,则除了--skip-tags 指定的 tag 外,执行其他
所有

基本应用:

对include语句打tag
同一个对象可以打多个
tag 对roles打tag
可以对多个对象打i同一个tag

5、变量的参数

1)var参数

ansible playbook剧本
2)vars_files参数

ansible playbook剧本
3、vars_prompt参数

ansible playbook剧本