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练习

ansible copy 多个目标ip ansible playbook copy_Linux

[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 :返回