dzbeda
dzbeda

Reputation: 303

Having a problem to parse Yaml file with python

I have the below section in YML file and I'm trying to read the IP address and hostname of the servers in order to verify that I don't have duplication (can see each IP once and each hostname)

I'm failing at the first stage while trying to ready the IP address. WIll be happy to get help with both reading and verify there is no duplication

Thank you

import yaml


with open(r'.\environment.yml') as file:
    environment = yaml.load(file, Loader=yaml.FullLoader)
print(environment ['server_details']['ip'])
YML File
server_details:
 - {ip: "{{ yum_repository.ip }}" , hostname: "{{ yum_repository.hostname }}"}
 - {ip: "{{ cloudera_managment_server.ip }}" , hostname: "{{ cloudera_managment_server.hostname }}"}
 - {ip: "{{ postgres_server.ip }}" , hostname: "{{ postgres_server.hostname }}"}
 - {ip: 10.201.51.30 , hostname: master1}
 - {ip: 10.201.51.31 , hostname: master2}
 - {ip: 10.201.51.32 , hostname: master3}
 - {ip: 10.201.51.36 , hostname: worker1}
 - {ip: 10.201.51.37 , hostname: worker2}
 - {ip: 10.201.51.38 , hostname: worker3}
 - {ip: 10.201.51.39 , hostname: kafka1}
 - {ip: 10.201.51.40 , hostname: kafka2}
 - {ip: 10.201.51.41 , hostname: kafka3}
 - {ip: 10.201.51.44 , hostname: gw1}

Upvotes: 1

Views: 353

Answers (1)

Boseong Choi
Boseong Choi

Reputation: 2596

As @AdamSmith mentioned, you should traverse(or index) list first.

import yaml


with open(r'.\environment.yml') as file:
    environment = yaml.load(file, Loader=yaml.FullLoader)
for server_detail in environment['server_details']:
    print(server_detail['ip'])

You can make it list, too

ip_list = [server_detail['ip'] for server_detail in environment['server_details']]

Upvotes: 1

Related Questions