Работа с локациями осуществляется с помощью программных средств DCImanager 6 и системы управления конфигурациями Ansible. Для работы Ansible использует сценарии (playbook) — yaml-файлы, описывающие набор действий для выполнения. Подробнее об Ansible см. в официальной документации.
Для выполнения операций с локациями DCImanager 6 использует API-функцию location. Подробнее о работе с локациями через API см. DCImanager 6 API.
В процессе выполнения операций DCImanager 6 присваивает локациям внутренний статус. От статуса локации зависит возможность выполнения с ней дальнейших действий.
Создание локации
При создании локации DCImanager 6:
- Делает запись о создании в базе данных (БД).
- Проверяет возможность подключения к локации.
- Осуществляет сбор информации с локации.
- Осуществляет предварительную настройку и подготовку локации.
Для создаваемой локации DCImanager 6 устанавливает статус CREATED.
Чтобы проверить возможность подключения к локации, DCImanager 6 производит попытку SSH-соединения с помощью ключа /opt/ispsystem/dci/etc/.ssh/dci.1. Если подключение завершилось с ошибкой, DCImanager 6 будет пытаться соединиться с помощью пароля. В этом случае при успешном подключении DCImanager 6 добавит новый публичный ключ из файла /opt/ispsystem/dci/etc/.ssh/dci.1.pub. Если подключиться к локации не удалось, для неё устанавливается статус CHECK_FAILED.
Сбор информации с локации осуществляется с помощью модуля setup системы Ansible. Для этого Ansible выполняет сценарий /opt/ispsystem/dci/etc/playbooks/location_info.yml. Если при выполнении сценария возникает ошибка, для локации устанавливается статус CHECK_FAILED.
Предварительная настройка локации выполняется Ansible по сценарию /opt/ispsystem/dci/etc/playbooks/location_presetup.yml. На этом этапе Ansible:
- Подключает дополнительный репозиторий epel.
- Устанавливает программное обеспечение (ПО) libselinux-python, net-snmp, python36, python36-libs, ipmitool, rsync, easysnmp.
- Отключает систему SELinux.
- Копирует на локацию скрипт repeater.py. Скрипт отвечает за взаимодействие с сетевыми коммутаторами по протоколу SNMP.
Если предварительная настройка завершится с ошибкой, для локации устанавливается статус CHECK_FAILED.
Настройка локации
При настройке локации DCImanager 6:
- Проверяет параметры, заданные пользователем.
- Выполняет задачи настройки локации.
- Устанавливает и настраивает ПО на локации.
Проверка локации производится по следующим параметрам:
- Наличие записи о локации в БД. При отсутствии записи будет возвращена ошибка с кодом 8000 "Location not found".
- Статус:
- при статусе CREATED будет возвращена ошибка с кодом 8055 "Location is still being created";
- при статусе CHECK_FAILED будет возвращена ошибка с кодом 8056 "Location checking failed";
- при статусе SETUP будет возвращена ошибка с кодом 8059 "Location is already setting up".
- Список сетевых интерфейсов для DHCP:
- при отсутствии на локации какого-либо интерфейса из списка будет возвращена ошибка с кодом 8058 "Location has no such interface";
- при пустом списке будет возвращена ошибка с кодом 8057 "DHCP interfaces not set".
- Наличие на сетевом интерфейсе IP-адреса, заданного для nginx. Если адрес отсутствует, будет возвращена ошибка с кодом 8060 "Location has no such address".
После проверки DCImanager 6 сохраняет параметры в БД и устанавливает для локации статус SETUP.
Для установки и настройки ПО на локации Ansible выполняет действия из сценария /opt/ispsystem/dci/etc/playbooks/location_setup.yml:
- Подключает дополнительный репозиторий Docker-ce.
- Настраивает службу NFS.
- Устанавливает ПО docker.
- Удаляет пакеты kea и kea-libs, если они были установлены.
- Производит загрузку, сборку и запуск docker-контейнеров ПО локации.
- Добавляет сетевые подключения, используемые docker-контейнерами, в список исключений для службы firewalld.
- Добавляет службы docker и firewalld в автозапуск.
Редактирование локации
При редактировании локации DCImanager 6:
- Проверяет параметры, заданные пользователем. Если эти параметры отличаются от сохранённых в БД или у локации статус CHECK_FAILED, повторяет действия, выполняемые при создании локации.
- Заводит для локации пространство IP-адресов, если оно не было выделено ранее.
Удаление локации
При удалении локации DCImanager 6:
- Проверяет её статус. При статусе CREATED или SETUP будет возвращена ошибка с кодом 8066 "Location status is not OK".
- Выполняет поиск серверов, коммутаторов и PDU в стойках, привязанных к локации. Если оборудование найдено, будет возвращена ошибка с кодом 8054 "Location cannot be removed".
- Удаляет пространство IP-адресов локации, если оно было заведено.
Логирование
Лог-файлы работы с локацией вы можете посмотреть на сервере с DCImanager 6 в контейнере dci_back:
- /var/log/dci_1_writer.log — запуск задач для создания и настройки локации;
- /var/log/dci_locationctl.log — проверка подключения к локации по SSH;
- /var/log/dci_ansiblectl_location_<id локации>.log — работа Ansible;
- /var/log/ansible.log — выполнение сценариев Ansible.
Для перехода в контейнер подключитесь к серверу с DCImanager 6 по SSH и выполните команду:
docker exec -it dci_back sh