1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-MAAS

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
HACKING.rst 30 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 10.03.2025 20:18 9533e3a

Пробивка MAAS

Стиль программирования

MAAS использует анализаторы кода для Python, Go и Bash.

Выполните команду make lint, чтобы проверить наличие проблем/ошибок, и make format, чтобы автоматически реформатировать код.

Предварительные требования

Каноническая лицензионная сделка с вкладчиками

Этот шаг необходим только если вы планируете вернуть свои изменения обратно в основной проект.

Сначала вам потребуется launchpad-id. Вы можете получить его, создав аккаунт на Launchpad. Это позволит вам отслеживать проблемы, создавать свой собственный форк MAAS и отправлять Merge Proposals.

После создания вашего аккаунта, вы должны подписать `Каноническую лицензионную сделку с вкладчиками`_, поскольку Canonical не может использовать ваш вклад без явного разрешения.

Зависимости

Вы можете самостоятельно получить код MAAS с Launchpad, но Git делает это более удобным для получения последней версии кода. В первую очередь установите Git:

$ sudo apt-get install git

Затем перейдите в директорию, где хотите хранить код, и выполните:

$ git clone https://git.launchpad.net/maas && cd maas

MAAS зависит от Postgres, isc-dhcp, bind9 и многих других пакетов. Чтобы установить все необходимое для запуска и разработки MAAS, выполните::

$ make install-dependencies

Обратите внимание: это установит множество пакетов через apt install на вашей системе, через sudo. Возможно, вас попросят ввести пароль.

Это установит bind9. В результате будет работать дополнительный демон. Если вы разработчик и не планируете запускать BIND локально, вы можете выключить демона через sudo systemctl disable --now named.

Python-зависимости для разработки автоматически вытягиваются из PyPI в виртуальную среду, расположенную под .ve.

Работа с Git

Перед тем как начать делать изменения в коде, вы захотите настроить свою локальную копию репозитория lp:maas. Это включает создание своей копии репозитория и выполнение ваших изменений в ветках.

Во-первых, вы захотите переименовать удалённый репозиторий origin в upstream и создать новый origin в вашем пространстве имён.:

$ git remote rename origin upstream
$ git remote add origin git+ssh://{launchpad-id}@git.launchpad.net/~{launchpad-id}/maas

Теперь вы можете создать ветку и начать делать изменения.

$ git checkout -b новая_ветка

После того как вы сделали необходимые изменения, вам следует сделать коммит и отправить ветку на ваш источник.

$ git commit -m "Моё изменение" -a
$ git push origin новая_ветка

Теперь вы можете просмотреть эту ветку на Launchpad и предложить её репозиторию maas.

После объединения ветки и завершения работы с ней вы можете обновить свой репозиторий Git для удаления этой ветки.:

$ git fetch upstream
$ git checkout master
$ git merge upstream/master
$ git branch -d новая-ветка

Запуск тестов

Чтобы запустить весь набор тестов:

$ make test

Чтобы запустить тесты на более мелком уровне детализации:

$ ./bin/test.region src/maasserver/tests/test_api.py
$ ./bin/test.region src/maasserver/tests/test_api.py:AnonymousEnlistmentAPITest

Тесты внутри provisioningserver запускаются с помощью test.rack, а не test.region:

$ ./bin/test.rack src/provisioningserver/drivers/power/tests/test_mscm.py

Инструмент для запуска тестов — это nose, поэтому вы можете передавать опции, например, --nocapture (короткая опция: -s). Эта опция обязательна при использовании pdb, чтобы stdout не был изменён.

Note

При запуске make test через SSH с машины, где локали не установлены на машине, которая запускает тесты, некоторые тесты могут завершиться ошибкой LocaleMismatchError с сообщением "несоответствие локали". Для решения проблемы можно выполнить команду locale-gen для отсутствующих локалей или изменить ваши локали на рабочей станции на те, что присутствуют на сервере.

Выпуск подформата subunit --------------------------Передайте флаг --with-subunit любому из инструментов запуска тестов (например, bin/test.rack), чтобы получить поток результатов в формате subunit. Это может быть полезно для параллелизации запуска тестов или для последующего анализа запущенного теста. Опциональный флаг --subunit-fd можно использовать для направления результатов на другой файловый дескриптор, чтобы обеспечить чистый поток... _subunit: https://launchpad.net/subunit/

Отладка производственного сервера MAAS

Когда MAAS устанавливается с помощью пакетов, может быть полезно включить отладочные возможности для диагностики проблем.

Запись всех исключений API и UI

По умолчанию MAAS записывает только HTTP 500 — INTERNAL_SERVER_ERROR в regiond.log. Чтобы включить запись всех исключений, даже тех, где MAAS вернёт правильный HTTP-статус, выполните следующие команды:

$ sudo sed -i 's/DEBUG = False/DEBUG = True/g' \
  /usr/lib/python3/dist-packages/maasserver/djangosettings/settings.py
$ sudo service maas-regiond restart

Запуск regiond в переднем плане

При отладке полезно запустить regiond как процесс в переднем плане, чтобы можно было взаимодействовать с ним через установку точки останова в коде. После того, как вы установили точку останова в нужном месте кода, вы можете запустить процесс regiond в переднем плане.

$ sudo service maas-regiond stop
$ sudo -u maas -H \
  DJANGO_SETTINGS_MODULE=maasserver.djangosettings.settings \
  twistd3 --nodaemon --pidfile= maas-regiond

Note

По умолчанию MAAS запускает 4 процесса regiond одновременно. Это изменение позволит запускать только один процесс в переднем плане. Это следует использовать только для отладки. После завершения работы удалите точку останова и запустите службу maas-regiond.

Запуск rackd в переднем плане ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^При отладке полезно запустить rackd как процесс в переднем плане, чтобы можно было взаимодействовать с ним через установку точки останова в коде. После того, как вы установили точку останова в нужном месте кода, вы можете запустить процесс rackd в переднем плане.:

$ sudo service maas-rackd stop
$ sudo -u maas -H /usr/bin/authbind --deep /usr/bin/twistd3 --nodaemon --pidfile= maas-rackd

Установка разработочной среды MAAS

Доступ к базе данных конфигурируется в src/maasserver/djangosettings/development.py.

Тестовый набор создает разработочную базу данных внутри вашей ветки. Она находится в директории db, которая создается по мере необходимости. Вы должны остановить её перед удалением ветки; см. ниже.

Сначала настройте проект. Это получает все необходимые зависимости и устанавливает некоторые полезные команды в bin/.

$ make

Разработка с использованием snaps

Если вы хотите взаимодействовать с реальными машинами или виртуальными машинами (VM), лучше использовать snap. Вместо сборки настоящего snap можно запустить

$ make snap-tree

чтобы создать распакованный snap в директории dev-snap/tree. Этот snap содержит всё его содержимое, но находится в обычной директории вместо squashfs образа. Использование директории более удобно для тестирования, так как вы можете менять файлы внутри него без необходимости заново собирать snap.

Вы можете установить snap следующим образом:

$ sudo snap try dev-snap/tree
$ utilities/connect-snap-interfaces

Обратите внимание, что используется команда snap try, а не snap install. Snap maas теперь должен быть установлен.Последняя команда подключает все необходимые интерфейсы для работы snap. Это происходит автоматически при установке snap из магазина snapd, но является ручным шагом при использовании команды snap try.

$ snap list
Название          Версия                 Ревизия  Отслеживание  Разработчик   Примечания
core              16-2.41                7713     стабильный    canonical✓    основа
core18            20191001               1192     стабильный    canonical✓    базовый
maas              2.7.0-8077-g.7e249fbe4 x1       -             -              пробный
maas-cli          0.6.5                  13       стабильный    canonical✓    -
snapd             2.41                   4605     стабильный    canonical✓    snapd

Далее вам потребуется инициализировать snap, точно так же, как это обычно делается:

$ sudo maas init

И теперь вы готовы к изменениям в коде. После того, как вы изменили некоторые исходные файлы и хотите протестировать эти изменения, выполните целевой объект snap-tree-sync снова:

$ make snap-tree-sync

Вы должны заметить, что ваши файлы были синхронизированы в директорию dev-snap/tree. Перезапустите службу pebble для использования синхронизированного кода::

$ sudo snap restart maas

Теперь виртуальные машины или даже реальные машины могут загружаться через PXE с вашего разрабатываемого snap. Однако, конечно, вам нужно будет настроить сеть перед этим. Если вы хотите провести простое тестирование, самым простым способом будет создание сети в virt-manager с NAT, но без предоставления DHCP. Если имя созданного моста — virbr1, вы можете экспонировать его в контейнер как eth1 с помощью следующей конфигурации::

eth1:
  name: eth1
  nictype: bridged
  parent: virbr1
  type: nic

Конечно, вам также потребуется настроить интерфейс eth1. Поскольку MAAS предоставляет DHCP, вы должны указать ему статический адрес в сети, которую вы создали. Например:

auto eth1
iface eth1 inet static
  address 192.168.100.2
  netmask 255.255.255.0

Обратите внимание, что ваш хост LXD будет иметь адрес 192.168.100.1 и будет работать как шлюз для ваших виртуальных машин.

Создание образцов данных

Чтобы создать локальное дерево базы данных Postgres (в директории db/), выполните команду:

$ make syncdb

Кроме того, можно сгенерировать образцовую информацию в базе данных с помощью команды:

$ make sampledata

с необязательным параметром (SAMPLEDATA_MACHINES=<n>) для указания количества генерируемых машин.

Созданная база данных может быть экспортирована через команду:

$ make dumpdb

(необязательно указывайте DB_DUMP=filename.dump для целевого файла).

Экспортированный дамп затем можно импортировать в другой сервер PostgreSQL для использования MAAS.

С использованием maas-test-db это можно сделать следующим образом:

$ sudo cp maasdb.dump /var/snap/maas-test-db/common
$ sudo snap run --shell maas-test-db.psql \
  -c 'db-dump restore $SNAP_COMMON/maasdb.dump maassampledata'

и затем обновив конфигурацию MAAS для использования новой базы данных путём редактирования файла /var/snap/maas/current/regiond.conf, чтобы он указывал на новую базу данных, а затем перезапустив snap.Если используется внешний PostgreSQL, то можно восстановить базу данных с помощью команды, аналогичной следующей:

pg_restore \
  --clean \
  --if-exists \
  --no-owner \
  --no-privileges \
  --role=maas \
  --disable-triggers \
  -d maassampledata maasdb.dump

Вы можете просмотреть сгенерированные данные:

$ sudo maas-test-db.psql

Если вам не нравится интерактивный промпт psql, вы можете подключиться через сокет с помощью других инструментов, таких как pgcli:

$ sudo pgcli -h /var/snap/maas-test-db/common/postgres/sockets -U postgres

Настройка DHCP

MAAS требует правильно настроенного сервера DHCP для загрузки машин посредством PXE. MAAS может работать со своим собственным экземпляром сервера ISC DHCP, если вы установите пакет maas-dhcp:

$ sudo apt install maas-dhcp

Обратите внимание, что служебное определение сервиса maas-dhcpd ссылается на сервис maas-rackd, который отсутствует при запуске службы разработки. Чтобы обойти эту проблему, редактируйте файл /lib/systemd/system/maas-dhcp.service и закомментируйте эту строку: Wants=maas-rackd.service

Нелинейная конфигурация аутентификации сервиса RBAC

Для целей разработки и автоматизации тестирования возможно настроить maas с использованием сервиса RBAC в нелинейном режиме следующим образом:

$ sudo MAAS_CANDID_CREDENTIALS=user1:password1 maas configauth --rbac-url http://<url-of-rbac>:5000 --rbac-service-name <maas-service-name-in-RBAC>Это автоматически обрабатывает вход пользователя через Candid, без необходимости заполнения формы аутентификации через браузер.

Информация о базе данных

MAAS использует Django для управления изменениями в схеме базы данных.

Перед тем как делать какие-либо изменения, обязательно ознакомьтесь с `документацией Django по миграциям`_.

Изменение схемы

После того как вы сделали изменения модели (например, изменения файла в src/<приложение>/models/*.py), вам следует выполнить команду makemigrations Django для создания файла миграций, который будет храниться в src/<приложение>/migrations/<приложение>/.

Обратите внимание, что если вы хотите добавить новый класс модели, вам потребуется импортировать его в src/<приложение>/models/__init__.py

Сгенерировать скрипт миграции можно с помощью команды:

$ ./bin/maas-region makemigrations --name description_of_the_change maasserver

Это создаст модуль миграции с именем src/maasserver/migrations/maasserver/<auto_number>_description_of_the_change.py. Не забудьте добавить этот файл в проект с помощью команды:

$ git add src/maasserver/migrations/maasserver/<auto_number>_description_of_the_change.py

Чтобы применить эту миграцию, выполните команду::

$ make syncdb

Если вы работаете над разработкой с использованием snaps, вы можете использовать команду:

$ sudo snap run --shell maas.pebble -c "maas-region dbupgrade"

чтобы выполнить ожидающие миграции.

Выполнение миграции данных

Если вам требуется выполнить миграцию данных, очень похожим образом, вам потребуется выполнить команду makemigrations Django. Например, если вы хотите выполнить изменения в приложении maasserver, выполните команду:

$ ./bin/maas-region makemigrations --name "description of the change" maasserver

$ ./bin/maas-region makemigrations --пусто --название "description of the change" maasserver

Это сгенерирует модуль миграций с названием src/maasserver/migrations/maasserver/<автономер>description of the change.py. Вы должны отредактировать этот файл и заполнить список operations необходимыми действиями. Не забудьте добавить этот файл в проект:

$ git add src/maasserver/migrations/maasserver/<автономер>description of the change.py

После того как действия будут добавлены, примените эту миграцию командой:

$ make syncdb

Ручной просмотр базы данных

Если вам требуется получить интерактивный psql запрос, вы можете использовать dbshell:

$ bin/maas-region dbshell
Вы можете использовать команду \dt, чтобы просмотреть таблицы в базе данных MAAS. Вы также можете выполнять произвольные SQL-запросы. Например::: maasdb=# select system_id, hostname from maasserver_node;
system_id | hostname
------------------------------------------------+-------------------
node-709703ec-c304-11e4-804c-00163e32e5b5 | gross-debt.local node-7069401a-c304-11e4-a64e-00163e32e5b5 | round-attack.local

(2 строки)

Просмотр SQL-запросов во время тестирования

Если вам требуется просматривать SQL-запросы, выполняемые во время тестирования, можно использовать фикстуру LogSQL, которая выводит все запросы во время выполнения теста.:

from maasserver.testing.fixtures import LogSQL
self.useFixture(LogSQL())

Иногда вам может потребоваться узнать, где в коде был выполнен этот запрос.:

from maasserver.testing.fixtures import LogSQL
self.useFixture(LogSQL(include_stacktrace=True))

Временные рабочие процессы

В этом разделе описано, как настроить Temporal для просмотра и разработки временных рабочих процессов в MAAS.

Просмотр рабочих процессов

Необходимое оборудование

  • Установленная и работающая среда разработки MAAS, как указано в репозитории GitHub MAAS-dev.

  • Docker установлен на вашей машине, то есть вне контейнера LXD. Docker не будет работать, если он находится внутри контейнера LXD, поэтому ему нужно работать на вашей машине. Если Docker не установлен, самым простым способом установки является через snap.

  • Go установлен на вашей машине:

    sudo apt update
    sudo apt install golang-goКонфигурация пользовательского интерфейса
    

  1. Убедитесь, что ваша среда MaaS работает.

  2. На вашей локальной машине скопируйте ваши сертификаты TLS и ключи из контейнера в локальную машину. Предположим, имя контейнера — maas-dev:

    cd ~/путь_к_репозиториям/maas/
    lxc file pull -r maas-dev/var/snap/maas/current/certificates ./.dev-certificates/
    
  3. Убедитесь, что вы скопировали cacerts.pem, cluster.key и cluster.pem:

    ls -la ./.dev-certificates/certificates/
    
  4. Перейдите в папку с утилитами и запустите пользовательский интерфейс, указав адрес IP машины MaaS:

    cd utilities
    sudo ./run_temporal_ui <ip_maas> # Например, 10.10.0.20
    
  5. Доступ к пользовательскому интерфейсу Temporal можно получить через браузер по адресу http://localhost:8080 для проверки настроек. Вы должны видеть список выполненных рабочих процессов.

Настройка сервера кодирования

Сервер кодирования является отдельной службой, используемой для кодирования и декодирования данных, обрабатываемых в ваших рабочих процессах. Он позволяет вам наблюдать за и взаимодействовать с рабочими процессами во время разработки. Подробнее об этом читайте в документации.

Чтобы запустить сервер кодирования:

  1. НА ВАШЕЙ МАШИНЕ: клонируйте этот репозиторий https://git.launchpad.net/~maas-committers/maas/+git/temporalio-maas-codecserver

  2. НА РЕГИОНАЛЬНОМ УРОВНЕ: извлеките секрет MaaS из одного из регионов из файла ``/var/snap/maas/common/maas/secret``3. НА ВАШЕЙ МАШИНЕ: в директории codecserver запустите следующую команду:

    go run main.go --key <SECRET> --port 8090
    
  1. Процесс терминала будет заблокирован при работе сервера кодирования.

Запуск рабочих процессов

Предварительные требования

  • Установите tctl на вашей локальной машине:

    go install github.com/temporalio/tctl/cmd/tctl@latest
    
  • Если tctl недоступен, возможно, вам потребуется добавить каталог bin Go в ваш путь:

    export GOPATH=$HOME/go
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
    

Запуск

  • На вашей локальной машине, в той же директории, где находятся ваши сертификаты, запустите следующие команды, указав адрес IP машины MaaS, имя рабочего процесса и параметры:

    MAAS_IP=10.10.0.20
    WF_NAME=tag-evaluation
    PARAMS='{"task_queue":"foo"}'
    TEMPORAL_CLI_CODEC_ENDPOINT="http://127.0.0.1:8090"
    TEMPORAL_CLI_TLS_CERT=cluster.pem
    TEMPORAL_CLI_TLS_KEY=cluster.key
    TEMPORAL_CLI_TLS_CA=cacerts.pem
    TEMPORAL_CLI_TLS_SERVER_NAME=maas
    tctl --ad $MAAS_IP:5271 wf run --tq region --wt $WF_NAME -i $PARAMS
    

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-MAAS.git
git@api.gitlife.ru:oschina-mirror/mirrors-MAAS.git
oschina-mirror
mirrors-MAAS
mirrors-MAAS
master