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
.
Перед тем как начать делать изменения в коде, вы захотите настроить свою локальную копию репозитория 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 записывает только 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 в переднем плане.
$ 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
Доступ к базе данных конфигурируется в src/maasserver/djangosettings/development.py
.
Тестовый набор создает разработочную базу данных внутри вашей ветки. Она находится в директории db
, которая создается по мере необходимости. Вы должны остановить её перед удалением ветки; см. ниже.
Сначала настройте проект. Это получает все необходимые зависимости и устанавливает некоторые полезные команды в bin/
.
$ make
Если вы хотите взаимодействовать с реальными машинами или виртуальными машинами (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
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
Для целей разработки и автоматизации тестирования возможно настроить 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
(2 строки)
Если вам требуется просматривать 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Конфигурация пользовательского интерфейса
Убедитесь, что ваша среда MaaS работает.
На вашей локальной машине скопируйте ваши сертификаты TLS и ключи из контейнера в локальную машину. Предположим, имя контейнера — maas-dev
:
cd ~/путь_к_репозиториям/maas/ lxc file pull -r maas-dev/var/snap/maas/current/certificates ./.dev-certificates/
Убедитесь, что вы скопировали cacerts.pem
, cluster.key
и cluster.pem
:
ls -la ./.dev-certificates/certificates/
Перейдите в папку с утилитами и запустите пользовательский интерфейс, указав адрес IP машины MaaS:
cd utilities sudo ./run_temporal_ui <ip_maas> # Например, 10.10.0.20
Доступ к пользовательскому интерфейсу Temporal можно получить через браузер по адресу http://localhost:8080 для проверки настроек. Вы должны видеть список выполненных рабочих процессов.
Сервер кодирования является отдельной службой, используемой для кодирования и декодирования данных, обрабатываемых в ваших рабочих процессах. Он позволяет вам наблюдать за и взаимодействовать с рабочими процессами во время разработки. Подробнее об этом читайте в документации.
Чтобы запустить сервер кодирования:
НА ВАШЕЙ МАШИНЕ: клонируйте этот репозиторий https://git.launchpad.net/~maas-committers/maas/+git/temporalio-maas-codecserver
НА РЕГИОНАЛЬНОМ УРОВНЕ: извлеките секрет MaaS из одного из регионов из файла ``/var/snap/maas/common/maas/secret``3. НА ВАШЕЙ МАШИНЕ: в директории codecserver запустите следующую команду:
go run main.go --key <SECRET> --port 8090
Установите 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 )