mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-25 15:22:37 +03:00
4.0 KiB
4.0 KiB
Выполнение домашнего задания по теме "4.3. Языки разметки JSON и YAML".
Q/A
Обязательная задача 1
Мы выгрузили JSON, который получили через API запрос к нашему сервису:
{ "info" : "Sample JSON output from our service\t",
"elements" :[
{ "name" : "first",
"type" : "server",
"ip" : 7175
}
{ "name" : "second",
"type" : "proxy",
"ip : 71.78.22.43
}
]
}
Нужно найти и исправить все ошибки, которые допускает наш сервис.
Решение:
{
"info": "Sample JSON output from our service\t",
"elements": [
{
"name": "first",
"type": "server",
"ip": 7175
},
{
"name": "second",
"type": "proxy",
"ip": "71.78.22.43"
}
]
}
Обязательная задача 2
В прошлый рабочий день мы создавали скрипт, позволяющий опрашивать веб-сервисы и получать их IP.
К уже реализованному функционалу нам нужно добавить возможность записи JSON и YAML файлов, описывающих наши сервисы.
Формат записи JSON по одному сервису: { "имя сервиса" : "его IP"}.
Формат записи YAML по одному сервису: - имя сервиса: его IP.
Если в момент исполнения скрипта меняется IP у сервиса - он должен так же поменяться в yml и json файле.
Ваш скрипт:
#!/usr/bin/env python3
import json
import io
import os
import socket
import yaml
hosts_list = {
"drive.google.com",
"mail.google.com",
"google.com"
}
filename_json = 'hosts.json'
filename_yaml = 'hosts.yaml'
if not os.path.exists(filename_json):
os.mknod(filename_json)
if not os.path.exists(filename_yaml):
os.mknod(filename_yaml)
file_json = None
file_yaml = None
try:
file_json = open(filename_json, 'r+')
file_yaml = open(filename_yaml, 'r+')
json_str = file_json.read()
try:
json_obj = json.load(io.StringIO(json_str))
except BaseException as err:
json_obj = dict({})
print('error: {}'.format(err))
for hostname in hosts_list:
ip_addr = socket.gethostbyname(hostname)
prev_ip_addr = json_obj.get(hostname)
if prev_ip_addr is None or prev_ip_addr == '':
prev_ip_addr = ip_addr
print('{} - {}'.format(hostname, ip_addr))
if ip_addr != prev_ip_addr:
print('[ERROR] {} IP mismatch: {} {}'.format(hostname, ip_addr, prev_ip_addr))
json_obj[hostname] = ip_addr
file_json.truncate(0)
file_json.seek(0)
file_json.write(json.dumps(json_obj))
file_yaml.truncate(0)
file_yaml.seek(0)
file_yaml.write(yaml.dump(json_obj))
except BaseException as err:
print('error {}'.format(err))
finally:
if file_json is not None:
file_json.close()
if file_yaml is not None:
file_yaml.close()
Вывод скрипта при запуске при тестировании:
./q2.py
error: Expecting value: line 1 column 1 (char 0)
mail.google.com - 64.233.162.17
google.com - 74.125.205.102
drive.google.com - 142.250.150.194
json-файл(ы), который(е) записал ваш скрипт:
{"mail.google.com": "64.233.162.17", "google.com": "74.125.205.102", "drive.google.com": "142.250.150.194"}
yml-файл(ы), который(е) записал ваш скрипт:
drive.google.com: 142.250.150.194
google.com: 74.125.205.102
mail.google.com: 64.233.162.17