diff --git a/.github/workflows/commitlint.yml b/.github/workflows/commitlint.yml new file mode 100644 index 0000000..42a5375 --- /dev/null +++ b/.github/workflows/commitlint.yml @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# vim: ft=yaml +--- +name: Commitlint +'on': [pull_request] + +jobs: + lint: + runs-on: ubuntu-latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + - uses: wagoid/commitlint-github-action@v1 diff --git a/.travis.yml b/.travis.yml index 0037c28..4087dd6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -60,22 +60,24 @@ jobs: # the `platforms` defined in `kitchen.yml` - env: INSTANCE=default-debian-10-master-py3 - env: INSTANCE=clean-debian-10-master-py3 + - env: INSTANCE=default-ubuntu-2004-master-py3 # - env: INSTANCE=default-ubuntu-1804-master-py3 # - env: INSTANCE=default-centos-8-master-py3 + # - env: INSTANCE=default-fedora-32-master-py3 # - env: INSTANCE=default-fedora-31-master-py3 - # - env: INSTANCE=default-opensuse-leap-151-master-py3 + # - env: INSTANCE=default-opensuse-leap-152-master-py3 # - env: INSTANCE=default-amazonlinux-2-master-py3 - # - env: INSTANCE=default-debian-10-3000-2-py3 - # - env: INSTANCE=default-debian-9-3000-2-py3 - - env: INSTANCE=default-ubuntu-1804-3000-2-py3 - - env: INSTANCE=default-centos-8-3000-2-py3 - # - env: INSTANCE=default-centos-7-3000-2-py3 - # - env: INSTANCE=default-fedora-31-3000-2-py3 - - env: INSTANCE=default-opensuse-leap-151-3000-2-py3 - # - env: INSTANCE=default-amazonlinux-2-3000-2-py3 - # - env: INSTANCE=default-ubuntu-1804-3000-2-py2 - # - env: INSTANCE=default-ubuntu-1604-3000-2-py2 - # - env: INSTANCE=default-arch-base-latest-3000-2-py2 + # - env: INSTANCE=default-debian-10-3000-3-py3 + # - env: INSTANCE=default-debian-9-3000-3-py3 + # - env: INSTANCE=default-ubuntu-1804-3000-3-py3 + - env: INSTANCE=default-centos-8-3000-3-py3 + # - env: INSTANCE=default-centos-7-3000-3-py3 + # - env: INSTANCE=default-fedora-31-3000-3-py3 + - env: INSTANCE=default-opensuse-leap-152-3000-3-py3 + # - env: INSTANCE=default-amazonlinux-2-3000-3-py3 + # - env: INSTANCE=default-ubuntu-1804-3000-3-py2 + # - env: INSTANCE=default-ubuntu-1604-3000-3-py2 + # - env: INSTANCE=default-arch-base-latest-3000-3-py2 # - env: INSTANCE=default-debian-10-2019-2-py3 # - env: INSTANCE=default-debian-9-2019-2-py3 # - env: INSTANCE=default-ubuntu-1804-2019-2-py3 @@ -83,7 +85,7 @@ jobs: # - env: INSTANCE=default-centos-8-2019-2-py3 # - env: INSTANCE=default-centos-7-2019-2-py3 - env: INSTANCE=default-fedora-31-2019-2-py3 - # - env: INSTANCE=default-opensuse-leap-151-2019-2-py3 + # - env: INSTANCE=default-opensuse-leap-152-2019-2-py3 # - env: INSTANCE=default-amazonlinux-2-2019-2-py3 # - env: INSTANCE=default-centos-6-2019-2-py2 # - env: INSTANCE=default-amazonlinux-1-2019-2-py2 @@ -114,3 +116,15 @@ jobs: edge: true # Run `semantic-release` script: 'npx semantic-release@15.14' + +# Notification options: `always`, `never` or `change` +notifications: + webhooks: + if: 'repo = saltstack-formulas/libvirt-formula' + urls: + - https://saltstack-formulas.zulipchat.com/api/v1/external/travis?api_key=HsIq3o5QmLxdnVCKF9is0FUIpkpAY79P&stream=CI&topic=saltstack-formulas%2Flibvirt-formula&ignore_pull_requests=true + on_success: always # default: always + on_failure: always # default: always + on_start: always # default: never + on_cancel: always # default: always + on_error: always # default: always diff --git a/AUTHORS.md b/AUTHORS.md index 4dc1f97..fe8cc9b 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -4,8 +4,8 @@ This list is sorted by the number of commits per contributor in _descending_ ord Avatar|Contributor|Contributions :-:|---|:-: -@myii|[@myii](https://github.com/myii)|61 -@baby-gnu|[@baby-gnu](https://github.com/baby-gnu)|31 +@myii|[@myii](https://github.com/myii)|76 +@baby-gnu|[@baby-gnu](https://github.com/baby-gnu)|35 @aboe76|[@aboe76](https://github.com/aboe76)|18 @gravyboat|[@gravyboat](https://github.com/gravyboat)|6 @whiteinge|[@whiteinge](https://github.com/whiteinge)|4 @@ -28,4 +28,4 @@ Avatar|Contributor|Contributions --- -Auto-generated by a [forked version](https://github.com/myii/maintainer) of [gaocegege/maintainer](https://github.com/gaocegege/maintainer) on 2020-05-03. +Auto-generated by a [forked version](https://github.com/myii/maintainer) of [gaocegege/maintainer](https://github.com/gaocegege/maintainer) on 2020-07-10. diff --git a/CHANGELOG.md b/CHANGELOG.md index 682377e..1875c9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Changelog +## [3.7.6](https://github.com/saltstack-formulas/libvirt-formula/compare/v3.7.5...v3.7.6) (2020-07-10) + + +### Bug Fixes + +* **libtofs:** remove trailing coma on macro parameters list ([36589e4](https://github.com/saltstack-formulas/libvirt-formula/commit/36589e466d48ba28eb96627a88d0c5a53c7f6351)) + + +### Continuous Integration + +* **kitchen:** use `saltimages` Docker Hub where available [skip ci] ([086ea4c](https://github.com/saltstack-formulas/libvirt-formula/commit/086ea4c404280cbb0124253f775e786ae95b2d66)) +* **kitchen+travis:** add new platforms [skip ci] ([f2ccc51](https://github.com/saltstack-formulas/libvirt-formula/commit/f2ccc5136a543003719831f38574b9d43ab95da3)) +* **kitchen+travis:** adjust matrix to add `3000.3` [skip ci] ([95562e3](https://github.com/saltstack-formulas/libvirt-formula/commit/95562e3258c03a61a0ef77704d2b93ab1fc5b4b0)) +* **travis:** add notifications => zulip [skip ci] ([88b4bee](https://github.com/saltstack-formulas/libvirt-formula/commit/88b4beef40438d875d12ef69d69c4833908e6887)) +* **workflows/commitlint:** add to repo [skip ci] ([7a19e61](https://github.com/saltstack-formulas/libvirt-formula/commit/7a19e61bcced035520b14ef5c9a7445f9d026048)) + + +### Styles + +* **libtofs:** it's prettier with the Jinja open mark not indented ([7411517](https://github.com/saltstack-formulas/libvirt-formula/commit/741151734dbc77fdff9fc20cab3c5fdbeac7e28c)) +* **libtofs:** use Black-inspired Jinja formatting ([5f27ff8](https://github.com/saltstack-formulas/libvirt-formula/commit/5f27ff87a057acc8bad579ee89947e1604db5a6f)), closes [/github.com/saltstack-formulas/libvirt-formula/pull/77#issuecomment-637838178](https://github.com//github.com/saltstack-formulas/libvirt-formula/pull/77/issues/issuecomment-637838178) +* **map:** use Black-inspired Jinja formatting ([d05e403](https://github.com/saltstack-formulas/libvirt-formula/commit/d05e4039091b7e021c29cc201296ac57f5f10515)), closes [/github.com/saltstack-formulas/libvirt-formula/pull/77#issuecomment-652476823](https://github.com//github.com/saltstack-formulas/libvirt-formula/pull/77/issues/issuecomment-652476823) +* **map.jinja:** it's prettier with the Jinja open mark not indented ([c81943b](https://github.com/saltstack-formulas/libvirt-formula/commit/c81943bb0c5c4f419923c360954acfb94c653194)) + ## [3.7.5](https://github.com/saltstack-formulas/libvirt-formula/compare/v3.7.4...v3.7.5) (2020-05-03) diff --git a/CODEOWNERS b/CODEOWNERS index 382b2b4..8a469e4 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -4,9 +4,15 @@ # FILE PATTERN OWNER(S) * @baby-gnu -# SECTION: Owner(s) for files related to `semantic-release` +# SECTION: Owner(s) for specific directories # FILE PATTERN OWNER(S) + +# SECTION: Owner(s) for files/directories related to `semantic-release` +# FILE PATTERN OWNER(S) +/.github/workflows/ @saltstack-formulas/ssf /bin/kitchen @saltstack-formulas/ssf +/docs/AUTHORS.rst @saltstack-formulas/ssf +/docs/CHANGELOG.rst @saltstack-formulas/ssf /docs/TOFS_pattern.rst @saltstack-formulas/ssf /libvirt/libsaltcli.jinja @saltstack-formulas/ssf /libvirt/libtofs.jinja @saltstack-formulas/ssf @@ -18,8 +24,11 @@ /.salt-lint @saltstack-formulas/ssf /.travis.yml @saltstack-formulas/ssf /.yamllint @saltstack-formulas/ssf -/commitlint.config.js @saltstack-formulas/ssf +/AUTHORS.md @saltstack-formulas/ssf +/CHANGELOG.md @saltstack-formulas/ssf /CODEOWNERS @saltstack-formulas/ssf +/commitlint.config.js @saltstack-formulas/ssf +/FORMULA @saltstack-formulas/ssf /Gemfile @saltstack-formulas/ssf /Gemfile.lock @saltstack-formulas/ssf /kitchen.yml @saltstack-formulas/ssf @@ -27,5 +36,5 @@ /release-rules.js @saltstack-formulas/ssf /release.config.js @saltstack-formulas/ssf -# SECTION: Owner(s) for specific files/directories +# SECTION: Owner(s) for specific files # FILE PATTERN OWNER(S) diff --git a/FORMULA b/FORMULA index e8a5c32..9d43304 100644 --- a/FORMULA +++ b/FORMULA @@ -1,7 +1,7 @@ name: libvirt os: Debian, CentOS, openSUSE, Suse os_family: Debian, RedHat, Suse -version: 3.7.5 +version: 3.7.6 release: 1 minimum_version: 2018.3 summary: libvirt formula diff --git a/Gemfile.lock b/Gemfile.lock index 81169cb..38dca3a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ GEM remote: https://rubygems.org/ specs: - activesupport (5.2.4.2) + activesupport (5.2.4.3) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) @@ -9,180 +9,185 @@ GEM addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) aws-eventstream (1.1.0) - aws-partitions (1.299.0) - aws-sdk-apigateway (1.38.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-partitions (1.338.0) + aws-sdk-apigateway (1.48.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-apigatewayv2 (1.19.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-apigatewayv2 (1.23.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-athena (1.24.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-athena (1.30.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) aws-sdk-autoscaling (1.22.0) aws-sdk-core (~> 3, >= 3.52.1) aws-sigv4 (~> 1.1) - aws-sdk-budgets (1.28.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-budgets (1.32.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudformation (1.33.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudformation (1.41.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudhsm (1.20.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudfront (1.33.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudhsmv2 (1.21.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudhsm (1.24.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudtrail (1.21.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudhsmv2 (1.26.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudwatch (1.36.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudtrail (1.26.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudwatchlogs (1.29.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudwatch (1.41.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-codecommit (1.31.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudwatchlogs (1.34.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-codedeploy (1.28.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-codecommit (1.37.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-codepipeline (1.29.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-codedeploy (1.34.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-configservice (1.43.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-codepipeline (1.34.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-core (3.94.0) + aws-sdk-configservice (1.48.0) + aws-sdk-core (~> 3, >= 3.99.0) + aws-sigv4 (~> 1.1) + aws-sdk-core (3.103.0) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) aws-sigv4 (~> 1.1) jmespath (~> 1.0) - aws-sdk-costandusagereportservice (1.19.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-costandusagereportservice (1.24.0) + aws-sdk-core (~> 3, >= 3.99.0) + aws-sigv4 (~> 1.1) + aws-sdk-dynamodb (1.51.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-dynamodb (1.45.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-ec2 (1.174.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-ec2 (1.154.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-ecr (1.34.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-ecr (1.26.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-ecs (1.67.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-ecs (1.60.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-efs (1.32.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-eks (1.35.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-eks (1.39.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-elasticache (1.31.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-elasticache (1.40.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-elasticbeanstalk (1.28.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-elasticbeanstalk (1.34.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-elasticloadbalancing (1.20.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-elasticloadbalancing (1.25.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-elasticloadbalancingv2 (1.41.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-elasticloadbalancingv2 (1.47.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-elasticsearchservice (1.32.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-elasticsearchservice (1.39.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-firehose (1.25.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-firehose (1.31.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-iam (1.36.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-iam (1.43.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-kafka (1.19.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-kafka (1.23.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-kinesis (1.21.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-kinesis (1.26.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-kms (1.30.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-kms (1.36.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-lambda (1.39.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-lambda (1.46.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) aws-sdk-organizations (1.17.0) aws-sdk-core (~> 3, >= 3.39.0) aws-sigv4 (~> 1.0) - aws-sdk-rds (1.82.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-rds (1.92.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-redshift (1.40.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-redshift (1.46.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-route53 (1.32.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-route53 (1.40.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-route53domains (1.19.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-route53domains (1.25.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-route53resolver (1.12.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-route53resolver (1.17.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.62.0) - aws-sdk-core (~> 3, >= 3.83.0) + aws-sdk-s3 (1.73.0) + aws-sdk-core (~> 3, >= 3.102.1) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.1) - aws-sdk-securityhub (1.23.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-securityhub (1.29.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-ses (1.28.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-ses (1.33.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-sms (1.18.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-sms (1.23.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-sns (1.22.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-sns (1.27.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-sqs (1.24.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-sqs (1.30.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-ssm (1.73.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-ssm (1.84.0) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sigv4 (1.1.2) - aws-eventstream (~> 1.0, >= 1.0.2) - azure_graph_rbac (0.17.1) - ms_rest_azure (~> 0.11.0) - azure_mgmt_key_vault (0.17.5) - ms_rest_azure (~> 0.11.1) - azure_mgmt_resources (0.17.8) - ms_rest_azure (~> 0.11.1) - azure_mgmt_security (0.18.0) - ms_rest_azure (~> 0.11.1) - azure_mgmt_storage (0.20.0) - ms_rest_azure (~> 0.11.1) + aws-sigv4 (1.2.1) + aws-eventstream (~> 1, >= 1.0.2) + azure_graph_rbac (0.17.2) + ms_rest_azure (~> 0.12.0) + azure_mgmt_key_vault (0.17.6) + ms_rest_azure (~> 0.12.0) + azure_mgmt_resources (0.17.9) + ms_rest_azure (~> 0.12.0) + azure_mgmt_security (0.18.2) + ms_rest_azure (~> 0.12.0) + azure_mgmt_storage (0.21.2) + ms_rest_azure (~> 0.12.0) bcrypt_pbkdf (1.0.1) builder (3.2.4) - chef-config (15.9.17) + chef-config (16.2.73) addressable - chef-utils (= 15.9.17) + chef-utils (= 16.2.73) fuzzyurl mixlib-config (>= 2.2.12, < 4.0) mixlib-shellout (>= 2.0, < 4.0) tomlrb (~> 1.2) - chef-telemetry (1.0.3) + chef-telemetry (1.0.8) chef-config concurrent-ruby (~> 1.0) ffi-yajl (~> 2.2) - http (~> 2.2) - chef-utils (15.9.17) - coderay (1.1.2) + chef-utils (16.2.73) + coderay (1.1.3) concurrent-ruby (1.1.6) - declarative (0.0.10) + declarative (0.0.20) declarative-option (0.1.0) - diff-lcs (1.3) + diff-lcs (1.4.4) docker-api (1.34.2) excon (>= 0.47.0) multi_json @@ -193,7 +198,7 @@ GEM ed25519 (1.2.4) equatable (0.6.1) erubi (1.9.0) - excon (0.73.0) + excon (0.75.0) faraday (0.17.3) multipart-post (>= 1.2, < 3) faraday-cookie_jar (0.0.6) @@ -201,7 +206,7 @@ GEM http-cookie (~> 1.0.0) faraday_middleware (0.12.2) faraday (>= 0.7.4, < 1.0) - ffi (1.12.2) + ffi (1.13.1) ffi-yajl (2.3.3) libyajl2 (~> 1.2) fuzzyurl (0.9.0) @@ -224,30 +229,23 @@ GEM ffi (>= 1.0.1) gyoku (1.3.1) builder (>= 2.1.2) - hana (1.3.5) + hana (1.3.6) hashie (3.6.0) htmlentities (4.3.4) - http (2.2.2) - addressable (~> 2.3) - http-cookie (~> 1.0) - http-form_data (~> 1.0.1) - http_parser.rb (~> 0.6.0) http-cookie (1.0.3) domain_name (~> 0.5) - http-form_data (1.0.3) - http_parser.rb (0.6.0) httpclient (2.8.3) - i18n (1.8.2) + i18n (1.8.3) concurrent-ruby (~> 1.0) inifile (3.0.0) - inspec (4.18.104) + inspec (4.21.3) faraday_middleware (~> 0.12.2) - inspec-core (= 4.18.104) + inspec-core (= 4.21.3) train (~> 3.0) train-aws (~> 0.1) train-habitat (~> 0.1) train-winrm (~> 0.2) - inspec-core (4.18.104) + inspec-core (4.21.3) addressable (~> 2.4) chef-telemetry (~> 1.0) faraday (>= 0.9.0) @@ -255,12 +253,12 @@ GEM htmlentities (~> 4.3) json_schemer (~> 0.2.1) license-acceptance (>= 0.2.13, < 2.0) - method_source (~> 0.8) + method_source (>= 0.8, < 2.0) mixlib-log (~> 3.0) multipart-post (~> 2.0) parallel (~> 1.9) parslet (~> 1.5) - pry (~> 0) + pry (~> 0.13) rspec (~> 3.9) rspec-its (~> 1.2) rubyzip (~> 1.2, >= 1.2.2) @@ -268,12 +266,12 @@ GEM sslshake (~> 1.2) term-ansicolor (~> 1.7) thor (>= 0.20, < 2.0) - tomlrb (~> 1.2) + tomlrb (~> 1.2.0) train-core (~> 3.0) tty-prompt (~> 0.17) tty-table (~> 0.10) jmespath (1.4.0) - json (2.3.0) + json (2.3.1) json_schemer (0.2.11) ecma-re-validator (~> 0.2) hana (~> 1.3) @@ -282,9 +280,9 @@ GEM jwt (2.2.1) kitchen-docker (2.10.0) test-kitchen (>= 1.0.0) - kitchen-inspec (1.3.2) + kitchen-inspec (2.0.0) hashie (~> 3.4) - inspec (>= 1.47, < 5.0) + inspec (>= 2.2.64, < 5.0) test-kitchen (>= 1.6, < 3) kitchen-salt (0.6.3) hashie (>= 3.5) @@ -296,13 +294,13 @@ GEM tty-box (~> 0.3) tty-prompt (~> 0.18) little-plugger (1.1.4) - logging (2.2.2) + logging (2.3.0) little-plugger (~> 1.1) - multi_json (~> 1.10) + multi_json (~> 1.14) memoist (0.16.2) - method_source (0.9.2) + method_source (1.0.0) mini_mime (1.0.2) - minitest (5.14.0) + minitest (5.14.1) mixlib-config (3.0.6) tomlrb mixlib-install (3.12.1) @@ -316,32 +314,31 @@ GEM concurrent-ruby (~> 1.0) faraday (>= 0.9, < 2.0.0) timeliness (~> 0.3.10) - ms_rest_azure (0.11.2) + ms_rest_azure (0.12.0) concurrent-ruby (~> 1.0) faraday (>= 0.9, < 2.0.0) faraday-cookie_jar (~> 0.0.6) ms_rest (~> 0.7.6) - unf_ext (= 0.0.7.2) multi_json (1.14.1) multipart-post (2.1.1) necromancer (0.5.1) - net-scp (2.0.0) - net-ssh (>= 2.6.5, < 6.0.0) - net-ssh (5.2.0) + net-scp (3.0.0) + net-ssh (>= 2.6.5, < 7.0.0) + net-ssh (6.1.0) net-ssh-gateway (2.0.0) net-ssh (>= 4.0.0) nori (2.6.0) os (1.1.0) - parallel (1.19.1) + parallel (1.19.2) parslet (1.8.2) - pastel (0.7.3) + pastel (0.7.4) equatable (~> 0.6) tty-color (~> 0.5) - pry (0.12.2) - coderay (~> 1.1.0) - method_source (~> 0.9.0) - public_suffix (4.0.4) - regexp_parser (1.7.0) + pry (0.13.1) + coderay (~> 1.1) + method_source (~> 1.0) + public_suffix (4.0.5) + regexp_parser (1.7.1) representable (3.0.4) declarative (< 0.1.0) declarative-option (< 0.2.0) @@ -351,9 +348,9 @@ GEM rspec-core (~> 3.9.0) rspec-expectations (~> 3.9.0) rspec-mocks (~> 3.9.0) - rspec-core (3.9.1) - rspec-support (~> 3.9.1) - rspec-expectations (3.9.1) + rspec-core (3.9.2) + rspec-support (~> 3.9.3) + rspec-expectations (3.9.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.9.0) rspec-its (1.3.0) @@ -362,7 +359,7 @@ GEM rspec-mocks (3.9.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.9.0) - rspec-support (3.9.2) + rspec-support (3.9.3) rubyntlm (0.6.2) rubyzip (1.3.0) semverse (3.0.0) @@ -371,7 +368,7 @@ GEM faraday (>= 0.17.3, < 2.0) jwt (>= 1.5, < 3.0) multi_json (~> 1.10) - sslshake (1.3.0) + sslshake (1.3.1) strings (0.1.8) strings-ansi (~> 0.1) unicode-display_width (~> 1.5) @@ -380,27 +377,27 @@ GEM sync (0.5.0) term-ansicolor (1.7.1) tins (~> 1.0) - test-kitchen (2.4.0) + test-kitchen (2.5.2) bcrypt_pbkdf (~> 1.0) ed25519 (~> 1.2) license-acceptance (~> 1.0, >= 1.0.11) mixlib-install (~> 3.6) mixlib-shellout (>= 1.2, < 4.0) - net-scp (>= 1.1, < 3.0) - net-ssh (>= 2.9, < 6.0) + net-scp (>= 1.1, < 4.0) + net-ssh (>= 2.9, < 7.0) net-ssh-gateway (>= 1.2, < 3.0) - thor (~> 0.19) + thor (>= 0.19, < 2.0) winrm (~> 2.0) winrm-elevated (~> 1.0) winrm-fs (~> 1.1) - thor (0.20.3) + thor (1.0.1) thread_safe (0.3.6) timeliness (0.3.10) - tins (1.24.1) + tins (1.25.0) sync - tomlrb (1.3.0) - train (3.2.28) - activesupport (~> 5.2.3) + tomlrb (1.2.9) + train (3.3.6) + activesupport (>= 5.2.4.3, < 6.0.0) azure_graph_rbac (~> 0.16) azure_mgmt_key_vault (~> 0.17) azure_mgmt_resources (~> 0.15) @@ -410,15 +407,16 @@ GEM google-api-client (>= 0.23.9, < 0.35.0) googleauth (>= 0.6.6, < 0.11.0) inifile (~> 3.0) - train-core (= 3.2.28) + train-core (= 3.3.6) train-winrm (~> 0.2) - train-aws (0.1.15) + train-aws (0.1.17) aws-sdk-apigateway (~> 1.0) aws-sdk-apigatewayv2 (~> 1.0) aws-sdk-athena (~> 1.0) aws-sdk-autoscaling (~> 1.22.0) aws-sdk-budgets (~> 1.0) aws-sdk-cloudformation (~> 1.0) + aws-sdk-cloudfront (~> 1.0) aws-sdk-cloudhsm (~> 1.0) aws-sdk-cloudhsmv2 (~> 1.0) aws-sdk-cloudtrail (~> 1.8) @@ -434,6 +432,7 @@ GEM aws-sdk-ec2 (~> 1.70) aws-sdk-ecr (~> 1.18) aws-sdk-ecs (~> 1.30) + aws-sdk-efs (~> 1.0) aws-sdk-eks (~> 1.9) aws-sdk-elasticache (~> 1.0) aws-sdk-elasticbeanstalk (~> 1.0) @@ -459,12 +458,13 @@ GEM aws-sdk-sns (~> 1.9) aws-sdk-sqs (~> 1.10) aws-sdk-ssm (~> 1.0) - train-core (3.2.28) + train-core (3.3.6) addressable (~> 2.5) + ffi (!= 1.13.0) json (>= 1.8, < 3.0) mixlib-shellout (>= 2.0, < 4.0) - net-scp (>= 1.2, < 3.0) - net-ssh (>= 2.9, < 6.0) + net-scp (>= 1.2, < 4.0) + net-ssh (>= 2.9, < 7.0) train-habitat (0.2.13) train-winrm (0.2.6) winrm (~> 2.0) @@ -483,7 +483,7 @@ GEM tty-cursor (~> 0.7) tty-screen (~> 0.7) wisper (~> 2.0.0) - tty-screen (0.7.1) + tty-screen (0.8.0) tty-table (0.11.0) equatable (~> 0.6) necromancer (~> 0.5) @@ -495,7 +495,7 @@ GEM uber (0.1.0) unf (0.1.4) unf_ext - unf_ext (0.0.7.2) + unf_ext (0.0.7.7) unicode-display_width (1.7.0) unicode_utils (1.4.0) uri_template (0.7.0) diff --git a/docs/AUTHORS.rst b/docs/AUTHORS.rst index b9a26f2..1891a42 100644 --- a/docs/AUTHORS.rst +++ b/docs/AUTHORS.rst @@ -15,10 +15,10 @@ This list is sorted by the number of commits per contributor in *descending* ord - Contributions * - :raw-html-m2r:`@myii` - `@myii `_ - - 61 + - 76 * - :raw-html-m2r:`@baby-gnu` - `@baby-gnu `_ - - 31 + - 35 * - :raw-html-m2r:`@aboe76` - `@aboe76 `_ - 18 @@ -80,4 +80,4 @@ This list is sorted by the number of commits per contributor in *descending* ord ---- -Auto-generated by a `forked version `_ of `gaocegege/maintainer `_ on 2020-05-03. +Auto-generated by a `forked version `_ of `gaocegege/maintainer `_ on 2020-07-10. diff --git a/docs/CHANGELOG.rst b/docs/CHANGELOG.rst index 1c6d9ad..eb424bb 100644 --- a/docs/CHANGELOG.rst +++ b/docs/CHANGELOG.rst @@ -2,6 +2,34 @@ Changelog ========= +`3.7.6 `_ (2020-07-10) +--------------------------------------------------------------------------------------------------------- + +Bug Fixes +^^^^^^^^^ + + +* **libtofs:** remove trailing coma on macro parameters list (\ `36589e4 `_\ ) + +Continuous Integration +^^^^^^^^^^^^^^^^^^^^^^ + + +* **kitchen:** use ``saltimages`` Docker Hub where available [skip ci] (\ `086ea4c `_\ ) +* **kitchen+travis:** add new platforms [skip ci] (\ `f2ccc51 `_\ ) +* **kitchen+travis:** adjust matrix to add ``3000.3`` [skip ci] (\ `95562e3 `_\ ) +* **travis:** add notifications => zulip [skip ci] (\ `88b4bee `_\ ) +* **workflows/commitlint:** add to repo [skip ci] (\ `7a19e61 `_\ ) + +Styles +^^^^^^ + + +* **libtofs:** it's prettier with the Jinja open mark not indented (\ `7411517 `_\ ) +* **libtofs:** use Black-inspired Jinja formatting (\ `5f27ff8 `_\ ), closes `/github.com/saltstack-formulas/libvirt-formula/pull/77#issuecomment-637838178 `_ +* **map:** use Black-inspired Jinja formatting (\ `d05e403 `_\ ), closes `/github.com/saltstack-formulas/libvirt-formula/pull/77#issuecomment-652476823 `_ +* **map.jinja:** it's prettier with the Jinja open mark not indented (\ `c81943b `_\ ) + `3.7.5 `_ (2020-05-03) --------------------------------------------------------------------------------------------------------- diff --git a/kitchen.yml b/kitchen.yml index 1acef02..c62cf5b 100644 --- a/kitchen.yml +++ b/kitchen.yml @@ -14,102 +14,108 @@ platforms: ## SALT `master` - name: debian-10-master-py3 driver: - image: netmanagers/salt-master-py3:debian-10 + image: saltimages/salt-master-py3:debian-10 + - name: ubuntu-2004-master-py3 + driver: + image: saltimages/salt-master-py3:ubuntu-20.04 - name: ubuntu-1804-master-py3 driver: - image: netmanagers/salt-master-py3:ubuntu-18.04 + image: saltimages/salt-master-py3:ubuntu-18.04 - name: centos-8-master-py3 driver: - image: netmanagers/salt-master-py3:centos-8 + image: saltimages/salt-master-py3:centos-8 + - name: fedora-32-master-py3 + driver: + image: saltimages/salt-master-py3:fedora-32 - name: fedora-31-master-py3 driver: - image: netmanagers/salt-master-py3:fedora-31 - - name: opensuse-leap-151-master-py3 + image: saltimages/salt-master-py3:fedora-31 + - name: opensuse-leap-152-master-py3 driver: - image: netmanagers/salt-master-py3:opensuse-leap-15.1 + image: saltimages/salt-master-py3:opensuse-leap-15.2 run_command: /usr/lib/systemd/systemd - # Workaround to avoid intermittent failures on `opensuse-leap-15.1`: + # Workaround to avoid intermittent failures on `opensuse-leap-15.2`: # => SCP did not finish successfully (255): (Net::SCP::Error) transport: max_ssh_sessions: 1 - name: amazonlinux-2-master-py3 driver: - image: netmanagers/salt-master-py3:amazonlinux-2 + image: saltimages/salt-master-py3:amazonlinux-2 - ## SALT `3000.2` - - name: debian-10-3000-2-py3 + ## SALT `3000.3` + - name: debian-10-3000-3-py3 driver: - image: netmanagers/salt-3000.2-py3:debian-10 - - name: debian-9-3000-2-py3 + image: saltimages/salt-3000.3-py3:debian-10 + - name: debian-9-3000-3-py3 driver: - image: netmanagers/salt-3000.2-py3:debian-9 - - name: ubuntu-1804-3000-2-py3 + image: saltimages/salt-3000.3-py3:debian-9 + - name: ubuntu-1804-3000-3-py3 driver: - image: netmanagers/salt-3000.2-py3:ubuntu-18.04 - - name: centos-8-3000-2-py3 + image: saltimages/salt-3000.3-py3:ubuntu-18.04 + - name: centos-8-3000-3-py3 driver: - image: netmanagers/salt-3000.2-py3:centos-8 - - name: centos-7-3000-2-py3 + image: saltimages/salt-3000.3-py3:centos-8 + - name: centos-7-3000-3-py3 driver: - image: netmanagers/salt-3000.2-py3:centos-7 - - name: fedora-31-3000-2-py3 + image: saltimages/salt-3000.3-py3:centos-7 + - name: fedora-31-3000-3-py3 driver: - image: netmanagers/salt-3000.2-py3:fedora-31 - - name: opensuse-leap-151-3000-2-py3 + image: saltimages/salt-3000.3-py3:fedora-31 + - name: opensuse-leap-152-3000-3-py3 driver: - image: netmanagers/salt-3000.2-py3:opensuse-leap-15.1 + image: saltimages/salt-3000.3-py3:opensuse-leap-15.2 run_command: /usr/lib/systemd/systemd - # Workaround to avoid intermittent failures on `opensuse-leap-15.1`: + # Workaround to avoid intermittent failures on `opensuse-leap-15.2`: # => SCP did not finish successfully (255): (Net::SCP::Error) transport: max_ssh_sessions: 1 - - name: amazonlinux-2-3000-2-py3 + - name: amazonlinux-2-3000-3-py3 driver: - image: netmanagers/salt-3000.2-py3:amazonlinux-2 - - name: ubuntu-1804-3000-2-py2 + image: saltimages/salt-3000.3-py3:amazonlinux-2 + - name: ubuntu-1804-3000-3-py2 driver: - image: netmanagers/salt-3000.2-py2:ubuntu-18.04 - - name: ubuntu-1604-3000-2-py2 + image: saltimages/salt-3000.3-py2:ubuntu-18.04 + - name: ubuntu-1604-3000-3-py2 driver: - image: netmanagers/salt-3000.2-py2:ubuntu-16.04 - - name: arch-base-latest-3000-2-py2 + image: saltimages/salt-3000.3-py2:ubuntu-16.04 + - name: arch-base-latest-3000-3-py2 driver: - image: netmanagers/salt-3000.2-py2:arch-base-latest + image: saltimages/salt-3000.3-py2:arch-base-latest run_command: /usr/lib/systemd/systemd ## SALT `2019.2` - name: debian-10-2019-2-py3 driver: - image: netmanagers/salt-2019.2-py3:debian-10 + image: saltimages/salt-2019.2-py3:debian-10 - name: debian-9-2019-2-py3 driver: - image: netmanagers/salt-2019.2-py3:debian-9 + image: saltimages/salt-2019.2-py3:debian-9 - name: ubuntu-1804-2019-2-py3 driver: - image: netmanagers/salt-2019.2-py3:ubuntu-18.04 + image: saltimages/salt-2019.2-py3:ubuntu-18.04 - name: ubuntu-1604-2019-2-py3 driver: - image: netmanagers/salt-2019.2-py3:ubuntu-16.04 + image: saltimages/salt-2019.2-py3:ubuntu-16.04 - name: centos-8-2019-2-py3 driver: - image: netmanagers/salt-2019.2-py3:centos-8 + image: saltimages/salt-2019.2-py3:centos-8 - name: centos-7-2019-2-py3 driver: - image: netmanagers/salt-2019.2-py3:centos-7 + image: saltimages/salt-2019.2-py3:centos-7 - name: fedora-31-2019-2-py3 driver: - image: netmanagers/salt-2019.2-py3:fedora-31 - - name: opensuse-leap-151-2019-2-py3 + image: saltimages/salt-2019.2-py3:fedora-31 + - name: opensuse-leap-152-2019-2-py3 driver: - image: netmanagers/salt-2019.2-py3:opensuse-leap-15.1 + image: saltimages/salt-2019.2-py3:opensuse-leap-15.2 run_command: /usr/lib/systemd/systemd - # Workaround to avoid intermittent failures on `opensuse-leap-15.1`: + # Workaround to avoid intermittent failures on `opensuse-leap-15.2`: # => SCP did not finish successfully (255): (Net::SCP::Error) transport: max_ssh_sessions: 1 - name: amazonlinux-2-2019-2-py3 driver: - image: netmanagers/salt-2019.2-py3:amazonlinux-2 + image: saltimages/salt-2019.2-py3:amazonlinux-2 # Python2 version problem # SaltStack runs under python 2.7 but system is python 2.6 # The python libvirt library can't be used @@ -119,11 +125,11 @@ platforms: # run_command: /sbin/init - name: amazonlinux-1-2019-2-py2 driver: - image: netmanagers/salt-2019.2-py2:amazonlinux-1 + image: saltimages/salt-2019.2-py2:amazonlinux-1 run_command: /sbin/init - name: arch-base-latest-2019-2-py2 driver: - image: netmanagers/salt-2019.2-py2:arch-base-latest + image: saltimages/salt-2019.2-py2:arch-base-latest run_command: /usr/lib/systemd/systemd provisioner: diff --git a/libvirt/libtofs.jinja b/libvirt/libtofs.jinja index 0668925..f39fd42 100644 --- a/libvirt/libtofs.jinja +++ b/libvirt/libtofs.jinja @@ -1,40 +1,37 @@ -{%- macro files_switch(source_files, - lookup=None, - default_files_switch=['id', 'os_family'], - indent_width=6, - use_subpath=False) %} - {#- +{%- macro files_switch( + source_files, + lookup=None, + default_files_switch=["id", "os_family"], + indent_width=6, + use_subpath=False + ) %} +{#- Returns a valid value for the "source" parameter of a "file.managed" state function. This makes easier the usage of the Template Override and Files Switch (TOFS) pattern. - Params: * source_files: ordered list of files to look for - * lookup: key under ':tofs:source_files' to prepend to the + * lookup: key under ":tofs:source_files" to prepend to the list of source files * default_files_switch: if there's no config (e.g. pillar) - ':tofs:files_switch' this is the ordered list of grains to + ":tofs:files_switch" this is the ordered list of grains to use as selector switch of the directories under "/files" * indent_width: indentation of the result value to conform to YAML * use_subpath: defaults to `False` but if set, lookup the source file recursively from the current state directory up to `tplroot` - Example (based on a `tplroot` of `xxx`): - If we have a state: - Deploy configuration: file.managed: - name: /etc/yyy/zzz.conf - - source: {{ files_switch(['/etc/yyy/zzz.conf', '/etc/yyy/zzz.conf.jinja'], - lookup='Deploy configuration' - ) }} + - source: {{ files_switch( + ["/etc/yyy/zzz.conf", "/etc/yyy/zzz.conf.jinja"], + lookup="Deploy configuration", + ) }} - template: jinja - In a minion with id=theminion and os_family=RedHat, it's going to be rendered as: - Deploy configuration: file.managed: - name: /etc/yyy/zzz.conf @@ -46,67 +43,73 @@ - salt://xxx/files/default/etc/yyy/zzz.conf - salt://xxx/files/default/etc/yyy/zzz.conf.jinja - template: jinja - #} - {#- Get the `tplroot` from `tpldir` #} - {%- set tplroot = tpldir.split('/')[0] %} - {%- set path_prefix = salt['config.get'](tplroot ~ ':tofs:path_prefix', tplroot) %} - {%- set files_dir = salt['config.get'](tplroot ~ ':tofs:dirs:files', 'files') %} - {%- set files_switch_list = salt['config.get']( - tplroot ~ ':tofs:files_switch', - default_files_switch - ) %} - {#- Lookup source_files (v2), files (v1), or fallback to an empty list #} - {%- set src_files = salt['config.get']( - tplroot ~ ':tofs:source_files:' ~ lookup, - salt['config.get'](tplroot ~ ':tofs:files:' ~ lookup, []) - ) %} - {#- Append the default source_files #} - {%- set src_files = src_files + source_files %} - {#- Only add to [''] when supporting older TOFS implementations #} - {%- set path_prefix_exts = [''] %} - {%- if use_subpath and tplroot != tpldir %} - {#- Walk directory tree to find {{ files_dir }} #} - {%- set subpath_parts = tpldir.lstrip(tplroot).lstrip('/').split('/') %} - {%- for path in subpath_parts %} - {%- set subpath = subpath_parts[0:loop.index] | join('/') %} - {%- do path_prefix_exts.append('/' ~ subpath) %} - {%- endfor %} - {%- endif %} - {%- for path_prefix_ext in path_prefix_exts|reverse %} - {%- set path_prefix_inc_ext = path_prefix ~ path_prefix_ext %} - {#- For older TOFS implementation, use `files_switch` from the config #} - {#- Use the default, new method otherwise #} - {%- set fsl = salt['config.get']( - tplroot ~ path_prefix_ext|replace('/', ':') ~ ':files_switch', - files_switch_list - ) %} - {#- Append an empty value to evaluate as `default` in the loop below #} - {%- if '' not in fsl %} - {%- set fsl = fsl + [''] %} - {%- endif %} - {%- for fs in fsl %} - {%- for src_file in src_files %} - {%- if fs %} - {%- set fs_dirs = salt['config.get'](fs, fs) %} - {%- else %} - {%- set fs_dirs = salt['config.get'](tplroot ~ ':tofs:dirs:default', 'default') %} - {%- endif %} - {#- Force the `config.get` lookup result as a list where necessary #} - {#- since we need to also handle grains that are lists #} - {%- if fs_dirs is string %} - {%- set fs_dirs = [fs_dirs] %} - {%- endif %} - {%- for fs_dir in fs_dirs %} - {%- set url = [ - '- salt:/', - path_prefix_inc_ext.strip('/'), - files_dir.strip('/'), - fs_dir.strip('/'), - src_file.strip('/'), - ] | select | join('/') %} +#} +{#- Get the `tplroot` from `tpldir` #} +{%- set tplroot = tpldir.split("/")[0] %} +{%- set path_prefix = salt["config.get"](tplroot ~ ":tofs:path_prefix", tplroot) %} +{%- set files_dir = salt["config.get"](tplroot ~ ":tofs:dirs:files", "files") %} +{%- set files_switch_list = salt["config.get"]( + tplroot ~ ":tofs:files_switch", default_files_switch + ) %} +{#- Lookup source_files (v2), files (v1), or fallback to an empty list #} +{%- set src_files = salt["config.get"]( + tplroot ~ ":tofs:source_files:" ~ lookup, + salt["config.get"](tplroot ~ ":tofs:files:" ~ lookup, []), + ) %} +{#- Append the default source_files #} +{%- set src_files = src_files + source_files %} +{#- Only add to [""] when supporting older TOFS implementations #} +{%- set path_prefix_exts = [""] %} +{%- if use_subpath and tplroot != tpldir %} +{#- Walk directory tree to find {{ files_dir }} #} +{%- set subpath_parts = tpldir.lstrip(tplroot).lstrip("/").split("/") %} +{%- for path in subpath_parts %} +{%- set subpath = subpath_parts[0 : loop.index] | join("/") %} +{%- do path_prefix_exts.append("/" ~ subpath) %} +{%- endfor %} +{%- endif %} +{%- for path_prefix_ext in path_prefix_exts | reverse %} +{%- set path_prefix_inc_ext = path_prefix ~ path_prefix_ext %} +{#- For older TOFS implementation, use `files_switch` from the config #} +{#- Use the default, new method otherwise #} +{%- set fsl = salt["config.get"]( + tplroot ~ path_prefix_ext | replace("/", ":") ~ ":files_switch", + files_switch_list, + ) %} +{#- Append an empty value to evaluate as `default` in the loop below #} +{%- if "" not in fsl %} +{%- set fsl = fsl + [""] %} +{%- endif %} +{%- for fs in fsl %} +{%- for src_file in src_files %} +{%- if fs %} +{%- set fs_dirs = salt["config.get"](fs, fs) %} +{%- else %} +{%- set fs_dirs = salt["config.get"]( + tplroot ~ ":tofs:dirs:default", "default" + ) %} +{%- endif %} +{#- Force the `config.get` lookup result as a list where necessary #} +{#- since we need to also handle grains that are lists #} +{%- if fs_dirs is string %} +{%- set fs_dirs = [fs_dirs] %} +{%- endif %} +{%- for fs_dir in fs_dirs %} +{#- strip empty elements by using a select #} +{%- set url = ( + [ + "- salt:/", + path_prefix_inc_ext.strip("/"), + files_dir.strip("/"), + fs_dir.strip("/"), + src_file.strip("/"), + ] + | select + | join("/") + ) %} {{ url | indent(indent_width, true) }} - {%- endfor %} - {%- endfor %} - {%- endfor %} - {%- endfor %} +{%- endfor %} +{%- endfor %} +{%- endfor %} +{%- endfor %} {%- endmacro %} diff --git a/libvirt/map.jinja b/libvirt/map.jinja index a4ad60a..81be69f 100644 --- a/libvirt/map.jinja +++ b/libvirt/map.jinja @@ -2,115 +2,175 @@ # vim: ft=jinja {#- Get the `tplroot` from `tpldir` #} -{%- set tplroot = tpldir.split('/')[0] %} +{%- set tplroot = tpldir.split("/")[0] %} {%- from tplroot ~ "/libsaltcli.jinja" import cli with context %} {#- Where to lookup parameters source files #} -{%- set map_sources_dir = tplroot | path_join('parameters') %} +{%- set map_sources_dir = tplroot | path_join("parameters") %} {#- Load defaults first to allow per formula default map.jinja configuration #} -{%- set _defaults_filename = map_sources_dir | path_join('defaults.yaml') %} -{%- do salt['log.debug']('map.jinja: initialise parameters from ' ~ _defaults_filename ) %} +{%- set _defaults_filename = map_sources_dir | path_join("defaults.yaml") %} +{%- do salt["log.debug"]( + "map.jinja: initialise parameters from " + ~ _defaults_filename + ) %} {%- import_yaml _defaults_filename as default_settings %} {#- List of sources to lookup for parameters #} -{%- do salt['log.debug']("map.jinja: lookup 'map_jinja' configuration sources") %} +{%- do salt["log.debug"]("map.jinja: lookup 'map_jinja' configuration sources") %} {#- Fallback to previously used grains plus minion `id` #} -{%- set map_sources = ['osarch', 'os_family', 'os', 'osfinger', 'config_get_lookup', 'config_get', 'id'] %} +{%- set map_sources = [ + "osarch", + "os_family", + "os", + "osfinger", + "config_get_lookup", + "config_get", + "id", + ] %} {#- Configure map.jinja from defaults.yaml #} -{%- set map_sources = default_settings | traverse('values:map_jinja:sources', map_sources) %} +{%- set map_sources = default_settings | traverse( + "values:map_jinja:sources", + map_sources, + ) %} {#- Lookup global sources #} -{%- set map_sources = salt['config.get']('map_jinja:sources', map_sources) %} +{%- set map_sources = salt["config.get"]("map_jinja:sources", map_sources) %} {#- Lookup per formula sources #} -{%- set map_sources = salt['config.get'](tplroot ~ ':map_jinja:sources', map_sources) %} +{%- set map_sources = salt["config.get"]( + tplroot ~ ":map_jinja:sources", + map_sources, + ) %} -{%- do salt['log.debug']('map.jinja: load parameters with sources from ' ~ map_sources) %} +{%- do salt["log.debug"]( + "map.jinja: load parameters with sources from " + ~ map_sources + ) %} {#- Work around assignment inside for loop #} {#- load configuration values used in `config.get` merging strategies #} -{%- set _config = {'stack': default_settings.get('values', {}), - 'merge_strategy': salt['config.get'](tplroot ~ ':strategy', None), - 'merge_lists': salt['config.get'](tplroot ~ ':merge_lists', False) - } %} +{%- set _config = { + "stack": default_settings.get("values", {}), + "merge_strategy": salt["config.get"](tplroot ~ ":strategy", None), + "merge_lists": salt["config.get"](tplroot ~ ":merge_lists", False), + } %} {#- the `config.get` merge option only works for `minion` or `local` salt command types #} -{%- if cli in ['minion', 'local'] %} - {%- do _config.update({'merge_opt': {'merge': _config['merge_strategy']}, - 'merge_msg': ", merge: strategy='" ~ _config['merge_strategy'] ~ "'"}) %} +{%- if cli in ["minion", "local"] %} +{%- do _config.update( + { + "merge_opt": {"merge": _config["merge_strategy"]}, + "merge_msg": ", merge: strategy='" ~ _config["merge_strategy"] ~ "'", + } + ) %} {#- the `config.get` merge option is not available for `ssh` or `unknown` salt command types #} {%- else %} - {%- if _config['merge_strategy'] %} - {%- do salt['log.error']("map.jinja: the 'merge' option of 'config.get' is skipped when the salt command type is '" ~ cli ~ "'") %} - {%- endif %} - {%- do _config.update({'merge_opt': {}, - 'merge_msg': ''}) %} +{%- if _config["merge_strategy"] %} +{%- do salt["log.error"]( + "map.jinja: the 'merge' option of 'config.get' is skipped when the salt command type is '" + ~ cli + ~ "'" + ) %} +{%- endif %} +{%- do _config.update( + { + "merge_opt": {}, + "merge_msg": "", + } + ) %} {%- endif %} {#- process each `map.jinja` source #} {%- for map_source in map_sources %} - {%- if map_source in ['config_get', 'config_get_lookup'] %} - {%- set _config_key = {'config_get': tplroot, - 'config_get_lookup': tplroot ~ ':lookup'}.get(map_source) %} - {%- set _config_type = {'config_get': 'configuration', - 'config_get_lookup': 'lookup'}.get(map_source) %} - - {%- do salt['log.debug']("map.jinja: retrieve formula " ~ _config_type - ~ " with 'config.get'" - ~ _config['merge_msg'] - ) %} - {%- set _config_get = salt['config.get'](_config_key, default={}, **_config['merge_opt']) %} - - {#- `slsutil.merge` defaults to `smart` instead of `None` for `config.get` #} - {%- set _strategy = _config['merge_strategy'] | default('smart', boolean=True) %} - {%- do salt['log.debug']("map.jinja: merge formula " ~ _config_type - ~ " retrieved with 'config.get'" - ~ ", merge: strategy='" ~ _strategy - ~ "', lists='" ~ _config['merge_lists'] ~ "'" - ) %} - {%- do _config.update({'stack': salt['slsutil.merge'](_config['stack'], - _config_get, - strategy=_strategy, - merge_lists=_config['merge_lists'])}) - %} - {%- else %} - {#- Lookup the grain/pillar/... #} - {#- Fallback to use the source name as a direct filename #} - {%- set map_values = salt['config.get'](map_source, []) %} - - {#- Mangle `map_source` to use it as literal path #} - {%- if map_values|length == 0 %} - {%- set map_source_parts = map_source.split('/') %} - {%- set map_source = map_source_parts[0:-1] | join('/') %} - {%- set map_values = map_source_parts[-1].rstrip('.yaml') %} - {%- endif %} - - {#- Some configuration return list #} - {%- if map_values is string %} - {%- set map_values = [map_values] %} - {%- endif %} - - {%- for map_value in map_values %} - {%- set yamlfile = map_sources_dir | path_join(map_source, map_value ~ '.yaml') %} - {%- do salt['log.debug']('map.jinja: load parameters from file ' ~ yamlfile) %} - {%- load_yaml as loaded_values %} - {%- include yamlfile ignore missing %} - {%- endload %} - - {%- if loaded_values %} - {#- Merge loaded values on the stack #} - {%- do salt['log.debug']('map.jinja: merge parameters from ' ~ yamlfile) %} - {%- do _config.update({'stack': salt['slsutil.merge'](_config['stack'], - loaded_values.get('values', {}), - strategy=loaded_values.get('strategy', 'smart'), - merge_lists=loaded_values.get('merge_lists', False) | to_bool)}) - %} - {%- endif %} - {%- endfor %} - {%- endif %} +{%- if map_source in ["config_get", "config_get_lookup"] %} +{%- set _config_key = { + "config_get": tplroot, + "config_get_lookup": tplroot ~ ":lookup", + }.get(map_source) %} +{%- set _config_type = { + "config_get": "configuration", + "config_get_lookup": "lookup", + }.get(map_source) %} + +{%- do salt["log.debug"]( + "map.jinja: retrieve formula " + ~ _config_type + ~ " with 'config.get'" + ~ _config["merge_msg"] + ) %} +{%- set _config_get = salt["config.get"]( + _config_key, default={}, **_config["merge_opt"] + ) %} + +{#- `slsutil.merge` defaults to `smart` instead of `None` for `config.get` #} +{%- set _strategy = _config["merge_strategy"] | default("smart", boolean=True) %} +{%- do salt["log.debug"]( + "map.jinja: merge formula " + ~ _config_type + ~ " retrieved with 'config.get'" + ~ ", merge: strategy='" + ~ _strategy + ~ "', lists='" + ~ _config["merge_lists"] + ~ "'" + ) %} +{%- do _config.update( + { + "stack": salt["slsutil.merge"]( + _config["stack"], + _config_get, + strategy=_strategy, + merge_lists=_config["merge_lists"], + ) + } + ) %} +{%- else %} +{#- Lookup the grain/pillar/... #} +{#- Fallback to use the source name as a direct filename #} +{%- set map_values = salt["config.get"](map_source, []) %} + +{#- Mangle `map_source` to use it as literal path #} +{%- if map_values | length == 0 %} +{%- set map_source_parts = map_source.split("/") %} +{%- set map_source = map_source_parts[0:-1] | join("/") %} +{%- set map_values = map_source_parts[-1].rstrip(".yaml") %} +{%- endif %} + +{#- Some configuration return list #} +{%- if map_values is string %} +{%- set map_values = [map_values] %} +{%- endif %} + +{%- for map_value in map_values %} +{%- set yamlfile = map_sources_dir | path_join( + map_source, + map_value ~ ".yaml", + ) %} +{%- do salt["log.debug"]("map.jinja: load parameters from file " ~ yamlfile) %} +{%- load_yaml as loaded_values %} +{%- include yamlfile ignore missing %} +{%- endload %} + +{%- if loaded_values %} +{#- Merge loaded values on the stack #} +{%- do salt["log.debug"]("map.jinja: merge parameters from " ~ yamlfile) %} +{%- do _config.update( + { + "stack": salt["slsutil.merge"]( + _config["stack"], + loaded_values.get("values", {}), + strategy=loaded_values.get("strategy", "smart"), + merge_lists=loaded_values.get("merge_lists", False) + | to_bool, + ) + } + ) %} +{%- endif %} +{%- endfor %} +{%- endif %} {%- endfor %} -{%- do salt['log.debug']("map.jinja: save parameters in variable 'libvirt_settings'") %} -{%- set libvirt_settings = _config['stack'] %} +{%- do salt["log.debug"]("map.jinja: save parameters in variable 'libvirt_settings'") %} +{%- set libvirt_settings = _config["stack"] %}