playbook 是什么?
- playbook是ansible用于配置,部署和管理托管主机剧本,通过playbook的详细描述,执行其中一系列tasks,可以让远程主机达到预期状态,也可以说,playbook字面意思是剧本,现实中由演员按剧本表演,在ansible中由计算机进行安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。
- ansible使用playbook来管理自动化task,playbook是yaml格式的文件,其基本内容可以认为是多条ansible的ad-hoc的语句组成。我们完成一个任务,例如安装部署一个httpd服务,我们需要多个模块(一个模块也可以称之为task)提供功能来完成。而playbook就是组织多个task的容器,他的实质就是一个文件,是用yaml(Yet Another Markup Language)语言编写的文件,有着特定的组织格式。YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便,YAML语法能够简单的表示散列表,字典等数据结构。
- playbook命令根据自上而下的顺序依次执行。同时,playbook开创了很多特性,它可以允许你传输某个命令的状态到后面的指令,如你可以从一台机器的文件中抓取内容并附为变量,然后在另一台机器中使用,这使得你可以实现一些复杂的部署机制,这是ansible命令无法实现的。
ansible-playbook 常用命令
代码语言:javascript
复制ansible-playbook playbook.yml [options]
# ssh 连接的用户名
-u REMOTE_USER, --user=REMOTE_USER
# ssh登录认证密码
-k, --ask-pass
# sudo 到root用户,相当于Linux系统下的sudo命令
-s, --sudo
# sudo 到对应的用户
-U SUDO_USER, --sudo-user=SUDO_USER
# 用户的密码(—sudo时使用)
-K, --ask-sudo-pass
# ssh 连接超时,默认 10 秒
-T TIMEOUT, --timeout=TIMEOUT
# 指定该参数后,执行 playbook 文件不会真正去执行,而是模拟执行一遍,然后输出本次执行会对远程主机造成的修改
-C, --check
# 设置额外的变量如:key=value 形式 或者 YAML or JSON,以空格分隔变量,或用多个-e
-e EXTRA_VARS, --extra-vars=EXTRA_VARS
# 进程并发处理,默认 5
-f FORKS, --forks=FORKS
# 指定 hosts 文件路径,默认 default=/etc/ansible/hosts
-i INVENTORY, --inventory-file=INVENTORY
# 指定一个 pattern,对- hosts:匹配到的主机再过滤一次
-l SUBSET, --limit=SUBSET
# 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook
--list-hosts
# 列出该 playbook 中会被执行的 task
--list-tasks
# 私钥路径
--private-key=PRIVATE_KEY_FILE
# 同一时间只执行一个 task,每个 task 执行前都会提示确认一遍
--step
# 只检测 playbook 文件语法是否有问题,不会执行该 playbook
--syntax-check
# 当 play 和 task 的 tag 为该参数指定的值时才执行,多个 tag 以逗号分隔
-t TAGS, --tags=TAGS
# 当 play 和 task 的 tag 不匹配该参数指定的值时,才执行
--skip-tags=SKIP_TAGS
# 输出更详细的执行过程信息,-vvv可得到所有执行过程信息。
-v, --verbose
ansible 执行ping命令 与 ansible-playbook 执行ping命令
代码语言:javascript
复制[vagrant@controller my_ansible_working_dir]$ ansible all -m ping
node3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
node2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
node1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
- ansible-playbook 执行ping命令
代码语言:javascript
复制[vagrant@controller my_ansible_working_dir]$ cat site1.yml
---
- name: ping module
hosts: all
tasks:
- name: ping test
ping:
[vagrant@controller my_ansible_working_dir]$ ansible-playbook site1.yml
PLAY [ping module] ********************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************************
ok: [node3]
ok: [node2]
ok: [node1]
TASK [ping test] **********************************************************************************************************************
ok: [node3]
ok: [node2]
ok: [node1]
PLAY RECAP ****************************************************************************************************************************
node1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node3 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0