From cf5d03580db15ac257f8798f87095f3a1c783ef2 Mon Sep 17 00:00:00 2001 From: Fernando Giorgetti Date: Wed, 9 Aug 2023 11:13:12 -0300 Subject: [PATCH] Services module (#23) --- .github/workflows/pulls.yml | 17 +- .gitignore | 2 + Makefile | 6 + docs/_static/antsibull-minimal.css | 2 +- docs/collections/index_module.html | 2 + docs/collections/skupper/network/index.html | 4 +- .../skupper/network/links_load_module.html | 6 +- .../skupper/network/links_module.html | 2 +- .../skupper/network/services_load_module.html | 235 +++++++++ .../skupper/network/services_module.html | 214 ++++++++ .../skupper/network/site_load_module.html | 6 +- docs/objects.inv | Bin 790 -> 891 bytes docs/searchindex.js | 2 +- skupper/network/docs/conf.py | 1 - .../docs/rst/collections/index_module.rst | 2 + .../rst/collections/skupper/network/index.rst | 6 +- .../skupper/network/links_load_module.rst | 2 +- .../skupper/network/links_module.rst | 2 +- .../skupper/network/services_load_module.rst | 203 +++++++ .../skupper/network/services_module.rst | 146 ++++++ .../skupper/network/site_load_module.rst | 2 +- skupper/network/galaxy.yml | 2 +- skupper/network/plugins/action/__init__.py | 37 ++ skupper/network/plugins/action/links.py | 2 +- skupper/network/plugins/action/links_load.py | 4 +- skupper/network/plugins/action/services.py | 159 ++++++ .../network/plugins/action/services_load.py | 16 + skupper/network/plugins/action/site_load.py | 2 +- .../network/plugins/doc_fragments/common.py | 42 ++ skupper/network/plugins/module_utils/args.py | 6 + .../plugins/module_utils/base_action.py | 37 -- skupper/network/plugins/module_utils/sites.py | 6 + .../plugins/module_utils/skupper_cli.py | 6 + skupper/network/plugins/module_utils/types.py | 55 ++ skupper/network/plugins/modules/links.py | 118 +++-- skupper/network/plugins/modules/links_load.py | 85 ++- skupper/network/plugins/modules/services.py | 380 ++++++++++++++ .../network/plugins/modules/services_load.py | 252 +++++++++ skupper/network/plugins/modules/site_load.py | 48 +- .../network/roles/skupper_service/README.md | 20 +- .../roles/skupper_service/defaults/main.yml | 26 +- .../skupper_service/tasks/common-validate.yml | 42 -- .../roles/skupper_service/tasks/execute.yml | 13 - .../tasks/kube-command-bind.yml | 26 - .../tasks/kube-command-create.yml | 26 - .../tasks/kube-command-label.yml | 33 -- .../skupper_service/tasks/kube-commands.yml | 14 - .../skupper_service/tasks/kube-validate.yml | 9 - .../roles/skupper_service/tasks/main.yml | 9 +- .../tasks/podman-command-bind.yml | 11 - .../tasks/podman-command-create.yml | 37 -- .../skupper_service/tasks/podman-commands.yml | 9 - .../skupper_service/tasks/podman-validate.yml | 9 - .../skupper_service/tasks/service-bind.yml | 22 - .../skupper_service/tasks/service-create.yml | 34 -- ...r.network.plugins.action.site_load_1.stats | Bin 0 -> 2017 bytes ...twork.plugins.doc_fragments.common_1.stats | Bin 0 -> 2171 bytes ...network.plugins.module_utils.types_1.stats | Bin 0 -> 1406 bytes ....network.plugins.modules.site_load_1.stats | Bin 0 -> 1885 bytes ...k.tests.unit.plugins.modules.utils_1.stats | Bin 0 -> 1693 bytes .../bot/ansible-test-sanity-ansible-doc.json | 10 + ...sible-test-sanity-compile-python-3.11.json | 10 + ...nsible-test-sanity-import-python-3.11.json | 14 + .../output/bot/ansible-test-sanity-pep8.json | 15 + .../bot/ansible-test-sanity-pylint.json | 15 + .../bot/ansible-test-sanity-shebang.json | 10 + .../ansible-test-sanity-validate-modules.json | 15 + .../output/junit/python3.11-modules-units.xml | 1 + .../unit/plugins/modules/test_links_load.py | 222 ++++++++ .../plugins/modules/test_services_load.py | 495 ++++++++++++++++++ .../unit/plugins/modules/test_site_load.py | 108 ++++ .../tests/unit/plugins/modules/utils.py | 41 ++ skupper/network/tests/unit/requirements.txt | 3 + 73 files changed, 2979 insertions(+), 439 deletions(-) create mode 100644 docs/collections/skupper/network/services_load_module.html create mode 100644 docs/collections/skupper/network/services_module.html create mode 100644 skupper/network/docs/rst/collections/skupper/network/services_load_module.rst create mode 100644 skupper/network/docs/rst/collections/skupper/network/services_module.rst create mode 100644 skupper/network/plugins/action/services.py create mode 100644 skupper/network/plugins/action/services_load.py create mode 100644 skupper/network/plugins/doc_fragments/common.py delete mode 100644 skupper/network/plugins/module_utils/base_action.py create mode 100644 skupper/network/plugins/modules/services.py create mode 100644 skupper/network/plugins/modules/services_load.py delete mode 100644 skupper/network/roles/skupper_service/tasks/common-validate.yml delete mode 100644 skupper/network/roles/skupper_service/tasks/execute.yml delete mode 100644 skupper/network/roles/skupper_service/tasks/kube-command-bind.yml delete mode 100644 skupper/network/roles/skupper_service/tasks/kube-command-create.yml delete mode 100644 skupper/network/roles/skupper_service/tasks/kube-command-label.yml delete mode 100644 skupper/network/roles/skupper_service/tasks/kube-commands.yml delete mode 100644 skupper/network/roles/skupper_service/tasks/kube-validate.yml delete mode 100644 skupper/network/roles/skupper_service/tasks/podman-command-bind.yml delete mode 100644 skupper/network/roles/skupper_service/tasks/podman-command-create.yml delete mode 100644 skupper/network/roles/skupper_service/tasks/podman-commands.yml delete mode 100644 skupper/network/roles/skupper_service/tasks/podman-validate.yml delete mode 100644 skupper/network/roles/skupper_service/tasks/service-bind.yml delete mode 100644 skupper/network/roles/skupper_service/tasks/service-create.yml create mode 100644 skupper/network/tests/output/.tmp/pylint/ansible_collections.skupper.network.plugins.action.site_load_1.stats create mode 100644 skupper/network/tests/output/.tmp/pylint/ansible_collections.skupper.network.plugins.doc_fragments.common_1.stats create mode 100644 skupper/network/tests/output/.tmp/pylint/ansible_collections.skupper.network.plugins.module_utils.types_1.stats create mode 100644 skupper/network/tests/output/.tmp/pylint/ansible_collections.skupper.network.plugins.modules.site_load_1.stats create mode 100644 skupper/network/tests/output/.tmp/pylint/ansible_collections.skupper.network.tests.unit.plugins.modules.utils_1.stats create mode 100644 skupper/network/tests/output/bot/ansible-test-sanity-ansible-doc.json create mode 100644 skupper/network/tests/output/bot/ansible-test-sanity-compile-python-3.11.json create mode 100644 skupper/network/tests/output/bot/ansible-test-sanity-import-python-3.11.json create mode 100644 skupper/network/tests/output/bot/ansible-test-sanity-pep8.json create mode 100644 skupper/network/tests/output/bot/ansible-test-sanity-pylint.json create mode 100644 skupper/network/tests/output/bot/ansible-test-sanity-shebang.json create mode 100644 skupper/network/tests/output/bot/ansible-test-sanity-validate-modules.json create mode 100644 skupper/network/tests/output/junit/python3.11-modules-units.xml create mode 100644 skupper/network/tests/unit/plugins/modules/test_links_load.py create mode 100644 skupper/network/tests/unit/plugins/modules/test_services_load.py create mode 100644 skupper/network/tests/unit/plugins/modules/test_site_load.py create mode 100644 skupper/network/tests/unit/plugins/modules/utils.py create mode 100644 skupper/network/tests/unit/requirements.txt diff --git a/.github/workflows/pulls.yml b/.github/workflows/pulls.yml index 5af1e8c..70b731b 100644 --- a/.github/workflows/pulls.yml +++ b/.github/workflows/pulls.yml @@ -7,9 +7,20 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + with: + path: ./ansible_collections - name: Set up Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 + with: + cache: 'pip' - name: Install ansible, ansible-lint, yamllint - run: pip3 install yamllint ansible ansible-lint + run: pip3 install yamllint ansible ansible-lint virtualenv - name: Run ansible-lint - run: make ansible-lint + run: cd ansible_collections && make ansible-lint + - name: Run sanity tests + run: cd ansible_collections && make sanity-tests + - name: Run unit tests + run: | + cd ansible_collections + pip3 install -r ./skupper/network/tests/unit/requirements.txt + make unit-tests diff --git a/.gitignore b/.gitignore index 3c675d8..557863c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ *.tar.gz skupper/network/docs/build skupper/network/docs/temp-rst +skupper/network/tests/output +__pycache__/ diff --git a/Makefile b/Makefile index d62e986..129ba09 100644 --- a/Makefile +++ b/Makefile @@ -23,3 +23,9 @@ clean: install: @[[ -f "$(TARBALL)" ]] && true || (echo "Collection has not been built" && false) @ansible-galaxy collection install -f "$(TARBALL)" + +sanity-tests: + cd skupper/network && ansible-test sanity -v --color + +unit-tests: + cd skupper/network && ansible-test units -vvv --color diff --git a/docs/_static/antsibull-minimal.css b/docs/_static/antsibull-minimal.css index f07c2b2..ebc82d8 100644 --- a/docs/_static/antsibull-minimal.css +++ b/docs/_static/antsibull-minimal.css @@ -1,3 +1,3 @@ @charset "UTF-8"; /* Copyright (c) Ansible and contributors */ -/* GNU General Public License v3.0+ (see https://www.gnu.org/licenses/gpl-3.0.txt) */.ansible-links{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ansible-links>a{padding:4px 12px;margin:2px 4px;cursor:pointer;border-radius:3px;background-color:#5bbdbf;color:#fff}.ansible-links>a:active,.ansible-links>a:focus,.ansible-links>a:hover{background-color:#91d9db}.ansible-links>a:focus{outline:3px solid #204748}table.documentation-table{border-bottom:1px solid #000;border-right:1px solid #000}table.documentation-table th{background-color:#6ab0de}table.documentation-table td,table.documentation-table th{padding:4px;border-left:1px solid #000;border-top:1px solid #000}table.documentation-table td.elbow-placeholder{border-top:0;width:30px;min-width:30px}table.documentation-table td{vertical-align:top}table.documentation-table td:first-child{white-space:nowrap}table.documentation-table tr .ansibleOptionLink{display:inline-block;visibility:hidden}table.documentation-table tr .ansibleOptionLink:after{content:"🔗"}table.documentation-table tr:hover .ansibleOptionLink:after{visibility:visible}table.documentation-table tr:nth-child(odd){background-color:#fff}table.documentation-table tr:nth-child(2n){background-color:#e7f2fa}table.ansible-option-table{display:table;border-color:#000!important;height:1px}table.ansible-option-table tr{height:100%}table.ansible-option-table td,table.ansible-option-table th{border-color:#000!important;border-bottom:none!important;vertical-align:top!important}table.ansible-option-table th>p{font-size:medium!important}table.ansible-option-table thead tr{background-color:#6ab0de}table.ansible-option-table tbody .row-odd td{background-color:#fff!important}table.ansible-option-table tbody .row-even td{background-color:#e7f2fa!important}table.ansible-option-table ul>li>p{margin:0!important}table.ansible-option-table ul>li>div[class^=highlight]{margin-bottom:4px!important}table.ansible-option-table p.ansible-option-title{display:inline}table.ansible-option-table .ansible-option-type-line{font-size:small;margin-bottom:0}table.ansible-option-table .ansible-option-elements,table.ansible-option-table .ansible-option-type{color:purple}table.ansible-option-table .ansible-option-required{color:red}table.ansible-option-table .ansible-option-versionadded{font-style:italic;font-size:small;color:#006400}table.ansible-option-table .ansible-option-aliases{color:#006400;white-space:normal}table.ansible-option-table .ansible-option-line{margin-top:8px}table.ansible-option-table .ansible-option-choices{font-weight:700}table.ansible-option-table .ansible-option-choices-default-mark,table.ansible-option-table .ansible-option-default{color:#00f}table.ansible-option-table .ansible-option-default-bold{color:#00f;font-weight:700}table.ansible-option-table .ansible-option-returned-bold{font-weight:700}table.ansible-option-table .ansible-option-sample{color:#00f;word-wrap:break-word;word-break:break-all}table.ansible-option-table .ansible-option-sample-bold{color:#000;font-weight:700}table.ansible-option-table .ansible-option-configuration{font-weight:700}table.ansible-option-table .ansibleOptionLink{display:inline-block;visibility:hidden}table.ansible-option-table .ansibleOptionLink:after{content:"🔗"}table.ansible-option-table p{margin:0 0 8px}table.ansible-option-table tr:hover .ansibleOptionLink:after{visibility:visible}table.ansible-option-table td{padding:0!important;white-space:normal}table.ansible-option-table td>div.ansible-option-cell{padding:8px 16px;border-top:1px solid #000}table.ansible-option-table td:first-child{height:inherit;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}table.ansible-option-table td:first-child>div.ansible-option-cell{height:inherit;-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;white-space:nowrap;max-width:100%}table.ansible-option-table .ansible-option-indent{margin-left:2em;border-right:1px solid #000}table.ansible-option-table .ansible-attribute-support-label{display:none}table.ansible-option-table .ansible-attribute-support-label,table.ansible-option-table .ansible-attribute-support-property{font-weight:700}table.ansible-option-table .ansible-attribute-support-none{font-weight:700;color:red}table.ansible-option-table .ansible-attribute-support-partial{font-weight:700;color:#a5a500}table.ansible-option-table .ansible-attribute-support-full{font-weight:700;color:green}table.ansible-option-table .ansible-attribute-details{font-style:italic}@media (max-width:1200px){table.ansible-option-table{display:block;height:unset;border:none!important}table.ansible-option-table thead{display:none}table.ansible-option-table tbody,table.ansible-option-table td,table.ansible-option-table tr{display:block;border:none!important}table.ansible-option-table tbody .row-even td,table.ansible-option-table tbody .row-odd td{background-color:unset!important}table.ansible-option-table td>div.ansible-option-cell{border-top:none}table.ansible-option-table td:first-child>div.ansible-option-cell{background-color:#e7f2fa!important}table.ansible-option-table td:not(:first-child){display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}table.ansible-option-table td:not(:first-child)>div.ansible-option-cell{margin-left:1em}table.ansible-option-table .ansible-option-indent,table.ansible-option-table .ansible-option-indent-desc{margin-left:1em;border:none;border-right:3px solid #e7f2fa}table.ansible-option-table .ansible-attribute-support-label{display:unset}}.ansible-version-added{font-style:italic}.ansible-option-value a.reference.external,.ansible-option-value a.reference.external:hover,.ansible-option-value a.reference.internal,.ansible-option-value a.reference.internal:hover,.ansible-option a.reference.external,.ansible-option a.reference.external:hover,.ansible-option a.reference.internal,.ansible-option a.reference.internal:hover,.ansible-return-value a.reference.external,.ansible-return-value a.reference.external:hover,.ansible-return-value a.reference.internal,.ansible-return-value a.reference.internal:hover{color:unset} \ No newline at end of file +/* GNU General Public License v3.0+ (see https://www.gnu.org/licenses/gpl-3.0.txt) */.ansible-links{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ansible-links>a{padding:4px 12px;margin:2px 4px;cursor:pointer;border-radius:3px;background-color:#5bbdbf;color:#fff}.ansible-links>a:active,.ansible-links>a:focus,.ansible-links>a:hover{background-color:#91d9db}.ansible-links>a:focus{outline:3px solid #204748}table.documentation-table{border-bottom:1px solid #000;border-right:1px solid #000}table.documentation-table th{background-color:#6ab0de}table.documentation-table td,table.documentation-table th{padding:4px;border-left:1px solid #000;border-top:1px solid #000}table.documentation-table td.elbow-placeholder{border-top:0;width:30px;min-width:30px}table.documentation-table td{vertical-align:top}table.documentation-table td:first-child{white-space:nowrap}table.documentation-table tr .ansibleOptionLink{display:inline-block}table.documentation-table tr .ansibleOptionLink:after{content:"🔗";opacity:0}table.documentation-table tr:hover .ansibleOptionLink:after{opacity:1}table.documentation-table tr:nth-child(odd){background-color:#fff}table.documentation-table tr:nth-child(2n){background-color:#e7f2fa}table.ansible-option-table{display:table;border-color:#000!important;height:1px}table.ansible-option-table tr{height:100%}table.ansible-option-table td,table.ansible-option-table th{border-color:#000!important;border-bottom:none!important;vertical-align:top!important}table.ansible-option-table th>p{font-size:medium!important}table.ansible-option-table thead tr{background-color:#6ab0de}table.ansible-option-table tbody .row-odd td{background-color:#fff!important}table.ansible-option-table tbody .row-even td{background-color:#e7f2fa!important}table.ansible-option-table ul>li>p{margin:0!important}table.ansible-option-table ul>li>div[class^=highlight]{margin-bottom:4px!important}table.ansible-option-table p.ansible-option-title{display:inline}table.ansible-option-table .ansible-option-type-line{font-size:small;margin-bottom:0}table.ansible-option-table .ansible-option-elements,table.ansible-option-table .ansible-option-type{color:purple}table.ansible-option-table .ansible-option-required{color:red}table.ansible-option-table .ansible-option-versionadded{font-style:italic;font-size:small;color:#006400}table.ansible-option-table .ansible-option-aliases{color:#006400;white-space:normal}table.ansible-option-table .ansible-option-line{margin-top:8px}table.ansible-option-table .ansible-option-choices{font-weight:700}table.ansible-option-table .ansible-option-choices-default-mark,table.ansible-option-table .ansible-option-default{color:#00f}table.ansible-option-table .ansible-option-default-bold{color:#00f;font-weight:700}table.ansible-option-table .ansible-option-returned-bold{font-weight:700}table.ansible-option-table .ansible-option-sample{color:#00f;word-wrap:break-word;word-break:break-all}table.ansible-option-table .ansible-option-sample-bold{color:#000;font-weight:700}table.ansible-option-table .ansible-option-configuration{font-weight:700}table.ansible-option-table .ansibleOptionLink{display:inline-block}table.ansible-option-table .ansibleOptionLink:after{content:"🔗";opacity:0}table.ansible-option-table p{margin:0 0 8px}table.ansible-option-table tr:hover .ansibleOptionLink:after{opacity:1}table.ansible-option-table td{padding:0!important;white-space:normal}table.ansible-option-table td>div.ansible-option-cell{padding:8px 16px;border-top:1px solid #000}table.ansible-option-table td:first-child{height:inherit;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}table.ansible-option-table td:first-child>div.ansible-option-cell{height:inherit;-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;white-space:nowrap;max-width:100%}table.ansible-option-table .ansible-option-indent{margin-left:2em;border-right:1px solid #000}table.ansible-option-table .ansible-attribute-support-label{display:none}table.ansible-option-table .ansible-attribute-support-label,table.ansible-option-table .ansible-attribute-support-property{font-weight:700}table.ansible-option-table .ansible-attribute-support-none{font-weight:700;color:red}table.ansible-option-table .ansible-attribute-support-partial{font-weight:700;color:#a5a500}table.ansible-option-table .ansible-attribute-support-full{font-weight:700;color:green}table.ansible-option-table .ansible-attribute-details{font-style:italic}@media (max-width:1200px){table.ansible-option-table{display:block;height:unset;border:none!important}table.ansible-option-table thead{display:none}table.ansible-option-table tbody,table.ansible-option-table td,table.ansible-option-table tr{display:block;border:none!important}table.ansible-option-table tbody .row-even td,table.ansible-option-table tbody .row-odd td{background-color:unset!important}table.ansible-option-table td>div.ansible-option-cell{border-top:none}table.ansible-option-table td:first-child>div.ansible-option-cell{background-color:#e7f2fa!important}table.ansible-option-table td:not(:first-child){display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}table.ansible-option-table td:not(:first-child)>div.ansible-option-cell{margin-left:1em}table.ansible-option-table .ansible-option-indent,table.ansible-option-table .ansible-option-indent-desc{margin-left:1em;border:none;border-right:3px solid #e7f2fa}table.ansible-option-table .ansible-attribute-support-label{display:unset}}.ansible-version-added{font-style:italic}.ansible-option-value a.reference.external,.ansible-option-value a.reference.external:hover,.ansible-option-value a.reference.internal,.ansible-option-value a.reference.internal:hover,.ansible-option a.reference.external,.ansible-option a.reference.external:hover,.ansible-option a.reference.internal,.ansible-option a.reference.internal:hover,.ansible-return-value a.reference.external,.ansible-return-value a.reference.external:hover,.ansible-return-value a.reference.internal,.ansible-return-value a.reference.internal:hover{color:unset} \ No newline at end of file diff --git a/docs/collections/index_module.html b/docs/collections/index_module.html index 99c1f6b..c104dcb 100644 --- a/docs/collections/index_module.html +++ b/docs/collections/index_module.html @@ -123,6 +123,8 @@

skupper.network
  • skupper.network.links – Update links based on provided links list

  • skupper.network.links_load – Loads existing links to other sites

  • +
  • skupper.network.services – Update services based on provided services list

  • +
  • skupper.network.services_load – Loads existing services and targets

  • skupper.network.site_load – Loads site information as ansible facts into the respective host

  • diff --git a/docs/collections/skupper/network/index.html b/docs/collections/skupper/network/index.html index d1113fc..7373b54 100644 --- a/docs/collections/skupper/network/index.html +++ b/docs/collections/skupper/network/index.html @@ -127,7 +127,7 @@

    Skupper.Network

    -

    Collection version 1.1.0

    +

    Collection version 1.1.3