記一次優化ansible inventory的小例子

曲珂發表於2017-05-12

起因:

阿里雲新擴容一批機器,要對上面的flume配置做修改

之前的inventory是這樣子的

[user@vip10-ali-tj-console host_vars]$ sdiff vip10-ali-tj-mm10.yml vip10-ali-tj-mm11.yml
---								---
hostname: vip10-ali-tj-mm10			      |	hostname: vip10-ali-tj-mm11
monit_ipaddr: "{{ hostname }}"					monit_ipaddr: "{{ hostname }}"
machineid: 590						      |	machineid: 591
platformname: vip10						platformname: vip10
mm_version: 16.09.1						mm: 16.09.1
lvm_create:							lvm_create:
  - vg: "data"							  - vg: "data"
    pv: "/dev/vdb"						    pv: "/dev/vdb"
    lv: "apps"							    lv: "apps"
    mount_point: "/data"					    mount_point: "/data"
[user@vip10-ali-tj-console host_vars]$ cat ../vip10.yml |grep mm
[mm]
vip10-ali-tj-mm10:22
vip10-ali-tj-mm11:22  

對上面做一下說明

定義了一個主機組叫mm,這個組下面有兩臺機器

上面的host_vars分別對每臺機器做了配置,其實可以看到配置大部分都相同, 我用sdiff都列出來了,就兩個地方不同

所以就要思考了,我要是擴容100臺機器,難不成我要生成100個檔案...

 

下面是經過改良過的

在host_vars中用一個模板檔案代替每個主機一份配置的方法

[user@vip10-ali-tj-console host_vars]$ cat mm.yml 
---
hostname: {{ inventory_hostname }}
monit_ipaddr: "{{ hostname }}"
machineid: {{ hostvars[inventory_hostname].machineid }}
platformname: vip10
mm_version: 16.08.6
lvm_create:
  - vg: "data"
    pv: "/dev/vdb"
    lv: "apps"
    mount_point: "/data"  

在主機定義檔案中設定主機的個性化引數

[user@vip10-ali-tj-console host_vars]$ cat ../vip10.yml |grep mm
[mm]
vip10-ali-tj-mm-10:22 machineid=580
vip10-ali-tj-mm-11:22 machineid=581  

然後就可以愉快的測試了,先跑一臺看看效果

ansible-playbook -i inventory/vip10/vip10.yml playbooks/vip10/flume/mm.yml --limit vip10-ali-tj-mm-10

Done.  

相關文章