精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

告別手動編輯:如何用Python快速創建 Ansible hosts 文件?

開發 網絡
在實際應用中,我們可能會有一個包含大量服務器設備臺賬信息的文件,例如ip.txt,我們希望將這些IP地址轉換為Ansible hosts清單的格式。本文將介紹如何使用Python腳本來實現這一目標。

在自動化運維領域,Ansible是一款非常強大的工具,它可以幫助我們管理和配置大量的服務器。為了讓Ansible能夠有效地管理這些服務器,我們需要一個hosts清單文件,該文件定義了Ansible要管理的目標主機。

在實際應用中,我們可能會有一個包含大量服務器設備臺賬信息的文件,例如ip.txt,我們希望將這些IP地址轉換為Ansible hosts清單的格式。本文將介紹如何使用Python腳本來實現這一目標。

一、場景描述

假設我們有一個ip.txt文件,其中包含了一系列需要管理的服務器IP地址。這些IP地址可能是分散的,也可能是連續的。我們希望將這些IP地址轉換為Ansible hosts清單的格式,以便Ansible能夠識別和管理這些服務器。具體來說,我們希望實現以下功能:

  • 讀取ip.txt文件中的IP地址。
  • 對IP地址進行排序。
  • 將連續的IP地址范圍合并為一個范圍表示,例如192.168.1.[100:105]。
  • 生成Ansible hosts清單文件,其中包含每個主機的IP地址或IP地址范圍,以及相應的連接信息,如用戶名、密碼和端口號。

二、實現步驟

1. 讀取IP地址

首先,我們需要編寫一個Python腳本來讀取ip.txt文件中的IP地址。我們可以使用Python的內置函數open()來打開文件,并使用readlines()方法讀取文件的每一行。以下是讀取IP地址的代碼示例:

def read_data_from_csv(file_path):
    data = []
    with open(file_path, 'r') as file:
        reader = csv.DictReader(file)
        for row in reader:
            data.append(row)
    return data

2. 對IP地址進行排序

讀取IP地址后,我們需要對它們進行排序。Python的內置函數sorted()可以很方便地對列表進行排序。以下是對IP地址進行排序的代碼示例:

def sort_ips_in_group(grouped_data):
    for subnet, rows in grouped_data.items():
        grouped_data[subnet] = sorted(rows, key=lambda x: ip_to_int(x['IP']))
    return grouped_data

def ip_to_int(ip):
    parts = list(map(int, ip.split('.')))
    return (parts[0] << 24) + (parts[1] << 16) + (parts[2] << 8) + parts[3]

3. 合并連續的IP地址范圍

為了將連續的IP地址范圍合并為一個范圍表示,我們可以遍歷排序后的IP地址列表,并檢查每個IP地址是否與前一個IP地址連續。如果連續,則將它們合并為一個范圍。以下是合并連續IP地址范圍的代碼示例:

def merge_ip_ranges(sorted_ips):
    merged_ranges = []
    current_range_start = None
    current_range_end = None

    for ip in sorted_ips:
        if current_range_start isNone:
            current_range_start = ip
            current_range_end = ip
        elif int(ip.split('.')[-1]) == int(current_range_end.split('.')[-1]) + 1:
            current_range_end = ip
        else:
            if current_range_start == current_range_end:
                merged_ranges.append(f"{current_range_start}")
            else:
                merged_ranges.append(f"{current_range_start.split('.')[0]}.{current_range_start.split('.')[1]}.{current_range_start.split('.')[2]}.[{current_range_start.split('.')[-1]}:{current_range_end.split('.')[-1]}]")
            current_range_start = ip
            current_range_end = ip

    # 處理最后一個范圍
    if current_range_start isnotNone:
        if current_range_start == current_range_end:
            merged_ranges.append(f"{current_range_start}")
        else:
            merged_ranges.append(f"{current_range_start.split('.')[0]}.{current_range_start.split('.')[1]}.{current_range_start.split('.')[2]}.[{current_range_start.split('.')[-1]}:{current_range_end.split('.')[-1]}]")

    return merged_ranges

4. 生成Ansible hosts清單

為了簡化IP地址管理,我們可以將連續的IP地址范圍合并成一個更大的范圍。具體來說,我們可以通過遍歷已經排序的IP地址列表,并逐一檢查每個IP地址是否與前一個地址連續。如果發現它們是連續的,我們就把它們合并在一起。這樣做的好處是,不僅便于后續的管理和使用,還能讓我們以每個IP段作為組名進行組織。最后,我們將這些合并后的IP地址范圍轉換成Ansible hosts清單的格式。Ansible hosts清單文件一般包括主機組、主機名或IP地址以及相關的連接信息等。下面是一個生成Ansible hosts清單的代碼示例:

def generate_ansible_hosts(grouped_data):
    ansible_hosts = []
    added_ips = set()  # 使用集合來存儲已經添加的IP地址

    def add_ip_range(start, end):
        start_str = ip_to_str(start)
        end_str = ip_to_str(end)
        start_parts = start_str.split('.')
        end_parts = end_str.split('.')
        
        if start_parts[:3] == end_parts[:3]:
            if start == end:
                # 如果 start 和 end 相同,直接添加單個 IP 地址
                ansible_hosts.append(start_str)
            else:
                # 合并相同的前三個部分
                ansible_hosts.append(f"{start_parts[0]}.{start_parts[1]}.{start_parts[2]}.[{start_parts[3]}:{end_parts[3]}]")
        else:
            ansible_hosts.append(f"{start_str}")

    for subnet, rows in grouped_data.items():
        ifnot rows:
            continue# 跳過空的子網

        ansible_hosts.append(f"[{subnet}]")
        current_range_start = None
        current_range_end = None

        for row in rows:
            try:
                ip = row['IP']
                ip_int = ip_to_int(ip)

                if ip_int notin added_ips:  # 檢查IP地址是否已經添加過
                    if current_range_start isNone:
                        current_range_start = ip_int
                        current_range_end = ip_int
                    elif ip_int == current_range_end + 1:
                        current_range_end = ip_int
                    else:
                        add_ip_range(current_range_start, current_range_end)
                        current_range_start = ip_int
                        current_range_end = ip_int
                    added_ips.add(ip_int)  # 將IP地址添加到集合中
                elif current_range_start isNoneornot (current_range_start <= ip_int <= current_range_end):
                    ansible_hosts.append(ip)

            except KeyError as e:
                print(f"Missing key in row data: {e}")
                continue

        if current_range_start isnotNone:
            add_ip_range(current_range_start, current_range_end)

        ansible_hosts.append(f"[{subnet}:vars]")
        try:
            ansible_hosts.append(f"ansible_ssh_user={rows[0]['Username']}")
            ansible_hosts.append(f"ansible_ssh_pass={rows[0]['Password']}")
            ansible_hosts.append(f"ansible_ssh_port={rows[0]['Port']}")
        except (KeyError, IndexError) as e:
            print(f"Error accessing vars for subnet {subnet}: {e}")
            continue

        ansible_hosts.append("")

    return ansible_hosts

三、腳本使用演示

首先,通過一個腳本生成一下測試IP數據,腳本如下:

import random

def generate_random_ip(subnet):
    """生成一個隨機的IP地址"""
    parts = subnet.split('.')
    if len(parts) < 4:
        parts.extend(['0'] * (4 - len(parts)))
    parts[3] = str(random.randint(1, 254))
    return'.'.join(parts)

def generate_test_data(file_path, num_records):
    """生成測試數據并寫入CSV文件"""
    with open(file_path, 'w') as file:
        file.write("IP,Port,Username,Password\n")
        for _ in range(num_records):
            subnet = random.choice(['192.168.31', '192.168.32', '192.168.33', '192.168.34'])
            ip = generate_random_ip(subnet)
            port = 10022
            if subnet == "192.168.31":
                username = "root"
                password = "pass@123"
            elif subnet == "192.168.33":
                username = "root"
                password = "P@ssw0rd"
            else:
                username = "admin"
                password = "password"
            file.write(f"{ip},{port},{username},{password}\n")

# 示例文件路徑
file_path = 'test_data.csv'
num_records = 800

# 生成測試數據并寫入文件
generate_test_data(file_path, num_records)

執行上述腳本后,會在當前目錄生成一個IP數據,這些IP數據,有連續的和不連續的。如下圖所示:

然后,通過執行generate_ansible_hosts.py即可生成如下圖的結果:

四、總結

通過以上步驟,我們成功地使用Python腳本將ip.txt文件轉換為Ansible hosts清單。這個腳本可以幫助我們自動化生成Ansible hosts清單,提高運維效率。在實際應用中,我們可以根據需要對腳本進行進一步的擴展和優化,例如支持更多的連接信息、處理不同格式的IP地址等。希望本文對你有所幫助,如果你有任何問題或建議,歡迎留言討論。

五、腳本獲取方式

上述腳本已經上傳上傳到gitee,有需要的小伙伴可以自行獲取。gitee上的倉庫主要是分享一些工作中常用的腳本。小伙伴可以frok或者watch倉庫,這樣有更新可以及時關注到。

倉庫地址:https://gitee.com/didiplus/script

責任編輯:趙寧寧 來源: 攻城獅成長日記
相關推薦

2025-02-08 09:00:00

AnsibleLinux運維

2024-09-24 10:00:55

2024-10-28 16:03:24

2024-01-19 13:40:00

TOML庫TomliPytoml

2018-08-31 09:55:38

Ansible網絡自動化

2020-11-02 08:15:00

Python數據開發

2021-06-24 08:00:00

開發Hugo工具

2020-08-28 11:00:16

Python爬蟲命令

2021-04-02 06:35:49

Bash讀寫文件Linux

2023-04-06 08:00:36

VPC虛擬私有云Amazon

2021-03-04 13:40:57

Python文件代碼

2013-07-05 09:02:24

開放平臺天翼開放平臺開發者

2021-04-04 08:00:39

C++編程語言軟件開發

2020-01-10 17:45:06

Git共享文件開源

2020-12-02 13:19:47

Shell監控文件Linux

2022-08-29 08:00:00

容器Portainer工具

2018-10-10 09:00:00

前端框架Angular

2021-03-02 06:32:03

Ansible系統運維

2018-03-27 18:12:12

PythonHTML

2023-02-08 07:09:40

PythonChatGPT語言模型
點贊
收藏

51CTO技術棧公眾號

久久久www成人免费无遮挡大片 | 国产伦精品一区二区三| 青青草精品在线视频| 国产精品videossex| 91激情五月电影| 无码人妻aⅴ一区二区三区日本| 可以免费观看的毛片| 日韩精品视频网站| www.日韩不卡电影av| www.555国产精品免费| 国产精品久久亚洲不卡| 亚洲香蕉伊在人在线观| 色姑娘综合网| 无码国产色欲xxxx视频| 精品在线观看视频| 琪琪第一精品导航| 国产亚洲精品成人| 久久密一区二区三区| 亚洲激情第一页| 欧美激情第四页| a√中文在线观看| 日韩理论片中文av| 快播亚洲色图| 韩国av在线免费观看| 狠狠久久亚洲欧美| 国产精品日韩欧美| 在线精品免费视| 最新国产乱人伦偷精品免费网站| 久久精品欧美视频| 免费黄在线观看| 美女精品一区最新中文字幕一区二区三区| 欧美精品亚洲二区| 欧美成人三级在线播放| 日韩网站中文字幕| 精品久久久中文| 久久手机在线视频| 性直播体位视频在线观看| 国产精品久久精品日日| 日韩av电影免费在线| 欧美色18zzzzxxxxx| 成人爱爱电影网址| 国产成人看片| 亚洲精品无码久久久| 国产精品正在播放| 444亚洲人体| 亚洲中文字幕在线一区| 免费xxxx性欧美18vr| 国产成人精品视频在线| 欧美日韩综合一区二区三区| 香蕉成人久久| 日本国产欧美一区二区三区| 亚洲图片在线视频| 久久免费高清| 国产精品福利片| 国产精华7777777| 蜜桃av一区二区在线观看| 国产精品jizz在线观看麻豆| 中国a一片一级一片| 日韩影院免费视频| 国产精品自产拍在线观| 一卡二卡在线视频| 国产伦精品一区二区三区免费迷 | 亚洲欧美日韩小说| 女女百合国产免费网站| 免费在线国产视频| 精品免费在线视频| 日韩av播放器| 中文.日本.精品| 欧美一区二区三区在线观看视频| 中文字幕剧情在线观看| 成人盗摄视频| 亚洲精品自拍视频| 黄色片在线观看免费| 四季av一区二区凹凸精品| 美女扒开尿口让男人操亚洲视频网站| 国产免费无码一区二区视频| 日韩香蕉视频| 国产精品wwww| 国产高清在线免费| 久久香蕉国产线看观看99| 色阁综合av| 欧美四级在线| 色哟哟一区二区在线观看| the porn av| xxxxxhd亚洲人hd| 亚洲欧美在线一区二区| 777777国产7777777| 亚洲欧洲一区二区天堂久久| 国产精品电影观看| 性猛交富婆╳xxx乱大交天津| 91免费视频观看| 亚洲自拍三区| 成人在线免费观看黄色| 91黄色小视频| 韩国三级hd两男一女| 精品久久久久中文字幕小说 | 国内不卡的二区三区中文字幕| 国精产品99永久一区一区| 香蕉视频国产在线观看| 婷婷成人激情在线网| 99re精彩视频| 亚洲成aⅴ人片久久青草影院| 久久精品国产免费观看| 亚洲s码欧洲m码国产av| 国产精品1区二区.| 亚洲一二三区在线| 在线观看v片| 日韩三级免费观看| 性少妇xx生活| 亚洲专区免费| 国产高清精品一区| 欧美成年黄网站色视频| 一本久道久久综合中文字幕| 欧美日韩一区二区区别是什么 | 老司机aⅴ在线精品导航| 最新中文字幕亚洲| 久久国产黄色片| 国产不卡视频在线观看| 影音先锋在线亚洲| 亚洲精品在线影院| 精品亚洲男同gayvideo网站| 国产真实的和子乱拍在线观看| 久久精品国产99久久6| 欧美一级爱爱| 欧美激情网站| 精品国产123| 精品人妻在线播放| 国产成人精品午夜视频免费| 秋霞在线一区二区| 国产精品第一| 国产亚洲精品美女久久久| 亚洲国产成人精品激情在线| 成人综合在线视频| 超碰人人爱人人| 免费精品一区| 久久午夜a级毛片| 91亚洲视频在线观看| 日本一区二区三区四区| 国产精品视频黄色| 精品日产免费二区日产免费二区 | 999精品嫩草久久久久久99| 一区二区在线视频| 糖心vlog精品一区二区| 国产婷婷色一区二区三区在线| 国产精品-区区久久久狼| 美女扒开腿让男人桶爽久久动漫| 欧美精品久久久久久久久久| 国产成人精品亚洲精品色欲| 亚洲激情自拍视频| 日本成人在线免费| 尹人成人综合网| 国产一区二区三区无遮挡| 两个人看的在线视频www| 亚洲精品国产电影| wwwwww国产| 国产欧美日韩在线| 在线观看免费av网址| 图片区亚洲欧美小说区| 亚洲自拍高清视频网站| 免费男女羞羞的视频网站在线观看| 精品国产乱码久久久久久免费| 日本少妇毛茸茸高潮| 91亚洲男人天堂| 国产精品69页| 天天综合网91| 成人高清在线观看| 色多多在线观看| 激情五月激情综合网| 欧美成人精品3d动漫h| 免费中文字幕在线| 成年人网站91| 爱福利视频一区二区| 成人看的羞羞网站| 亚洲va欧美va国产综合剧情| 欧美理论电影| 精品亚洲国产视频| 国产精品久久久久精| 亚洲一卡二卡三卡四卡五卡| 国产精品无码永久免费不卡| 日产欧产美韩系列久久99| 午夜啪啪免费视频| 国产精品99久久免费观看| 国产97免费视| 成人影院www在线观看| 亚洲黄色有码视频| 怡春院在线视频| 亚洲国产毛片aaaaa无费看| 中文字幕丰满乱子伦无码专区| 麻豆精品国产91久久久久久| 99国产精品白浆在线观看免费| 亚洲人成精品久久久| 亚洲在线免费观看| 我爱我色成人网| 久久6免费高清热精品| 日本aaa在线观看| 欧美一卡2卡三卡4卡5免费| 欧美一区二区激情视频| 日韩一区中文字幕| 无码人妻精品一区二区三区温州| 久久精品99国产精品| 国产精品网站免费| 91精品国产调教在线观看| 精品乱码一区二区三区| 亚洲a成人v| 欧美在线一级视频| 久久不射影院| 色阁综合伊人av| 亚洲人视频在线观看| 日韩一级完整毛片| 中国女人真人一级毛片| 欧美日韩国产精品一卡| www.成人在线视频| 97久久精品视频| a毛片在线播放| 亚洲欧洲一区二区三区久久| 亚洲免费黄色片| 欧美日韩成人一区| 91在线视频免费播放| 香蕉成人伊视频在线观看| 91视频青青草| 国产精品灌醉下药二区| 免费看污黄网站在线观看| 成人丝袜高跟foot| 亚洲成人av免费观看| 青青草国产精品亚洲专区无| 欧美,日韩,国产在线| 亚洲天堂黄色| 男人添女人下部视频免费| 99久久精品费精品国产| 婷婷精品国产一区二区三区日韩 | 黑人玩欧美人三根一起进| 视频在线观看99| 成年午夜在线| 亚洲网在线观看| 日本韩国一区| 日韩精品视频在线| 午夜激情在线视频| 亚洲第一福利在线观看| 蜜桃av中文字幕| 精品精品国产高清a毛片牛牛 | 精品亚洲一区二区三区在线播放| 男人的天堂a在线| 精品国产一二三| 秋霞欧美在线观看| 亚洲第一网中文字幕| 日韩性xxxx| 亚洲精品xxxx| 欧美精品少妇| 国产一区二区三区视频在线观看| 黄色片免费在线| 在线观看免费高清视频97| 福利视频在线看| www.亚洲一区| 在线看女人毛片| 欧美激情伊人电影| f2c人成在线观看免费视频| 国内精久久久久久久久久人| 九色porny视频在线观看| 欧美在线激情网| 电影一区二区| 亚洲综合色av| 精品欧美午夜寂寞影院| 蜜桃成人在线| 日本久久精品| 91免费视频黄| 91久久视频| 欧美伦理片在线看| 久久成人麻豆午夜电影| 国产成人精品综合久久久久99| 懂色一区二区三区免费观看| 懂色av粉嫩av蜜乳av| 国产欧美一区二区在线| 欧美做爰啪啪xxxⅹ性| 亚洲成av人在线观看| 99re国产在线| 欧美精品第1页| www.香蕉视频| 亚洲免费视频观看| 黄网站在线播放| 91超碰中文字幕久久精品| 99久久精品一区二区成人| 91青青草免费观看| 免费成人av| 精品嫩模一区二区三区| 久久成人在线| 日本黄色三级网站| 不卡的av网站| 午夜精品一区二区三级视频| 亚洲成人免费电影| 中文字幕a级片| 亚洲成人网在线观看| 8888四色奇米在线观看| 亚洲**2019国产| 日韩成人在线一区| 久草精品电影| 欧美aⅴ99久久黑人专区| av动漫免费看| 粉嫩蜜臀av国产精品网站| 久久亚洲AV无码专区成人国产| 亚洲黄色性网站| 最新中文字幕第一页| 亚洲电影天堂av| 大片免费在线观看| 国产91在线播放| 北条麻妃一区二区三区在线| 亚洲视频在线观看日本a| 国产一区二区精品| 女人扒开腿免费视频app| 欧美韩国一区二区| 99热只有这里有精品| 日韩三级视频中文字幕| 9色在线视频网站| 日本韩国在线不卡| 国产精品15p| 成人在线免费观看视频网站| 美女一区二区三区在线观看| 免费观看av网站| 香蕉乱码成人久久天堂爱免费| 国产精品伦一区二区三区| 国产亚洲视频在线| 成人影院入口| 久久艳妇乳肉豪妇荡乳av| 亚洲承认在线| 熟女人妻一区二区三区免费看| 自拍偷拍国产精品| 欧美综合国产精品久久丁香| 国产理论电影在线| 147欧美人体大胆444| 日韩精品水蜜桃| 爆乳熟妇一区二区三区霸乳| 91片黄在线观看| 青青草av在线播放| 亚洲第一中文字幕在线观看| 牛牛精品视频在线| yy111111少妇影院日韩夜片 | www一区二区| 91久久国产视频| 亚洲国产精品久久久| av成人福利| 国精产品一区二区| 亚洲影视在线| 欧洲女同同性吃奶| 色就色 综合激情| 91九色在线porn| 国产精品一区=区| 欧美成人精品一区二区三区在线看| 毛葺葺老太做受视频| 欧美国产成人在线| 一级片aaaa| 欧美成人在线网站| 91欧美日韩在线| 国产免费黄色小视频| 久久综合色天天久久综合图片| 五月婷婷开心网| 亚洲日韩欧美视频| 国产三级一区| 黄色a级在线观看| 国产99久久久国产精品潘金网站| 欧美黄色免费在线观看| 精品第一国产综合精品aⅴ| 2020av在线| 久久资源av| 蜜桃av一区二区三区电影| 亚洲二区在线播放| 亚洲高清在线观看| 日韩电影免费观看高清完整版| 性刺激综合网| 国产乱子伦视频一区二区三区| 国产亚洲精品码| 亚洲三级av在线| 久久精品一级| 色综合久久久久无码专区| 国产午夜一区二区三区| 国产又粗又黄又爽的视频| 欧美激情免费视频| 伊人久久大香线蕉综合网站| 羞羞的视频在线| 精品国产福利视频| yw视频在线观看| 爱情岛论坛亚洲入口| 久久激情一区| 麻豆视频在线观看| 亚洲欧美自拍一区| 欧美三级一区| 久久精品午夜福利| 亚洲欧美激情视频在线观看一区二区三区 | 精品剧情v国产在线观看在线| 深夜av在线| 中文字幕中文字幕一区三区| 99视频在线观看一区三区| 特级西西444www大胆免费看| 欧美大片免费看| 国产一区二区三区四区五区 | 999久久久精品一区二区| 少妇性l交大片| 亚洲精品一二三区| 国产理论电影在线观看| 国产精品12| 另类综合日韩欧美亚洲| 天天爽夜夜爽夜夜爽精品|