Python и Ansible Диапазон IP-адресов для хостов - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь разобрать следующий формат ip в файл инвентаря в ansible. Я ищу нестандартное python или доступное ansible решение.

Ввод пользователя [может быть намного длиннее в некоторых случаях]:

10.9.1.1-10.9.1.12, 10.9.1.15

Желаемый вывод:

10.9.1.1
10.9.1.2
10.9.1.3
10.9.1.4
10.9.1.5
10.9.1.6
10.9.1.7
10.9.1.8
10.9.1.9
10.9.1.10
10.9.1.11
10.9.1.12
10.9.1.15

Было бы идеально, если бы ansible мог принять диапазон ip для hostvars в формате 10.9.1.1-10.9.1.12, но мне кажется, что для создания в формате 10.9.1. [1:12] или распечатайте все как указано выше.

Я использую тот же формат для вызовов API из пользовательского ввода, поэтому я не Я не хочу, чтобы пользователь вводил данные в другом формате. После того, как вызовы API сделаны, я собираюсь запустить скрипт на каждом из этих ips для установки некоторого программного обеспечения.

Прогресс [должен быть более динамичным c, хотя]:

def ipRange(start_ip, end_ip):
   start = list(map(int, start_ip.split(".")))
   end = list(map(int, end_ip.split(".")))
   temp = start
   ip_range = []

   ip_range.append(start_ip)
   while temp != end:
      start[3] += 1
      for i in (3, 2, 1):
         if temp[i] == 256:
            temp[i] = 0
            temp[i-1] += 1
      ip_range.append(".".join(map(str, temp)))    

   return ip_range


# sample usage 
ip_input = ("10.9.1.1-10.9.1.12")
ip_input_start = ip_input.split("-")[0]
ip_input_end = ip_input.split("-")[1]
ip_range = ipRange(ip_input_start, ip_input_end)
for ip in ip_range:
   print(ip)

1 Ответ

0 голосов
/ 07 апреля 2020

Вот код, который может использовать кто-то другой, если столкнется с этой проблемой. Это распечатывает все ips в arraylist. Это должно быть достаточно просто для использования в Ansible сейчас.

def ipRange(start_ip, end_ip):
   start = list(map(int, start_ip.split(".")))
   end = list(map(int, end_ip.split(".")))
   temp = start
   ip_range = []

   ip_range.append(start_ip)
   while temp != end:
      start[3] += 1
      for i in (3, 2, 1):
         if temp[i] == 256:
            temp[i] = 0
            temp[i-1] += 1
      ip_range.append(".".join(map(str, temp)))    

   return ip_range


# sample usage 
ip_input = ['10.9.1.1-10.9.1.12', '10.9.1.21-10.9.1.28', '10.9.1.15', '10.9.1.18']
for i in range(len(ip_input)):
    if(ip_input[i].count('-')==0):
        print(ip_input[i])
    if(ip_input[i].count('-')==1):
      ip_input_start = ip_input[i].split('-')[0]
      ip_input_end = ip_input[i].split('-')[1]
      ip_range = ipRange(ip_input_start, ip_input_end)
      for ip in ip_range:
          print(ip)

Вывод:

10.9.1.1
10.9.1.2
10.9.1.3
10.9.1.4
10.9.1.5
10.9.1.6
10.9.1.7
10.9.1.8
10.9.1.9
10.9.1.10
10.9.1.11
10.9.1.12
10.9.1.21
10.9.1.22
10.9.1.23
10.9.1.24
10.9.1.25
10.9.1.26
10.9.1.27
10.9.1.28
10.9.1.15
10.9.1.18
...