Ansible初探

导读:
本博文主要总结Ansible一些基本概念以及简单操作,后续会更新使用Ansible部署项目时操作细节。

  1. Ansible安装及配置
  2. Ansible目录结构
  3. Ansible Task
  4. Ansible Handlers
  5. Ansible Templates
  6. Ansible Vars
  7. Ansible Meta

Ansible安装及配置:
安装ansible方法多如星辰,这里不具体介绍了,如有疑问google之。
ansible不存在客户端与服务器的概念,在配置上来说非常便捷。ansible基于ssh工作,在这里简单介绍一下如何配置两台机器,使其相互之间可以连通。
10.166.224.32 为安装ansible机器,美其名曰控制节点
10.166.224.22 屈尊于客户机,用于测试
ansible我的理解是控制节点ssh到其他客户机上输入我们输给它的命令。
因此,我们需要将控制节点的 /root/.ssh/id_rsa.pub 加入到客户机的 /root/.ssh/authorized_keys中。

做完上一步,我们来测试一下。
首先,我们在/etc/ansible/ 目录下创建一个hosts文件,用于管理客户节点网络信息,英文名叫inventory。
这里写图片描述
【localhost】 可以叫做一个section,用于定义一个主机列表的名字。
接下来,我们ping一下 myclient
敲入:ansible myclient -m ping 得到如下结果
这里写图片描述


Ansible 目录结构:
Ansible目录结构比较自由随意,在这里给出一个推荐的目录结构。
这里写图片描述
* - inventory为了存放hosts,hosts就是主机列表,支持通配*
* - roles的概念比较关键,就是为了解耦,重复利用我们定义的yml*
* - hello 目录是一个role,代表一类主机对象*
* - hello.yml 可以理解为hello role的入口*
* - handlers 触发器,用于保证在任务中最多只执行一次*
* - meta 用于定义依赖关系*
* - tasks 用于定义任务*
* - templates 用于定义Jinja2模板文件*
* - vars 用于定义变量,可以在其他文件中include 使用*


Ansible Task:

task即任务,是一个一个指令序列。我们通过定义一个task流,称为playbook。然后丢给hosts中某个主机列表去执行。
task书写遵从yaml规范。
这里写图片描述
图中功能是:
使用shell模块,发送一个echo到远程主机。ansible提供很多模块供我们使用。
每一个tasks必须有一个名字,我们可以在这里定义一个task流,即一串 task,然后远程主机会按照顺序去执行。下面贴出一个安装nova的task作为示例:

每一个task都有很多项如register,until等等。关于这一点,我在写本文时,还不能全部搞清楚。但是想到自动化部署,我们应该能猜测到一些字段的意思,以及ansible应该有一些什么字段方便我们使用。本文最后会附一个官方手册,再使用过程中,我们可以随时查阅满足我们的使用。


Ansible Handlers:

我们在配置一些服务时,往往需要重启服务。我们可以把配置项拆成很多个task,比如配置数据库,配置rabbitMQ等等。这样做的好处是,可能我们配置其他服务时也可以调用rabbitMQ这个配置yml文件。但是我们又不愿意,写一个配置,就重启一次服务,最理想的情况就是,所有配置写完之后,重启一次。
Handlers就是为了满足这种需求而存在,其本身和task没有任何区别。它的特性是,无论你调用多少次,它最多只执行一次,而且是在最后。

这里写图片描述


Ansible Templates:

Templates用来存放Jinja2 文件。模板是用来设计一个框架式的配置文件,然后把Anisble需要的值插入到合适的位置。

Jinja2可以作为filter:
例如:
shell: cat /test.txt
register: result
1.我们可以根据result的值执行相应的步骤,这里用到when

-debug: msg=”successful”
when: result | successful

-debug: msg=”failed”
when: result | failed

2.我们可以强制赋予未定义变量值
{{undefined_var | default(1)}} #初始值为1

3.数组操作
{{list | min}} 取数组中最小值

还有很多操作,不意义列举了,在项目实际过程中,根据需要google是很方便的。在这里我们只要知道Jinja2可以做很多事情就好。


Ansible Vars:
关于变量,首先我们想到的是,我们可以定义变量,然后在多个文档中使用,这是基本需求。
其次,我们希望,我们可以调用远程主机上的变量。
最好,我们还可以定义一个变量,让它能记录远程主机执行playbook后返回的信息,方便作为后续playbook的执行路径选择。

变量命名规则:常规命名方式,a_b,ab都行
register : 用来保存执行task返回值
例如:
我们执行一个
shell: cat /test.txt
register: test_result
远程目录下的test.txt文件内容就被读取到本地test_result变量里面


Ansible Meta:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值