mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-25 23:32:37 +03:00
add homework 4.2
This commit is contained in:
@@ -18,4 +18,5 @@
|
|||||||
* [3.7. Компьютерные сети, лекция 2](/src/homework/3.7)
|
* [3.7. Компьютерные сети, лекция 2](/src/homework/3.7)
|
||||||
* [3.8. Компьютерные сети, лекция 3](/src/homework/3.8)
|
* [3.8. Компьютерные сети, лекция 3](/src/homework/3.8)
|
||||||
* [3.9. Элементы безопасности информационных систем](/src/homework/3.9)
|
* [3.9. Элементы безопасности информационных систем](/src/homework/3.9)
|
||||||
* [4.1. Командная оболочка Bash: Практические навыки](/src/homework/4.1/)
|
* [4.1. Командная оболочка Bash: Практические навыки](/src/homework/4.1)
|
||||||
|
* [4.2. Использование Python для решения типовых DevOps задач](/src/homework/4,2)
|
||||||
|
|||||||
99
src/homework/4.2/readme.md
Normal file
99
src/homework/4.2/readme.md
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
Выполнение [домашнего задания](https://github.com/netology-code/sysadm-homeworks/blob/devsys10/04-script-02-py/README.md)
|
||||||
|
по теме "4.2. Использование Python для решения типовых DevOps задач".
|
||||||
|
|
||||||
|
## Q/A
|
||||||
|
|
||||||
|
### Обязательная задача 1
|
||||||
|
|
||||||
|
Есть скрипт:
|
||||||
|
```python
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
a = 1
|
||||||
|
b = '2'
|
||||||
|
c = a + b
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Вопросы:
|
||||||
|
| Вопрос | Ответ |
|
||||||
|
| ------------- | ------------- |
|
||||||
|
| Какое значение будет присвоено переменной `c`? | ??? |
|
||||||
|
| Как получить для переменной `c` значение 12? | ??? |
|
||||||
|
| Как получить для переменной `c` значение 3? | ??? |
|
||||||
|
|
||||||
|
### Обязательная задача 2
|
||||||
|
Мы устроились на работу в компанию, где раньше уже был DevOps Engineer. Он написал скрипт, позволяющий узнать, какие файлы модифицированы в репозитории, относительно локальных изменений. Этим скриптом недовольно начальство, потому что в его выводе есть не все изменённые файлы, а также непонятен полный путь к директории, где они находятся. Как можно доработать скрипт ниже, чтобы он исполнял требования вашего руководителя?
|
||||||
|
|
||||||
|
```python
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
bash_command = ["cd ~/netology/sysadm-homeworks", "git status"]
|
||||||
|
result_os = os.popen(' && '.join(bash_command)).read()
|
||||||
|
is_change = False
|
||||||
|
for result in result_os.split('\n'):
|
||||||
|
if result.find('modified') != -1:
|
||||||
|
prepare_result = result.replace('\tmodified: ', '')
|
||||||
|
print(prepare_result)
|
||||||
|
break
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Ваш скрипт:
|
||||||
|
```python
|
||||||
|
???
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Вывод скрипта при запуске при тестировании:
|
||||||
|
```
|
||||||
|
???
|
||||||
|
```
|
||||||
|
|
||||||
|
### Обязательная задача 3
|
||||||
|
1. Доработать скрипт выше так, чтобы он мог проверять не только локальный репозиторий в текущей директории, а также умел воспринимать путь к репозиторию, который мы передаём как входной параметр. Мы точно знаем, что начальство коварное и будет проверять работу этого скрипта в директориях, которые не являются локальными репозиториями.
|
||||||
|
|
||||||
|
#### Ваш скрипт:
|
||||||
|
```python
|
||||||
|
???
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Вывод скрипта при запуске при тестировании:
|
||||||
|
```
|
||||||
|
???
|
||||||
|
```
|
||||||
|
|
||||||
|
### Обязательная задача 4
|
||||||
|
1. Наша команда разрабатывает несколько веб-сервисов, доступных по http. Мы точно знаем, что на их стенде нет никакой балансировки, кластеризации, за DNS прячется конкретный IP сервера, где установлен сервис. Проблема в том, что отдел, занимающийся нашей инфраструктурой очень часто меняет нам сервера, поэтому IP меняются примерно раз в неделю, при этом сервисы сохраняют за собой DNS имена. Это бы совсем никого не беспокоило, если бы несколько раз сервера не уезжали в такой сегмент сети нашей компании, который недоступен для разработчиков. Мы хотим написать скрипт, который опрашивает веб-сервисы, получает их IP, выводит информацию в стандартный вывод в виде: <URL сервиса> - <его IP>. Также, должна быть реализована возможность проверки текущего IP сервиса c его IP из предыдущей проверки. Если проверка будет провалена - оповестить об этом в стандартный вывод сообщением: [ERROR] <URL сервиса> IP mismatch: <старый IP> <Новый IP>. Будем считать, что наша разработка реализовала сервисы: `drive.google.com`, `mail.google.com`, `google.com`.
|
||||||
|
|
||||||
|
#### Ваш скрипт:
|
||||||
|
```python
|
||||||
|
???
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Вывод скрипта при запуске при тестировании:
|
||||||
|
```
|
||||||
|
???
|
||||||
|
```
|
||||||
|
|
||||||
|
### Дополнительное задание (со звездочкой*) - необязательно к выполнению
|
||||||
|
|
||||||
|
Так получилось, что мы очень часто вносим правки в конфигурацию своей системы прямо на сервере.
|
||||||
|
Но так как вся наша команда разработки держит файлы конфигурации в github и пользуется gitflow,
|
||||||
|
то нам приходится каждый раз переносить архив с нашими изменениями с сервера на наш локальный компьютер,
|
||||||
|
формировать новую ветку, коммитить в неё изменения, создавать pull request (PR) и только после выполнения Merge мы наконец можем официально подтвердить,
|
||||||
|
что новая конфигурация применена. Мы хотим максимально автоматизировать всю цепочку действий.
|
||||||
|
Для этого нам нужно написать скрипт, который будет в директории с локальным репозиторием обращаться по API к github,
|
||||||
|
создавать PR для вливания текущей выбранной ветки в master с сообщением, которое мы вписываем в первый параметр при обращении к py-файлу (сообщение не может быть пустым).
|
||||||
|
При желании, можно добавить к указанному функционалу создание новой ветки, commit и push в неё изменений конфигурации.
|
||||||
|
С директорией локального репозитория можно делать всё, что угодно.
|
||||||
|
Также, принимаем во внимание, что Merge Conflict у нас отсутствуют и их точно не будет при push, как в свою ветку, так и при слиянии в master.
|
||||||
|
Важно получить конечный результат с созданным PR, в котором применяются наши изменения.
|
||||||
|
|
||||||
|
#### Ваш скрипт:
|
||||||
|
```python
|
||||||
|
???
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Вывод скрипта при запуске при тестировании:
|
||||||
|
```
|
||||||
|
???
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user