Статья описывает взаимодействие серверов-локаций с платформой. Определения и описание локаций вы можете посмотреть в статье Локации. Общая информация.

Работа с локациями осуществляется с помощью программных средств DCImanager 6 и системы управления конфигурациями Ansible. Для работы Ansible использует сценарии (playbook) — yaml-файлы, описывающие набор действий для выполнения. Подробнее об Ansible см. в официальной документации.

Для выполнения операций с локациями DCImanager 6 использует API-функцию location. Подробнее о работе с локациями через API см. DCImanager 6 API.

В процессе выполнения операций DCImanager 6 присваивает локациям внутренний статус. От статуса локации зависит возможность выполнения с ней дальнейших действий.

Создание локации


При создании локации DCImanager 6:

  1. Делает запись о создании в базе данных (БД).
  2. Проверяет возможность подключения к локации.
  3. Осуществляет сбор информации с локации.
  4. Осуществляет предварительную настройку и подготовку локации.

Для создаваемой локации 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:

  1. Подключает дополнительный репозиторий epel.
  2. Устанавливает программное обеспечение (ПО) libselinux-python, net-snmp, python36, python36-libs, ipmitool, rsync, easysnmp.
  3. Отключает систему SELinux.
  4. Копирует на локацию скрипт repeater.py. Скрипт отвечает за взаимодействие с сетевыми коммутаторами по протоколу SNMP.

Если предварительная настройка завершится с ошибкой, для локации устанавливается статус CHECK_FAILED.

Настройка локации


При настройке локации DCImanager 6:

  1. Проверяет параметры, заданные пользователем.
  2. Выполняет задачи настройки локации.
  3. Устанавливает и настраивает ПО на локации.

Проверка локации производится по следующим параметрам:

  1. Наличие записи о локации в БД. При отсутствии записи будет возвращена ошибка с кодом 8000 "Location not found".
  2. Статус:
    • при статусе CREATED будет возвращена ошибка с кодом 8055 "Location is still being created";
    • при статусе CHECK_FAILED будет возвращена ошибка с кодом 8056 "Location checking failed";
    • при статусе SETUP будет возвращена ошибка с кодом 8059 "Location is already setting up".
  3. Список сетевых интерфейсов для DHCP:
    • при отсутствии на локации какого-либо интерфейса из списка будет возвращена ошибка с кодом 8058 "Location has no such interface";
    • при пустом списке будет возвращена ошибка с кодом 8057 "DHCP interfaces not set".
  4. Наличие на сетевом интерфейсе IP-адреса, заданного для nginx. Если адрес отсутствует, будет возвращена ошибка с кодом 8060 "Location has no such address".

После проверки DCImanager 6 сохраняет параметры в БД и устанавливает для локации статус SETUP.

Для установки и настройки ПО на локации Ansible выполняет действия из сценария /opt/ispsystem/dci/etc/playbooks/location_setup.yml:

  1. Подключает дополнительный репозиторий Docker-ce.
  2. Настраивает службу NFS.
  3. Устанавливает ПО docker.
  4. Удаляет пакеты kea и kea-libs, если они были установлены.
  5. Производит загрузку, сборку и запуск docker-контейнеров ПО локации.
  6. Добавляет сетевые подключения, используемые docker-контейнерами, в список исключений для службы firewalld.
  7. Добавляет службы docker и firewalld в автозапуск.

Редактирование локации


При редактировании локации DCImanager 6:

  1. Проверяет параметры, заданные пользователем. Если эти параметры отличаются от сохранённых в БД или у локации статус CHECK_FAILED, повторяет действия, выполняемые при создании локации.
  2. Заводит для локации пространство IP-адресов, если оно не было выделено ранее.

Удаление локации


При удалении локации DCImanager 6:

  1. Проверяет её статус. При статусе CREATED или SETUP будет возвращена ошибка с кодом 8066 "Location status is not OK".
  2. Выполняет поиск серверов, коммутаторов и PDU в стойках, привязанных к локации. Если оборудование найдено, будет возвращена ошибка с кодом 8054 "Location cannot be removed".
  3. Удаляет пространство 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
CODE