From 415a8b52c56eff2b04ab9045cac2b0072062d198 Mon Sep 17 00:00:00 2001 From: Sergiy Markin Date: Fri, 7 Apr 2023 00:00:12 +0000 Subject: [PATCH] [focal] Python modules sync with Airship project - uplifted some python modules - fixed tox4 requirements - added focal build node as a default one - added bindep.txt and bindep role to playbooks and docker image build process - changes Makefile to reflect GoLang and dependency management changes - upgraded Helm to v3 for chart build process - uplifted postgresql version to 14.6 - fixed deprecated falcon.API - replaced with falcon.APP - fixed upstream docker image publishing process Change-Id: I307d72bb7680f6f5c71e42ad30666cf786420460 --- .gitignore | 8 + .readthedocs.yaml | 2 +- .zuul.yaml | 68 +- Makefile | 31 +- bindep.txt | 25 + charts/deps/.gitkeep | 0 charts/drydock/requirements.yaml | 2 +- charts/drydock/values.yaml | 2 +- doc/requirements-doc.txt | 9 +- doc/source/_static/drydock.conf.sample | 117 +- doc/source/conf.py | 2 +- doc/source/images/architecture.png | Bin 21469 -> 26532 bytes doc/source/images/basic_task_sequence.png | Bin 58414 -> 71100 bytes etc/drydock/drydock.conf.sample | 117 +- go/src/baclient/go.mod | 1 + hostdeps.sh | 43 - ....ubuntu_xenial => Dockerfile.ubuntu_focal} | 56 +- python/drydock_provisioner/control/api.py | 2 +- python/requirements-direct.txt | 53 +- python/requirements-lock.txt | 198 +- python/requirements-test.txt | 22 +- python/requirements-tree.txt | 1625 +++++++++++++++++ python/tests/postgres/start_postgres.sh | 6 +- requirements-host-test.txt | 5 - requirements-host.txt | 12 - tools/baclient_build.sh | 7 +- tools/drydock_image_build.sh | 2 +- tools/drydock_image_run.sh | 6 +- tools/gate/playbooks/build-charts.yaml | 9 + tools/gate/playbooks/docker-image-build.yaml | 19 +- tools/gate/playbooks/omni_test.yaml | 22 +- tools/helm_install.sh | 2 +- tools/helm_tk.sh | 69 +- tox.ini | 22 +- 34 files changed, 2137 insertions(+), 427 deletions(-) create mode 100644 bindep.txt create mode 100644 charts/deps/.gitkeep create mode 100644 go/src/baclient/go.mod delete mode 100755 hostdeps.sh rename images/drydock/{Dockerfile.ubuntu_xenial => Dockerfile.ubuntu_focal} (67%) create mode 100644 python/requirements-tree.txt delete mode 100644 requirements-host-test.txt delete mode 100644 requirements-host.txt diff --git a/.gitignore b/.gitignore index 46150f8f..98ac93cc 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,9 @@ __pycache__/ # C extensions *.so +# Go +baclient_built + # Distribution / packaging .Python build/ @@ -108,3 +111,8 @@ ENV/ # Chart artifacts charts/drydock/charts charts/drydock/requirements.lock +/charts/*.tgz +/charts/*/charts +/charts/*/requirements.lock +/charts/deps/*/ +/*.tgz \ No newline at end of file diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 85d0cedf..845af27e 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -19,7 +19,7 @@ formats: # Optionally set the version of Python and requirements required to build your docs python: - version: 3.7 + version: 3.8 install: - requirements: doc/requirements-doc.txt - requirements: python/requirements-lock.txt diff --git a/.zuul.yaml b/.zuul.yaml index ba839ccc..b330506c 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -21,18 +21,15 @@ - airship-drydock-omni-test - airship-drydock-chart-build-gate - airship-drydock-chart-build-latest-htk - - airship-drydock-docker-build-gate-ubuntu_xenial - - airship-drydock-docker-build-gate-ubuntu_bionic + - airship-drydock-docker-build-gate-ubuntu_focal gate: jobs: - airship-drydock-omni-test - airship-drydock-chart-build-gate - - airship-drydock-docker-build-gate-ubuntu_xenial - - airship-drydock-docker-build-gate-ubuntu_bionic + - airship-drydock-docker-build-gate-ubuntu_focal post: jobs: - - airship-drydock-docker-publish-ubuntu_xenial - - airship-drydock-docker-publish-ubuntu_bionic + - airship-drydock-docker-publish-ubuntu_focal - drydock-upload-git-mirror - nodeset: @@ -41,6 +38,12 @@ - name: primary label: ubuntu-bionic +- nodeset: + name: airship-drydock-single-node-focal + nodes: + - name: primary + label: ubuntu-focal + - job: name: airship-drydock-omni-test description: | @@ -50,7 +53,7 @@ required-projects: - openstack/openstack-helm-infra timeout: 3600 - nodeset: airship-drydock-single-node + nodeset: airship-drydock-single-node-focal - job: name: airship-drydock-chart-build-gate @@ -58,7 +61,7 @@ Builds charts using pinned Helm toolkit. timeout: 900 run: tools/gate/playbooks/build-charts.yaml - nodeset: airship-drydock-single-node + nodeset: airship-drydock-single-node-focal - job: name: airship-drydock-chart-build-latest-htk @@ -67,46 +70,31 @@ timeout: 900 voting: false run: tools/gate/playbooks/build-charts.yaml - nodeset: airship-drydock-single-node + nodeset: airship-drydock-single-node-focal vars: HTK_COMMIT: master - job: - name: airship-drydock-docker-build-gate-ubuntu_xenial + name: airship-drydock-docker-build-gate-ubuntu_focal timeout: 1800 run: tools/gate/playbooks/docker-image-build.yaml - nodeset: airship-drydock-single-node + nodeset: airship-drydock-single-node-focal irrelevant-files: - '^doc/.*' - '^charts/.*' vars: publish: false - distro: ubuntu_xenial - tags: - dynamic: - patch_set: true - -- job: - name: airship-drydock-docker-build-gate-ubuntu_bionic - timeout: 1800 - run: tools/gate/playbooks/docker-image-build.yaml - nodeset: airship-drydock-single-node - irrelevant-files: - - '^doc/.*' - - '^charts/.*' - vars: - publish: false - distro: ubuntu_bionic + distro: ubuntu_focal tags: dynamic: patch_set: true - job: - name: airship-drydock-docker-publish-ubuntu_xenial + name: airship-drydock-docker-publish-ubuntu_focal timeout: 1800 run: tools/gate/playbooks/docker-image-build.yaml - nodeset: airship-drydock-single-node + nodeset: airship-drydock-single-node-focal secrets: - airship_drydock_quay_creds irrelevant-files: @@ -114,27 +102,7 @@ - '^charts/.*' vars: publish: true - distro: ubuntu_xenial - tags: - dynamic: - branch: true - commit: true - static: - - latest - -- job: - name: airship-drydock-docker-publish-ubuntu_bionic - timeout: 1800 - run: tools/gate/playbooks/docker-image-build.yaml - nodeset: airship-drydock-single-node - secrets: - - airship_drydock_quay_creds - irrelevant-files: - - '^doc/.*' - - '^charts/.*' - vars: - publish: true - distro: ubuntu_bionic + distro: ubuntu_focal tags: dynamic: branch: true diff --git a/Makefile b/Makefile index c0eea787..0232a029 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ IMAGE_PREFIX ?= airshipit IMAGE_TAG ?= dev HELM := $(shell realpath $(BUILD_DIR))/helm UBUNTU_BASE_IMAGE ?= -DISTRO ?= ubuntu_bionic +DISTRO ?= ubuntu_focal PROXY ?= http://proxy.foo.com:8000 NO_PROXY ?= localhost,127.0.0.1,.svc.cluster.local USE_PROXY ?= false @@ -40,21 +40,16 @@ run_images: run_drydock # Run tests tests: pep8 security docs unit_tests test_baclient -# Install external (not managed by tox/pip) dependencies -external_dep: requirements-host.txt requirements-host-test.txt - sudo ./hostdeps.sh - touch external_dep - # Run unit and Postgres integration tests in coverage mode coverage_test: build_drydock tox -re cover # Run just unit tests -unit_tests: external_dep - tox -re py36 $(TESTS) +unit_tests: + tox -re py38 $(TESTS) # Run just DB integration tests -db_integration_tests: external_dep +db_integration_tests: tox -re integration $(TESTS) # Freeze full set of Python requirements @@ -91,27 +86,27 @@ helm-install: # Make targets intended for use by the primary targets above. -build_drydock: external_dep +build_drydock: export; tools/drydock_image_build.sh ifeq ($(PUSH_IMAGE), true) docker push $(IMAGE) endif # Make target for building bootaction signal client -build_baclient: external_dep - sudo ./tools/baclient_build.sh $(shell realpath go) $(shell realpath ${BUILD_DIR}) +build_baclient: + ./tools/baclient_build.sh $(shell realpath go) $(shell realpath ${BUILD_DIR}) touch ./baclient_built # Make target for testing bootaction signal client -test_baclient: external_dep build_baclient - GOPATH=$(shell realpath go) go test -v baclient +test_baclient: build_baclient + GOPATH=$(shell realpath go) GO111MODULE=off go test -v baclient docs: clean drydock_docs -security: external_dep +security: tox -e bandit -drydock_docs: external_dep render_diagrams genpolicy genconfig +drydock_docs: render_diagrams genpolicy genconfig tox -e docs render_diagrams: @@ -129,12 +124,14 @@ clean: rm -rf charts/drydock/charts rm -rf charts/drydock/requirements.lock -pep8: external_dep +pep8: tox -e pep8 helm_lint: helm-init + $(HELM) dep up charts/drydock $(HELM) lint charts/drydock + .PHONY: build_baclient build_drydock charts clean coverage_test \ db_integration_tests docs drydock drydock_docs dry-run genconfig \ genpolicy helm-init helm-install helm_lint images lint pep8 \ diff --git a/bindep.txt b/bindep.txt new file mode 100644 index 00000000..0412a13d --- /dev/null +++ b/bindep.txt @@ -0,0 +1,25 @@ +# These are host packages needed for Drydock +# that don't come on a minimal Ubuntu install +build-essential +curl +git +golang-go +libffi-dev +libkrb5-dev +libpq-dev +libre2-dev +libsasl2-dev +libssl-dev +libvirt-dev +libzmq3-dev +netbase +pkg-config +python3-dev +python3-pip +python3-setuptools +ssh +tox + +# PlantUML is used for documentation builds, graphviz is it's soft dependancy +plantuml +graphviz \ No newline at end of file diff --git a/charts/deps/.gitkeep b/charts/deps/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/charts/drydock/requirements.yaml b/charts/drydock/requirements.yaml index d3081a71..8594a246 100755 --- a/charts/drydock/requirements.yaml +++ b/charts/drydock/requirements.yaml @@ -14,5 +14,5 @@ dependencies: - name: helm-toolkit - repository: http://localhost:8879/charts + repository: file://../deps/helm-toolkit version: ">= 0.1.0" diff --git a/charts/drydock/values.yaml b/charts/drydock/values.yaml index a2145ef7..c60bf2cd 100644 --- a/charts/drydock/values.yaml +++ b/charts/drydock/values.yaml @@ -35,7 +35,7 @@ images: ks_user: docker.io/openstackhelm/heat:newton ks_service: docker.io/openstackhelm/heat:newton ks_endpoints: docker.io/openstackhelm/heat:newton - drydock_db_init: docker.io/postgres:9.5 + drydock_db_init: docker.io/postgres:14.6 drydock_db_cleanup: quay.io/airshipit/drydock:master drydock_db_sync: quay.io/airshipit/drydock:master pull_policy: "IfNotPresent" diff --git a/doc/requirements-doc.txt b/doc/requirements-doc.txt index 17d655b1..c17209f4 100644 --- a/doc/requirements-doc.txt +++ b/doc/requirements-doc.txt @@ -1,4 +1,5 @@ -sphinx>=1.6.2 -sphinx_rtd_theme==0.2.4 -oslo.versionedobjects -falcon +sphinx_rtd_theme==1.2.0 +pylibyaml==0.1.0 +oslo_versionedobjects==3.1.0 +falcon==3.1.1 +keystoneauth1==5.1.2 \ No newline at end of file diff --git a/doc/source/_static/drydock.conf.sample b/doc/source/_static/drydock.conf.sample index fdf4c39a..323d4df9 100644 --- a/doc/source/_static/drydock.conf.sample +++ b/doc/source/_static/drydock.conf.sample @@ -78,7 +78,7 @@ # Domain name containing project (string value) #project_domain_name = -# Trust ID (string value) +# ID of the trust to use as a trustee use (string value) #trust_id = # Optional domain ID to use with v3 and v2 parameters. It will be used for both @@ -114,15 +114,35 @@ # Complete "public" Identity API endpoint. This endpoint should not be an # "admin" endpoint, as it should be accessible by all end users. Unauthenticated # clients are redirected to this endpoint to authenticate. Although this -# endpoint should ideally be unversioned, client support in the wild varies. -# If you're using a versioned v2 endpoint here, then this should *not* be the -# same endpoint the service user utilizes for validating tokens, because normal -# end users may not be able to reach that endpoint. (string value) +# endpoint should ideally be unversioned, client support in the wild varies. If +# you're using a versioned v2 endpoint here, then this should *not* be the same +# endpoint the service user utilizes for validating tokens, because normal end +# users may not be able to reach that endpoint. (string value) +# Deprecated group/name - [keystone_authtoken]/auth_uri +#www_authenticate_uri = + +# DEPRECATED: Complete "public" Identity API endpoint. This endpoint should not +# be an "admin" endpoint, as it should be accessible by all end users. +# Unauthenticated clients are redirected to this endpoint to authenticate. +# Although this endpoint should ideally be unversioned, client support in the +# wild varies. If you're using a versioned v2 endpoint here, then this should +# *not* be the same endpoint the service user utilizes for validating tokens, +# because normal end users may not be able to reach that endpoint. This option +# is deprecated in favor of www_authenticate_uri and will be removed in the S +# release. (string value) +# This option is deprecated for removal since Queens. +# Its value may be silently ignored in the future. +# Reason: The auth_uri option is deprecated in favor of www_authenticate_uri and +# will be removed in the S release. #auth_uri = -# API version of the admin Identity API endpoint. (string value) +# API version of the Identity API endpoint. (string value) #auth_version = +# Interface to use for the Identity API endpoint. Valid values are "public", +# "internal" (default) or "admin". (string value) +#interface = internal + # Do not handle authorization requests within the middleware, but delegate the # authorization decision to downstream WSGI components. (boolean value) #delay_auth_decision = false @@ -157,9 +177,6 @@ # The region in which the identity server can be found. (string value) #region_name = -# Directory used to cache files related to PKI tokens. (string value) -#signing_dir = - # Optionally specify a list of memcached server(s) to use for caching. If left # undefined, tokens will instead be cached in-process. (list value) # Deprecated group/name - [keystone_authtoken]/memcache_servers @@ -170,12 +187,6 @@ # -1 to disable caching completely. (integer value) #token_cache_time = 300 -# Determines the frequency at which the list of revoked tokens is retrieved from -# the Identity service (in seconds). A high number of revocation events combined -# with a low cache duration may significantly reduce performance. Only valid for -# PKI tokens. (integer value) -#revocation_cache_time = 10 - # (Optional) If defined, indicate whether token data should be authenticated or # authenticated and encrypted. If MAC, token data is authenticated (with HMAC) # in the cache. If ENCRYPT, token data is encrypted and authenticated in the @@ -211,9 +222,9 @@ # client connection from the pool. (integer value) #memcache_pool_conn_get_timeout = 10 -# (Optional) Use the advanced (eventlet safe) memcached client pool. The -# advanced pool will only work under python 2.x. (boolean value) -#memcache_use_advanced_pool = false +# (Optional) Use the advanced (eventlet safe) memcached client pool. (boolean +# value) +#memcache_use_advanced_pool = true # (Optional) Indicate whether to set the X-Service-Catalog header. If False, # middleware will not ask for service catalog on token validation and will not @@ -229,19 +240,23 @@ # value) #enforce_token_bind = permissive -# If true, the revocation list will be checked for cached tokens. This requires -# that PKI tokens are configured on the identity server. (boolean value) -#check_revocations_for_cached = false +# A choice of roles that must be present in a service token. Service tokens are +# allowed to request that an expired token can be used and so this check should +# tightly control that only actual services should be sending this token. Roles +# here are applied as an ANY check so any role in this list must be present. For +# backwards compatibility reasons this currently only affects the allow_expired +# check. (list value) +#service_token_roles = service -# Hash algorithms to use for hashing PKI tokens. This may be a single algorithm -# or multiple. The algorithms are those supported by Python standard -# hashlib.new(). The hashes will be tried in the order given, so put the -# preferred one first for performance. The result of the first hash will be -# stored in the cache. This will typically be set to multiple values only while -# migrating from a less secure algorithm to a more secure one. Once all the old -# tokens are expired this option should be set to a single value for better -# performance. (list value) -#hash_algorithms = md5 +# For backwards compatibility reasons we must let valid service tokens pass that +# don't pass the service_token_roles check as valid. Setting this true will +# become the default in a future release and should be enabled if possible. +# (boolean value) +#service_token_roles_required = false + +# The name or type of the service as it appears in the service catalog. This is +# used to validate tokens that have restricted access rules. (string value) +#service_type = # Authentication type to load (string value) # Deprecated group/name - [keystone_authtoken]/auth_plugin @@ -335,7 +350,28 @@ # From oslo.policy # -# The file that defines policies. (string value) +# This option controls whether or not to enforce scope when evaluating policies. +# If ``True``, the scope of the token used in the request is compared to the +# ``scope_types`` of the policy being enforced. If the scopes do not match, an +# ``InvalidScope`` exception will be raised. If ``False``, a message will be +# logged informing operators that policies are being invoked with mismatching +# scope. (boolean value) +#enforce_scope = false + +# This option controls whether or not to use old deprecated defaults when +# evaluating policies. If ``True``, the old deprecated defaults are not going to +# be evaluated. This means if any existing token is allowed for old defaults but +# is disallowed for new defaults, it will be disallowed. It is encouraged to +# enable this flag along with the ``enforce_scope`` flag so that you can get the +# benefits of new defaults and ``scope_type`` together. If ``False``, the +# deprecated policy check string is logically OR'd with the new policy check +# string, allowing for a graceful upgrade experience between releases with new +# policies, which is the default behavior. (boolean value) +#enforce_new_defaults = false + +# The relative or absolute path of a file that maps roles to permissions for a +# given service. Relative paths must be specified in relation to the +# configuration file setting this option. (string value) #policy_file = policy.json # Default rule. Enforced when a requested rule is not found. (string value) @@ -348,6 +384,25 @@ # valued) #policy_dirs = policy.d +# Content Type to send and receive data for REST based policy check (string +# value) +# Possible values: +# application/x-www-form-urlencoded - +# application/json - +#remote_content_type = application/x-www-form-urlencoded + +# server identity verification for REST based policy check (boolean value) +#remote_ssl_verify_server_crt = false + +# Absolute path to ca cert file for REST based policy check (string value) +#remote_ssl_ca_crt_file = + +# Absolute path to client cert for REST based policy check (string value) +#remote_ssl_client_crt_file = + +# Absolute path client key file REST based policy check (string value) +#remote_ssl_client_key_file = + [plugins] diff --git a/doc/source/conf.py b/doc/source/conf.py index 16e1c81b..38fe85f9 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -77,7 +77,7 @@ release = u'0.1.0' # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = 'en' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. diff --git a/doc/source/images/architecture.png b/doc/source/images/architecture.png index 04dc208c16187242b16bfe4da0c7c1b950cabbd6..71b1451d710090e49257e3beb720e3a895d74185 100644 GIT binary patch literal 26532 zcmeFZbySwmw>M08ij;tqfQm>-ONXQ=Da}ob+<~onjUOvid7ol3s`3<4AqOkU zQyAjwdMHLFYquFZr4*4}0oiIg`SltWi+gO4XuBhLZs#_`2T8U{43gX$3?^AHvN##C zNL8FSZAVa}&rIg(eeiXO{`*rVN?4`N$?S+_YKg5Hui=g3{Oj?o`6l!ZwQZLRb+50j zpT4XGeK6ry*V@9<9~DPr|Gp%0A#NE;p|^UdVSRbBaU9y-hThKZKeyOuD@7kA`wLCa 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 literal 21469 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 diff --git a/doc/source/images/basic_task_sequence.png b/doc/source/images/basic_task_sequence.png index a01ec0dd5cc4dae661c704dfdfacfd9ec526edad..e784adb64dfb58e04c351b7351a205f12d02b22f 100644 GIT binary patch literal 71100 zcmdqJcT`jB+C7Q|QE7@uk*1)6RFx)OqzO_5r4u^Rdkw`7(vhaLNCyGwAT=NYO7A5! z={0l$B#_)U=-Fqx_dfUg&KSRO$8TKzfw4%|dh7GdIiLBiH>%2Vq-QUkB_JRmmA^0j zkbvMs2LZuJK+eq0%*n{b%=EIc=jA6ZE)K#x zJPtNSb}p{AHryumw&!mO(Gw6He`cwnil9^7gkCrONNF-I4lzj`x1gH|g{|D!Q=c>-(Jx&&X>Z;(3r)mixpxJw~TY+xlei)s}+NyH-CkO*&G;0tChqXjyII zb6Z%RMOi8n;#vb+lHczg61VEJY-M-A-WSH9*-K~JqRu_dM!xDR9C6YamuE2IJ6URl z_NFmaquMio>JU1!UW;8OPo<}jun>FE|Gwy>e||knMU%?o*fIFMmh+;fuk+3BhR&7g zkmP+u5j1pO>{Xo0%`2}L%k&#(6~7>wiZJ}Hv##Ql+w@LyDaPL1^Mq7;d9HQ{OG(|Fv_jrBa~+tcB`DSR({R~gzWnwL+lO`{pf`!XooiV)e_pG`hU1&Q5d zd-Ua=4tMBPqEkF9({vf5jLWdj>*%{voryyGJ~tihD{j8Y(LOxDxxj8qa9!mN9Ix>s z6&tm{oFV(h^*U#j@Ad@^M58H*7WZ_l&{C5Ty<5W`vn$2*p^=-<*%YVloPpOf(>*PR zybbanrU`b!*0SFToNN6!8#@zWmkp5!+EFyrxxIhq!0}FOt?jf2NB+ z*`!xVecO~H(Bx^o^P>;6%kO>G^dfIXTgwfyMath+{g&o_=05AmeInMuRkKYwV})+m4=JdiV1q>DDuxfuETMth%t6@&L>Q^d31=vc9*Lc z+MJVwcsqAJ&G&A$2OF4yB~L)`^^sa0*qLU_`V z5{EESf7Zrc6+|YLCoBG+1V#(zO8sil@U`X+d6I>sA3Fsu4@ed^4u=R`G<*qlNy*OU7gOSY@T#^#g99*g7u$416H&<3xHZWl9IT{%c0oGL1Y$B1JAK7NT z*0Q0k^GILi8glKbCoZzDPa~#`n3#B$^{DUbmz8Cay~Or#)tWVXlU()Eb|jnyCwZuO zu%EZHJXl;}Td1}E<>y^*g1dHG2Hg;5^0IjD`mwBn;Q;Q~=eJ)s7{jF-6BSirJ@{#5 z#iqL8Xsj69zGvm_JVJ{3p+%sNpxr4l9Gag-i_9K?#u^wT9aR79{1^PEY7pOdcapI= zO`RXI+6{)3RaDBgI5)TOp_9PlENiOUzF_#a#y%-54`MjAi_Mj+tgPJJ z$_~!qUuKnt5AD`Lwp8KO{ZQH#|ABMst5<)JUd4a(a==*`WYK0x;?R%pBc6!mNu@mW>dH=R-=~I$ zFq#N@M~rhgye3IMsrY+KbooS1NSF-1lTS~xUn>3ns@I}CB%!3T2^m|yhWIE^S&6e= z@nKoHW_xycuSf!a|8pv5jSgd zaN%geE}v#daRckD(fE5?o1&7EK4yg`5YcJ^G0?Dc6e{a<62Ka{{c+dagICCe1p2dG zbpCKC<`ME(Iqn!rMdEOKV)lu}`9i%eoC(8aXvJRb4H5wrfOA zDLE^VZyU$~c|``c@}Wj4d5*3_-TeY8B5N2}PPm(?mZIurTj%a(m)4wN#kXKgD2v1B*1dA?<>i>6CFzt*c$sxNLk8@UAqw2SLKFO;F1%8 z?yk1Cwn}|FiV2QcA&6Kv`a7aG3>+UU3k0SJ9Ht#I@Tf%E4J0lmY{uhvCBZtSRjR-> zll?(+O^;OP7W<=b)~SQ9dOV`Tf8g$gQZ?Q5hFKn8CT_n9^upMT{?Qjj<9P9dzP>rz zT2WDvsRE0cT?98z%~F!E^y?in6%!IZlNhKRK(2H&m#mU~N4Iu3^K9f8xS+Fakc#IZm-pB4dk|#{?ko9lU&dEXB=I{`)G{ zUaiBN4#_0sP4n}iFVl7VIu4qfqY5sZNbO`rrol>J!rs-YYM6Q0Cw+wD-IvJu99$%M z?eVYK@hwV9p0C*B;+_X6W;K2oG*6M4t>4Nqr)ss)O4;wMzuEtC7*9ZoJrP)qQRsX-fC<)q7E4n!1CT}6htKynLpH1P*4EDQC9Yp zSl-O+?04(rSEpUoE3$d=FUzPy&PALlqS;0$mS>4N`Sy1{-|)}(<-E+vnkrystuRzl z&1PFnK3-HFx}KmE8ZDCGcv&b#VrR5(LnTw$RGmo0hwjY=>^ysI;e3?Ynxbxnli9T@OdH$O)zwrw0jh%0@#xL75BYWo&%eJMB$?mt64b&nuX)Hx?`S59i^u;a{cU(fr&_lu>Q%X>X@AE=-sqFD_Lb4C;2*QIW@8Iw?H4<5R1UVc zUz-xt+!%QTF&GOnZ^Lhxxuizbjal1p{A7r2Ezc<(axRE?YjT?GfZc8xfOysHGz9;g zv>z7Msxfc#+8sNWuf9NHZS5{`&_9S0j*qIbILU*_Whx1bcODE3!dR4AJ(9rgky^6A z>0H>DQ@($8WU(I|Y9-f(rS;DmPvS$1_KdsT%OerXCBkdz#5_YUIrn!BzmUDC*Y_}({^mUm^T-#)iWXnb3r zq9d`r!uq>FFBg0BR?Y(@KHJLC6tuP~z4-LJW}anlc&$%Wp5DHs{P$zaN!4&y6GB0J z53@rMGO=d`1j5pHN~&DR8Ax%<5mfCiOKFSPZb(u1hWcf3M6B54p9583PR!0Pfd zLcX$wx{XZp9f`@dBbcda)`LlMuJn)tji@#EP~;!Etp0%bwQ>08j-aW zrRI2bh(WUq6uUp(DUSIX!Ln>Wet>Fwuhbe-Gm+eIVkNu|4QdTs($X1UJp_3>Sm-0ftJw^I_t{vJe>4zX=)a$R5;ch;cSjAe!JKy1> z2KNnbm-2RQbPhBgqvE8YV`S7xS1?2GFJ?}ARMlL0uvT5Oj2K-AY>id1?Y;h`Ghatb zE45Psc2&%3P2*rLtvo*AU;~Ho%k%ch0T?8>!*lzIal`BS9t)iHpxa=c?tDu$Lr=Ua ze!NpL5Y>X#%CTj;bhj9oYkAM+`EHn1|Hnt^E!Df@3oyU&=1zHz^=CvnT_NIohCyP` zg(Q_X0Z;BxGx_i>Z7+r#4B!se9NXjg(~kFaU*yQx;O*`B@@iU2Y8eWJwyqYSp9i#U z7{BAQ)L0u2Yq^yD>UsoHcMwwMsiBVvFKQLiyee6qX1KyJ6Hau z+2tzorP%Zra_P;SV8ymRn4EQZz9NQJ;1G2u>-Yh#X3>jJEDSLDRZsV2=dY9XVD3`$ z7>qJfYUrXfuOoYnt6XlB_BH;ohS_X;J8$bklG`bYrxV%>mXkU}4<4-z!Y2+PN`w4& znmbP)OtM=i8^*?=Z;18zp%<4m4LsduzWL_X=vRFU6TcJ*gBKU9$Lm*#r%LpiS=?6) zPW2blA9VCX7(i`rik0_tu)+=|CUD{}%Uf52Z>6HpJLUcrKA22CZU92ImtQgz37Y!O zGw2P@$!gjl_)MEaJzDB5Es5j#EDKzhMH|&O;-^KnMQ&V8vr}kc)y(&GUg)}Xmb7ng zyEm+;Fh&ag!!b~9FMF)!BYM*egPzy0`=-Bp%N2Jj?h z_*0liN-t&&-UfY`mI1$(^~AnrCsWwfN*tvn;u|5`Ua6+EASjl@b(kjnV0oYhBW2NP z7ctH}(nl?A8cKcQ@Z$E)AiTyWz<%2!86GrLn~N3D&(F;d;cyECuZJU^;1;>|8jA{rmT4#JoiL ztorT_Um2bYoTqGdh0a8jZOakD@5A+mIkwYL{%vd3FThT!Zh=ruQ7=~NS79Z})_!R8 zKwNDy)iVXG2ikrl4$HzPnOWjD1kd-pCuh{Vwwzj99U3I-UTQZc{Nj|Dxb;B%w(fi^ z1hplFGB4X+on>97Vi>!^Vj={;Z)V?}a%)Y#J`UM?JW@YxrX6)7RNZUZ;sY3Q)R=qD z{*}dy+RMz&)ihwIwqWPa*!E4$Yla|Om+YN)itLEUa%ZTAAH1-csNYoe4&Mwy4Lp5e zwz#Kex%Lud(9n5J^qnF>Nis&Ci!c!)i!L)N4Khfjnrc~jwYHzmWSGQwgkaCPflr6w z$j>gEmvhg`*fzb{)qOBA-+r2|)Y(a3cWr{@&YilPgfNwB16b4u3maF>-qh2^powCw z+P6tYQ(vhU-4%@{^_gsn24TL3)tFVtUSs_Wn4&`5ca=tsJe_NzqEQ`pJ5>+Dw`Yzb z)^sJ|$-b1YO*}o~r3F4vsX6!YdRJRJ7nwy2cb1>w4|{kHeL~;_{Y0{b=dy#8E(Vns z87YyG*qbScUzp2eORdYFpOnnbB0m&WZ?+U85i$Z`m9LGb=jsa-qhesWbp7wix@D_t zYRtsaneG+UesjyxD?%tNH(@DD#(yr}7jao!dGMP42V=g6I~@}?xv!9Sv={@)ANs0! zF==o=Xbw{d)BaE6*UfX=&kr&#>BXdlOG&X`v@4dliWft~KQR)YZr#sH#E7syybYz3 zCsZ-!3x%EEYj`x!lcx*yl5K4tLvM9r?8XlsBc5SjCy5{KJUfxP_~thED(rv+Z1m-R z;?WYzvK0*h%l#nXH;99C zaG_c$f1B6Q(Hs&BJ+r7By9?J3xULvgx)SZoy6W)_ml-#fVAjYjFh%c6%MVP)*gnbo z4Jrs~t3avE;479Bd3mt*IJ|l2%(OEoRwsYL+$c?eH5H z+89xG=hwciM{{ogypu&=>oQUURU0YW9bT#93BAN0UIW7%?m~PQ(wtg`!u}xMc*FJ9@CO z-03}`+dFGHn($;Q>@Ak%<)ZfSE1II2cRr18N z=6keYzGrdGx`>-w>c*Pa+MTG4%R-``&g$E7>Rp45WYWN>}bm&G_Hh-R6`tPPUT)3n<^ zH@_+>>asZ#Ybw|-fL}``WDJa2mD`6P_)%T-flf(pf&fp(gq3q+YbFQsNYMMS@UIH+6_v++(40Z9IFFzgvqo!@?7D_UkvV!XR*caD zcwj%h@49~H;nqUV-l))>7d!e>@c_CCdFzZ+ROl||O9!_0@L-B}gQZ7&cKOrIWF&81SJO#!EV9c^rWJc&9*ehDqWch?SoT3)YW2N*-}ER`qtqN zM)BKi-bd>d?5}R#PEqA&Z%$F1@199?$F@zpQgIJ{JvXiXW=t2_sxpvQa$u6Ut(yt9 z)zhasAi6tZP!qN2rh5E>Mi&rC8o2b->3o{wMZg_ml4I7Rz!GRqylZ0y_Z!oegvC&n6h`m`$c~tE<>N# zy$oL}O8?G1^yBpYo=g=@ok9T#Zet(EmZ;e5%iHRR`gD9GxKLVu9e}B%!ip)O#yhUg z>!u$EW8Q9l-|E~gv$FsU_fqDQ4qGUSGc?%7e2n`DZ9~PGQ#>PW+RHLcD(b}e^ zZV(&A_u)N+mC=WLtgrJqcZ2(41|HtXRSdU2{#Z7A+RWSouyTA?&M##+fti;K#3O(U zrneSKLHzZcIrs=8oF<1HYTeZebt-PxXs1(25~Zc1qob$SOO*{#P87C9l)Tv;E--3f z!mj%Rr2gvFE2a0hXJaA0lY=2)VdSKwJ1Ep#qS)&rwE;|m%>T^4LvFSUg(8rM(x9Lq z4mP&WZb-x+#E;>^g$9KC+W1(85*^xex`{M!T19l@YhSkdzH62H8n%I4q9BN|X|MD2 z#RCQ6dN8)=770um3=oyFNcidx1O7u8~0f+ zTUc1|!JsyR`Z8sLsBB=LpbK4Be7`l&;AoSl;yIGkrL%zE=Hp3tBMvNO#c;gdRw*+Z zv6bUX6)fS6=WN5LdlRO!4pAfafY8cc#N6Hp%)H)IU8;R~R23?}MTCUG2vz z8=+n_(-JHiM>yqw)^+HN;&RkdoBDG!)46~UtPVKQexsB>S^K+NCO_()9Xoc6*P_ET zq_(!UXNJp+w+c$~U))@7xEypG;?1yY zK)Y4(qLg${%Zqujmt~@IlZNfeg}>^Zn_P zLz5e&$0vM=C4>)@M8th9-T+PQH|6Qp@5-m@xl(;*UfxLTCnW`i6ryno73t}e?rs{( zG^!vO@O@A3F^wJ#gY$tI+2HX;w-y?MgIc!cG9e)y`H&!4Ig_-AIUpZ4uW^Ru$1B9OaNO(WyC`kS47S8OM>Ws!1FJZ~7vzv$t-EY! zIb=iR)U47}GW^M6y{sQ1188)W<5OyDE%AE6O){yew|eg5D^}C)G4adh?T67N^6H*r zdL__@%t~NN;;CO;+BL1uGHQ~UP1<*zkFty-^zqNf+~f}-e3|0cr@Zc^HGY-R>s>cf z>9$Af_wV1`YE(X!L<&~W{Awu`HFYa!so-FH9EQU(GGnu{;>m8Bblh3y+k!l&_*cI_ zS8D*h2HIE0jb1)tG#O;q$m$aDX+pJ;3m@jZB(Ggemi};tDtPhqZL{Yj7lH}?%j zS)dS9$z=73TI1n)g_CiH_3uJ2t6%?iv;OpU*pYNkp!z!NsI2yb`KOjo!2Rsk1q!sB zt#@DDp{jGuhqr;M%v~pmn_N!5zb*OtjO+)$z9#C0&;NMmbERU({^^PT?RC(?y{u=L zdbA$o5!VXRi4Hz6Gm&8q9_Wpl(Y*7^xm)sXW2e{uK50P!%3FAeW;UJ6$YyEGUhzz zQ_7$PSz_LM>*Q8too#Jx9UWy_oFK7m?h{Pk!kFk?!w=`vEaaJ=!`x=TEN#1Ms0Qu& zAbEjKA`bjSL`YhS@bIXJGZ~7S`vvD*{WX369-Q|zAgHX?r?|m=59g}U%0T^2M}pE^ zP$M&p{3c_uMAIV*(|3j^!GsbJG&o81nL}!?*z;2ej!IFLnwXdXai`j8wgv2Su-iec zZr>Y}M}0Cg2R(nb&za`TSpZ;z$lOMgH-RKK)@r8LHZ0eN0CZ!X{?oDqhUo`RY z%hh#hp16BY4f<1~mRC}0@92o>BqDg4DFy0O&xV2#3EZ?Ahw>dsVj~$!@gE=MD1+p> z(4Cs8oCvA|fp6YK?B>wy?8?dECzS*g<4=EmlO^W5q+yi{MAsUx9RrWaSI+Ytg{b^m z^iqTzWA>w*$BDwOUZ|A{AQ=pBi=9bVROk^G7w0u^Gvs>6Q?vbcDlwTuR$97?HtU*% zgx^4}cAjoIYIiqNR#=*=8s3iiuKY#5vkjH6S8>}1y^UF|>g?)5X+Vp0t%85yl` zUW4O&h0#A=klT$_Ml(Eo3D#NND4>oNGz4|ULdxYuvP;zgcxh$a?nrQJY{ECb3 zz-G4`lUi$Wr}zUd`|6ET$j$_z$lY>xiT%ULG_KwZrPM>URN2{?nFFM~U#gG7NRM5o z*e*ST&S!@!NOfkoGnKzqALAW|AMy6J!&UC~=&j2)Zx$#-v#%r&5HLzne6+3VmBK2X zA^72_b+V7Lv;x#ug)d#Y)WSWGt)2|u$@Ml1@{U_Iy0!Xw92+!!s1EFVZqpF}c=d%r^!7Zp7LTG1F7 zihGz?Zv9PmzwZaT&TK#Ot^82K78@HIpjZxu#b}qFpf2+My;58Jo;{bR1|2E01!F~e z_H0Vj_t4GHwA9q|YilZ8U_#Z@)IfaAO>{N!r{dCanb&*VSN)O8Hv4hjCF>cs++r!R zRn{txc~1B8Jv6#U{F)^K?y@LKh;E$ssw)Jh&zT+6Ez zFR+6?G&83q+U-S)_Qb5OJMj4DTa8r5Fjqf2NpSMYnf|ix&;s)OE}l319dTV~N6!nN zX^tXd#P9>YCta6$xYVkQ8eaFkefQ1-wW5uBY(AcB(U}x4XrG~1<%4mvN^5IDc*168 zOd${m6B9`CbL$rrz|@cW;SMRA!G7^t87l0}RIwi_nEcKPGnE6p2?}uqQv)Ea=hW9X zv#qi2OMPz`oE#)xJb(TK_oM#BfoMK92#wW`u3fw zSpWgm0uLL0yMcjRfe`TIO^1>fU7A&=|DFUB~Qp#xG|I-b+I}$}$5AF8WC!+{4 zJImB`bRwtqo?;6m`ve&NoG|{407SE;7Z(?A+_-@Uv?ScT^NHUzj6U){62SvPB16%n zZ5sEx;YQETFE9b;f#MZjUS58F{u?*m6#bxZApOYo=-rZHKN#apA>f$+g?EC>SwHce z!ZUDF>pK3dvY+?E=Q<)VxJScjR;a~>Gy6H4&#hH$v%hFqd~`E1O76NgWPCd2if0VIbQarn^bu)wIS0+D96{x-2{ErCd z-zoWbf*q!j}B-aP| z5?MYG8W6C)wM9%y$^bIM>R45}MdZ|=ajtHkdi5t`qGomvS6V1PQ69i5Z0DamCo~cM zg<-mQ*KeU}@A~_sxX3procPm^`yyMBEx-|x`c z%?((B9F>(jfSX0cWucDj7TN8b7gB+g`8h{T*Kaatm*n_63?=anu9@W^jRhEl^pTwF9u9`mFk3vlWmhW8^k# z{c=8h{Db5R5Q%!p^i7d{M%xSBF3XdXlc3WU^M2diascKucJ2c@{_^F^JB;~CC@V6Z zPMi-w*aEbTUxFKYgP z)o%d{R8N|GuFt{VhRdyTz1`KZ#m-X$%6`fP*xbZKKfrmT)*dJ*Xu;qIvphKTAbhCy z`ad^YFjKgFd~>#b(6~@kGgN#<;%UZ`L-ivJ3Bk1#Kh3) z5J6KO^v5v7Ll;C>mulI>XUFN`VhfmvyE5Y0ClUA6Q2+?dO-=8Q2rW6xd^=y}2ciqe zj%6zDZ_6#r%r@K*5oKE#RF@QaVQdd@FwpT^xd82B;M1F$xEGHB?2bCkSO5GLgJgyx zK8_5LrYaZjs-4K607`-VLRT_K1LjDV?)n^rp1k~-Ylz7Pf6#kf#Oh_0Rx+>x@_`ox zhzBcns$VUTL}c^0@Kse;{|M|&ci~1GE?@X+qfy1w#Sa%^^Vsz z+lYkIOhBAwsiz-0{@H}^m>u}!xc62&NQ4`LZb!y8qJnsJR|}pCOcK7;0D=NxWCoyY zYLKq$L){j-jE0NMfZ?YW$gA&pEeyOj8i5~CKHqMwbJQ21?du-tQN4yYzhzP`0HA48StsHrtGl^Mp3z_yHv&(X*ROF9xP zrY+RhuV2e-N6`EGGBPq?>VdkR0vIA%;v zeyt9i9=R?UqUsM2vf6w>K>;B#)%`UTsEM#JGyCq(QjZ^5J{jxmlnKlCrw_W~rvu9W}IwpRHS6gpH2KHP` zuRs%VCU2f~$A7_WX_o#|JHhar8rw)n)Zj7C!COIvEPcaX`Rn9-dtMVGII>%Nq3z`jsy7ii%O?M+Qyx zUy8+WPDSiR&#)>$FLFMA)*4^BbihqWNVu~)CL$uDJFtpG>I0%ap9JL=6x8%;TqKaYOSfLNFwnusYcOS}bzZK-Gr$ z9qybWy`=gwodIhl$nb|yo)H8;*d!*Ly{;6e+6i`lp*ZF9OvU#-pkq&;K0VJOs|QA* zoGvDOyc|%5eL&U9BLRfjlrjZm7l^f~iT;dU_tBL*;a8-_{ct|M-Igf!GxWd9ST=Hn zfpwd%5>S5kb9gDk*~y9RBp^W*VCMiRSrl>wZ`6>f9)EPIE$bi#46G z?EK9mHyVo$=>+YDyk&$qIaj_#u-Hg&aBzrniVQI-<+FyV>CDD-^DwqC zh#F)Dufa*D9_U31ihC6km5C=$o}>qKn<3>U11MltWBT+Zni=}{8YmU5V`nNV5 zsezY1!)oH7!+wuO=433Z^7DDf^Gl?tJz+gP597z~w5;}g*2{i)P20a{!ahjZb#q33 zQ4n^2tpV^!Fy|wwa^!9sA%f%KNio&?bMY(T27veGTy^*zI~FiB*74pq$%)EMghZ8z zcsz>Vy>kBi`GI^ZP{4f)SFjD+7L_`Mj|RDlk$5iS{655>dOWbnA*qTlaB)HX`vEi{u;+=S?~iB_es+}w|qCh^0FnE=g zmL|I0C1nG9>jO3e=#_f0c{|v!--IU)Zmn&9Nz>hb)gy}!H?jBnPO0gQdtSbE(`&8Z zjpu|ns|21j{5bxHOdGA-prT751U>2tJ3-Qr#IenY3#g)694kj|M4iiu={^6O)OsD{Gx+DVG}9oea!ji0f1gf@AG5Z zi@iSH-r`_e?H_yb^Q1s;w?yp^Kz-+3+Ceq|CnM(C-b+bXLVSnrk6tKE{FHX*cWV2= z&$}Lo`mkR9i4se7a312xe6l|yqS}+!K2uM`eq6L=LQ+x^fVfQ{qEe1bPXjBWR839I zqOqgn#&1-rt+O*bzP`UTU&U%AqA&0G;kS~LFz@8IAa_W?10l~F8(aF}uWqaSL zgck_;jVN#cK!=mc%@NOv_>Nc+tKz%6A)v4e7!bBmI2;rLf2{f8M37$_8+Y)?^gS6>V}KASxdouKPx5f6OoEzdAQHf08<=WUyB*;83it1SNCbKt zDedi-`~Wq}uSumVL~B*8Tr~(lG(G)&`yEabi(CEhRqjiu2~LcRY|sVxQT>w`U?SFd zCbHdc4Mp1c7w&%)*ayu9`B7Q~lu|@J)-PMz3>T$u+c~&!`RalWyQ%cKrMyj%{2h~s zOcB#`rN{&&`JyegP4W$DsCW$Y9y2DI7#j~ki(np8XHe$W%|Hq_1!Hqig8&bv5wxS1 zaKRn!b|#6%hi=AzLsZ=|3jKife*5-qp*NG<8W0~*IM>pTq@xPY2bQnYS4LZSL~Cv? z&V_karvpZV52Y>@T-UD6g5}E25!L}Xh4px~r=j7G2RtNwBzpH{skumj=>)p{ANy>> z0R-MyanpOoUDJRRgfkU)8hk1p1X2_M!9aL|Xm8%ZmkUh!2+DDu`l<$<2|51RmD`vI zgn$dhYoE^3Je2-OP}~HVu!=}PzbS8kMsY+gco25 z>x9Cqa{Ti=CakAq^SAthbwDt7;kF1O$RC+bHPiIBEBLP{jvy zjjd%1&MFMNG((4)k=A{iCQ*;)RKAt<^ZuN_Fx~(}(p{Y`bz%y^*E=fft9L_mndpN{ z^3MFdje!2Bo!Bk@w4X>_QNv^aj=c1gDGWrPr2QMVu2)s&y05r=OJ{la=%nS{#w%9D z^=L@YN&F~j{!0z}`Kn$p7UCC0LjH^>U_%GCn`A=*owWZ4|Z_ETT z&}V&fWf1Y)G<9%r(9;`z=$>JZr5?FlV6v=54l3Y-g0q|sVb5pCT9aEQI<%h$9P0|s^AEZCSm#Aa~ zv>71EMU?@`&IkyFHV`-1z6=q6MX#<54&;FlMzOe6HxG}!gZ(WAjn0Ac=1@{b(Rch!e?)LVs~SK{ zc+E*9vZws&`SW+h>6rka9;&>+&f>;G0Mo?+pOh2CSG2JN12i(^mIp6$YG zVD>3bfLx`l99nXMr7EVpynH)_UmFLq|Fs7(GxPH}^m0C!(9pFL4DIdhw%sX>!L+<- zV|SD+A}`%G4cLK}0s!Dy25HRc3851l!UFELXNl~8nNpmAbtw;H6l+0|Gl>UhkusA1 z$*F*|_rljO@I2XS7df&EN?|}*qEwW+cTZ~?aEFxC)Enm?2DBZeo3IrfMF)qQDj@>j z(dz5Kxx&uPEe;C9Pmi6TpCEGUGcHs$PZY4dBylEl(dHqmazYl^jsQu3bHpc4o!S(H zO7mOZ^4y#OI|^^jIn|+Joqrt^Y6klJ05AdS+I*`T5wEQ6Ux#boxA%otpqj|7TZKSx z_4V}y1y4&$%iO}WG*cj>MMOk^4GnhkM1j!@&_q2wJy7?ieiNlE}pS$NNHPvtTzNOjVRcFfl>)7 z6HY1{a!F=VoRiZARJ+JN&ie}bwTXZ%``9=603Vj`wBCg;9vfX50A{cWKfinTo*z8T z;$9OCr`g{7C5+93stv&%QZ>4lF%c2nKv)Ng!FTe2r3Ip(K@DUzB6B)spfhRDmg^@D`Zs(+1A559~{T0-_Zx z6lh-l<4Nuu@N>U|Kal(g@HIJYaB9v#zoHk_;a3w?8O9{@8}7jqpCd);VTXbG?D>x; z{AhItj{Sb8KS)~5X@l=0`4)pK*P*n!vg;Jj9{*mCB6xTHCp8(n^6M=GCqa!1{QT*) z1V2@~|D;?25%Qm_U4Qsi{z7m5+v}iehR-*raw}qEu@72FNwnls|AGW>Y@MTl$*1BQ z{xme)|Lg2d)rSus#%rJ!78b2g4T3Plw^8uF%bZ^?J8qowo^6Q+ItQp&FRo5s{AuNR zN^_Ol@^q~mG7bh~8sP!l`fvOJ#4J=+7TeMQ(Ah3>JT8#cej9Vm2KzR&1+E6XV1n}CE=dlXvsX4t?T zr<;JBB<{XSU-ivHtIzGz+k1Z*BJ8cxAa^9>2ocu{8Rt%TO=W;Vr6IU*$E;nW&)Ry2vE6< zoE(#wSJZ8npAw6fKNx*RQICSGtbi1^`}a>(@awV4$;;hn=0Biz|fR+|0~%Whla{ z%&OmNu_t{%O@y2K6Hq+OJ?Y*!M^m2tT^?*Z|MbIiyIJZagLf`l&7%89s;&bqSn-e1 z*5A9yW71ri5%ed83P82YQ}NYI_&Lo<7ErHWHfr=*Cx-Jb2n&0dA+l(!qh%X$h-KDQ27YXLv(AF zkuUWZQ9;8)1r;ul`4R+}Kj9(}ex6$Sa=_QWHs=UT2;RJL=X#-X=Saji%;XM#)#M{v zr2?;iun69_PTFmEhx#jPf!n|C$^^&Tr4a)s|A{C(b8QE)G>5}gYk7pwQuo?2@O}I~ zg1^GBP}V+@y24-S>#kMK%!jvie`V=eq^Dl`ap6k=b%+1)Jp=dtzft_3-BlZDeb8CI z1QqD0=)F`nm+|6nA{cLdM%XzhA_v2g=(ck1Bi|2_PdjDKb zpG{bXaYHuQGj1T~1BD~HJO-4W{vPU-v-yBUhL5jrWF#IGssZqzxoLRU z(9jU*KHq-LK4kg7M--nG^QE zNB|3b^-uNj^Z0fsHrpAv6a#To43zBv@kv+fFn0wTYIasvRc3WWs#okRw$UfUd~O$-yN2#03S* zff7H!I%(>^G6o9|4+l);;>C*qjo7UJsLzeicLxq7U;zT<*n^|@o)`+dZKd=kV6r5E zK)bgw4IE<2%gc0BRH!C8`*rFH78aH;CW#IdFfa}Q&8kc#dmDJ}Y+(8`82Us3KE5dA zNDu;i38=S~ZpcejPuAwXG&F?K3w^=c)NID-r+AUs#L`Hw-95|6cNh$4a2%>jx zgm4$+(pvRaN8)mhYJJ=Z|GzEdvFZgr{g^fILKO{QEi9V=FT$~;oHKnB10f+NhZLF0 zg91iA9IK_`yWnhN4UE%gU60DAe@ z#f7hN6p$fPQ&XT%`j>*qpwx|g`xd;aW6=h1OOS=UGXbj$qUJHjB-F&yN%(pzDz@!A z^-22lmAU(Yat#zLjFc4SK*W_RS8^j5z?zHN%T$VQQki<^%ui(fchf+7kg~Jg{_1e? z{CkTe%f76L{Cs;L2thy@_~5|XE$i=y`h;~kb*Z5JxS~)g$ht~#e90U-tTv0Gl-4Eg z&QZ~FA(t-F(17|`nPL6$@rk&V@ET0yyLUrnwz?7$@T{z?k`lgwZ(#VZhqOB`v3-5YTqmu$Q-K(BG{uS*ORYmjxr*W!D6tr)K;fB@hh~NkJ*K z&eljZM@h9{Z-6I3Fzr*J-X6P?&0c+SzeI0@cF67N!7`L zG9WLug=WHkCatHcAizWYm9&;|G~~lWqXm=G41YJCgVrd0UwiC332F+qHjGuZ%3=JE z7?Y{c@3pFk4Eo(7PI_BLDF4kwI%dKRzM?nj(OCOX`^; z{~6s;oW(##SLLx`tS|z6g}|~1g6(GZag&>4CZj_5V-&v%p+65VfR3B;SQUF)Dh()I z+Zn9E4EVCF%_t0%KN(Bm!JeWBMEv$@uiu)0uQ?IW_}65$FH-RJ!=!yws2y<(c(FJF zkhiC-&fHciiNevBI39fjT3-z?qD}%uEB6pMR=j2+;*6Z3q%W@ay#VO8q@jnl9}mLzKxv{xN4x$ zxx~f^+Sh_8HNaMN(KiC=Fpvn0?e}&kYcZ=JH>Hl?ee78>2;0@s3c%qd7<|_2iGUZb zg-i&43WT}pLg{`a55ZIa?n|ZFIKb9`sC5&V284w{Rv#G8)#k1I?7hDUh|TqD*Ibc^ z=+do7)uHro{hy|GkWQ0FtU$JnW`9(>Hx&e=3E&jnC->Vs!QYb%3zGsJio(bh)W^R2q%EG8Th$ysB(Cro7FZ7g*_Z~AIsWd2rt9egHa#~M@L3V zS^T5(9rL^MJ^sqgo8hu8%BKkot=_8IjwCW}TF4O)Y?%nDSoh5V8FS$Yuq;<;fx!pV zF(V_R=v-T2r0VsIry~GF1TOZZK7>mMO}t`gX=_W{8U&OEfFfWl^Cx34Mn*l!?gYrm z5@yVe#MiSKQbtmOCVVkmRo~QDuK6y?_;U34EXM$+2qLpj83V+Y5*4l>JJG)+xOc^et2EwbE1 z#s%Jq)=`nGHIdL~onO-=+(l-ed*q4#sFD4J?9nH^_uMT`ev*VKWuVlLRDYXs2vTiN zEer<3+rP=ciw>U>MZUBeSwBTVuduibo^23}4!(GPiH`3{-6d@%g>Xv6 z8?-#SWx>0#g|$L$MBV}QLf{_%Ym@g_`1fQM_?2+QzT!U^0W*_fZ|+Q4Df@21y{7o zu|*~ZMU8@LRCIxyA!&h%+Mez zuB^fzySpmjg$y`APXTh)0*CRy%ny|gK}!M3RW5wTyaU4>SPXQGJ8$mK!vIz%p}j5b zl?pV|62J8yl5T}RR;vI;ypzAVYqeF_o2QFEQ$XPN2uQrc;Cu-7>zfOUto?H0j|@pN zpur+?z`RKJ?Rg2mXW#VzM8=DsXN4*$gwB_OQx)5FC&11{^6=pMH%q1 zmRj{M0RaFYY3o>&Ja{3VeZxCZ&)e1!#$sk!hZXZlsSMbQ%q7#0u>TKn?*WeG|Gtku zlBQ^vv_vEs5z4GIJZ2#?G>mMO$krYzn!f;SP&SvCSby9=J{=;a6P3RU1Fgm*AXzRT>}KX-9rQO@M4 zJcCRxWF*!2vWL}t`vm)~-0Sm|Ra#%qtWJDhdA=e52^9E5JCO*=iw)`k=l%W6eZPBx zGQZM!GaDOQt(wNDm~8!QuB%f^lQHxq;(E=%N|zc4X@U|mjy=B!%86NRlI)+0dNN@J zBi@hflUqiY2{amt7&ZmQP?4y{Pg{wK%vMCY-8!I_H|8%+?A}Evm>9<6;l55=f=#|J z#IZsQW`4i_YQ#m5g%B4XeuR$TdfWP@;w2O0?9SQI*FMQMo|w>bA&@!On3pga`dyj+ z%oIKtmS?dUD$LfPhD961?#}`QGIHYN$+;J7Y1ihBN;`hvXy|wGAKz55SxR1Bo=jGI zcIMLwb07Ko`x`SPb3)l4+{nw%cax`IeJN~1)0Y{VvoA{tHhf43j^M+M8naBlIdr!U zih23plvmun?0Bqdb2;_vV_$MpZ2k^)VbY#3L4=;{FgMJm7Nz98e{1&Leyi|`zz`?a zO$6;;6g$}ARs`F$Lh!W?`1j3I{QKI&l&~K=Xm%_i1Z-_oq_5DOkv1;4X$8`w=l3&b z&cr?MeA1z0cW>6c>mNU!80>|P40^Wl#Pye3;Us=Iv8?~ZaVL~|e|I9s!PuFc-06q# zKm7bJDE42n#yO-XJGrA90{nm6QL?eI*|+aC z?@J|m;&khTSh_!ORZ%x5y1P$;2fMA#bIl=HHRgAtR|bL<8XtLexu4EE`nkQ;du#)k z5Y4MQ&dzCvOo3mbd=@?Z@p5{g#?IBwAlq*}qe&u_I**p*{1ON5(%fXwL!?884lS8r+JekjYqzUD*p5#j4KSs8CMp1%3O@NtUJ(Vgm`MnPK=hvgO%U!LQ$w+ZVv4AE<0Rk#K$ezH178tcT5ao3Ug)&N_5Vkxg3cz@vwY#4t`$?f zb^DuEYe1WvP_APA1Jl706D-=-@zhX$-(wgCOt zk0A+HdW?`hz01t_ymo>ulH>@BLFgq5gz~s*+T{lh*<3TBb3JYT1a_?izyU<}pWsFM zTRnN7Gd9n&Gd4}CUD8UL5|dYo%&=j-B!lP*C6Jx6B(iI{CYf0+RX% z^S<|Bo^W^i+14S;|8A{pFO)quDvMjkZt(acLnK%&uZA*ekl%{bhHkNgSRl#q!wVXR z0C3h@nww+n*`r3<){g@j&>p^fKH|CV5eL^e|9%X7KF%#$T-OC>aR`{yu-G%on3|e8 zkCoJqI2}3iX}D?bt*a9EelDRA*>us4%8$iv?Q?UfD>|#YSFByz8Xn9~+IZTDnzctG&hS}XYezh# zHIn$>K>LSpYPOw;)%ET1RlDro`P;7%wLzRO(-T$Z)GYWwLp`#8QU`R?>>J(7$8&}x z-dOKpIkIc*rr^tv<9c;?R4InaX(k%3i0ZZtkE*$ph)qw=z^j80j%bbM#k*^wD5;Rp z*3{H|X>ZqmbNBfW`<5*m**2;1k|V(=&F9LkX>DnN6fUrR|C)Et@o7ny`q)MozFvnf|YkyvKHaYvVhk_QbcO15Y%)H4dP;A4!{T_1G~Dq zKtfAN*%@bqW~i`bhk2xEz89gea~}qb0>|ZATp(HjmTu{k>T1DFn=bag>4yO{3k%C# znGhs`H*YRb&+m87+MIUTpNVUA@XTU z)t6R5&#N-EA4MO&8xtESh{qR?UULk;eQ;6lwY%RhN`|{%`CO(=KdRgFC@OQn^qbt) z`7)g6l7}gchUaCUP3c#@$`gWs$*1~uacu274KqJU!@QC^F|^H;V~e8Mlc$7eL1;8? zZ>4cl+P}BAGO*w5dzOpdyC2V8zPQ*ex)3`lQ746=&p5tC-Y!1JpS<4s!v&5RyD<|h}Gn}sKiLxc{X}X z0~oDS`^HLwRY@|RkJTgoa6K2Vd_BFJna1gSzyB)j2am;H-Cwm&VZ~m;ksxJixi(hz z&%VBk`+CsU%Y+Q*wD9Dv+a2CHfALwZ#pEON2#H$L-}kq8+?$|tGHf{g{-E|=C&Uxe z>pY5m;B+!Qz1Q|&O_rmhjLfY7eG4aNu9E$Avq(<-=^th}9scY)OYYu|u%MuQT1Grv z3$8n-BDfo!e@R241IRC^@YrUa(eB}a{{GDG#lqdl%=H7TTM(9#laB16gQC&1xv8La8LD&lEv@s@F;UuOJ`bC6j#&x>(0m5>zr;pTaU>)r z9yxME^xLat(4T=-92vYd_^dxl0PKDQ%-CvZVXx9MoB@H*T3B<7rjARUX88SGD@mjs zAI7daPj5|yMQ+<}Gn3&%Zh7cXDcBDBgxylbzIKo%{qNpA#p{bWPoSL~lvwa7c9H!T zE?DrH^`yTcA6%$`mBdLsijO~w-Wr%GAlER{*s!GyXnnQP>2w?{)D|22`MvBOVq=NF zu#dNHCq>W7Y5-X8CT3>Pn_G+g4vvys`CU!6CU$@MV$%_uE13d@MZ@`~MeT(rb<%#k z_GPZ5p*}FR@pA@FU;D7oV)C^juAOErx&c7N4<5`#3E;C$jn{G1PJP45mC8qt8po=_ zL>P&W1V>ve1ZTAK=TkE6h1)M5_t$8B0Gxz%Fd;H7RFFnqT3Wc)sKAq*#Vn++O7sv5 z^B4$?!TdTNeUY9*t*x!0At6-|B_$-d-f~2(5;rGKHn^XqkWIz5>-{d9M5$Gjla+i8 zJI@BC9?L#8WqR>Ltcz!x_6XDXOQj^C!zOHOV#4oNlpq2U6^=I0vm_Z^PZEL%kXi}~ zqzpt)vQ=gx=ZlVxj%^QI7}mYgaoDhCf9ERQ=!Ujbf;Z{kQAUpo== z#%z$t@gy>A-1d1_sT?_?tE)>hcW&;hSDrpT9SRV+G3%qdNPcM};;dC{q1;QrO8LpK3hhQ_a&Y`wv@8?jUIzdBAs!$6GI4+eui2!w zVD-9npyR)W;tknfVnRY*zgCt*Mr5SS(6?Kt=I31t18OpE-Gwxt&EopsGc}SH0Gw5K&__=Z0Np_O)%YjeHttc7KgMy8_Fok|@* zp3Sn%{*#xAD%-7d;j&BB%1ZDudu3kGAwqC`%~S|hDL8>vlbB8((X@&++c+O;)eZfU z;L;Tq8W|ZyL`Mg1KRKs8=)nW0`&V@Gn{5zWi16znzPhZuyrgf_B2PTUFGGWWzX2rD z+&qPBBJSB0kH@`7F)^;4ob2pmNl6}GnHx85ph=eC-nn^~sh!N;6preVwGVa}ER5tl5DhD2|M^dTER##W2V*%x^ zPBq$VRvqs?sM@-70QYlc82|?fJf`HcZd|v|YFpS&CO((#pJtR0*9sLw+HMg`HM&!bN-AZ$8PJ@YNWHe z2Ku|H3BL%9_j|9(V>%_K{;6nUcj3hR^+Fr1ovoIp-R3lM`W3RW|Gb~<_dm2cpDXGl z$LhxX`bj@R5l0)peRTvK_VdE2pn3r@7k{!hyH3%9evjH$78APmf3L;=ENcFKpM>Yo zbi`JG+s$~+^LHqne$&DoC7M6wjByrPzfRwJ>2m`OHQnM#xuSyv$*Gn{Pr>L-L|n9;Uw144jAx@OFh`TA&MOnD* zwa57C5+*+`wN@-9ls-3HAm%mQASi&}J2L}Z`sj4;GEeETj)0x!?2IaB|5f4mJ-fH# zgD?>dahS6R3ElH1U#LW2tnCO&Osq5(D36QW1LlE=2`8s^iuv*8Jh!q81p(WTpb?kV z+i^S+kE?7>^E(uIq9P*cad8UjC3!+{0C1vmWazxK_nq?gpzCfngCXZBYJa1o2ZD+n8ByFq`a-Em!kc_oTuRshqO1GI-lE zGBVcIyP{YYNuC%&^P^s5R5`9#_tJ?=UXQL30!U!e=+kXwXLqYAythj+y29z`3O{ax z=EO7SpYL{@iu9Md11yhCMc7Z~*O9`F!D~+12%$VaFHcgP)%QI-15ORXPN^)dCUO*# z!fhXz`_OwgHZ=u{PF-4hVFYs45Spz50^W7>N%G!OTl?hQXj391w*f{lbsGEjz|mF@ zz~AG|sF#Y?aetn;2=!-YHV;SkBMZWQ-E1(tj?(w$9)Ek0U<1n)I9#Qtrza&P4Gr1w zuC2VKmZ%j*^-Qu~&4iamGBJl~5-6G5AljKdUBUEi-ltgGN+$zf0QN-TBb$ogBvn4`;P)lW59qG6zL`}%bN^E!Rd zxuTO~9G{lv*Kym~`TM{Cn?4@h+^A$$>CIk4AUe(n`XK=v> z2Td<++-42)-0XY4!Ei)8Ig1eaXZ|_(~YQj#MYMQYEvC$kNrTC0PmBpJjQO zo_)0s4fWMYMChVMy$%)W{@dQRha+QFN625PefpL12Pm7Re`Ft`+aM;h)YO`jMCzq- z$e?nHPravskUiq>=BttJku*4>Y7|g+NvYN~08TouU%$rd5F8RB)>om}QwI=o?vK7X zq&r4Ky``Cy5);0WA1|LPil>;IK=nDdr(=Ck%~hpChmHyOp{JILj%EKgRubvdMQtD5jsL2rjjw)gku~j}pJVmj#h7um-@-Y!WM(E81rFEcG6uv~gh{Xcp=I(_ zsecviYS&5cJw*8P6}uhBi{0?d%XuwhoJ(I-{PtjG5p^o@r+2EjUh-ES@cR#$Q870L z5^U(nnrcSao<(|_v32Pw@JldX|=Ei%|$*!o&N45O^6GJ?&xXL2A4doQ3)V2>d;s4{4!y{tk%;+F!nS0YVa346v-b zzw4}yf1W_pLM;C4+%cb(zoM|*^`PYY}a`e@2aG z3Cms!y*v=!snxMkKCwFnnHc>`e!1K+3t{aT!L#_Y`!7Oo? zP*GMczPtUBK;D}-$dVr9oL~yGR8?IaCG%V5!^RnC=$jiSbLOy)1_#&R!< zbRuzdjUQGH)MO~@jvl?Al{Gd|ckE%r;rs{Cr>3dtfB(LW`s>_W@R#$2DvL`>=;zJL z&XpX}%vF)aft+?v^H%pM>apFxAXpPR~~w;c{uah zAIUiO;GT-~)Nj-co>A29g}FaJ{xGXo$skIPHN*?om?BZ=m{w`D*SaGz>wVVemrhE< zf?(O~yF_H;_xHwka%wHJygXu2lE7AQBJQ*YBgu&A@ci&j&XH{ZC$@(za^u_ zoPXCnyFZMrYzvzV_A_djKWYWs*!Zz!GgYL_Q$d(`gBQ;ElY6bHb9`#v7{m()1Zj9G|iA$I>J7G`_ZE zv#;HG`E<)W2Oa$aksAb=$-Gby(mZpkA^k^m_upQSSgn7DhU9XA_{Yz41^C`Vhct?0 zOyAEeYos6YSILL}II9+A!burt-1Y0%OG`_^XjEr!_ce8JZ2vh2k(%wKeI67LAXCAv z56({_n5v2vuX@&udc$%jr`_maD-c2mr7V__E}v-fhxjzRQk8Y3zPQvPm0jfM$6;{nB&C7W$468Dy z2(l@I++uP6h!_f_%5SdSdIG2iR3M~g-E zcD{~#bF&s`5efBh@H`P4qvsi^pTr)a@{Aa6M=eiljx{z!|WKQc*;@u8m?cD zbDXRW6Y<*8Qgi7vEtbT@%m~?@?*4vDbyH(w9kw38#1zSA^6V6*w{PG6o{l>k&jYgv z=QPaOg8g*5VSYrISRhq5;JXyhryH? zV$~1>ExW=XY`#q1#au{K1H&xc`n!!y7H1H8mRwxL4Gn}E4p82MMR1h5qM7F57*wcFHxV`RlC*=QIr+_%I{)-Ik=qcyw%cCQ1+KVA@ znwg5V4bWUt(ui;f+)xXj)4+m|Y5eF)uHP^?FqCZlyk<4R5BeRfxEg826 z{39(JvVYz?OoN8Wrg01B-yx@ay~7vV1{RtNU)(qDokpCcPcHo0Hf7xl=P-CFkBI3G zEhgA4IEHa^mv-Y=9$82vo4ujvd!;T4UZ>5UZ}rs)2l>z{;_&`Fw^~SOEUUHt$=&oP zEI%$t+lDu%?IIw%iSPRy-c~N*IQWfOV-AZM8ey4D4%MG1qR8PMWPO`)5t}r5dIc=W zl0)A0W7;-3BQB;J?sb)kq|FUWvb>o7dMbPGHk!=di5Q^CBWQMVfR)nR+Py2{Twc6w z%!$NhEGNe8u&4WB#0S-Qv_}lY3uA^q9dwXA=JT)h`+Tv@&{TBPZ@?;N#Lo8A>pL-l zWwa^h9~g-TFS@g&nV*ZGz5KDNc`Id*H;5HlXP$3tj{6*F-zdCkTo^&2;~`^xCWTf@c*A(|Q-Wd$!G&6D`!#CV|kVI*cwf z{MkT>n=@w)?6q8U5)vH1Vg$&}>cNgyHEN3l{i{iCn>e|(Gq*)|?yuF@@YKSPz5VPb zv@@EUOXC#it5!8Iw@I-t*IMw9n$+Z)#k`Y#x`9g6RhBDn?a+q!o`A@#^|iFLaAi^2 z7*BZM!0SOR0s-s9Yo-6-nF&0vaHKE5ANUZmhRzA zNTzFYb8;%Hs>*th#f-;j<^#6?R3HJNtqY1=rX7-)$S)`;$i(y<#@P3bFuSyaHCZ7% zidYdo&|)h=8}atCiE;cU_3+RFf4&YGU$$}nT#wc4*6F6uXNVEWEcI!xbr$I+@#ODBK!?=0gl z+RH+PIfW{JL~Nz+`-3%};r1;9c+(w5Y}C{khO@6GCl5poudx4KBnXz(BV9`_%7=b= zS+&+QG(lk%vyrp5dynO}@IUWqt(G_M9|@&D&EtFAuw8Sv-@Qvz)W34o^5sFn!O$~B z!WSnl?hL#h6U6xVzM~C`8`g>F;5q}Xqyf2*7m=$wbJ!HHG*C}_`;o^kVp4JktzysS z)2Rq0E*JJrV5*L{Xj5ntbluW-?EA+f5)YRP>A&;kmET01QajVP>3;qFfJa{Nq{W$~ z+YZF?S=7{^OA}+%`cJn`vo0JR$B<%ToW!LnpBbf=FEqA`7a!xBTbFFs009*oUb0Kp;PE`9qet5M~>w&BuP$6BxbkSIKymDEN|VzEnht<8ig# zl7fk%vfI#f#mt&}qLiV2WZhq!_omKcrQK@RA+_S~WhI7_S26Q=ep@kGowngeecHL* zyhK4aUFL)dOv4mJ3KnyW_7fJ-y>TwlTKZMDq1+`seh#qdf%X)xG)>x=?l1klKGRH$ z|0lST*Y@$=QPi7^v?sZnagLM7`}QbxG-Qdhvc7gY&C_y`N_grP#_SoU&sp6!iy5}& zboe;??l4dwlW(L~k#0RZmQ6Palk~ofo=sZpT0L;_(j^cB96r99Z@rLhXJB2K(f7Zo z8$Abv%GPk5p`cCNqmG=%ta#L67MgF~i_pri#)$xTlk{_0iYY-g38ht4%14g$y;>%Z z@h^fqcDyf>JgENilN}MlR($QECE2*PTm<(M@h{>1j82l9j89c}eFkhE+;%v-xHN#w z9tFk-0-?dFQ=c(-Nb*8m?q+|Sx1f39Ah}YtI7koXDnSR@mMc_+Z6%w--|&=L*j&F= z`KgC2KeT&c@`2v6Xj>BSCJa;4p%LR(bo{>^l#*wioF`#gEq-QjP1v&sWhr`FHMO-9ji5b@I(mBUM=2*_ zUAKAHX#)5B)$iHg9_-%$N&@)lK@1Uxg{~}bzmUMx3Y*rjUPehzn;2`iNRBg!pmjhO zMi*KmYCq2>!Ct$jH-n+p?)OUhe{hM@ofn5IH2JrH2>%=zK~E^_WG-FJgP5+ty8JbHlUda_3jPfk32~%1$ebwop@SZIZ)fe!~->?F$sZcK|f1ck- zn=#*3cC$=ZDMz&TR!lJ^SqJGZtb>Ip%ljU6s$SjaP7i-E=oXP)2n`?4VKb1PVoS

3Zn0kdxbhwO4k^5WsHF)N-T0x~Gl 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 Uxq(WDkv%OVsUVSk{_3s&2Qf#y761SM literal 58414 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 diff --git a/etc/drydock/drydock.conf.sample b/etc/drydock/drydock.conf.sample index fdf4c39a..323d4df9 100644 --- a/etc/drydock/drydock.conf.sample +++ b/etc/drydock/drydock.conf.sample @@ -78,7 +78,7 @@ # Domain name containing project (string value) #project_domain_name = -# Trust ID (string value) +# ID of the trust to use as a trustee use (string value) #trust_id = # Optional domain ID to use with v3 and v2 parameters. It will be used for both @@ -114,15 +114,35 @@ # Complete "public" Identity API endpoint. This endpoint should not be an # "admin" endpoint, as it should be accessible by all end users. Unauthenticated # clients are redirected to this endpoint to authenticate. Although this -# endpoint should ideally be unversioned, client support in the wild varies. -# If you're using a versioned v2 endpoint here, then this should *not* be the -# same endpoint the service user utilizes for validating tokens, because normal -# end users may not be able to reach that endpoint. (string value) +# endpoint should ideally be unversioned, client support in the wild varies. If +# you're using a versioned v2 endpoint here, then this should *not* be the same +# endpoint the service user utilizes for validating tokens, because normal end +# users may not be able to reach that endpoint. (string value) +# Deprecated group/name - [keystone_authtoken]/auth_uri +#www_authenticate_uri = + +# DEPRECATED: Complete "public" Identity API endpoint. This endpoint should not +# be an "admin" endpoint, as it should be accessible by all end users. +# Unauthenticated clients are redirected to this endpoint to authenticate. +# Although this endpoint should ideally be unversioned, client support in the +# wild varies. If you're using a versioned v2 endpoint here, then this should +# *not* be the same endpoint the service user utilizes for validating tokens, +# because normal end users may not be able to reach that endpoint. This option +# is deprecated in favor of www_authenticate_uri and will be removed in the S +# release. (string value) +# This option is deprecated for removal since Queens. +# Its value may be silently ignored in the future. +# Reason: The auth_uri option is deprecated in favor of www_authenticate_uri and +# will be removed in the S release. #auth_uri = -# API version of the admin Identity API endpoint. (string value) +# API version of the Identity API endpoint. (string value) #auth_version = +# Interface to use for the Identity API endpoint. Valid values are "public", +# "internal" (default) or "admin". (string value) +#interface = internal + # Do not handle authorization requests within the middleware, but delegate the # authorization decision to downstream WSGI components. (boolean value) #delay_auth_decision = false @@ -157,9 +177,6 @@ # The region in which the identity server can be found. (string value) #region_name = -# Directory used to cache files related to PKI tokens. (string value) -#signing_dir = - # Optionally specify a list of memcached server(s) to use for caching. If left # undefined, tokens will instead be cached in-process. (list value) # Deprecated group/name - [keystone_authtoken]/memcache_servers @@ -170,12 +187,6 @@ # -1 to disable caching completely. (integer value) #token_cache_time = 300 -# Determines the frequency at which the list of revoked tokens is retrieved from -# the Identity service (in seconds). A high number of revocation events combined -# with a low cache duration may significantly reduce performance. Only valid for -# PKI tokens. (integer value) -#revocation_cache_time = 10 - # (Optional) If defined, indicate whether token data should be authenticated or # authenticated and encrypted. If MAC, token data is authenticated (with HMAC) # in the cache. If ENCRYPT, token data is encrypted and authenticated in the @@ -211,9 +222,9 @@ # client connection from the pool. (integer value) #memcache_pool_conn_get_timeout = 10 -# (Optional) Use the advanced (eventlet safe) memcached client pool. The -# advanced pool will only work under python 2.x. (boolean value) -#memcache_use_advanced_pool = false +# (Optional) Use the advanced (eventlet safe) memcached client pool. (boolean +# value) +#memcache_use_advanced_pool = true # (Optional) Indicate whether to set the X-Service-Catalog header. If False, # middleware will not ask for service catalog on token validation and will not @@ -229,19 +240,23 @@ # value) #enforce_token_bind = permissive -# If true, the revocation list will be checked for cached tokens. This requires -# that PKI tokens are configured on the identity server. (boolean value) -#check_revocations_for_cached = false +# A choice of roles that must be present in a service token. Service tokens are +# allowed to request that an expired token can be used and so this check should +# tightly control that only actual services should be sending this token. Roles +# here are applied as an ANY check so any role in this list must be present. For +# backwards compatibility reasons this currently only affects the allow_expired +# check. (list value) +#service_token_roles = service -# Hash algorithms to use for hashing PKI tokens. This may be a single algorithm -# or multiple. The algorithms are those supported by Python standard -# hashlib.new(). The hashes will be tried in the order given, so put the -# preferred one first for performance. The result of the first hash will be -# stored in the cache. This will typically be set to multiple values only while -# migrating from a less secure algorithm to a more secure one. Once all the old -# tokens are expired this option should be set to a single value for better -# performance. (list value) -#hash_algorithms = md5 +# For backwards compatibility reasons we must let valid service tokens pass that +# don't pass the service_token_roles check as valid. Setting this true will +# become the default in a future release and should be enabled if possible. +# (boolean value) +#service_token_roles_required = false + +# The name or type of the service as it appears in the service catalog. This is +# used to validate tokens that have restricted access rules. (string value) +#service_type = # Authentication type to load (string value) # Deprecated group/name - [keystone_authtoken]/auth_plugin @@ -335,7 +350,28 @@ # From oslo.policy # -# The file that defines policies. (string value) +# This option controls whether or not to enforce scope when evaluating policies. +# If ``True``, the scope of the token used in the request is compared to the +# ``scope_types`` of the policy being enforced. If the scopes do not match, an +# ``InvalidScope`` exception will be raised. If ``False``, a message will be +# logged informing operators that policies are being invoked with mismatching +# scope. (boolean value) +#enforce_scope = false + +# This option controls whether or not to use old deprecated defaults when +# evaluating policies. If ``True``, the old deprecated defaults are not going to +# be evaluated. This means if any existing token is allowed for old defaults but +# is disallowed for new defaults, it will be disallowed. It is encouraged to +# enable this flag along with the ``enforce_scope`` flag so that you can get the +# benefits of new defaults and ``scope_type`` together. If ``False``, the +# deprecated policy check string is logically OR'd with the new policy check +# string, allowing for a graceful upgrade experience between releases with new +# policies, which is the default behavior. (boolean value) +#enforce_new_defaults = false + +# The relative or absolute path of a file that maps roles to permissions for a +# given service. Relative paths must be specified in relation to the +# configuration file setting this option. (string value) #policy_file = policy.json # Default rule. Enforced when a requested rule is not found. (string value) @@ -348,6 +384,25 @@ # valued) #policy_dirs = policy.d +# Content Type to send and receive data for REST based policy check (string +# value) +# Possible values: +# application/x-www-form-urlencoded - +# application/json - +#remote_content_type = application/x-www-form-urlencoded + +# server identity verification for REST based policy check (boolean value) +#remote_ssl_verify_server_crt = false + +# Absolute path to ca cert file for REST based policy check (string value) +#remote_ssl_ca_crt_file = + +# Absolute path to client cert for REST based policy check (string value) +#remote_ssl_client_crt_file = + +# Absolute path client key file REST based policy check (string value) +#remote_ssl_client_key_file = + [plugins] diff --git a/go/src/baclient/go.mod b/go/src/baclient/go.mod new file mode 100644 index 00000000..57cf840c --- /dev/null +++ b/go/src/baclient/go.mod @@ -0,0 +1 @@ +module baclient \ No newline at end of file diff --git a/hostdeps.sh b/hostdeps.sh deleted file mode 100755 index 1fbe4552..00000000 --- a/hostdeps.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash - -# Install host-level package dependencies -# needed for local testing -set -x - -if [[ ! -z $(uname -a | grep Ubuntu) ]] -then - apt-get update - installed_pkgs=$(dpkg --get-selections | awk '!/deinstall/ { gsub(/:.*/,"",$1); print $1 }') - set -a added_pkgs - for reqfile in $(ls requirements-host*.txt) - do - for l in $(grep -vE '(^ *#)|(^$)' "${reqfile}") - do - # Do extra magic to support a list of alternative packages separated by '|' - # none of the packages are found, install the first one listed - IFS='|' read -a pkgalts <<< "${l}" - pkgfound=0 - for a in "${pkgalts[@]}" - do - if grep -qE "^${a}$" <<< "${installed_pkgs}" - then - pkgfound=1 - break - fi - done - if [[ "${pkgfound}" -eq 0 ]] - then - added_pkgs+=("${pkgalts[0]}") - fi - done - done - if [[ ${#added_pkgs[@]} -gt 0 ]] - then - DEBIAN_FRONTEND=noninteractive apt-get \ - -o Dpkg::Options::="--force-confdef" \ - -o Dpkg::Options::="--force-confold" \ - install -y --no-install-recommends "${added_pkgs[@]}" - fi -else - echo "Only support testing on Ubuntu hosts at this time." -fi diff --git a/images/drydock/Dockerfile.ubuntu_xenial b/images/drydock/Dockerfile.ubuntu_focal similarity index 67% rename from images/drydock/Dockerfile.ubuntu_xenial rename to images/drydock/Dockerfile.ubuntu_focal index 73e72c62..803ded7e 100644 --- a/images/drydock/Dockerfile.ubuntu_xenial +++ b/images/drydock/Dockerfile.ubuntu_focal @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -ARG FROM=ubuntu:16.04 +ARG FROM=ubuntu:20.04 FROM ${FROM} AS baclient_builder ARG UBUNTU_REPO=http://archive.ubuntu.com/ubuntu @@ -23,16 +23,23 @@ ENV container docker ENV LC_ALL C.UTF-8 ENV LANG C.UTF-8 -# Copy direct dependency requirements only to build a dependency layer -RUN echo "deb ${UBUNTU_REPO} xenial main restricted universe multiverse" > /etc/apt/sources.list; \ - echo "deb ${UBUNTU_REPO} xenial-security main restricted universe multiverse" >> /etc/apt/sources.list; \ - echo "deb ${UBUNTU_REPO} xenial-updates main restricted universe multiverse" >> /etc/apt/sources.list; \ - cat /etc/apt/sources.list; \ - echo "APT::Get::AllowUnauthenticated ${ALLOW_UNAUTHENTICATED};" >> /etc/apt/apt.conf.d/00-local-mirrors; +COPY ./bindep.txt /tmp/drydock/ +WORKDIR /tmp/drydock +RUN apt update \ + && apt install -y --allow-downgrades \ + python3 \ + python3-dev \ + python3-pip \ + python3-venv \ + python3-setuptools \ + && DEBIAN_FRONTEND=noninteractive apt install --no-install-recommends -y tzdata \ + && pip3 install bindep \ + && bindep -f /tmp/drydock/bindep.txt --brief | xargs apt install -y COPY ./tools/baclient_build.sh /tmp/drydock/ COPY ./go /tmp/drydock/go + WORKDIR /tmp/drydock RUN ./baclient_build.sh /tmp/drydock/go /tmp/drydock/baclient @@ -73,29 +80,36 @@ ENV PORT 9000 ENV LC_ALL C.UTF-8 ENV LANG C.UTF-8 -# Copy direct dependency requirements only to build a dependency layer -RUN echo "deb ${UBUNTU_REPO} xenial main restricted universe multiverse" > /etc/apt/sources.list; \ - echo "deb ${UBUNTU_REPO} xenial-security main restricted universe multiverse" >> /etc/apt/sources.list; \ - echo "deb ${UBUNTU_REPO} xenial-updates main restricted universe multiverse" >> /etc/apt/sources.list; \ - cat /etc/apt/sources.list; \ - echo "APT::Get::AllowUnauthenticated ${ALLOW_UNAUTHENTICATED};" >> /etc/apt/apt.conf.d/00-local-mirrors; - -COPY ./requirements-host.txt /tmp/drydock/ -COPY ./hostdeps.sh /tmp/drydock +# COPY ./bindep-python.txt /tmp/drydock/ WORKDIR /tmp/drydock -RUN ./hostdeps.sh; \ - rm -r /var/lib/apt/lists/* +RUN DEBIAN_FRONTEND=noninteractive \ + apt update \ + && DEBIAN_FRONTEND=noninteractive \ + apt install -y \ + --allow-downgrades \ + --no-install-recommends \ + python3-dev \ + python3-pip \ + python3-setuptools \ + pkg-config \ + libvirt-dev \ + libssl-dev \ + gcc \ + ssh\ + curl \ + netbase \ + && rm -r /var/lib/apt/lists/* # Install LibYAML ENV LD_LIBRARY_PATH=/usr/local/lib COPY --from=baclient_builder /usr/local/lib /usr/local/lib COPY --from=baclient_builder /usr/local/include/yaml.h /usr/local/include/yaml.h -RUN python3 -m pip install -U 'pip<21.0' COPY ./python/requirements-lock.txt /tmp/drydock/ -RUN cat /tmp/drydock/requirements-lock.txt | xargs -d '\n' \ - -l1 pip3 -vv install --no-cache-dir +RUN pip3 install \ + --no-cache-dir \ + -r /tmp/drydock/requirements-lock.txt COPY ./python /tmp/drydock/python WORKDIR /tmp/drydock/python diff --git a/python/drydock_provisioner/control/api.py b/python/drydock_provisioner/control/api.py index beafd5b7..07916462 100644 --- a/python/drydock_provisioner/control/api.py +++ b/python/drydock_provisioner/control/api.py @@ -45,7 +45,7 @@ def start_api(state_manager=None, ingester=None, orchestrator=None): part input :param orchestrator: Instance of drydock_provisioner.orchestrator.Orchestrator for managing tasks """ - control_api = falcon.API( + control_api = falcon.App( request_type=DrydockRequest, middleware=[ AuthMiddleware(), diff --git a/python/requirements-direct.txt b/python/requirements-direct.txt index 3fe51656..7909bfbb 100644 --- a/python/requirements-direct.txt +++ b/python/requirements-direct.txt @@ -1,29 +1,30 @@ -pylibyaml~=0.1 -PyYAML~=5.3.1 -pyghmi==1.0.18 -netaddr -falcon -oslo.versionedobjects==1.23.0 -requests -oauthlib -uwsgi==2.0.17.1 -pymongo==3.6.1 -oslo.config==7.0.0 +# edited with compartibility with shipyard's apache-airflow 1.10.15 +alembic==1.4.3 +Beaker==1.12.0 click==6.7 -PasteDeploy==1.5.2 -PTable==0.9.2 -keystonemiddleware==4.9.1 -oslo.policy==1.22.1 -iso8601==0.1.11 -keystoneauth1==3.18.0 -alembic==0.8.2 -sqlalchemy==1.2.8 +defusedxml===0.6.0 +falcon==3.1.1 +iso8601==0.1.13 +jinja2==3.0.3 +jsonschema==3.2.0 +keystoneauth1==5.1.1 +keystonemiddleware==10.2.0 +libvirt-python==9.2.0 +netaddr==0.8.0 +oauthlib==3.1.0 +oslo.config==8.7.1 +oslo.policy==3.10.1 +oslo.versionedobjects==2.4.0 +Paste==3.5.0 +PasteDeploy==3.0.1 psycopg2-binary==2.8.4 -jsonschema==2.6.0 -jsonschema>=3.0.1<4 -jinja2==2.10 +PTable==0.9.2 +pyghmi==1.5.60 +pylibyaml==0.1.0 +pymongo==3.10.1 +PyYAML==5.4.1 +redfish==3.1.9 +requests==2.23.0 +SQLAlchemy==1.2.8 ulid2==0.1.1 -defusedxml===0.5.0 -libvirt-python==3.10.0 -beaker==1.9.1 -redfish==2.0.1 +uWSGI==2.0.21 diff --git a/python/requirements-lock.txt b/python/requirements-lock.txt index e2b83120..b52049b5 100644 --- a/python/requirements-lock.txt +++ b/python/requirements-lock.txt @@ -1,82 +1,132 @@ -alembic==0.8.2 -amqp==2.6.0 -Babel==2.6.0 -Beaker==1.9.1 -cachetools==2.1.0 -certifi==2018.8.24 +alabaster==0.7.13 +alembic==1.4.3 +amqp==5.1.1 +attrs==22.2.0 +Babel==2.12.1 +bandit==1.7.5 +bcrypt==4.0.1 +Beaker==1.12.0 +cachetools==5.3.0 +certifi==2022.12.7 +cffi==1.15.1 chardet==3.0.4 click==6.7 -contextlib2==0.5.5 -debtcollector==1.20.0 -defusedxml==0.5.0 -dnspython==1.15.0 -eventlet==0.24.1 -falcon==1.4.1 -fasteners==0.14.1 -futurist==1.7.0 -greenlet==0.4.15 -idna==2.7 -iso8601==0.1.11 -Jinja2==2.10 -jsonschema>=3.0.1<4 -keystoneauth1==3.18.0 -keystonemiddleware==4.9.1 -kombu==4.6.11 -libvirt-python==3.10.0 -Mako==1.0.7 -MarkupSafe~=1.1.1 -monotonic==1.5 -msgpack==0.5.6 -netaddr==0.7.19 -netifaces==0.10.7 -oauthlib==2.1.0 -oslo.concurrency==3.28.0 -oslo.config==7.0.0 -oslo.context==2.21.0 -oslo.i18n==3.22.0 -oslo.log==3.45.2 -oslo.messaging==8.1.1 -oslo.middleware==3.36.0 -oslo.policy==1.22.1 -oslo.serialization==2.29.2 -oslo.service==1.32.0 -oslo.utils==3.42.1 -oslo.versionedobjects==1.23.0 -Paste==2.0.3 -PasteDeploy==1.5.2 -pbr==5.4.5 -pip==18.0 -positional==1.2.1 -prettytable==0.7.2 +coverage==7.2.3 +cryptography==40.0.1 +debtcollector==2.5.0 +decorator==5.1.1 +defusedxml==0.6.0 +dnspython==2.3.0 +docutils==0.19 +dogpile.cache==1.1.8 +eventlet==0.33.3 +falcon==3.1.1 +fasteners==0.18 +fixtures==4.0.1 +flake8==6.0.0 +futurist==2.4.1 +gitdb==4.0.10 +GitPython==3.1.31 +greenlet==2.0.2 +idna==2.10 +imagesize==1.4.1 +iniconfig==2.0.0 +iso8601==0.1.13 +Jinja2==3.0.3 +jsonpatch==1.32 +jsonpath-rw==1.4.0 +jsonpointer==2.3 +jsonschema==3.2.0 +keystoneauth1==5.1.1 +keystonemiddleware==10.2.0 +kombu==5.2.4 +libvirt-python==9.2.0 +Mako==1.2.4 +markdown-it-py==2.2.0 +MarkupSafe==2.1.2 +mccabe==0.7.0 +mdurl==0.1.2 +mock==5.0.1 +msgpack==1.0.5 +netaddr==0.8.0 +netifaces==0.11.0 +oauthlib==3.1.0 +os-service-types==1.7.0 +oslo.cache==3.3.1 +oslo.concurrency==5.1.1 +oslo.config==8.7.1 +oslo.context==5.1.1 +oslo.i18n==6.0.0 +oslo.log==5.2.0 +oslo.messaging==14.2.0 +oslo.metrics==0.6.0 +oslo.middleware==5.1.1 +oslo.policy==3.10.1 +oslo.serialization==5.1.1 +oslo.service==3.1.1 +oslo.utils==6.1.0 +oslo.versionedobjects==2.4.0 +packaging==23.0 +Paste==3.5.0 +PasteDeploy==3.0.1 +pbr==5.11.1 +pip==23.0.1 +pluggy==1.0.0 +ply==3.11 +prometheus-client==0.16.0 psycopg2-binary==2.8.4 PTable==0.9.2 -pycadf==2.8.0 -pycrypto==2.6.1 -pyghmi==1.0.18 +py==1.11.0 +pycadf==3.1.1 +pycodestyle==2.10.0 +pycparser==2.21 +pyflakes==3.0.1 +pyghmi==1.5.60 +Pygments==2.14.0 pylibyaml==0.1.0 -pymongo==3.6.1 -pyparsing==2.2.1 -python-dateutil==2.8.1 -python-editor==1.0.3 -python-keystoneclient==3.22.0 -python-mimeparse==1.6.0 -pytz==2018.5 -PyYAML==5.3.1 -redfish==2.0.1 +pymongo==3.10.1 +pyparsing==3.0.9 +pyrsistent==0.19.3 +pytest==6.2.5 +pytest-cov==4.0.0 +pytest-mock==3.10.0 +python-dateutil==2.8.2 +python-editor==1.0.4 +python-keystoneclient==5.1.0 +pytz==2023.3 +PyYAML==5.4.1 +redfish==3.1.9 repoze.lru==0.7 -requests==2.22.0 -rfc3986==1.2.0 -Routes==2.4.1 -setuptools==40.4.3 -six==1.15.0 +requests==2.23.0 +requests-toolbelt==0.10.1 +requests-unixsocket==0.3.0 +responses==0.23.1 +rfc3986==2.0.0 +rich==13.3.3 +Routes==2.5.1 +setuptools==56.0.0 +six==1.16.0 +smmap==5.0.0 +snowballstemmer==2.2.0 +Sphinx==5.3.0 +sphinxcontrib-applehelp==1.0.4 +sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-htmlhelp==2.0.1 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-serializinghtml==1.1.5 SQLAlchemy==1.2.8 -statsd==3.3.0 -stevedore==1.29.0 -tenacity==5.0.2 +statsd==4.0.1 +stevedore==5.0.0 +toml==0.10.2 +tomli==2.0.1 +types-PyYAML==6.0.12.9 ulid2==0.1.1 -urllib3==1.25.9 -uWSGI==2.0.15 -vine==1.1.4 -WebOb==1.8.2 -wheel==0.31.1 -wrapt==1.10.11 +urllib3==1.25.11 +uWSGI==2.0.21 +vine==5.0.0 +WebOb==1.8.7 +wheel==0.38.4 +wrapt==1.15.0 +yapf==0.32.0 +yappi==1.4.0 diff --git a/python/requirements-test.txt b/python/requirements-test.txt index 0bc2eeba..39c828d0 100644 --- a/python/requirements-test.txt +++ b/python/requirements-test.txt @@ -1,13 +1,19 @@ -pytest-mock==3.1.0 -pytest +# tests +click==6.7 +falcon==3.1.1 +jsonschema==3.2.0 +mock==5.0.1 +pylibyaml==0.1.0 +pymongo==3.10.1 +pytest==6.2.5 pytest-cov -responses -mock -tox -oslo.versionedobjects[fixtures]>=1.23.0 -oslo.config[fixtures] +pytest-mock +responses==0.23.1 +setuptools==56.0.0 +ulid2==0.1.1 + +# tools yapf flake8 bandit>=1.1.0 sphinx>=1.6.2 -sphinx_rtd_theme==0.2.4 diff --git a/python/requirements-tree.txt b/python/requirements-tree.txt new file mode 100644 index 00000000..dfb02a46 --- /dev/null +++ b/python/requirements-tree.txt @@ -0,0 +1,1625 @@ +Automat==20.2.0 +bandit==1.7.4 + - GitPython [required: >=1.0.1, installed: 3.1.31] + - gitdb [required: >=4.0.1,<5, installed: 4.0.10] + - smmap [required: >=3.0.1,<6, installed: 5.0.0] + - PyYAML [required: >=5.3.1, installed: 5.3.1] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] +blinker==1.4 +cloud-init==22.4.2 +command-not-found==0.3 +configobj==5.0.6 +constantly==15.1.0 +coverage==5.3 +dbus-python==1.2.18 +Deckhand==1.0.0.dev717 + - alembic [required: ==1.4.3, installed: 1.4.3] + - Mako [required: Any, installed: 1.2.4] + - MarkupSafe [required: >=0.9.2, installed: 2.0.1] + - python-dateutil [required: Any, installed: 2.8.1] + - six [required: >=1.5, installed: 1.15.0] + - python-editor [required: >=0.3, installed: 1.0.4] + - SQLAlchemy [required: >=1.1.0, installed: 1.4.0] + - greenlet [required: !=0.4.17, installed: 2.0.2] + - amqp [required: ==2.6.1, installed: 2.6.1] + - vine [required: >=1.1.3,<5.0.0a1, installed: 1.3.0] + - Beaker [required: ==1.12.0, installed: 1.12.0] + - cryptography [required: ==3.2.1, installed: 3.2.1] + - cffi [required: >=1.8,!=1.11.3, installed: 1.15.1] + - pycparser [required: Any, installed: 2.21] + - six [required: >=1.4.1, installed: 1.15.0] + - deepdiff [required: ==5.8.1, installed: 5.8.1] + - ordered-set [required: >=4.1.0,<4.2.0, installed: 4.1.0] + - falcon [required: ==3.1.1, installed: 3.1.1] + - hacking [required: ==4.1.0, installed: 4.1.0] + - flake8 [required: >=3.8.0,<3.9.0, installed: 3.8.4] + - mccabe [required: >=0.6.0,<0.7.0, installed: 0.6.1] + - pycodestyle [required: >=2.6.0a1,<2.7.0, installed: 2.6.0] + - pyflakes [required: >=2.2.0,<2.3.0, installed: 2.2.0] + - jsonpath-ng [required: ==1.5.3, installed: 1.5.3] + - decorator [required: Any, installed: 5.1.1] + - ply [required: Any, installed: 3.11] + - six [required: Any, installed: 1.15.0] + - jsonpickle [required: ==1.4.1, installed: 1.4.1] + - importlib-metadata [required: Any, installed: 4.6.4] + - jsonschema [required: ==3.2.0, installed: 3.2.0] + - keystoneauth1 [required: ==5.1.1, installed: 5.1.1] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - os-service-types [required: >=1.2.0, installed: 1.7.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - requests [required: >=2.14.2, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - six [required: >=1.10.0, installed: 1.15.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - keystonemiddleware [required: ==10.2.0, installed: 10.2.0] + - keystoneauth1 [required: >=3.12.0, installed: 5.1.1] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - os-service-types [required: >=1.2.0, installed: 1.7.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - requests [required: >=2.14.2, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - six [required: >=1.10.0, installed: 1.15.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.cache [required: >=1.26.0, installed: 2.10.1] + - dogpile.cache [required: >=1.1.5, installed: 1.1.8] + - decorator [required: >=4.0.0, installed: 5.1.1] + - stevedore [required: >=3.0.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.config [required: >=8.1.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=5.0.0, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.log [required: >=4.2.1, installed: 4.6.0] + - debtcollector [required: >=1.19.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - oslo.config [required: >=5.2.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.context [required: >=2.20.0, installed: 4.1.0] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.20.0, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.serialization [required: >=2.25.0, installed: 4.2.0] + - msgpack [required: >=0.5.2, installed: 1.0.5] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pytz [required: >=2013.6, installed: 2022.1] + - oslo.utils [required: >=3.36.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=3.1.1, installed: 5.5.1] + - pyinotify [required: >=0.9.6, installed: 0.9.6] + - python-dateutil [required: >=2.7.0, installed: 2.8.1] + - six [required: >=1.5, installed: 1.15.0] + - oslo.utils [required: >=4.2.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - oslo.config [required: >=5.2.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.context [required: >=2.19.2, installed: 4.1.0] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.log [required: >=3.36.0, installed: 4.6.0] + - debtcollector [required: >=1.19.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - oslo.config [required: >=5.2.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.context [required: >=2.20.0, installed: 4.1.0] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.20.0, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.serialization [required: >=2.25.0, installed: 4.2.0] + - msgpack [required: >=0.5.2, installed: 1.0.5] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pytz [required: >=2013.6, installed: 2022.1] + - oslo.utils [required: >=3.36.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=3.1.1, installed: 5.5.1] + - pyinotify [required: >=0.9.6, installed: 0.9.6] + - python-dateutil [required: >=2.7.0, installed: 2.8.1] + - six [required: >=1.5, installed: 1.15.0] + - oslo.serialization [required: >=2.18.0,!=2.19.1, installed: 4.2.0] + - msgpack [required: >=0.5.2, installed: 1.0.5] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pytz [required: >=2013.6, installed: 2022.1] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pycadf [required: >=1.1.0,!=2.0.0, installed: 3.1.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - oslo.config [required: >=5.2.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.serialization [required: >=2.18.0,!=2.19.1, installed: 4.2.0] + - msgpack [required: >=0.5.2, installed: 1.0.5] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pytz [required: >=2013.6, installed: 2022.1] + - pytz [required: >=2013.6, installed: 2022.1] + - six [required: >=1.10.0, installed: 1.15.0] + - python-keystoneclient [required: >=3.20.0, installed: 3.22.0] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - keystoneauth1 [required: >=3.4.0, installed: 5.1.1] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - os-service-types [required: >=1.2.0, installed: 1.7.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - requests [required: >=2.14.2, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - six [required: >=1.10.0, installed: 1.15.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.config [required: >=5.2.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.serialization [required: >=2.18.0,!=2.19.1, installed: 4.2.0] + - msgpack [required: >=0.5.2, installed: 1.0.5] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pytz [required: >=2013.6, installed: 2022.1] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - requests [required: >=2.14.2, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - six [required: >=1.10.0, installed: 1.15.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - requests [required: >=2.14.2, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - six [required: >=1.10.0, installed: 1.15.0] + - WebOb [required: >=1.7.1, installed: 1.8.7] + - kombu [required: ==4.6.11, installed: 4.6.11] + - amqp [required: >=2.6.0,<2.7, installed: 2.6.1] + - vine [required: >=1.1.3,<5.0.0a1, installed: 1.3.0] + - networkx [required: ==2.5, installed: 2.5] + - decorator [required: >=4.3.0, installed: 5.1.1] + - oslo.cache [required: ==2.10.1, installed: 2.10.1] + - dogpile.cache [required: >=1.1.5, installed: 1.1.8] + - decorator [required: >=4.0.0, installed: 5.1.1] + - stevedore [required: >=3.0.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.config [required: >=8.1.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=5.0.0, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.log [required: >=4.2.1, installed: 4.6.0] + - debtcollector [required: >=1.19.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - oslo.config [required: >=5.2.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.context [required: >=2.20.0, installed: 4.1.0] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.20.0, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.serialization [required: >=2.25.0, installed: 4.2.0] + - msgpack [required: >=0.5.2, installed: 1.0.5] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pytz [required: >=2013.6, installed: 2022.1] + - oslo.utils [required: >=3.36.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=3.1.1, installed: 5.5.1] + - pyinotify [required: >=0.9.6, installed: 0.9.6] + - python-dateutil [required: >=2.7.0, installed: 2.8.1] + - six [required: >=1.5, installed: 1.15.0] + - oslo.utils [required: >=4.2.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - oslo.concurrency [required: ==5.0.1, installed: 5.0.1] + - fasteners [required: >=0.7.0, installed: 0.18] + - oslo.config [required: >=5.2.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.config [required: ==8.7.1, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.context [required: ==4.1.0, installed: 4.1.0] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.db [required: ==11.2.0, installed: 11.2.0] + - alembic [required: >=0.9.6, installed: 1.4.3] + - Mako [required: Any, installed: 1.2.4] + - MarkupSafe [required: >=0.9.2, installed: 2.0.1] + - python-dateutil [required: Any, installed: 2.8.1] + - six [required: >=1.5, installed: 1.15.0] + - python-editor [required: >=0.3, installed: 1.0.4] + - SQLAlchemy [required: >=1.1.0, installed: 1.4.0] + - greenlet [required: !=0.4.17, installed: 2.0.2] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - oslo.config [required: >=5.2.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - SQLAlchemy [required: >=1.4.0, installed: 1.4.0] + - greenlet [required: !=0.4.17, installed: 2.0.2] + - sqlalchemy-migrate [required: >=0.11.0, installed: 0.13.0] + - decorator [required: Any, installed: 5.1.1] + - pbr [required: >=1.8, installed: 5.5.1] + - six [required: >=1.7.0, installed: 1.15.0] + - SQLAlchemy [required: >=0.9.6, installed: 1.4.0] + - greenlet [required: !=0.4.17, installed: 2.0.2] + - sqlparse [required: Any, installed: 0.4.3] + - Tempita [required: >=0.4, installed: 0.5.2] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - testresources [required: >=2.0.0, installed: 2.0.1] + - pbr [required: >=1.8, installed: 5.5.1] + - testscenarios [required: >=0.4, installed: 0.5.0] + - pbr [required: >=0.11, installed: 5.5.1] + - testtools [required: Any, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - fixtures [required: >=1.3.0, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - pbr [required: >=0.11, installed: 5.5.1] + - oslo.log [required: ==4.6.0, installed: 4.6.0] + - debtcollector [required: >=1.19.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - oslo.config [required: >=5.2.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.context [required: >=2.20.0, installed: 4.1.0] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.20.0, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.serialization [required: >=2.25.0, installed: 4.2.0] + - msgpack [required: >=0.5.2, installed: 1.0.5] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pytz [required: >=2013.6, installed: 2022.1] + - oslo.utils [required: >=3.36.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=3.1.1, installed: 5.5.1] + - pyinotify [required: >=0.9.6, installed: 0.9.6] + - python-dateutil [required: >=2.7.0, installed: 2.8.1] + - six [required: >=1.5, installed: 1.15.0] + - oslo.messaging [required: ==12.13.0, installed: 12.13.0] + - amqp [required: >=2.5.2, installed: 2.6.1] + - vine [required: >=1.1.3,<5.0.0a1, installed: 1.3.0] + - cachetools [required: >=2.0.0, installed: 5.3.0] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - futurist [required: >=1.2.0, installed: 2.4.1] + - kombu [required: >=4.6.6, installed: 4.6.11] + - amqp [required: >=2.6.0,<2.7, installed: 2.6.1] + - vine [required: >=1.1.3,<5.0.0a1, installed: 1.3.0] + - oslo.config [required: >=5.2.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.log [required: >=3.36.0, installed: 4.6.0] + - debtcollector [required: >=1.19.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - oslo.config [required: >=5.2.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.context [required: >=2.20.0, installed: 4.1.0] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.20.0, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.serialization [required: >=2.25.0, installed: 4.2.0] + - msgpack [required: >=0.5.2, installed: 1.0.5] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pytz [required: >=2013.6, installed: 2022.1] + - oslo.utils [required: >=3.36.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=3.1.1, installed: 5.5.1] + - pyinotify [required: >=0.9.6, installed: 0.9.6] + - python-dateutil [required: >=2.7.0, installed: 2.8.1] + - six [required: >=1.5, installed: 1.15.0] + - oslo.metrics [required: >=0.2.1, installed: 0.6.0] + - oslo.config [required: >=6.9.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.log [required: >=3.44.0, installed: 4.6.0] + - debtcollector [required: >=1.19.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - oslo.config [required: >=5.2.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.context [required: >=2.20.0, installed: 4.1.0] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.20.0, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.serialization [required: >=2.25.0, installed: 4.2.0] + - msgpack [required: >=0.5.2, installed: 1.0.5] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pytz [required: >=2013.6, installed: 2022.1] + - oslo.utils [required: >=3.36.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=3.1.1, installed: 5.5.1] + - pyinotify [required: >=0.9.6, installed: 0.9.6] + - python-dateutil [required: >=2.7.0, installed: 2.8.1] + - six [required: >=1.5, installed: 1.15.0] + - oslo.utils [required: >=3.41.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=3.1.1,!=2.1.0, installed: 5.5.1] + - prometheus-client [required: >=0.6.0, installed: 0.16.0] + - oslo.middleware [required: >=3.31.0, installed: 4.4.0] + - bcrypt [required: >=3.1.3, installed: 3.2.0] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - Jinja2 [required: >=2.10, installed: 3.0.3] + - oslo.config [required: >=5.2.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.context [required: >=2.19.2, installed: 4.1.0] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - statsd [required: >=3.2.1, installed: 4.0.1] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - WebOb [required: >=1.8.0, installed: 1.8.7] + - oslo.serialization [required: >=2.18.0,!=2.19.1, installed: 4.2.0] + - msgpack [required: >=0.5.2, installed: 1.0.5] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pytz [required: >=2013.6, installed: 2022.1] + - oslo.service [required: >=1.24.0,!=1.28.1, installed: 3.1.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - eventlet [required: >=0.25.2, installed: 0.33.3] + - dnspython [required: >=1.15.0, installed: 2.3.0] + - greenlet [required: >=0.3, installed: 2.0.2] + - six [required: >=1.10.0, installed: 1.15.0] + - fixtures [required: >=3.0.0, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - testtools [required: >=0.9.22, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - greenlet [required: >=0.4.15, installed: 2.0.2] + - oslo.concurrency [required: >=3.25.0, installed: 5.0.1] + - fasteners [required: >=0.7.0, installed: 0.18] + - oslo.config [required: >=5.2.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.config [required: >=5.1.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.log [required: >=3.36.0, installed: 4.6.0] + - debtcollector [required: >=1.19.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - oslo.config [required: >=5.2.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.context [required: >=2.20.0, installed: 4.1.0] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.20.0, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.serialization [required: >=2.25.0, installed: 4.2.0] + - msgpack [required: >=0.5.2, installed: 1.0.5] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pytz [required: >=2013.6, installed: 2022.1] + - oslo.utils [required: >=3.36.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=3.1.1, installed: 5.5.1] + - pyinotify [required: >=0.9.6, installed: 0.9.6] + - python-dateutil [required: >=2.7.0, installed: 2.8.1] + - six [required: >=1.5, installed: 1.15.0] + - oslo.utils [required: >=3.40.2, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - Paste [required: >=2.0.2, installed: 3.5.0] + - setuptools [required: Any, installed: 59.6.0] + - six [required: >=1.4.0, installed: 1.15.0] + - PasteDeploy [required: >=1.5.0, installed: 3.0.1] + - Routes [required: >=2.3.1, installed: 2.5.1] + - repoze.lru [required: >=0.3, installed: 0.7] + - six [required: Any, installed: 1.15.0] + - WebOb [required: >=1.7.1, installed: 1.8.7] + - Yappi [required: >=1.0, installed: 1.4.0] + - oslo.utils [required: >=3.37.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=3.13, installed: 5.3.1] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - WebOb [required: >=1.7.1, installed: 1.8.7] + - oslo.middleware [required: ==4.4.0, installed: 4.4.0] + - bcrypt [required: >=3.1.3, installed: 3.2.0] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - Jinja2 [required: >=2.10, installed: 3.0.3] + - oslo.config [required: >=5.2.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.context [required: >=2.19.2, installed: 4.1.0] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - statsd [required: >=3.2.1, installed: 4.0.1] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - WebOb [required: >=1.8.0, installed: 1.8.7] + - oslo.policy [required: ==3.10.1, installed: 3.10.1] + - oslo.config [required: >=6.0.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.context [required: >=2.22.0, installed: 4.1.0] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.serialization [required: >=2.18.0,!=2.19.1, installed: 4.2.0] + - msgpack [required: >=0.5.2, installed: 1.0.5] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pytz [required: >=2013.6, installed: 2022.1] + - oslo.utils [required: >=3.40.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.14.2, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.serialization [required: ==4.2.0, installed: 4.2.0] + - msgpack [required: >=0.5.2, installed: 1.0.5] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pytz [required: >=2013.6, installed: 2022.1] + - oslo.utils [required: ==4.12.3, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - Paste [required: ==3.5.0, installed: 3.5.0] + - setuptools [required: Any, installed: 59.6.0] + - six [required: >=1.4.0, installed: 1.15.0] + - PasteDeploy [required: ==3.0.1, installed: 3.0.1] + - pbr [required: ==5.5.1, installed: 5.5.1] + - psycopg2-binary [required: ==2.8.6, installed: 2.8.6] + - pylibyaml [required: ==0.1.0, installed: 0.1.0] + - python-barbicanclient [required: ==5.2.0, installed: 5.2.0] + - cliff [required: >=2.8.0,!=2.9.0, installed: 4.2.0] + - autopage [required: >=0.4.0, installed: 0.5.1] + - cmd2 [required: >=1.0.0, installed: 2.4.3] + - attrs [required: >=16.3.0, installed: 21.2.0] + - pyperclip [required: >=1.6, installed: 1.8.2] + - wcwidth [required: >=0.1.7, installed: 0.2.6] + - importlib-metadata [required: >=4.4, installed: 4.6.4] + - PrettyTable [required: >=0.7.2, installed: 3.6.0] + - wcwidth [required: Any, installed: 0.2.6] + - PyYAML [required: >=3.12, installed: 5.3.1] + - stevedore [required: >=2.0.1, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - keystoneauth1 [required: >=3.4.0, installed: 5.1.1] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - os-service-types [required: >=1.2.0, installed: 1.7.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - requests [required: >=2.14.2, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - six [required: >=1.10.0, installed: 1.15.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.serialization [required: >=2.18.0,!=2.19.1, installed: 4.2.0] + - msgpack [required: >=0.5.2, installed: 1.0.5] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pytz [required: >=2013.6, installed: 2022.1] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - requests [required: >=2.14.2, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - six [required: >=1.10.0, installed: 1.15.0] + - python-dateutil [required: ==2.8.1, installed: 2.8.1] + - six [required: >=1.5, installed: 1.15.0] + - python-keystoneclient [required: ==3.22.0, installed: 3.22.0] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - keystoneauth1 [required: >=3.4.0, installed: 5.1.1] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - os-service-types [required: >=1.2.0, installed: 1.7.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - requests [required: >=2.14.2, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - six [required: >=1.10.0, installed: 1.15.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.config [required: >=5.2.0, installed: 8.7.1] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=5.1, installed: 5.3.1] + - requests [required: >=2.18.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - rfc3986 [required: >=1.2.0, installed: 2.0.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - oslo.serialization [required: >=2.18.0,!=2.19.1, installed: 4.2.0] + - msgpack [required: >=0.5.2, installed: 1.0.5] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pytz [required: >=2013.6, installed: 2022.1] + - oslo.utils [required: >=3.33.0, installed: 4.12.3] + - debtcollector [required: >=1.2.0, installed: 2.5.0] + - wrapt [required: >=1.7.0, installed: 1.15.0] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - netaddr [required: >=0.7.18, installed: 0.8.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - oslo.i18n [required: >=3.15.3, installed: 6.0.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - packaging [required: >=20.4, installed: 23.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pyparsing [required: >=2.1.0, installed: 2.4.7] + - pytz [required: >=2013.6, installed: 2022.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - requests [required: >=2.14.2, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - six [required: >=1.10.0, installed: 1.15.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - python-memcached [required: ==1.59, installed: 1.59] + - six [required: >=1.4.0, installed: 1.15.0] + - PyYAML [required: ==5.4.1, installed: 5.3.1] + - Routes [required: ==2.5.1, installed: 2.5.1] + - repoze.lru [required: >=0.3, installed: 0.7] + - six [required: Any, installed: 1.15.0] + - six [required: ==1.15.0, installed: 1.15.0] + - sphinx-rtd-theme [required: ==0.5.0, installed: 0.5.0] + - sphinx [required: Any, installed: 6.1.3] + - alabaster [required: >=0.7,<0.8, installed: 0.7.13] + - babel [required: >=2.9, installed: 2.12.1] + - docutils [required: >=0.18,<0.20, installed: 0.19] + - imagesize [required: >=1.3, installed: 1.4.1] + - Jinja2 [required: >=3.0, installed: 3.0.3] + - packaging [required: >=21.0, installed: 23.0] + - Pygments [required: >=2.13, installed: 2.14.0] + - requests [required: >=2.25.0, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - snowballstemmer [required: >=2.0, installed: 2.2.0] + - sphinxcontrib-applehelp [required: Any, installed: 1.0.4] + - sphinxcontrib-devhelp [required: Any, installed: 1.0.2] + - sphinxcontrib-htmlhelp [required: >=2.0.0, installed: 2.0.1] + - sphinxcontrib-jsmath [required: Any, installed: 1.0.1] + - sphinxcontrib-qthelp [required: Any, installed: 1.0.3] + - sphinxcontrib-serializinghtml [required: >=1.1.5, installed: 1.1.5] + - SQLAlchemy [required: ==1.4.0, installed: 1.4.0] + - greenlet [required: !=0.4.17, installed: 2.0.2] + - stestr [required: ==3.2.0, installed: 3.2.0] + - cliff [required: >=2.8.0, installed: 4.2.0] + - autopage [required: >=0.4.0, installed: 0.5.1] + - cmd2 [required: >=1.0.0, installed: 2.4.3] + - attrs [required: >=16.3.0, installed: 21.2.0] + - pyperclip [required: >=1.6, installed: 1.8.2] + - wcwidth [required: >=0.1.7, installed: 0.2.6] + - importlib-metadata [required: >=4.4, installed: 4.6.4] + - PrettyTable [required: >=0.7.2, installed: 3.6.0] + - wcwidth [required: Any, installed: 0.2.6] + - PyYAML [required: >=3.12, installed: 5.3.1] + - stevedore [required: >=2.0.1, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - fixtures [required: >=3.0.0, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - testtools [required: >=0.9.22, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - future [required: Any, installed: 0.18.3] + - pbr [required: >=2.0.0,!=4.0.3,!=4.0.2,!=4.0.1,!=4.0.0,!=2.1.0, installed: 5.5.1] + - python-subunit [required: >=1.4.0, installed: 1.4.0] + - extras [required: Any, installed: 1.0.0] + - testtools [required: >=0.9.34, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - fixtures [required: >=1.3.0, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - pbr [required: >=0.11, installed: 5.5.1] + - PyYAML [required: >=3.10.0, installed: 5.3.1] + - testtools [required: >=2.2.0, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - fixtures [required: >=1.3.0, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - pbr [required: >=0.11, installed: 5.5.1] + - voluptuous [required: >=0.8.9, installed: 0.13.1] + - stevedore [required: ==4.1.1, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - urllib3 [required: ==1.25.11, installed: 1.25.11] + - uWSGI [required: ==2.0.21, installed: 2.0.21] + - Werkzeug [required: ==0.16.1, installed: 0.16.1] +distro==1.7.0 +distro-info==1.1build1 +gabbi==1.35.1 + - colorama [required: Any, installed: 0.4.6] + - jsonpath-rw-ext [required: >=1.0.0, installed: 1.2.2] + - jsonpath-rw [required: >=1.2.0, installed: 1.4.0] + - decorator [required: Any, installed: 5.1.1] + - ply [required: Any, installed: 3.11] + - six [required: Any, installed: 1.15.0] + - pbr [required: >=1.8, installed: 5.5.1] + - pbr [required: Any, installed: 5.5.1] + - pytest [required: Any, installed: 7.2.2] + - attrs [required: >=19.2.0, installed: 21.2.0] + - exceptiongroup [required: >=1.0.0rc8, installed: 1.1.1] + - iniconfig [required: Any, installed: 2.0.0] + - packaging [required: Any, installed: 23.0] + - pluggy [required: >=0.12,<2.0, installed: 1.0.0] + - tomli [required: >=1.0.0, installed: 2.0.1] + - PyYAML [required: Any, installed: 5.3.1] + - six [required: Any, installed: 1.15.0] + - testtools [required: Any, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - fixtures [required: >=1.3.0, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - pbr [required: >=0.11, installed: 5.5.1] + - urllib3 [required: >=1.11.0, installed: 1.25.11] + - wsgi-intercept [required: >=1.2.2, installed: 1.11.0] + - six [required: Any, installed: 1.15.0] +git-review==2.2.0 +hyperlink==21.0.0 +incremental==21.3.0 +jeepney==0.7.1 +jsonpointer==2.0 +launchpadlib==1.10.16 + - httplib2 [required: Any, installed: 0.20.2] + - pyparsing [required: >=2.4.2,<4,!=3.0.3,!=3.0.2,!=3.0.1,!=3.0.0, installed: 2.4.7] + - keyring [required: Any, installed: 23.5.0] + - lazr.restfulclient [required: >=0.9.19, installed: 0.14.4] + - httplib2 [required: >=0.7.7, installed: 0.20.2] + - pyparsing [required: >=2.4.2,<4,!=3.0.3,!=3.0.2,!=3.0.1,!=3.0.0, installed: 2.4.7] + - lazr.uri [required: Any, installed: 1.0.6] + - six [required: Any, installed: 1.15.0] +libvirt-python==8.0.0 +more-itertools==8.10.0 +oauthlib==3.2.0 +openstacksdk==0.59.0 + - appdirs [required: >=1.3.0, installed: 1.4.4] + - cryptography [required: >=2.7, installed: 3.2.1] + - cffi [required: >=1.8,!=1.11.3, installed: 1.15.1] + - pycparser [required: Any, installed: 2.21] + - six [required: >=1.4.1, installed: 1.15.0] + - decorator [required: >=4.4.1, installed: 5.1.1] + - dogpile.cache [required: >=0.6.5, installed: 1.1.8] + - decorator [required: >=4.0.0, installed: 5.1.1] + - stevedore [required: >=3.0.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - jmespath [required: >=0.9.0, installed: 1.0.1] + - jsonpatch [required: >=1.16,!=1.20, installed: 1.32] + - keystoneauth1 [required: >=3.18.0, installed: 5.1.1] + - iso8601 [required: >=0.1.11, installed: 1.1.0] + - os-service-types [required: >=1.2.0, installed: 1.7.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - requests [required: >=2.14.2, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] + - six [required: >=1.10.0, installed: 1.15.0] + - stevedore [required: >=1.20.0, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - munch [required: >=2.1.0, installed: 2.5.0] + - six [required: Any, installed: 1.15.0] + - netifaces [required: >=0.10.4, installed: 0.11.0] + - os-service-types [required: >=1.7.0, installed: 1.7.0] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - PyYAML [required: >=3.13, installed: 5.3.1] + - requestsexceptions [required: >=1.2.0, installed: 1.4.0] +os-testr==2.0.1 + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - python-subunit [required: >=1.0.0, installed: 1.4.0] + - extras [required: Any, installed: 1.0.0] + - testtools [required: >=0.9.34, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - fixtures [required: >=1.3.0, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - pbr [required: >=0.11, installed: 5.5.1] + - stestr [required: >=1.0.0, installed: 3.2.0] + - cliff [required: >=2.8.0, installed: 4.2.0] + - autopage [required: >=0.4.0, installed: 0.5.1] + - cmd2 [required: >=1.0.0, installed: 2.4.3] + - attrs [required: >=16.3.0, installed: 21.2.0] + - pyperclip [required: >=1.6, installed: 1.8.2] + - wcwidth [required: >=0.1.7, installed: 0.2.6] + - importlib-metadata [required: >=4.4, installed: 4.6.4] + - PrettyTable [required: >=0.7.2, installed: 3.6.0] + - wcwidth [required: Any, installed: 0.2.6] + - PyYAML [required: >=3.12, installed: 5.3.1] + - stevedore [required: >=2.0.1, installed: 4.1.1] + - pbr [required: >=2.0.0,!=2.1.0, installed: 5.5.1] + - fixtures [required: >=3.0.0, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - testtools [required: >=0.9.22, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - future [required: Any, installed: 0.18.3] + - pbr [required: >=2.0.0,!=4.0.3,!=4.0.2,!=4.0.1,!=4.0.0,!=2.1.0, installed: 5.5.1] + - python-subunit [required: >=1.4.0, installed: 1.4.0] + - extras [required: Any, installed: 1.0.0] + - testtools [required: >=0.9.34, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - fixtures [required: >=1.3.0, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - pbr [required: >=0.11, installed: 5.5.1] + - PyYAML [required: >=3.10.0, installed: 5.3.1] + - testtools [required: >=2.2.0, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - fixtures [required: >=1.3.0, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - pbr [required: >=0.11, installed: 5.5.1] + - voluptuous [required: >=0.8.9, installed: 0.13.1] + - testtools [required: >=2.2.0, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - fixtures [required: >=1.3.0, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - pbr [required: >=0.11, installed: 5.5.1] +oslotest==4.5.0 + - fixtures [required: >=3.0.0, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - testtools [required: >=0.9.22, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - python-subunit [required: >=1.0.0, installed: 1.4.0] + - extras [required: Any, installed: 1.0.0] + - testtools [required: >=0.9.34, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - fixtures [required: >=1.3.0, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: >=1.10.0, installed: 1.15.0] + - testtools [required: >=2.2.0, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - fixtures [required: >=1.3.0, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - pbr [required: >=0.11, installed: 5.5.1] +pexpect==4.8.0 +pifpaf==3.1.5 + - click [required: Any, installed: 8.0.3] + - daiquiri [required: Any, installed: 3.2.1] + - python-json-logger [required: Any, installed: 2.0.7] + - fixtures [required: Any, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - testtools [required: >=0.9.22, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - jinja2 [required: Any, installed: 3.0.3] + - pbr [required: Any, installed: 5.5.1] + - psutil [required: Any, installed: 5.9.4] + - xattr [required: Any, installed: 0.10.1] + - cffi [required: >=1.0, installed: 1.15.1] + - pycparser [required: Any, installed: 2.21] +pip==22.0.2 +pipdeptree==2.7.0 +pipreqs==0.4.11 + - docopt [required: Any, installed: 0.6.2] + - yarg [required: Any, installed: 0.1.9] + - requests [required: Any, installed: 2.28.2] + - certifi [required: >=2017.4.17, installed: 2020.6.20] + - charset-normalizer [required: >=2,<4, installed: 3.1.0] + - idna [required: >=2.5,<4, installed: 2.10] + - urllib3 [required: >=1.21.1,<1.27, installed: 1.25.11] +ptyprocess==0.7.0 +py==1.10.0 +pyasn1==0.4.8 +pyasn1-modules==0.2.1 +PyGObject==3.42.1 + - pycairo [required: >=1.16.0, installed: 1.20.1] +PyHamcrest==2.0.2 +PyJWT==2.3.0 +pyOpenSSL==21.0.0 +pyrsistent==0.18.1 +pyserial==3.5 +python-apt==2.4.0+ubuntu1 +python-debian==0.1.43ubuntu1 +python-magic==0.4.24 +SecretStorage==3.3.1 +service-identity==18.1.0 +sos==4.4 +ssh-import-id==5.11 +systemd-python==234 +testrepository==0.0.20 + - fixtures [required: Any, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - testtools [required: >=0.9.22, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - python-subunit [required: >=0.0.18, installed: 1.4.0] + - extras [required: Any, installed: 1.0.0] + - testtools [required: >=0.9.34, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - fixtures [required: >=1.3.0, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - pbr [required: >=0.11, installed: 5.5.1] + - testtools [required: >=0.9.30, installed: 2.5.0] + - extras [required: >=1.0.0, installed: 1.0.0] + - fixtures [required: >=1.3.0, installed: 3.0.0] + - pbr [required: >=0.11, installed: 5.5.1] + - six [required: Any, installed: 1.15.0] + - pbr [required: >=0.11, installed: 5.5.1] +tox==4.4.11 + - cachetools [required: >=5.3, installed: 5.3.0] + - chardet [required: >=5.1, installed: 5.1.0] + - colorama [required: >=0.4.6, installed: 0.4.6] + - filelock [required: >=3.10.7, installed: 3.11.0] + - packaging [required: >=23, installed: 23.0] + - platformdirs [required: >=3.2, installed: 3.2.0] + - pluggy [required: >=1, installed: 1.0.0] + - pyproject-api [required: >=1.5.1, installed: 1.5.1] + - packaging [required: >=23, installed: 23.0] + - tomli [required: >=2.0.1, installed: 2.0.1] + - tomli [required: >=2.0.1, installed: 2.0.1] + - virtualenv [required: >=20.21, installed: 20.21.0] + - distlib [required: >=0.3.6,<1, installed: 0.3.6] + - filelock [required: >=3.4.1,<4, installed: 3.11.0] + - platformdirs [required: >=2.4,<4, installed: 3.2.0] +Twisted==22.1.0 +ubuntu-advantage-tools==8001 +ufw==0.36.1 +unattended-upgrades==0.1 +wadllib==1.3.6 +wheel==0.37.1 +yq==3.1.0 + - argcomplete [required: >=1.8.1, installed: 3.0.4] + - PyYAML [required: >=5.3.1, installed: 5.3.1] + - toml [required: >=0.10.0, installed: 0.10.2] + - xmltodict [required: >=0.11.0, installed: 0.13.0] +zipp==1.0.0 +zope.interface==5.4.0 diff --git a/python/tests/postgres/start_postgres.sh b/python/tests/postgres/start_postgres.sh index 80839686..4b4fe884 100755 --- a/python/tests/postgres/start_postgres.sh +++ b/python/tests/postgres/start_postgres.sh @@ -14,11 +14,11 @@ then sudo docker stop 'psql_integration' fi -sudo docker run --rm -dp 5432:5432 --name 'psql_integration' postgres:9.5 +sudo docker run --rm -dp 5432:5432 --name 'psql_integration' postgres:14.6 sleep 15 -docker run --rm --net host postgres:9.5 psql -h localhost -c "create user drydock with password 'drydock';" postgres postgres -docker run --rm --net host postgres:9.5 psql -h localhost -c "create database drydock;" postgres postgres +docker run --rm --net host postgres:14.6 psql -h localhost -c "create user drydock with password 'drydock';" postgres postgres +docker run --rm --net host postgres:14.6 psql -h localhost -c "create database drydock;" postgres postgres export DRYDOCK_DB_URL="postgresql+psycopg2://drydock:drydock@localhost:5432/drydock" diff --git a/requirements-host-test.txt b/requirements-host-test.txt deleted file mode 100644 index 9cdb2ba6..00000000 --- a/requirements-host-test.txt +++ /dev/null @@ -1,5 +0,0 @@ -# These are host packages needed for Drydock -# that don't come on a minimal Ubuntu install -python-tox -docker.io|docker-ce -plantuml diff --git a/requirements-host.txt b/requirements-host.txt deleted file mode 100644 index ee59c621..00000000 --- a/requirements-host.txt +++ /dev/null @@ -1,12 +0,0 @@ -# These are host packages needed for Drydock -# that don't come on a minimal Ubuntu install -libvirt-dev -pkg-config -python3-dev -gcc -netbase -libssl-dev -python3-pip -python3-setuptools -ssh -curl diff --git a/tools/baclient_build.sh b/tools/baclient_build.sh index b9187642..0bab4369 100755 --- a/tools/baclient_build.sh +++ b/tools/baclient_build.sh @@ -7,12 +7,7 @@ if $(uname -a | grep -q Ubuntu); then GOPATH=$1 BUILD_DIR=$2 if [[ ! -f ./baclient_built ]]; then - apt-get update - DEBIAN_FRONTEND=noninteractive apt-get \ - -o Dpkg::Options::="--force-confdef" \ - -o Dpkg::Options::="--force-confold" \ - install -y --no-install-recommends golang-go - GOPATH=${GOPATH} go build -o ${BUILD_DIR}/baclient baclient + GO111MODULE=off GOPATH=${GOPATH} go build -v -o ${BUILD_DIR}/baclient baclient else echo "Baclient library is already built. No action." fi diff --git a/tools/drydock_image_build.sh b/tools/drydock_image_build.sh index 55656051..fe70a982 100755 --- a/tools/drydock_image_build.sh +++ b/tools/drydock_image_build.sh @@ -3,7 +3,7 @@ set -x UBUNTU_BASE_IMAGE=${UBUNTU_BASE_IMAGE:-""} UBUNTU_REPO=${UBUNTU_REPO:-""} -DISTRO=${DISTRO:-"ubuntu_bionic"} +DISTRO=${DISTRO:-"ubuntu_focal"} TRUSTED_UBUNTU_REPO=${TRUSTED_UBUNTU_REPO:-"no"} ALLOW_UNATHENTICATED=${ALLOW_UNAUTHENTICATED:-"false"} PIP_INDEX_URL=${PIP_INDEX_URL:-""} diff --git a/tools/drydock_image_run.sh b/tools/drydock_image_run.sh index b91534a8..c875499d 100755 --- a/tools/drydock_image_run.sh +++ b/tools/drydock_image_run.sh @@ -9,11 +9,11 @@ function start_db { sudo docker stop 'psql_integration' fi - docker run --rm -dp 5432:5432 --name 'psql_integration' postgres:9.5 + docker run --rm -dp 5432:5432 --name 'psql_integration' -e POSTGRES_HOST_AUTH_METHOD=trust postgres:14.6 sleep 15 - docker run --rm --net host postgres:9.5 psql -h localhost -c "create user drydock with password 'drydock';" postgres postgres - docker run --rm --net host postgres:9.5 psql -h localhost -c "create database drydock;" postgres postgres + docker run --rm --net host postgres:14.6 psql -h localhost -c "create user drydock with password 'drydock';" postgres postgres + docker run --rm --net host postgres:14.6 psql -h localhost -c "create database drydock;" postgres postgres } function customize_conf { diff --git a/tools/gate/playbooks/build-charts.yaml b/tools/gate/playbooks/build-charts.yaml index 8807e4a0..d43ef828 100644 --- a/tools/gate/playbooks/build-charts.yaml +++ b/tools/gate/playbooks/build-charts.yaml @@ -13,6 +13,15 @@ # limitations under the License. - hosts: primary + + + + roles: + - bindep + - ensure-docker + - ensure-python + - ensure-pip + tasks: - name: Execute the make target to package Helm charts. make: diff --git a/tools/gate/playbooks/docker-image-build.yaml b/tools/gate/playbooks/docker-image-build.yaml index c3dcc4f2..486a0e6e 100644 --- a/tools/gate/playbooks/docker-image-build.yaml +++ b/tools/gate/playbooks/docker-image-build.yaml @@ -13,6 +13,14 @@ # limitations under the License. - hosts: primary + + roles: + - bindep + - ensure-docker + - ensure-python + - ensure-pip + + tasks: - name: Debug tag generation inputs block: @@ -40,18 +48,11 @@ debug: var: image_tags - - name: Install Docker (Debian) + - name: Install Docker python module for ansible docker login block: - - apt: - name: "{{ item }}" - with_items: - - docker.io - - python3-pip - - python3-setuptools - when: ansible_os_family == 'Debian' - pip: name: docker - version: 2.7.0 + version: 4.4.4 executable: pip3 become: True diff --git a/tools/gate/playbooks/omni_test.yaml b/tools/gate/playbooks/omni_test.yaml index d67c3014..8c11ef80 100644 --- a/tools/gate/playbooks/omni_test.yaml +++ b/tools/gate/playbooks/omni_test.yaml @@ -14,6 +14,16 @@ # to minimize Zuul node consumption - hosts: primary + + + + roles: + - bindep + - ensure-docker + - ensure-python + - ensure-pip + + tasks: - name: Execute the make target for PEP8 linting make: @@ -41,12 +51,6 @@ target: test_baclient become: true register: result - - name: Execute the make target for building and running the Drydock Docker image - make: - chdir: "{{ zuul.project.src_dir }}" - target: run_drydock - register: result - become: true - name: Setup Apparmor shell: | set -xe; @@ -54,3 +58,9 @@ args: chdir: "{{ zuul.projects['opendev.org/openstack/openstack-helm-infra'].src_dir }}" executable: /bin/bash + - name: Execute the make target for building and running the Drydock Docker image + make: + chdir: "{{ zuul.project.src_dir }}" + target: run_drydock + register: result + become: true \ No newline at end of file diff --git a/tools/helm_install.sh b/tools/helm_install.sh index 6e4c042c..14b08598 100755 --- a/tools/helm_install.sh +++ b/tools/helm_install.sh @@ -17,7 +17,7 @@ set -x HELM=$1 -HELM_ARTIFACT_URL=${HELM_ARTIFACT_URL:-"https://get.helm.sh/helm-v2.17.0-linux-amd64.tar.gz"} +HELM_ARTIFACT_URL=${HELM_ARTIFACT_URL:-"https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz"} function install_helm_binary { diff --git a/tools/helm_tk.sh b/tools/helm_tk.sh index a0b7c8d4..34a0aa9d 100755 --- a/tools/helm_tk.sh +++ b/tools/helm_tk.sh @@ -12,65 +12,20 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -# -# Script to setup helm-toolkit and helm dep up the shipyard chart -# -HELM=$1 -HTK_REPO=${HTK_REPO:-"https://github.com/openstack/openstack-helm-infra"} -HTK_PATH=${HTK_PATH:-""} + + +set -eux + +HTK_REPO=${HTK_REPO:-"https://opendev.org/openstack/openstack-helm-infra.git"} HTK_STABLE_COMMIT=${HTK_COMMIT:-"f4972121bcb41c8d74748917804d2b239ab757f9"} -DEP_UP_LIST=${DEP_UP_LIST:-"drydock"} -BUILD_DIR=${BUILD_DIR:-$(mktemp -d)} -if [[ ! -z $(echo $http_proxy) ]] -then - export no_proxy=$no_proxy,127.0.0.1 -fi +TMP_DIR=$(mktemp -d) -set -x - -# Use ./helm as we expect this to be run in a already -# configured build directory - -function helm_serve { - if [[ -d "$HOME/.helm" ]]; then - echo ".helm directory found" - else - ${HELM} init --client-only --skip-refresh - fi - if [[ -z $(curl --noproxy '*' -s 127.0.0.1:8879 | grep 'Helm Repository') ]]; then - "${HELM}" serve & > /dev/null - while [[ -z $(curl --noproxy '*' -s 127.0.0.1:8879 | grep 'Helm Repository') ]]; do - sleep 1 - echo "Waiting for Helm Repository" - done - else - echo "Helm serve already running" - fi - - if "${HELM}" repo list | grep -q "^stable" ; then - "${HELM}" repo remove stable - fi - - ${HELM} repo add local http://localhost:8879/charts +{ + HTK_REPO_DIR=$TMP_DIR/htk + git clone "$HTK_REPO" "$HTK_REPO_DIR" + (cd "$HTK_REPO_DIR" && git reset --hard "${HTK_STABLE_COMMIT}") + cp -r "${HTK_REPO_DIR}/helm-toolkit" charts/deps/ } -mkdir -p "$BUILD_DIR" -pushd "$BUILD_DIR" -git clone $HTK_REPO || true -pushd openstack-helm-infra/$HTK_PATH -git reset --hard "${HTK_STABLE_COMMIT}" - -helm_serve -# OSH Makefile is bugged, so ensure helm is in the path -if [[ ${HELM} != "helm" ]] -then - export PATH=${PATH}:$(dirname ${HELM}) -fi - -make helm-toolkit -popd && popd -for c in $DEP_UP_LIST -do - ${HELM} dep up charts/$c -done +rm -rf "${TMP_DIR}" diff --git a/tox.ini b/tox.ini index 3919716c..1f3544e7 100644 --- a/tox.ini +++ b/tox.ini @@ -1,32 +1,32 @@ [tox] -envlist = py36,pep8,bandit +envlist = py38,pep8,bandit setupdir=python/ + [testenv] setenv = YAMLDIR = {toxinidir}/python/tests/yaml_samples/ passenv = http_proxy,HTTP_PROXY,https_proxy,HTTPS_PROXY,no_proxy,NO_PROXY deps= -r{toxinidir}/python/requirements-lock.txt - -r{toxinidir}/python/requirements-test.txt [testenv:venv] -basepython=python3 commands = {posargs} [testenv:freeze] -basepython=python3 recreate = True allowlist_externals= rm sh + pipdeptree deps= -rpython/requirements-direct.txt + -rpython/requirements-test.txt commands= - rm python/requirements-lock.txt + rm -f python/requirements-lock.txt sh -c "pip freeze --all | grep -vE 'drydock-provisioner|pyinotify|pkg-resources==0.0.0' > python/requirements-lock.txt" + sh -c "pipdeptree > python/requirements-tree.txt" [testenv:yapf] -basepython=python3 allowlist_externals=find commands= yapf -i -r --style=pep8 {toxinidir}/python/setup.py @@ -35,7 +35,7 @@ commands= yapf -i -r --style=pep8 {toxinidir}/python/tests find {toxinidir}/python/drydock_provisioner -name '__init__.py' -exec yapf -i --style=pep8 \{\} ; -[testenv:py36] +[testenv:py38] usedevelop=True setenv= PYTHONWARNING=all @@ -46,7 +46,6 @@ commands= {toxinidir}/python/tests/unit/{posargs} [testenv:integration] -basepython=python3 passenv=DOCKER_REGISTRY,IMAGE_NAME,IMAGE_PREFIX,IMAGE_TAG setenv= PYTHONWARNING=all @@ -57,7 +56,6 @@ commands= {toxinidir}/python/tests/integration/postgres/{posargs} [testenv:cover] -basepython=python3 usedevelop=True passenv=DOCKER_REGISTRY,IMAGE_NAME,IMAGE_PREFIX,IMAGE_TAG setenv= @@ -68,24 +66,20 @@ commands= {toxinidir}/python/tests/unit/ {toxinidir}/python/tests/integration/postgres [testenv:genconfig] -basepython=python3 allowlist_externals=tee sh commands = sh -c 'oslo-config-generator --config-file=etc/drydock/drydock-config-generator.conf | tee etc/drydock/drydock.conf.sample doc/source/_static/drydock.conf.sample' [testenv:genpolicy] -basepython=python3 allowlist_externals=tee sh commands = sh -c 'oslopolicy-sample-generator --config-file etc/drydock/drydock-policy-generator.conf | tee etc/drydock/policy.yaml.sample doc/source/_static/policy.yaml.sample' [testenv:pep8] -basepython=python3 commands = flake8 \ {posargs} [testenv:bandit] -basepython=python3 commands = bandit -r drydock_provisioner -n 5 [flake8] @@ -94,9 +88,9 @@ exclude= venv,.venv,.git,.idea,.tox,*.egg-info,*.eggs,bin,dist,./build/,alembic/ max-line-length=119 [testenv:docs] -basepython=python3 deps= -rdoc/requirements-doc.txt + -epython allowlist_externals=rm recreate=true commands =