ansible ad-hoc可以通过命令行形式远程管理其他主机 适合执行一些简单的任务
ansible playbook 剧本执行一些周期性经常执行的复杂任务
按照要前YAML格式去写
YAML的格式要求
- "#"代表注释,一般第一行为三个横杠(---)
- 键值(key/value)对使用":"表示,数组使用"-"表示,"-"后面有空格
- key和value之间使用":"分隔,":"后面必须有空格
- 一般缩进由两个或以上空格组成
- 相同层级的缩进必须对齐,缩进代表层级关系
- 全文不可以使用tab键
- 区分大小写
- 扩展名为yml或者yaml
- 跨行数据需要使用>或者|,其中|会保留换行符
- playbook文件中由一个或多个play组成
- 每个play中可以包含:
- hosts(主机)、tasks(任务)、vars(变量)等元素组成
- 使用ansible-playbook命令运行playbook剧本
[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
#hosts定义需要远程哪些被管理主机,hosts是关键词
#tasks定义需要执行哪些任务,tasks是关键词
#第一个任务调用ping模块,该模块没有参数
#第二个任务调用shell模块在被管理主机创建一个空文件~/shell.txt
多个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:
user 模块中的pasword
password: "{{ '123' | password_hash('sha512') }}"
Ansible特殊模块变量
setup模块
ansible_facts用于采集被管理设备的系统信息,所有收集的信息都被保存在变量中,每次执行playbook默认第一个任务就是Gathering Facts,使用setup模块可以查看收集到的facts信息。
- ansible_all_ipv4_addresses #IP地址
- ansible_bios_version #主板BIOS版本
- ansible_memtotal_mb #总内存
- ansible_hostname #主机名
- ansible_fqdn #主机的域名
- ansible_devices.vda.partitions.vda1.size #某个磁盘分区的大小
这些都是通过空格和点表示层级关系
debug模块
debug模块可以显示变量的值,可以辅助排错,通过msg可以显示变量的值,变量需要使用{{}}扩起来。
[root@control ansible]# vim ~/ansible/debug.yml
---
- hosts: test
tasks:
- debug:
msg: "主机名是:{{ ansible_hostname }}"
- debug:
msg: "总内存大小:{{ ansible_memtotal_mb }}"
#备注调用debug模块显示某些具体的变量值
#debug模块可以显示变量的值,可以辅助排错
定义变量的方法
- Inventory变量 写在主机清单文件中的xxx="123"
- Host Facts变量 系统变量 "{{ansible_hostname}}"
- Playbook变量 vars: {xxx: 123}
- 变量文件 vars_files: xxx.yml
1.Inventory变量(在主机清单配置文件中定义变量)
[root@control ansible]# vim ~/ansible/inventory
[test]
node1 iname="nb"
[proxy]
node2
[webserver]
node[3:4]
[webserver:vars]
iname="dachui"
1.调用变量在剧本中需要调用变量是要使用{{}}
[root@control ansible]# vim ~/ansible/inventory_var.yml
---
- hosts: node1,webserver #定义需要远程管理的主机是谁
tasks: #剧目要完成哪些任务
- name: create a user with var. #剧目中的第一个任务描述信息
user: #调用user模块创建用户
name: "{{ iname }}" #需要创建的用户名是iname这个变量
- #在ansible剧本中当调用变量时,开始位置就调用变量,就需要在{{}}外面加双引号
- #如果是在后面或者中间位置调用变量{{}}外面可以不加双引号, 也可以加双引号
- #如:
- # "{{ iname }}"
- # nihao {{ iname }}或者 "nihao {{ iname }}"都是正确的
2.Host Facts变量(可以直接调用ansible收集的系统信息)
vim ~/ansible/facts_var.yml
---
- hosts: test
tasks:
- name: create user.
user:
name: "{{ansible_hostname}}"
#需要创建的用户名ansible_hostname是一个ansible_facts变量
3.Playbook变量(使用vars关键词可以在playbook内定义变量)
[root@control ansible]# vim ~/ansible/playbook_var.yml
---
- hosts: test
vars: #vars是关键词,用来定义变量用的
iname: heal #具体变量名是iname,值是heal
ipass: '123456' #再定义一个变量名是ipass,值是123456
#注意密码必须是字符串,需要引号
tasks: #tasks定义需要执行的任务
- name: Use variables create user. #给任务写个描述信息
user: #调用user模块创建用户
name: "{{ iname }}" #用户名的是前面定义的变量
password: "{{ ipass | password_hash('sha512') }}"
#密码是前面定义好的ipass,管道给password_hash把密码加密.
4.单独定义个变量文件 在playbook中用vars_files调用该文件
[root@control ansible]# vim ~/ansible/file_var.yml
---
- hosts: test
vars_files: variables.yml #当变量比较多时,专门定义一个文件用来存变量
tasks:
- name: create user.
user:
name: "{{ iname }}"
password: "{{ ipass | password_hash('sha512') }}"
#调用user模块创建用户
#用户名是变量文件variables.yml中定义的变量iname,密码也是变量文件中定义的变量
[root@control ansible]# vim ~/ansible/variables.yml
---
iname: cloud
ipass: '123456'