ansible进阶

Ansible ginotang 848℃ 0评论

ansible进阶

使用变量

ansible中可以在多个地方中使用变量,例如inventory文件、playbook,模板、角色等。使用变量的好处是可以根据不同条件进行不同的设置,例如主机ip,主机硬件信息等,使配置更加灵活。

和其他编程语言差不多,ansible变量的名称只能是数字、字母和下划线组成,且不能是数字开头。

inventory变量

指定义在/etc/ansible/hosts文件中的变量,变量可以定义为主机变量和组变量

主机变量和组变量

ini方式

yaml方式

yaml方式只能定义组变量,不可以定义主机变量

在单独的文件中定义主机变量和组变量

我们可以在单独的文件定义变量,可以在以下两个地方保存变量文件

  1. /etc/ansible/host_vars/hostname
  2. /etc/ansible/group_vars/groupname

例如:

  • 保存本地主机名称localhost变量:/etc/ansible/host_vars/localhost

    如果host_vars文件夹不存在,先创建出来

    也可以创建一个和主机相同名称的文件夹,然后把变量保存到该文件夹的文件中,例如:

    设置ssh相关变量:/etc/ansible/host_vars/localhost/ssh.yaml

    ansible会自动读取localhost文件夹下的所有文件来获取变量。

  • 保存主机组变量 /etc/ansible/group_vars/webserver

    这样,所有的webserver组的ssh端口就设置为2222。同理,也可以把变量文件保存到名字和组相同的文件夹下面。即/etc/ansible/group_vars/webserver/ssh.yaml中。

playbook变量

和inventory类似,playbook中的变量定义在vars关键字下面

使用角色(roles)

一个role实际上是一个可重用的playbook,role便于模块化管理和play的重用。通常每一台服务器都是一个角色,例如,web服务器,database服务器,负载均衡服务器等,playbook可以根据需求分类编写,任何时候添加或更换服务器的时候都可以单独运行特定的role。

使用ansible-galaxy

一般role都会储存在具有特定结构的目录中,ansible-galaxy可以为我们初始化满足条件的role目录结构。

初始化role

通过ansible-galaxy init命令创建role的目录结构,下面分别创建两个角色:web服务器和数据库服务器

完了之后在相应的目录下面的main.yml文件中添加内容

由于我们使用yum安装apache,因此role的编写十分简单,如果是源码编译的方式安装,会复杂点。

然后就是database服务器的role,ansible-galaxy创建的每一个role目录结构都是一样的。
创建好role后就是编写对应的main.yml文件。

inventory(/etc/ansible/hosts)服务器布局如下:

我们创建了两个role,一切准备就绪,最后就是引用两个role

通过ansible-playbook运行entry.yml入口文件,也可以每个role单独编写一个入口文件单独调用。

完整的目录结构如下:

条件和循环

ansible支持某些编程语言的特性,例如条件和循环,这些特性可以让ansible根据不同的信息执行不同的任务,例如不同的操作系统,不同的IP地址等。

条件语句

ansible的setup模块返回的信息可以用于条件语句中,例如针对不同的发行版,使用不同的命令安装apache服务。

条件判断由when关键字提供支持,when关键字可用于模块,roles、import和includes指令中。

当ansible检测到当前系统是Redhat系列时,就会跳过apt任务的执行,相反,如果系统时Debian系列,就会跳过yum任务。这样的好处时任务执行可以做到系统无关,ansible任务的可以执行更好。

条件语句支持逻辑运算符and和or

逻辑与(多个条件同时成立)可以写成列表的方式

除了可以使用setup模块返回的变量,我们也可以使用自定义变量。

在其他地方使用when

循环语句

循环用于重复执行相同任务的列表,循环语句的关键字有item、with_items、with_list、loop等,它们是不同版本的不同关键字,高版兼容低版本的关键字。例如:

每次循环的时候,变量item的值就被替换为testuser1和testuser2。

又比如安装高可用环境软件包

循环语句可以和条件语句组合使用

转载请注明:Pure nonsense » ansible进阶

喜欢 (0)
0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
()
x