playbook由YAML语言编写,YAML参考了其他多种语言,包括: XML,C语言,Python,Perl以及电子邮件格式RFC2822,Clark Evans在2001年5月首次发表了这种语言,另外Ingy dt Net与Oren-Kiki也是这语言的共同设计者.
playbook的优势
# 1. 功能比adhoc更全 # 2. 控制好依赖 # 3. 展现更直观 # 4. 持久使用ansible-playbook执行常用命令参数:
执行方式:ansible-playbook playbook.yml [options]
-u REMOTE_USER, --user=REMOTE_USER # ssh 连接的用户名 -k, --ask-pass # ssh登录认证密码 -s, --sudo # sudo 到root用户,相当于Linux系统下的sudo命令 -U SUDO_USER, --sudo-user=SUDO_USER # sudo 到对应的用户 -K, --ask-sudo-pass # 用户的密码(—sudo时使用) -T TIMEOUT, --timeout=TIMEOUT # ssh 连接超时,默认 10 秒 -C, --check # 指定该参数后,执行 playbook 文件不会真正去执行,而是模拟执行一遍,然后输出本次执行会对远程主机造成的修改 -e EXTRA_VARS, --extra-vars=EXTRA_VARS # 设置额外的变量如:key=value 形式 或者 YAML or JSON,以空格分隔变量,或用多个-e -f FORKS, --forks=FORKS # 进程并发处理,默认 5 -i INVENTORY, --inventory-file=INVENTORY # 指定 hosts 文件路径,默认 default=http://www.likecs.com/etc/ansible/hosts -l SUBSET, --limit=SUBSET # 指定一个 pattern,对- hosts:匹配到的主机再过滤一次 --list-hosts # 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook --list-tasks # 列出该 playbook 中会被执行的 task --private-key=PRIVATE_KEY_FILE # 私钥路径 --step # 同一时间只执行一个 task,每个 task 执行前都会提示确认一遍 --syntax-check # 只检测 playbook 文件语法是否有问题,不会执行该 playbook -t TAGS, --tags=TAGS # 当 play 和 task 的 tag 为该参数指定的值时才执行,多个 tag 以逗号分隔 --skip-tags=SKIP_TAGS # 当 play 和 task 的 tag 不匹配该参数指定的值时,才执行 -v, --verbose # 输出更详细的执行过程信息,-vvv可得到所有执行过程信息。 使用场景yaml语法
playbook配置
--- - hosts: 39.108.140.0 remote_user: root vars: touch_file: youmen.file tasks: - name: touch file shell: "touch /tmp/{{touch_file}}"yaml主要由三个部分组成:
> hosts部分: # 使用hosts指示使用哪个主机或主机组来运行下面的tasks, # 每个playbook都必须指定hosts,hosts也可以使用通配符格式。 # 主机或主机组在inventory清单中指定,可以使用系统默认的/etc/ansible/hosts, # 也可以自己编辑,在运行的时候加上-i选项,指定清单的位置即可。 # 在运行清单文件的时候,--list-hosts选项会显示那些主机将会参与执行task的过程中。 > remote_user:指定远端主机中的哪个用户来登录远端系统, # 在远端系统执行task的用户,可以任意指定,也可以使用sudo, # 但是用户必须要有执行相应task的权限。 > tasks:指定远端主机将要执行的一系列动作。tasks的核心为ansible的模块, # 前面已经提到模块的用法。tasks包含name和要执行的模块,name是可选的, # 只是为了便于用户阅读,不过还是建议加上去,模块是必须的,同时也要给予模块相应的参数。执行
ansible-playbook -i /tmp/hosts --list-hosts ./f1.yaml ansible-playbook ./f1.yaml # 执行结果返回 # 红色: 表示有task执行失败或者提醒的信息 # 黄色: 表示执行了且改变了远程主机状态 # 绿色: 表示执行成功 yaml语法和数据结构 yaml语法YAML格式是类似于JSON的文件格式,以便于人理解和阅读,同时便于书写,首先学习了解一下YAML的格式,对我们后面书写playbook很有帮助.
以下为playbook常用到的YAML格式
变量名可以为字母,数字以及下划线