ansible YAML语法 playbook剧本 playbook剧本要求按照YAML语法格式编写,可调用多个模块 YAML格式 #为注释 第一行为(---) 键值(key/value) 例 a: 11 key:value使用":"分隔,“:”后面必须有空格 “-”表示数组,一个变量有多个值 相同层级缩进必须对齐,缩进代表层级关系(缩进用两个空格) 不能使用tab键(不能使用tab键缩进) 区分大小写 扩展名yml或者yaml 跨行数据需要使用>或者|,其中|会保留换行符 "a" -"1" 两种写法效果一样 "a" : ["1","2","3"] -"2" -"3"
- a : -11 - a表示还有其余数组,a还有其余同级数组 -11 表示目前有一个变量还可以继续写 a : 11 有且仅有一个变量
#人物描述 --- - 姓名: 李白 年龄: 61 作品: 蜀道难 好友: 汪伦 加横线表示四个人,一个横线一个值*** 此处不加横线表示一个人(一个值)
跨行数据需要使用>或者|,其中|会保留换行符 当一个变量值太长 用“|”“>”表示换行,直到缩进消失 a : | 多行 dgfgfhghgfh retrgfhgf 12432 a : > 一行 dgfgfhghgfh retrgfhgf 12432playbook采用YAML格式编写 playbook文件中由一个或多个play组成 每个play中可以包含:hosts(主机)、 tasks(任务)、 vars(变量) 等元素组成 使用ansible-playbook命令运行playbook剧本
vim ~/ansible/test.yml 编写脚本
---
- hosts: node1
tasks:
- name: aaa
ping:
ansible-playbook ~/ansible/test.yml 执行脚本
多任务
[root@control ansible]# vim ~/ansible/test.yml
- hosts: test,webserver
tasks:
- name: This is my first playbook name后面的内容可以任意
ping:
- name: Run a shell command
shell: touch ~/shell.txt
ansible-playbook ~/ansible/test.yml 执行脚本
可以使用-f自定义并发量
多个play的Playbook文件
[root@control ansible]# vim ~/ansible/test.yml
#第一个play剧目
---
- hosts: test
tasks:
- name: This is first play
ping:
#第二个play剧目
- hosts: webserver
tasks:
- name: This is second play
ping:
编写剧本 创建用户 [root@control ansible]# vim ~/ansible/test_john.yml --- - hosts: webserver tasks: - name: Add the user 'johnd' user: name: johnd uid: 1040 group: daemon password: "{{ '123' | password_hash('sha512') }}" [root@control ansible]# ansible-playbook ~/ansible/test_john.yml 到node3,node4上查看此用户
ansible-doc user查看帮助文档 找到 EXAMPLES (有剧本格式) G跳到文档末尾 gg跳到开头
vim ~/ansible/user_james.yml --- - hosts: webserver tasks: - name: Add 'james' with a bash shell user: name: james shell: /bin/bash groups: bin,adm password: "{{ '123' | password_hash('sha512') }}" [root@control ansible]# ansible-playbook ~/ansible/user_james.yml
自动做逻辑卷(parted) [root@control ansible]# vim ~/ansible/lvm.yml --- - hosts: node2 tasks: - name: parted: 调用parted模块进行分区 device: /dev/sda 对/dev/vdb磁盘进行分区(磁盘名称不要照抄) label: gpt 分区表类型为gpt,或msdos number: 1 分区编号(创建第几个分区) state: present present是创建分区,absent是删除分区 part_start: 1MiB 分区的开始位置(默认从最开始位置分区) part_end: 1GiB 分区的结束位置(不写就分到磁盘最后位置) - name: 可为空 lvg: 调用lvg模块,创建VG卷组 vg: my_vg 要创建的卷组名称 pvs: /dev/vdb1 使用哪个分区创建PV - name: Create a logical volume of 512m 第三个任务的描述信息 lvol: 调用lvol模块创建LV vg: my_vg 使用哪个VG创建LV lv: my_lv 需要创建的LV名称 size: 512m 要创建的LV大小,可以不指定单位,默认单位m
Available 已经有的组包 Installed 已安装 [root@control ansible]# vim ~/ansible/package.yml --- - hosts: webserver - name: tasks: yum: #调用yum模块安装软件 name: #安装软件的名字,它的值有多个,使用数组- - httpd - mariadb - mariadb-server - name: yum: 调用yum模块安装软件组包 name: "@RPM Development Tools" 安装哪个组包,@是关键词 - name: yum: 调用yum模块升级软件 name: '*' state: latest latest代表升级软件
setup模块 ansible_facts用于采集被管理设备的系统信息,所有收集的信息都被保存在变量中,每次执行playbook默认第一个任务就是Gathering Facts,使用setup模块可以查看收集到的facts信息。
ansible test -m setup "ansible_ ..... : ...RedHat"此格式就是一个变量
"ansible_apparmor": { "status": "disabled" }, 如果不是ansible_开始的变量不能用,需要找到他的父目录 ansible_apparmor.status=disabled 此变量按这个格式写 debug模块 debug模块可以显示变量的值,可以辅助排错,通过msg可以显示变量的值,变量需要使用{{}}扩起来。 [root@control ansible]# vim ~/ansible/debug.yml --- - hosts: test tasks: - debug: msg: "zhu ji ming :{{ ansible_hostname }}" - debug: msg: "nei cun da xiao :{{ ansible_memtotal_mb }}"