ansible自动化运维工具----ansible中的roles详解和when的使用(7)

文章目录

    • 一、引入roles
    • 二、ansible-galaxy工具
    • 三、创建一个简单的roles(apache)
    • 四、在网上下载已有的角色
    • 五、拓展:利用amsible工具setup获取相应的主机名等等
    • 六、ansible中的when判断

一、引入roles

Roles 基于一个已知的文件结构,去自动的加载某些 vars_files,tasks 以及 handlers。基于 roles 对内容进行分组,使得我们可以容易地与其他用户分享 roles 。
角色(roles)是ansible自1.2版本开始引入的新特性,用于层次性,结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单的说,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。角色一般用于基于主机构建服务的场景中、但也可以是用于构建守护进程等场景中。
角色是ansible自带的工具,在我之前的博客学习了playbook的用法,将所有的操作写入playbook里面,但是如果hosts较多,写在一起容易混淆并且读起来也不方便。所以我们引入了roles,roles将每个部分分割开来,生成不同的目录,每个目录有每个目录的作用。
讲解每个目录的作用,其实不难发现,每个目录就是我们之前写playbook中所用到的,将每个部分分离出来。

defaults目录 为当前角色设定默认变量时使用此目录;应当包含一个main.yml文件
files目录 存放由copy或script等模块调用的文件,为静态文件一般文件里面没有需要变量就存放在此目录下面
tasks目录 至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表;此文件可以使用include包含其他的位于此目录中的task文件
handlers目录 此目录中应当包含一个main.yml文件
templates目录 存储由template模快调用的模板文件
meta目录 定义当前角色的特殊设定及其依赖关系,会有main.yml文件
tests目录 这个目录为测试,但是我们一般不适用它 可删掉
vars目录 定义variables,有main.yml文件,存放roles中涉及到的变量

二、ansible-galaxy工具

ansible-galaxy 是一个可以免费共享和下载ansible角色的网站,可以帮助我们好的定义和学习roles。
使用角色,就必须使用ansible-galaxy init xxx 生成相对应的角色目录,生成角色后,进入目录,可以看到系统已经自动生成了相对应的目录,在目录下面有main.yml文件,方便我们书写。通过tree . 可以查看到哪些目录下面有main.yml文件。
通过官方网站来辅助学习
也可以借助中文权威指南来学习ansible

三、创建一个简单的roles(apache)

创建一个apache角色。
续上一个博客中在devops用户下面创建的ansible目录,编写好自己的配置文件ansible.cfg,以及管理节点的配置文件hosts。
在此处的学习我们可以借助ansiible的官方网站以及ansible的中文权威指南两个网站来学习。

步骤一:在ansible目录下面,建立roles目录
修改配置文件,使系统能够读取roles目录
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第1张图片
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第2张图片
步骤二:进入到roles目录下面,利用ansible-galaxy工具生成anpache角色
(ansible-galaxy --help查看帮助)
列出所有已经安装的galaxy:ansible-galaxy list,这个命令的使用必须在~absible目录下使用才生效
步骤三:生成相应的角色
ansible-galaxy init apache
cd apache
切换到ansinble目录下面,再次使用ansible-glaxy list 可以看到产生了apache角色
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第3张图片
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第4张图片

步骤四:通过树形展示apache目录下面
没有tree命令,下载:yum install -y tree
tree . :可以看到相对应的目录下面有main.yml文件

ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第5张图片
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第6张图片
步骤五:书写任务
vim tasks/main.yml
任务内容,安装apache---->配置apache---->打开服务ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第7张图片

ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第8张图片
可以通过ansible all -a “systemctl stop firewalld 使所有组都执行某某条命令”
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第9张图片
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第10张图片
步骤六:添加静态文件,在任务里面我们使用copy模块拷贝文件,那么需要在files目录下面放入我们src对应的文件。
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第11张图片
步骤七:任务书写中还有template模块,将模板文件放到templates目录下面
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第12张图片
修改文件
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第13张图片
templates目录下面放的是模板文件。必修加j2
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第14张图片

文件中有变量,所以还需要在vars目录下面定义变量
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第15张图片
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第16张图片

步骤八:notify引发触发器,编写handlers/main.yml文件,没有出发的话,意味着任务中的操作不作数。模板文件中涉及到变量,将变量写进vars/main…yml
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第17张图片

步骤九:apache角色的配置就基本结束,最后在ansible目录下面编辑yml文件,指出运行的主机和角色。
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第18张图片
步骤十:测试。
通过curl 安装apache主机的ip
得到index.html的内容
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第19张图片
在这里插入图片描述
当然我们也可以更改端口,但是需要注意的是,更改端口时有优先级。即便我们ansible目录下面的yml文件里面定义了变量端口,但是我们角色下面的vars变量里面没有改变端口,他的端口依然不会改变。
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第20张图片
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第21张图片
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第22张图片
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第23张图片
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第24张图片
表示地址的方式:
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第25张图片

运行:ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第26张图片
出错的原因是因为我们没有切片
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第27张图片
在我们安装apache服务的主机上查看配置文件
在这里插入图片描述
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第28张图片

表示地址的其他几种方式:
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第29张图片
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第30张图片
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第31张图片

四、在网上下载已有的角色

同样的,在ansible目录下面,
ansible-galaxy search nginx查找nginx角色
点击官网查看
在这里插入图片描述
下载已有的角色
ansible-galaxy install nginxinc.nginx

ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第32张图片
在这里插入图片描述

ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第33张图片
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第34张图片

五、拓展:利用amsible工具setup获取相应的主机名等等

还是在ansible目录下面
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第35张图片

ansible db -m setup | grep ansible_hostname
在这里插入图片描述
ansible db -m setup | grep ip
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第36张图片
vim info.j2写入我们想要获取的与主机有关的信息
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第37张图片
当然可以通过ansible db -m setup | less查询如何写相对应的变量
最后获取到每个主机上的相关信息
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第38张图片
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第39张图片
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第40张图片ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第41张图片

六、ansible中的when判断

查看官方文档,学习when判断
我们之前在书写yml文件之后,推的时候,如果出错,就会停止,那么我们选择跳过错误,直接运行下面的内容
当然也可以是在远程主机时也可以使用,哪个主机满足条件,哪个主机就进行相应的操作,当不满足时直接跳过。
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第42张图片
ansible自动化运维工具----ansible中的roles详解和when的使用(7)_第43张图片

你可能感兴趣的:(企业)