Ansible 之動態Inventory文件(二)

  上篇主要講解了Ansible 的安裝和配置,而且根據不一樣的業務場景將服務器的信息存放在Ansible的Inventory中,其實存放這樣的數據每次更新都須要咱們自動的添加和刪除,這樣對於咱們維護起來很不方便,而Ansible 提供了支持動態的從外部獲取主機列表和主機組數據;通常狀況動態獲取主機信息都會結合CMDB、Zabbix、Cpbbler、雲主機管理平臺(如AWS、阿里雲)在一塊兒使用;python

  Ansible 動態Inventory 是經過調用外部腳本生成指定格式的json數據,這裏不會限制任何語言,只要能夠返回指定格式便可,下面看下咱們須要返回什麼樣子的格式;web

 {
        "webserver":  # 定義webserver組
            {
            "hosts": ["39.105.0.244"],  # webserver 組內主機
            "vars": {  # 參數
                "ansible_ssh_pass": "123456",  # Inventory 內置變量
                "ansible_port": "61821"
                }
            },
        "dbserver":
            {
            "hosts": ["47.104.149.180"],
            "vars": {
                "ansible_ssh_pass": "123456",
                "ansible_port": "61821"
                    }
            }
        }

  切記上面的hosts,vars還有children這些變量是固定的,咱們不能在返回的json格式裏面隨意的定義,若是定義成爲其餘的這裏就會出現報錯,下面咱們把上面的json數據轉換爲靜態的Inventory數據,看下映射關係json

[webserver]
    39.105.0.244

[dbserver]
    47.104.149.180

[webserver:vars]
    ansible_ssh_pass: "123456",
     ansible_port: "61821"

[dbserver:vars]
     ansible_ssh_pass: "123456",
     ansible_port: "61821"

  經過映射關係咱們能夠把對/etc/ansible/hosts 數據 和動態獲取Inventory數據的對比下,動態的只是經過其餘的地方獲取數據組合成爲Ansible Inventory 可識別的數據而已;服務器

下面咱們經過python語言來實現一個demo程序,這裏咱們把本身的數據源定義成爲變量,下面咱們來看下例子ssh

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import json


def inventory_groups():
    groups = \
        {
        "webserver":  # 定義webserver組
            {
            "hosts": ["39.105.0.244"],  # webserver 組內主機
            "vars": {  # 參數
                "ansible_ssh_pass": "123456",  # Inventory 內置變量
                "ansible_port": "61821"
                }
            },
        "dbserver":
            {
            "hosts": ["47.104.149.180"],
            "vars": {
                "ansible_ssh_pass": "123456",
                "ansible_port": "61821"
                    }
            }
        }

    return json.dumps(groups, indent=4)


if __name__ == '__main__':
    print(inventory_groups())

咱們在Ansible 運行下咱們寫好的腳本,首先咱們指定webserver 執行ping操做阿里雲

    ansible -i inventory.py webserver -m ping

執行命令之後返回:spa

這裏返回的結果集與咱們在/etc/ansible/hosts配置服務器組返回結果一致,其實動態只是讓你更加便利的維護服務器組數據。code

注意:server

  ansible -i 參數表明指定Inventory 文件,可是咱們指定文件之後還須要指定運行的服務器組或者服務器,若是須要全部的服務器都執行那麼咱們這裏經過all 來實現。blog

相關文章
相關標籤/搜索