Inventory 详解

Inventory 详解

Inventory 详解

Ansible 可以根据Inventory文件实现同时配置多个系统。这个文件位于/etc/ansible/hosts。实际使用的时候可以编写多个Inventory文件,使用的时候用-i参数临时指定就行。

这个文件不仅可以自己编写、编写多个。配置的时候不光可以使用本地的资源,也可以使用云端的资源。

这个文件可以编写成多种格式,常用的有:INI,YAML。

Inventory基础:多台主机分组

表示同一个意思的inventory文件可以用INI写也可以用YAML写,不过需要安装对应的插件。

INI格式的是这样:

mail.example.com

[webservers]

foo.example.com

bar.example.com

[dbservers]

one.example.com

two.example.com

three.example.com

方括号里面的是组名,未达到见名知义的效果,最好让这个名字体现出:这是个什么操作系统,它被用来干什么事,一般什么时间运行。

这个文件用YAML格式写是这样:

all:

hosts:

mail.example.com:

children:

webservers:

hosts:

foo.example.com:

bar.example.com:

dbservers:

hosts:

one.example.com:

two.example.com:

three.example.com:

将多台主机配置到多个组

可以给多个组同时装系统,于是可以做到这种效果:一台主机既是一个web服务器,又是一个数据库服务器。

创建组的时候可以用这样一种思路:

用来干啥

应用,栈,微服务。比如: database servers , web servers。

在哪里

在哪个数据中心或哪个区域的本地的DNS服务器,storage存储服务器。比如:east,west。

什么阶段

开发阶段,需要避免测试线上代码。比如:prod,test。

包含以上的三种思想的YAML格式的Inventory文件可以写成这样:

all:

hosts:

mail.example.com:

children:

webservers:

hosts:

foo.example.com:

bar.example.com:

dbservers:

hosts:

one.example.com:

two.example.com:

three.example.com:

east:

hosts:

foo.example.com:

one.example.com:

two.example.com:

west:

hosts:

bar.example.com:

three.example.com:

prod:

hosts:

foo.example.com:

one.example.com:

two.example.com:

test:

hosts:

bar.example.com:

three.example.com:

可以看到one.example.com在dbservers组中,也在east组中,也在prod组中。

也可以使用嵌套的方式简化这个文件:

all:

hosts:

mail.example.com:

children:

webservers:

hosts:

foo.example.com:

bar.example.com:

dbservers:

hosts:

one.example.com:

two.example.com:

three.example.com:

east:

hosts:

foo.example.com:

one.example.com:

two.example.com:

west:

hosts:

bar.example.com:

three.example.com:

# 以上相同

prod:

children:

east:

test:

children:

west:

如果用了这种简写的方法,要注意变量代表它包含的所有主机。

多台主机使用不同端口

如果有的主机没有用默认ssh端口,那么在主机名后加上端口就行。

如果要配置的主机的端口号确实不是默认端口22,那最好还是配一下端口。

就像这样:

badwolf.example.com:5309

如果主机的IP是静态的,不会变更,而且连接的时候需要通过隧道连接,那可以在hosts文件中配置一下别名。

INI文件这样配:

jumper ansible_port=5555 ansible_host=192.0.2.50

别名 端口号 主机名

YAML文件这样配:

...

hosts:

jumper:

ansible_port: 5555

ansible_host: 192.0.2.50

如果写入的主机名称有统一的模式,可以这样简写:

INI格式:

[webservers]

www[01:50].example.com

YAML格式:

...

webservers:

hosts:

www[01:50].example.com:

对于数字的模式匹配,前导0可以根据需要加上或者去掉,前后的范围是闭区间的,两个边界值都可以取到。

也可以定义字母范围:

[databases]

db-[a:f].example.com

也可以选择连接类型和每个主机的用户:

[targets]

localhost ansible_connection=local

other1.example.com ansible_connection=ssh ansible_user=mpdehaan

other2.example.com ansible_connection=ssh ansible_user=mdehaan

主机 连接类型 连接用户

如上所述,在inventory文件中设置这些只是一种简化方法,稍后我们将讨论如何将它们存储在host_vars目录中的各个文件中。

用变量指代一台主机:主机变量

主机也可以用变量指代,而且现在指定的变量在后面的playbook中会用到。

INI格式:

[atlanta]

host1 http_port=80 maxRequestsPerChild=808

host2 http_port=303 maxRequestsPerChild=909

YAML格式:

atlanta:

host1:

http_port: 80

maxRequestsPerChild: 808

host2:

http_port: 303

maxRequestsPerChild: 909

用变量指代多台主机:组变量

变量也可以一次应用到整个组。

INI格式:

[atlanta]

host1

host2

[atlanta:vars]

ntp_server=ntp.atlanta.example.com

proxy=proxy.atlanta.example.com

YAML格式:

atlanta:

hosts:

host1:

host2:

vars:

ntp_server: ntp.atlanta.example.com

proxy: proxy.atlanta.example.com

组变量继承:子组变量

也可以配置子组,以及使用子组变量

INI格式

YAML格式

子组

:children

children:

子组变量

:vars

vars:

INI格式:

[atlanta]

host1

host2

[raleigh]

host2

host3

[southeast:children]

atlanta

raleigh

[southeast:vars]

some_server=foo.southeast.example.com

halon_system_timeout=30

self_destruct_countdown=60

escape_pods=2

[usa:children]

southeast

northeast

southwest

northwest

YAML格式:

all:

children:

usa:

children:

southeast:

children:

atlanta:

hosts:

host1:

host2:

raleigh:

hosts:

host2:

host3:

vars:

some_server: foo.southeast.example.com

halon_system_timeout: 30

self_destruct_countdown: 60

escape_pods: 2

northeast:

northwest:

southwest:

几个默认组

有两个默认组:all和ungrouped。

all包含所有主机

ungrouped包含只属于all组的主机

每个主机至少属于两个组

尽管all和ungrouped始终存在,但它们可以是隐式的,不会出现在group_names之类的组清单中。

你可能也喜欢

如何连接车载蓝牙?
365bet开户网站

如何连接车载蓝牙?

07-02 1917
骈文为何能长期存在
约彩365app官方版下载

骈文为何能长期存在

07-18 8765
白屏故障的原因与解决办法
365怎么查看投注记录

白屏故障的原因与解决办法

07-30 8859