4.3 KiB
az aro
Python development
There are currently two codebases for the az aro
command:
-
The downstream
az aro
extension in this repo -
The upstream
az aro
module.
The upstream az aro
module is distributed with az
and is automatically
present in the Azure cloud shell. The downstream extension can be installed by an
end user to override the module (e.g. to fix an issue rapidly). We use the
extension for development and testing of new API versions. Customers are
advised to use the upstream CLI.
We aim for the upstream and downstream codebase to be as closely in sync as possible.
Dev environment setup for the az aro
command
git clone https://github.com/Azure/azure-cli.git
cd azure-cli
python3 -m venv env
. ./env/bin/activate
pip install azdev
azdev setup -c
The az aro
command is located in src/azure-cli/azure/cli/command_modules/aro
with tests in corresponding tests
folder.
Dev environment setup for the az aro
extension
git clone https://github.com/Azure/ARO-RP.git
cd ARO-RP
make pyenv
The az aro
extension is located in python/az/aro/azext_aro
with tests in
corresponding tests
folder.
There is a very useful guide for authoring commands in the azure-cli repository.
Tests
Tests can be run as follows:
azdev test aro (--live) (--lf) (--verbose) (--debug)
An issue was discovered on macOS when running tests due to additional security to restrict multithreading in macOS High Sierra and later versions of macOS.
If getting the following error:
+[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called.
Add this variable to your env or add it to your profile to make it permanent in~/.bash_profile
or~/.zshrc
:
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
There are two main types of tests:
- live tests that get recorded and replayed
- mocks
The guide for writing and operating the tests is in the azure-cli repository.
Live tests and recording
Tests can be recorded live, which enables the next run to take place against the
recorded values. For the recording, the Python VCR library is used; recorded
"tapes" are stored in
src/azure-cli/azure/cli/command_modules/aro/tests/latest/recordings
.
When the --live
flag is passed, the tests run against the Azure API and are
recorded. Failed tests can be re-run using the --lf
flag.
Recorded tests are run when the --live
flag is not passed.
Contributing
Changes made to the az aro
command will be made to Azure/ARO-RP
before
being contributed
upstream.
This will allow synchronization between the two repositories to be consistent.
Once changes are made and approved to
downstream, pull
requests to upstream can then be opened.
When contributing to the az aro
command upstream, imports will be different
for testing. When submitting pull requests, tests that include azdev style
,
azdev linter
, and azdev test aro
should pass to ensure that changes will not
impact CI pipelines.
Reviews
You can use the following command (or similar) to generate a code diff:
diff --color=always -uNr -x '*.pyc' -x vendored_sdks -x tests \
~/src/azure-cli/src/azure-cli/azure/cli/command_modules/aro/ \
~/go/src/github.com/Azure/ARO-RP/python/az/aro/azext_aro/
Caveats
-
azure-cli
CI is not entirely isolated. Test runs may pass or fail depending on the state ofdev
branch. Force push to rerun the tests. -
Pulling
azure-cli
can break thevenv
. If this happens, delete and recreate it. -
Care needs to be taken when designing tests for live recording. The recording framework rewrites some fields, possibly including UUIDs.
-
When developing the
az aro
extension in this repository, you may wish to use the edge CLI version to be as close as possible to azure-cli master.