cvs в host.yaml для Норнира - PullRequest
0 голосов
/ 09 мая 2020

Я не мог прокомментировать тот же вопрос здесь , недостаточно Republi c кредитов

Я попытался использовать yaml cmd, как было предложено @Anthon, но не защищает желаемый результат и понятия не имею, как начать изменять код yaml from-csv, я действительно изучил код в "yaml_cmd.py"

Любые указания будут оценены. Попытка преобразовать большой файл csv в формат hosts.yaml для использования с Nornir.

Формат CSV:

Display-Name,IP-Address,Serial-Number,Machine-Type,IOS-Version,SiteCode2,Group
Device1,1.1.1.1,123456790,Cisco,12.x,Site1,US
Device2,1.1.1.2,123456789,Cisco,13.x,Site2,US

Вывод Yaml from-csv:

 - "\uFEFFDisplay-Name"
  - IP-Address
  - Serial-Number
  - Machine-Type
  - IOS-Version
  - SiteCode2
  - Product-Edition
  - Product-Version
- - Device1
  - 1.1.1.1
  - 123456790
  - Cisco
  - 12.x
  - Site1
  - US
- - Device2
  - 1.1.1.2
  - 123456789
  - Cisco
  - 13.x
  - Site2
  - US

Желаемый результат будет:

Device1:
    hostname: 1.1.1.1
    platform: Cisco
    groups:
        - US
    data:
        site: Site1
        SN: 123456790
        version: 12.x
Device2:
    hostname: 1.1.1.2
    platform: Cisco
    groups:
        - US
    data:
        site: Site2
        SN: 123456789
        version: 13.x

1 Ответ

0 голосов
/ 12 мая 2020

Ну, это некрасиво, но сработало

# Import the csv library
import csv

# Open the sample csv file and print it to screen
with open("test-file.csv") as f:
    print (f.read())

# Open the sample csv file, and create a csv.reader object
with open("test-file.csv") as f:
    csv_2_yaml = csv.reader(f)

    # Loop over each row in csv and leverage the data in yaml
    for row in csv_2_yaml:
        device = row[0]
        ip = row[1]
        SN = row[2]
        platform = row[3]
        version = row[4]
        site = row[5]
        group = row[6]
        print ("{0}:\n    hostname: {1}\n    platform: {2}\n    group:\n        - {3}\n    data:\n        site: {4}\n        SN: {5}\n        version: {6}\n"
        .format(device, ip, platform, group, site, SN, version))

Результат:

Display-Name,IP-Address,Serial-Number,Machine-Type,IOS-Version,SiteCode2,Group
Device1,1.1.1.1,123456790,Cisco,12.x,Site1,US
Device2,1.1.1.2,123456789,Cisco,13.x,Site2,US
Display-Name:
    hostname: IP-Address
    platform: Machine-Type
    group:
        - Group
    data:
        site: SiteCode2
        SN: Serial-Number
        version: IOS-Version

Device1:
    hostname: 1.1.1.1
    platform: Cisco
    group:
        - US
    data:
        site: Site1
        SN: 123456790
        version: 12.x

Device2:
    hostname: 1.1.1.2
    platform: Cisco
    group:
        - US
    data:
        site: Site2
        SN: 123456789
        version: 13.x
...