ansible剧本知识

playbook的基础组件:

Hosts:运行指定任务的目标主机;

remoute_user:在远程主机上执行任务的用户;

sudo_user:

tasks:任务列表

模块,模块参数;

格式:

(1)action: module  arguments

(2)module: arguments

注意:shell和command模块后面直接跟命令,而非key=value类的参数列表;

(1)某任务的状态在运行后为changed时,可通过“notify"通知给相应的handlers;

(2)任务可以通过”tags“打标签,而后可在ansible-playbook命令上使用-t指定进行调用

 

handlers:

任务,在特定条件下触发;接收到其它任务的通知时被触发:

notify: HANDLER TASK NAME

variables:

(1)facts:可直接调用;ansible默认获取主机的一些信息,自带的变量

注意:可使用setup模块直接获取目标主机的facters;

(2)用户自定义变量:

(a)在ansible-playbook命令行中的指定参数-e  VARS

(b)在playbook中定义变量:

  vars:

  - var1: value1

  - var2: value2

变量引用:{{ variable }}

(3)通过roles传递变量;

(4)通过hosts文件传递

(a)用户自定义变量

(i)向不同的主机传递不同的变量;

IP/HOSTNAME  var1=value var2=value2

(ii)向组中的主机传递相同的变量;

[groupname:vars]

variable=value

(b)invertory参数

用于定义ansible远程连接目标主机时使用的参数,而非传递给playbook的变量

ansible_ssh_host

ansible_ssh_port

ansible_ssh_user

ansible_ssh_pass

ansbile_sudo_pass

 

模板:templates

文本文件,嵌套有脚本(使用模板编程语言编写)

Jinja2:

字面量:

字符串:使用单引号或双引号;

数字:整数,浮点数;

列表:[iteml,item2,…]

元组:(iteml,item2,…)

字典:{keyl:valuel,key2:value2,…}

布尔型:true/false

算术运算:

+,-,*,/,//,%,**

比较操作:

==,!=,>,>=,<,<=

逻辑运算:

and,or,not

条件测试:

when语句:在task中使用,jinja2的语法格式

循环:选代,需要重复执行的任务;

对迭代项的引用,固定变量名为item

而后,要在task中使用with_items给定要选代的元素列表;

列表方法:

字符串,字典

角色:

roles:定义在/etc/ansible/roles下

 

每个角色,以特定的层级目录结构进行组织:

files/:存放由copy或script模块等调用的文件;

templates/:template模块查找所需要模板文件的目录;

tasks/:至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含;

handlers/:至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含;

vars/:至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含;

meta/:至少应该包含一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要在此文件中通过include进行包含

default/:设定默认变量时使用此目录中的main.yml文件;

 

在playbook调用角色方法1

]# cat 9.yaml

- hosts: lb

  remote_user: root

  roles:

  - nginx

  - tomcat

  - mysql

 

在playbook调用角色方法2:传递变量给角色

- hosts:

remote_user:

roles:

- { role: nginx,username: nginx }

键role用于指定角色名称;后续的k/v用于传递变量给角色;

还可以基于条件测试实现角色调用;

- hosts:

remote_user:

rotes:

-{ role:nginx,when: "ansible_distribution_major_version == ‘7’ “ }

 

 

ansible-pull

ansible-vcs:

https://github.com/andrewrothstein/ansible-vcs

posted on 2025-05-10 17:53  赛博狗尾草  阅读(22)  评论(0)    收藏  举报

导航