playbook基础
一、基础知识
1、ansible七种武器
1)ansible命令(重点掌握)
2)ansible-doc:查看ansible模块(重点掌握)
3)ansible-console:为用户提供交互式工具
4)ansible-galaxy:从github上下载管理Roles的工具
5)ansible-playbook:实现批量管理(重点掌握)
6)ansible-vault:用于配置文件加密
7)ansible-pull:大批量(大于2000)机器配置
2、JSON
1)一种基于文本独立于语言的轻量级数据交换格式
2)键值对的名称是固定的,即可哈希。健值对和数组相互嵌套
{
键值对:[
数组
{键值对}
]
}
例子:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
3、YAML(必须严格遵守格式要求,强迫症专属)
1)表达数据序列的格式。很多软件的配置文件是YAML写的(eg:k8s)
2)结构用空格表示(不要使用tab)
数组用“- ”
键值用“: ”
缩进用两个空格
# 表示注释
同一层级缩进必须对齐
4 、Jinja2是基于Python的模板引擎,包含变量和表达式。playbook的模板使用Python的Jinja2模块来处理。
5、playbook:是ansible用于配置、部署和管理托管主机剧本。由YAML编写,以JSON格式输出。通过 playbook 的详细描述,执行其中的一系列 tasks,可以让远端主机达到预期的状态。
5.1 playbook语法
– playbook由 YAML 语言编写,遵循 YAML 标准
– 在同一行中,#之后的内容表示注释
– 同一个列表中的元素应该保持相同的缩进
– playbook 由一个或多个 play 组成
– play 中 hosts,variables,roles,tasks 等对象的表示方法都是键值中间以 ": " 分隔表示
– 所有的 YAML 文件开始行都应该是 —. 这是 YAML 格式的一部分,表明一个文件的开始
5.2 playbook文件构成
– Target: 定义将要执行 playbook 的远程主机组
– Variable: 定义 playbook 运行时需要使用的变量
– Tasks: 定义将要在远程主机上执行的任务列表
– Handler: 定义 task 执行完成以后需要调用的任务
5.3 playbook参数说明:
5.3.1 hosts 行的内容是一个或多个组或主机的 patterns,以逗号为分隔符
5.3.2 remote_user 就是账户名
5.3.3 tasks
– 每一个 play 包含了一个 task 列表(任务列表).
– 一个 task 在其所对应的所有主机上(通过 host pattern 匹配的所有主机)执行完毕之后,下一个 task才会执行.
[root@ansible ~]# vim ping.yaml
---
- hosts: all
remote_user: root
tasks:
- ping:
~
线程设置是小于cpu的2倍
[root@ansible ~]# ansible-playbook ping.yaml -f 5
实践:playbook练习
[root@ansible ~]# ansible-doc yum/lineinfile/copy/service //分别查看相应模块的例子
[root@ansible ~]# vim apache.yaml
---
- hosts: web
remote_user: root
tasks:
- yum:
name: httpd
state: installed
- lineinfile:
path: /etc/httpd/conf/httpd.conf
regexp: '^Listen '
line: 'Listen 8080'
- shell: apachectl -t
- copy:
src: /root/index.html
dest: /var/www/html/index.html
- service:
name: httpd
state: started
- service:
name: httpd
enabled: yes
[root@ansible ~]# echo "Hello World" > index.html
[root@ansible ~]# ansible-playbook apache.yaml
执行结果:不会报红就正确
6、playbook语法
1)变量,传参数用JSON格式,比较简单。用YAML得写并@文件
[root@ansible ~]# vim user.yaml
---
- hosts: db1
remote_user: root
vars:
username: user1
tasks:
- name: create user "{{username}}"
user:
group=wheel
password={{'123456' | password_hash('sha512')}}
name={{username}}
- shell: chage -d 0 {{username}}
1 传参数用JSON格式,添加单个该方式比较简单
[root@ansible ~]# ansible-playbook user.yaml -e "{'username':'nb'}"
2 用YAML得写并@文件,批量添加可以用该方式
[root@ansible ~]# vim adduser.yaml
"username":
"wk"
[root@ansible ~]# ansible-playbook user.yaml -e @adduser.yaml
2)error
ignore_errors: true //忽略错误,后面语句继续执行,会输出错误信息。
3)handlers
with_items:可用JSON或YAML格式
7、palybook调式
ansible-playbook --syntax-check playbook.yaml
ansible-playbook -C playbook.yaml
–list-hosts 显示受到影响的主机
–list-tasks 显示工作的task命令
–list-tags 显示将要运行的tag
可以在playbook.yaml里面最后添加
-name: show debug info
debug: var=result
watch -n 1 “uptime” :每一分钟执行一次uptime
:%!xxd : vim 里面的内容转为16进制,对比空格和tab产生的错误内容
:%!xxd -r :返回