Files
netology-devops/src/homework/04-script/4.3/readme.md

4.0 KiB
Raw Blame History

Выполнение домашнего задания по теме "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 файле.

Ваш скрипт:

script

#!/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