В результате выполнения задания вы:
- познакомитесь с синтаксисом Python;
- узнаете, для каких типов задач его можно использовать;
- воспользуетесь несколькими модулями для работы с ОС.
- Установите Python 3 любой версии.
- Скопируйте в свой .md-файл содержимое этого файла, исходники можно посмотреть здесь.
- Заполните недостающие части документа решением задач — заменяйте
???
, остальное в шаблоне не меняйте, чтобы не сломать форматирование текста, подсветку синтаксиса. Вместо логов можно вставить скриншоты по желанию. - Для проверки домашнего задания в личном кабинете прикрепите и отправьте ссылку на решение в виде md-файла в вашем репозитории.
- Любые вопросы по выполнению заданий задавайте в чате учебной группы или в разделе «Вопросы по заданию» в личном кабинете.
Есть скрипт:
#!/usr/bin/env python3
a = 1
b = '2'
c = a + b
Вопрос | Ответ |
---|---|
Какое значение будет присвоено переменной c ? |
??? |
Как получить для переменной c значение 12? |
??? |
Как получить для переменной c значение 3? |
??? |
Мы устроились на работу в компанию, где раньше уже был DevOps-инженер. Он написал скрипт, позволяющий узнать, какие файлы модифицированы в репозитории относительно локальных изменений. Этим скриптом недовольно начальство, потому что в его выводе есть не все изменённые файлы, а также непонятен полный путь к директории, где они находятся.
Как можно доработать скрипт ниже, чтобы он исполнял требования вашего руководителя?
#!/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
???
???
Доработать скрипт выше так, чтобы он не только мог проверять локальный репозиторий в текущей директории, но и умел воспринимать путь к репозиторию, который мы передаём, как входной параметр. Мы точно знаем, что начальство будет проверять работу этого скрипта в директориях, которые не являются локальными репозиториями.
???
???
Наша команда разрабатывает несколько веб-сервисов, доступных по HTTPS. Мы точно знаем, что на их стенде нет никакой балансировки, кластеризации, за DNS прячется конкретный IP сервера, где установлен сервис.
Проблема в том, что отдел, занимающийся нашей инфраструктурой, очень часто меняет нам сервера, поэтому IP меняются примерно раз в неделю, при этом сервисы сохраняют за собой DNS-имена. Это бы совсем никого не беспокоило, если бы несколько раз сервера не уезжали в такой сегмент сети нашей компании, который недоступен для разработчиков.
Мы хотим написать скрипт, который:
- опрашивает веб-сервисы;
- получает их IP;
- выводит информацию в стандартный вывод в виде: <URL сервиса> - <его IP>.
Также должна быть реализована возможность проверки текущего IP сервиса c его IP из предыдущей проверки. Если проверка будет провалена — оповестить об этом в стандартный вывод сообщением: [ERROR] <URL сервиса> IP mismatch: <старый IP> <Новый IP>. Будем считать, что наша разработка реализовала сервисы: drive.google.com
, mail.google.com
, google.com
.
???
???
Это самостоятельное задание, его выполнение необязательно.
Так получилось, что мы очень часто вносим правки в конфигурацию своей системы прямо на сервере. Но так как вся наша команда разработки держит файлы конфигурации в GitHub и пользуется Gitflow, то нам приходится каждый раз:
- переносить архив с нашими изменениями с сервера на наш локальный компьютер;
- формировать новую ветку;
- коммитить в неё изменения;
- создавать pull request (PR);
- и только после выполнения Merge мы наконец можем официально подтвердить, что новая конфигурация применена.
Мы хотим максимально автоматизировать всю цепочку действий. Для этого:
- Нужно написать скрипт, который будет в директории с локальным репозиторием обращаться по API к GitHub, создавать PR для вливания текущей выбранной ветки в master с сообщением, которое мы вписываем в первый параметр при обращении к py-файлу (сообщение не может быть пустым).
- При желании можно добавить к указанному функционалу создание новой ветки, commit и push в неё изменений конфигурации.
- С директорией локального репозитория можно делать всё, что угодно.
- Также принимаем во внимание, что Merge Conflict у нас отсутствуют, и их точно не будет при push как в свою ветку, так и при слиянии в master.
Важно получить конечный результат с созданным PR, в котором применяются наши изменения.
???
???
В личном кабинете отправлена ссылка на .md-файл в вашем репозитории.
Зачёт:
- выполнены все задания;
- ответы даны в развёрнутой форме;
- приложены соответствующие скриншоты и файлы проекта;
- в выполненных заданиях нет противоречий и нарушения логики.
На доработку:
- задание выполнено частично или не выполнено вообще;
- в логике выполнения заданий есть противоречия и существенные недостатки.
Обязательными являются задачи без звёздочки. Их выполнение необходимо для получения зачёта и диплома о профессиональной переподготовке.
Задачи со звёздочкой (*) являются дополнительными или задачами повышенной сложности. Они необязательные, но их выполнение поможет лучше разобраться в теме.