> 文章列表 > ansible-playbook

ansible-playbook

ansible-playbook

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,webservertasks:- name: This is my first playbook     #name后面的内容可以任意ping:- name: Run a shell commandshell: touch ~/shell.txt
#hosts定义需要远程哪些被管理主机,hosts是关键词
#tasks定义需要执行哪些任务,tasks是关键词
#第一个任务调用ping模块,该模块没有参数
#第二个任务调用shell模块在被管理主机创建一个空文件~/shell.txt

多个play的的playbook文件

[root@control ansible]# vim ~/ansible/test.yml
#第一个play剧目
---
- hosts: testtasks:- name: This is first playping:
#第二个play剧目
- hosts: webservertasks:- name: This is second playping:

 user 模块中的pasword

        password: "{{ '123' | password_hash('sha512') }}"

ce考试中的playbook怎么写去那看

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: testtasks:- debug:msg: "主机名是:{{ ansible_hostname }}"- debug:msg: "总内存大小:{{ ansible_memtotal_mb }}"
#备注调用debug模块显示某些具体的变量值
#debug模块可以显示变量的值,可以辅助排错

定义变量的方法

  1. Inventory变量     写在主机清单文件中的xxx="123"
  2. Host Facts变量   系统变量 "{{ansible_hostname}}"
  3. Playbook变量      vars: {xxx: 123}
  4. 变量文件              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这个变量
  1. #在ansible剧本中当调用变量时,开始位置就调用变量,就需要在{{}}外面加双引号
  2. #如果是在后面或者中间位置调用变量{{}}外面可以不加双引号, 也可以加双引号
  3. #如:
  4. # "{{ iname }}"
  5. # nihao {{ iname }}或者 "nihao {{ iname }}"都是正确的

2.Host Facts变量(可以直接调用ansible收集的系统信息)

vim ~/ansible/facts_var.yml
---
- hosts: testtasks:- name: create user.user:name: "{{ansible_hostname}}"
#需要创建的用户名ansible_hostname是一个ansible_facts变量

3.Playbook变量(使用vars关键词可以在playbook内定义变量)

[root@control ansible]# vim ~/ansible/playbook_var.yml
---
- hosts: testvars:                                     #vars是关键词,用来定义变量用的iname: heal                            #具体变量名是iname,值是healipass: '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: testvars_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'