Giter Club home page Giter Club logo

dev-17_yaml_json-yakovlev_vs's Introduction

Домашнее задание к занятию "4.3. Языки разметки JSON и YAML" - dev-17_yaml_json-yakovlev_vs

Обязательная задача 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
            }
        ]
    }

Нужно найти и исправить все ошибки, которые допускает наш сервис

Решение

  • 1 строка - неэкранированный спецсимвол \t (горизонтальная табуляция)
  • 2 строка - пропущен пробел между : и [ (открытие массива)
  • 5 строка - неверная запись ip адреса?
  • 6 строка - после скобки нужна запятая
  • 9 строка - пропущены закрывающие кавычки ip" и значения

Исправленный код:

{
 "info" : "Sample JSON output from our service\\t",
  "elements" : [
    {
     "name" : "first",
     "type" : "server",
     "ip" : "71.75.22.42" 
    },
    {
     "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 os
import json
import yaml
import time


site_list = ['drive.google.com', 'mail.google.com', 'google.com']
site_dict = {}

def check_list_of_sites(site_list, site_dict):

    for site_url in site_list:
        site_dict=check_site_dns(site_url, site_dict)
    return site_dict


def check_site_dns(site_url, site_dict):
    site_new_ip = []


    result_os = os.popen(f'dig +short {site_url} | grep  -E \'[0-9]\'')

    for result in result_os:
        # For any ip delete \n
        site_new_ip.append(result.replace("\n",""))

    print('site_new_ip: ', site_new_ip)

    if site_dict.get(site_url) != None:

        site_old_ip = site_dict[site_url]
        i = 0
        ip_changed = False
        while i < len(site_old_ip):
            if site_old_ip[i] == site_new_ip[i]:
                print(f'{site_url} - {site_old_ip[i]}.')
            else:
                print(f'[ERROR] {site_url} IP mismatch: {site_old_ip[i]} {site_new_ip[i]}.')                
                ip_changed = True
            i = i + 1

    else:
        #If it's first execution
        site_dict[site_url] = site_new_ip
        print('site_dict==', site_dict)
        ip_changed = True

    if ip_changed == True:
        with open("servers_ip.json", "w") as fp_json:
            json.dump(site_dict, fp_json, indent=2)
        with open("servers_ip.yaml", "w") as fp_yaml:
            yaml.dump(site_dict, fp_yaml, explicit_start=True, explicit_end=True)

    return site_dict

while True:
    site_dict = check_list_of_sites(site_list, site_dict)
    print("site_dict==", site_dict)
    time.sleep(3)

Вывод скрипта при запуске при тестировании:

[root@Git-SentOS-8 ~]# python3 check_addr_to_json-yaml.py
site_new_ip:  ['142.250.150.194']
site_dict== {'drive.google.com': ['142.250.150.194']}
site_new_ip:  ['64.233.161.17', '64.233.161.19', '64.233.161.83', '64.233.161.18']
site_dict== {'drive.google.com': ['142.250.150.194'], 'mail.google.com': ['64.233.161.17', '64.233.161.19', '64.233.161.83', '64.233.161.18']}
site_new_ip:  ['74.125.205.102', '74.125.205.139', '74.125.205.113', '74.125.205.100', '74.125.205.101', '74.125.205.138']
site_dict== {'drive.google.com': ['142.250.150.194'], 'mail.google.com': ['64.233.161.17', '64.233.161.19', '64.233.161.83', '64.233.161.18'], 'google.com': ['74.125.205.102', '74.125.205.139', '74.125.205.113', '74.125.205.100', '74.125.205.101', '74.125.205.138']}
site_dict== {'drive.google.com': ['142.250.150.194'], 'mail.google.com': ['64.233.161.17', '64.233.161.19', '64.233.161.83', '64.233.161.18'], 'google.com': ['74.125.205.102', '74.125.205.139', '74.125.205.113', '74.125.205.100', '74.125.205.101', '74.125.205.138']}
site_new_ip:  ['142.250.150.194']
drive.google.com - 142.250.150.194.
site_new_ip:  ['64.233.161.19', '64.233.161.83', '64.233.161.18', '64.233.161.17']
[ERROR] mail.google.com IP mismatch: 64.233.161.17 64.233.161.19.
[ERROR] mail.google.com IP mismatch: 64.233.161.19 64.233.161.83.
[ERROR] mail.google.com IP mismatch: 64.233.161.83 64.233.161.18.
[ERROR] mail.google.com IP mismatch: 64.233.161.18 64.233.161.17.
site_new_ip:  ['74.125.205.139', '74.125.205.113', '74.125.205.100', '74.125.205.101', '74.125.205.138', '74.125.205.102']
[ERROR] google.com IP mismatch: 74.125.205.102 74.125.205.139.
[ERROR] google.com IP mismatch: 74.125.205.139 74.125.205.113.
[ERROR] google.com IP mismatch: 74.125.205.113 74.125.205.100.
[ERROR] google.com IP mismatch: 74.125.205.100 74.125.205.101.
[ERROR] google.com IP mismatch: 74.125.205.101 74.125.205.138.
[ERROR] google.com IP mismatch: 74.125.205.138 74.125.205.102.
site_dict== {'drive.google.com': ['142.250.150.194'], 'mail.google.com': ['64.233.161.17', '64.233.161.19', '64.233.161.83', '64.233.161.18'], 'google.com': ['74.125.205.102', '74.125.205.139', '74.125.205.113', '74.125.205.100', '74.125.205.101', '74.125.205.138']}
site_new_ip:  ['142.250.150.194']
drive.google.com - 142.250.150.194.
site_new_ip:  ['64.233.161.83', '64.233.161.18', '64.233.161.17', '64.233.161.19']
[ERROR] mail.google.com IP mismatch: 64.233.161.17 64.233.161.83.
[ERROR] mail.google.com IP mismatch: 64.233.161.19 64.233.161.18.
[ERROR] mail.google.com IP mismatch: 64.233.161.83 64.233.161.17.
[ERROR] mail.google.com IP mismatch: 64.233.161.18 64.233.161.19.
site_new_ip:  ['74.125.205.113', '74.125.205.100', '74.125.205.101', '74.125.205.138', '74.125.205.102', '74.125.205.139']
[ERROR] google.com IP mismatch: 74.125.205.102 74.125.205.113.
[ERROR] google.com IP mismatch: 74.125.205.139 74.125.205.100.
[ERROR] google.com IP mismatch: 74.125.205.113 74.125.205.101.
[ERROR] google.com IP mismatch: 74.125.205.100 74.125.205.138.
[ERROR] google.com IP mismatch: 74.125.205.101 74.125.205.102.
[ERROR] google.com IP mismatch: 74.125.205.138 74.125.205.139.
site_dict== {'drive.google.com': ['142.250.150.194'], 'mail.google.com': ['64.233.161.17', '64.233.161.19', '64.233.161.83', '64.233.161.18'], 'google.com': ['74.125.205.102', '74.125.205.139', '74.125.205.113', '74.125.205.100', '74.125.205.101', '74.125.205.138']}
site_new_ip:  ['142.250.150.194']
drive.google.com - 142.250.150.194.
site_new_ip:  ['64.233.161.18', '64.233.161.17', '64.233.161.19', '64.233.161.83']
[ERROR] mail.google.com IP mismatch: 64.233.161.17 64.233.161.18.
[ERROR] mail.google.com IP mismatch: 64.233.161.19 64.233.161.17.
[ERROR] mail.google.com IP mismatch: 64.233.161.83 64.233.161.19.
[ERROR] mail.google.com IP mismatch: 64.233.161.18 64.233.161.83.
site_new_ip:  ['74.125.205.100', '74.125.205.101', '74.125.205.138', '74.125.205.102', '74.125.205.139', '74.125.205.113']
[ERROR] google.com IP mismatch: 74.125.205.102 74.125.205.100.
[ERROR] google.com IP mismatch: 74.125.205.139 74.125.205.101.
[ERROR] google.com IP mismatch: 74.125.205.113 74.125.205.138.
[ERROR] google.com IP mismatch: 74.125.205.100 74.125.205.102.
[ERROR] google.com IP mismatch: 74.125.205.101 74.125.205.139.
[ERROR] google.com IP mismatch: 74.125.205.138 74.125.205.113.
site_dict== {'drive.google.com': ['142.250.150.194'], 'mail.google.com': ['64.233.161.17', '64.233.161.19', '64.233.161.83', '64.233.161.18'], 'google.com': ['74.125.205.102', '74.125.205.139', '74.125.205.113', '74.125.205.100', '74.125.205.101', '74.125.205.138']}
site_new_ip:  ['142.250.150.194']
drive.google.com - 142.250.150.194.
site_new_ip:  ['64.233.161.17', '64.233.161.19', '64.233.161.83', '64.233.161.18']
mail.google.com - 64.233.161.17.
mail.google.com - 64.233.161.19.
mail.google.com - 64.233.161.83.
mail.google.com - 64.233.161.18.
site_new_ip:  ['74.125.205.101', '74.125.205.138', '74.125.205.102', '74.125.205.139', '74.125.205.113', '74.125.205.100']
[ERROR] google.com IP mismatch: 74.125.205.102 74.125.205.101.
[ERROR] google.com IP mismatch: 74.125.205.139 74.125.205.138.
[ERROR] google.com IP mismatch: 74.125.205.113 74.125.205.102.
[ERROR] google.com IP mismatch: 74.125.205.100 74.125.205.139.
[ERROR] google.com IP mismatch: 74.125.205.101 74.125.205.113.
[ERROR] google.com IP mismatch: 74.125.205.138 74.125.205.100.
site_dict== {'drive.google.com': ['142.250.150.194'], 'mail.google.com': ['64.233.161.17', '64.233.161.19', '64.233.161.83', '64.233.161.18'], 'google.com': ['74.125.205.102', '74.125.205.139', '74.125.205.113', '74.125.205.100', '74.125.205.101', '74.125.205.138']}
site_new_ip:  ['142.250.150.194']
drive.google.com - 142.250.150.194.
site_new_ip:  ['64.233.161.19', '64.233.161.83', '64.233.161.18', '64.233.161.17']
[ERROR] mail.google.com IP mismatch: 64.233.161.17 64.233.161.19.
[ERROR] mail.google.com IP mismatch: 64.233.161.19 64.233.161.83.
[ERROR] mail.google.com IP mismatch: 64.233.161.83 64.233.161.18.
[ERROR] mail.google.com IP mismatch: 64.233.161.18 64.233.161.17.
site_new_ip:  ['74.125.205.138', '74.125.205.102', '74.125.205.139', '74.125.205.113', '74.125.205.100', '74.125.205.101']
[ERROR] google.com IP mismatch: 74.125.205.102 74.125.205.138.
[ERROR] google.com IP mismatch: 74.125.205.139 74.125.205.102.
[ERROR] google.com IP mismatch: 74.125.205.113 74.125.205.139.
[ERROR] google.com IP mismatch: 74.125.205.100 74.125.205.113.
[ERROR] google.com IP mismatch: 74.125.205.101 74.125.205.100.
[ERROR] google.com IP mismatch: 74.125.205.138 74.125.205.101.
site_dict== {'drive.google.com': ['142.250.150.194'], 'mail.google.com': ['64.233.161.17', '64.233.161.19', '64.233.161.83', '64.233.161.18'], 'google.com': ['74.125.205.102', '74.125.205.139', '74.125.205.113', '74.125.205.100', '74.125.205.101', '74.125.205.138']}
site_new_ip:  ['142.250.150.194']
drive.google.com - 142.250.150.194.
site_new_ip:  ['64.233.161.83', '64.233.161.18', '64.233.161.17', '64.233.161.19']
[ERROR] mail.google.com IP mismatch: 64.233.161.17 64.233.161.83.
[ERROR] mail.google.com IP mismatch: 64.233.161.19 64.233.161.18.
[ERROR] mail.google.com IP mismatch: 64.233.161.83 64.233.161.17.
[ERROR] mail.google.com IP mismatch: 64.233.161.18 64.233.161.19.
site_new_ip:  ['74.125.205.102', '74.125.205.139', '74.125.205.113', '74.125.205.100', '74.125.205.101', '74.125.205.138']
google.com - 74.125.205.102.
google.com - 74.125.205.139.
google.com - 74.125.205.113.
google.com - 74.125.205.100.
google.com - 74.125.205.101.
google.com - 74.125.205.138.
site_dict== {'drive.google.com': ['142.250.150.194'], 'mail.google.com': ['64.233.161.17', '64.233.161.19', '64.233.161.83', '64.233.161.18'], 'google.com': ['74.125.205.102', '74.125.205.139', '74.125.205.113', '74.125.205.100', '74.125.205.101', '74.125.205.138']}
site_new_ip:  ['142.250.150.194']
drive.google.com - 142.250.150.194.
site_new_ip:  ['64.233.161.18', '64.233.161.17', '64.233.161.19', '64.233.161.83']
[ERROR] mail.google.com IP mismatch: 64.233.161.17 64.233.161.18.
[ERROR] mail.google.com IP mismatch: 64.233.161.19 64.233.161.17.
[ERROR] mail.google.com IP mismatch: 64.233.161.83 64.233.161.19.
[ERROR] mail.google.com IP mismatch: 64.233.161.18 64.233.161.83.
site_new_ip:  ['74.125.205.139', '74.125.205.113', '74.125.205.100', '74.125.205.101', '74.125.205.138', '74.125.205.102']
[ERROR] google.com IP mismatch: 74.125.205.102 74.125.205.139.
[ERROR] google.com IP mismatch: 74.125.205.139 74.125.205.113.
[ERROR] google.com IP mismatch: 74.125.205.113 74.125.205.100.
[ERROR] google.com IP mismatch: 74.125.205.100 74.125.205.101.
[ERROR] google.com IP mismatch: 74.125.205.101 74.125.205.138.
[ERROR] google.com IP mismatch: 74.125.205.138 74.125.205.102.
site_dict== {'drive.google.com': ['142.250.150.194'], 'mail.google.com': ['64.233.161.17', '64.233.161.19', '64.233.161.83', '64.233.161.18'], 'google.com': ['74.125.205.102', '74.125.205.139', '74.125.205.113', '74.125.205.100', '74.125.205.101', '74.125.205.138']}

json-файл(ы), который(е) записал мой скрипт:

[root@Git-SentOS-8 ~]# cat servers_ip.json
{
  "drive.google.com": [
    "142.250.150.194"
  ],
  "mail.google.com": [
    "64.233.161.17",
    "64.233.161.19",
    "64.233.161.83",
    "64.233.161.18"
  ],
  "google.com": [
    "74.125.205.102",
    "74.125.205.139",
    "74.125.205.113",
    "74.125.205.100",
    "74.125.205.101",
    "74.125.205.138"
  ]

yml-файл(ы), который(е) записал мой скрипт:

[root@Git-SentOS-8 ~]# cat servers_ip.yaml
---
drive.google.com: [142.250.150.194]
mail.google.com: [64.233.161.17, 64.233.161.19, 64.233.161.83, 64.233.161.18]
google.com: [74.125.205.102, 74.125.205.139, 74.125.205.113, 74.125.205.100, 74.125.205.101,
  74.125.205.138]
...

dev-17_yaml_json-yakovlev_vs's People

Contributors

valdem88 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.