diff --git a/.github/workflows/enterprise-patching.yaml b/.github/workflows/enterprise-patching.yaml
deleted file mode 100644
index ff5ad6ed3..000000000
--- a/.github/workflows/enterprise-patching.yaml
+++ /dev/null
@@ -1,129 +0,0 @@
-name: Patch and Retag Images
-
-on:
- workflow_dispatch:
- workflow_run:
- workflows: ["Migrate Images to QUAY"]
- types:
- - completed
- branches:
- - main
-
-jobs:
- generate-matrix:
- runs-on: ubuntu-latest
- if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }}
- outputs:
- images: ${{ steps.generate-matrix.outputs.images }}
- steps:
- - name: Checkout Repository
- uses: actions/checkout@v4
-
- - name: Generate Matrix
- id: generate-matrix
- run: |
- images=$(jq -r '.[]' .original-images.json | jq -R -s -c 'split("\n") | map(select(length > 0))')
- echo "images=$images" >> $GITHUB_OUTPUT
-
- patch-and-retag:
- needs: generate-matrix
- runs-on: ubuntu-latest
- strategy:
- matrix:
- image: ${{ fromJson(needs.generate-matrix.outputs.images) }}
- fail-fast: false
- steps:
- - name: Checkout Repository
- uses: actions/checkout@v4
-
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
- with:
- driver: docker-container
- driver-opts: |
- image=moby/buildkit:master
- network=host
-
- - name: Install Copacetic
- run: |
- wget https://github.com/project-copacetic/copacetic/releases/download/v0.9.0/copa_0.9.0_linux_amd64.tar.gz
- tar -xzf copa_0.9.0_linux_amd64.tar.gz
- chmod +x copa
- sudo mv copa /usr/local/bin/
-
- - name: Install Trivy
- run: |
- TRIVY_VERSION="0.55.0"
- wget https://github.com/aquasecurity/trivy/releases/download/v${TRIVY_VERSION}/trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz
- tar -xzf trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz
- chmod +x trivy
- sudo mv trivy /usr/local/bin/
-
- - name: Login to Quay.io
- uses: docker/login-action@v3
- with:
- registry: quay.io
- username: ${{ secrets.QUAY_USER }}
- password: ${{ secrets.QUAY_TOKEN }}
-
- - name: Process Image
- run: |
- sudo apt-get update && sudo apt-get install -y jq python3-pip
- image="${{ matrix.image }}"
- echo "Processing $image"
- base_name=$(echo "$image" | awk -F'/' '{print $NF}' | cut -d':' -f1)
- tag=$(echo "$image" | awk -F':' '{print $NF}')
- new_image="quay.io/rackspace/rackerlabs-${base_name}:${tag}"
- patched_tag="${tag}-enterprise"
- patched_image="quay.io/rackspace/rackerlabs-${base_name}:${patched_tag}"
-
- # Pull the image
- docker pull "$new_image" || { echo "Failed to pull $new_image"; exit 1; }
-
- # Scan all vulnerabilities (OS and language-specific)
- trivy image -f json -o "report-${base_name}-${tag}.json" "$new_image" || { echo "Failed to scan $new_image"; exit 1; }
-
- # Scan OS vulnerabilities with fixes for Copacetic
- trivy image --vuln-type os --ignore-unfixed -f json -o "os-report-${base_name}-${tag}.json" "$new_image" || { echo "Failed to scan OS vulnerabilities for $new_image"; exit 1; }
-
- # Attempt to patch OS vulnerabilities; set intermediate image
- if copa patch -i "$new_image" -r "os-report-${base_name}-${tag}.json" -t "$patched_tag"; then
- echo "Patched OS vulnerabilities in $new_image"
- intermediate_image="$patched_image"
- else
- echo "No OS vulnerabilities patched for $new_image"
- intermediate_image="$new_image"
- fi
-
- # Filter cve/requirements.txt to only update installed packages
- docker run --rm -v "$(pwd):/output" "$intermediate_image" sh -c "/var/lib/openstack/bin/pip3 list --format=json > /output/installed.json 2>/dev/null || echo '[]' > /output/installed.json"
- python3 cve/filter.py
-
- if [ -s "filtered-requirements.txt" ]; then
- echo "Applying Python package updates from cve/requirements.txt"
- echo "FROM $intermediate_image" > Dockerfile.temp
- echo "COPY filtered-requirements.txt /tmp/filtered-requirements.txt" >> Dockerfile.temp
- echo "RUN /var/lib/openstack/bin/pip3 install -r /tmp/filtered-requirements.txt" >> Dockerfile.temp
- docker build -f Dockerfile.temp -t "$patched_image" . || { echo "Failed to build $patched_image with Python patches"; exit 1; }
- intermediate_image="$patched_image"
- else
- echo "No Python packages updated from cve/requirements.txt"
- fi
-
- # Flatten the image
- echo "Flattening $patched_image"
- container_id=$(docker create "$intermediate_image")
- docker export "$container_id" > "flattened-${base_name}-${patched_tag}.tar"
- docker import "flattened-${base_name}-${patched_tag}.tar" "$patched_image"
- docker rm "$container_id"
- rm "flattened-${base_name}-${patched_tag}.tar"
-
- # Push the flattened image
- docker push "$patched_image" || { echo "Failed to push $patched_image"; exit 1; }
- echo "Pushed $patched_image"
-
- # Clean up
- rm -f "report-${base_name}-${tag}.json" "os-report-${base_name}-${tag}.json" filtered-requirements.txt Dockerfile.temp installed.json requirements.txt
-
-env:
- DOCKER_CLI_EXPERIMENTAL: enabled
diff --git a/.github/workflows/release-cinder-netapp.yml b/.github/workflows/release-cinder-netapp.yml
deleted file mode 100644
index abb3b491a..000000000
--- a/.github/workflows/release-cinder-netapp.yml
+++ /dev/null
@@ -1,111 +0,0 @@
-#
-name: Create and publish a Cinder RXT compatible image
-
-# Configures this workflow to run every time a change is pushed to the branch called `release`.
-on:
- workflow_dispatch:
- inputs:
- imageTag:
- description: 'Set tag for the image'
- required: true
- default: 'master-ubuntu_jammy'
- type: choice
- options:
- - master-ubuntu_jammy
- - 2023.1-ubuntu_jammy
- - 2023.2-ubuntu_jammy
- - 2024.1-ubuntu_jammy
-
-# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.
-env:
- REGISTRY: ghcr.io
- IMAGE_NAME: ${{ github.repository }}
-
-# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.
-jobs:
- build-and-push-image:
- outputs:
- MY_DATE: ${{ steps.mydate.outputs.MY_DATE }}
- MY_CONTAINER: ${{ steps.mycontainer.outputs.MY_CONTAINER }}
- runs-on: ubuntu-latest
- # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
- permissions:
- contents: read
- packages: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- - name: Log in to the Container registry
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- # ghcr only allows lowercase repository names
- - name: lowercase repo name
- run: |
- echo "IMAGE_NAME=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV}
- # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels.
- - name: Extract metadata (tags, labels) for Docker
- id: meta
- uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
- with:
- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages.
- # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository.
- # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step.
- - name: Dynamically set MY_DATE environment variable
- run: echo "MY_DATE=$(date +%s)" >> $GITHUB_ENV
- - name: Build and push Docker image
- uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
- with:
- context: .
- file: Containerfiles/Cinder-volume-netapp-Containerfile
- push: true
- tags: |
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/cinder-volume-rxt:${{ github.event.inputs.imageTag }}
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/cinder-volume-rxt:${{ github.event.inputs.imageTag }}-${{ env.MY_DATE }}
- labels: ${{ steps.meta.outputs.labels }}
- build-args: |
- VERSION=${{ github.event.inputs.imageTag }}
- - name: Dynamically set MY_CONTAINER output option
- id: mycontainer
- run: echo "MY_CONTAINER=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/cinder:${{ github.event.inputs.imageTag }}-${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
- - name: Dynamically set MY_DATE output option
- id: mydate
- run: echo "MY_DATE=${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
-
- change-original-images:
- runs-on: ubuntu-latest
- needs: [build-and-push-image]
- permissions:
- contents: write
- pull-requests: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- - name: Dynamically update the original images file
- run: jq '. + ["${{ needs.build-and-push-image.outputs.MY_CONTAINER }}"] | sort' .original-images.json | tee .original-images.json.new
- - name: Rewrite original images file
- run: mv .original-images.json.new .original-images.json
- - name: Create Pull Request
- id: cpr
- uses: peter-evans/create-pull-request@v7
- with:
- commit-message: Update original images with new container
- committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
- author: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>
- signoff: false
- branch: ${{ needs.build-and-push-image.outputs.MY_DATE }}
- sign-commits: true
- delete-branch: true
- title: 'chore: Update original images'
- body: |
- Update container image
- - Updated original image file with container ${{needs.build-and-push-image.outputs.MY_CONTAINER}}
- change request Auto-generated
- labels: |
- container images
- automated pr
- draft: false
diff --git a/.github/workflows/release-glance.yml b/.github/workflows/release-glance.yml
deleted file mode 100644
index a92b36f1a..000000000
--- a/.github/workflows/release-glance.yml
+++ /dev/null
@@ -1,118 +0,0 @@
-#
-name: Create and publish a Glance compatible image
-
-# Configures this workflow to run every time a change is pushed to the branch called `release`.
-on:
- workflow_dispatch:
- inputs:
- imageTag:
- description: 'Set tag for the image'
- required: true
- default: 'master-ubuntu_jammy'
- type: choice
- options:
- - master-ubuntu_jammy
- - 2023.1-ubuntu_jammy
- - 2023.2-ubuntu_jammy
- - 2024.1-ubuntu_jammy
- pluginTag:
- description: 'Set release used for the build environment'
- required: true
- default: 'master'
- type: choice
- options:
- - "master"
- - "2023.1"
- - "2023.2"
- - "2024.1"
-
-# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.
-env:
- REGISTRY: ghcr.io
- IMAGE_NAME: ${{ github.repository }}
-
-# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.
-jobs:
- build-and-push-image:
- outputs:
- MY_DATE: ${{ steps.mydate.outputs.MY_DATE }}
- MY_CONTAINER: ${{ steps.mycontainer.outputs.MY_CONTAINER }}
- runs-on: ubuntu-latest
- # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
- permissions:
- contents: read
- packages: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- - name: Log in to the Container registry
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels.
- - name: Extract metadata (tags, labels) for Docker
- id: meta
- uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
- with:
- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages.
- # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository.
- # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step.
- - name: Dynamically set MY_DATE environment variable
- run: echo "MY_DATE=$(date +%s)" >> $GITHUB_ENV
- - name: Build and push Docker image
- uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
- with:
- context: .
- file: Containerfiles/Glance-Containerfile
- push: true
- tags: |
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/glance:${{ github.event.inputs.imageTag }}
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/glance:${{ github.event.inputs.imageTag }}-${{ env.MY_DATE }}
- labels: ${{ steps.meta.outputs.labels }}
- build-args: |
- VERSION=${{ github.event.inputs.imageTag }}
- PLUGIN_VERSION=${{ github.event.inputs.pluginTag }}
- - name: Dynamically set MY_CONTAINER output option
- id: mycontainer
- run: echo "MY_CONTAINER=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/glance:${{ github.event.inputs.imageTag }}-${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
- - name: Dynamically set MY_DATE output option
- id: mydate
- run: echo "MY_DATE=${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
-
- change-original-images:
- runs-on: ubuntu-latest
- needs: [build-and-push-image]
- permissions:
- contents: write
- pull-requests: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- - name: Dynamically update the original images file
- run: jq '. + ["${{ needs.build-and-push-image.outputs.MY_CONTAINER }}"] | sort' .original-images.json | tee .original-images.json.new
- - name: Rewrite original images file
- run: mv .original-images.json.new .original-images.json
- - name: Create Pull Request
- id: cpr
- uses: peter-evans/create-pull-request@v7
- with:
- commit-message: Update original images with new container
- committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
- author: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>
- signoff: false
- branch: ${{ needs.build-and-push-image.outputs.MY_DATE }}
- sign-commits: true
- delete-branch: true
- title: 'chore: Update original images'
- body: |
- Update container image
- - Updated original image file with container ${{needs.build-and-push-image.outputs.MY_CONTAINER}}
- change request Auto-generated
- labels: |
- container images
- automated pr
- draft: false
diff --git a/.github/workflows/release-heat-rxt.yml b/.github/workflows/release-heat-rxt.yml
deleted file mode 100644
index 4b1a2af45..000000000
--- a/.github/workflows/release-heat-rxt.yml
+++ /dev/null
@@ -1,115 +0,0 @@
-#
-name: Create and Publish a Heat Image
-
-on:
- push:
- paths:
- - '.github/workflows/release-heat-rxt.yml'
- - 'Containerfiles/HeatRXT-Containerfile'
- branches:
- - development
- - main
- workflow_dispatch:
- inputs:
- imageTag:
- description: 'Set tag for the image'
- required: true
- default: '2024.1-ubuntu_jammy'
- type: choice
- options:
- - 2024.1-ubuntu_jammy
-
-# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.
-env:
- REGISTRY: ghcr.io
- IMAGE_NAME: ${{ github.repository }}
- DEF_TAG_NAME: 2024.1-ubuntu_jammy
-
-# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.
-jobs:
- build-and-push-image:
- outputs:
- MY_DATE: ${{ steps.mydate.outputs.MY_DATE }}
- MY_CONTAINER: ${{ steps.mycontainer.outputs.MY_CONTAINER }}
- runs-on: ubuntu-latest
- # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
- permissions:
- contents: read
- packages: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- - name: Log in to the Container registry
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- # ghcr only allows lowercase repository names
- - name: lowercase repo name
- run: |
- echo "IMAGE_NAME=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV}
- # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels.
- - name: Extract metadata (tags, labels) for Docker
- id: meta
- uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
- with:
- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages.
- # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository.
- # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step.
- - name: Dynamically set MY_DATE environment variable
- run: echo "MY_DATE=$(date +%s)" >> $GITHUB_ENV
- - name: Build and push Docker image
- uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
- with:
- context: .
- file: Containerfiles/HeatRXT-Containerfile
- push: true
- tags: |
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/heat:${{ github.event.inputs.imageTag || env.DEF_TAG_NAME }}
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/heat:${{ github.event.inputs.imageTag || env.DEF_TAG_NAME }}-${{ env.MY_DATE }}
- labels: ${{ steps.meta.outputs.labels }}
- build-args: |
- VERSION=${{ github.event.inputs.imageTag || env.DEF_TAG_NAME }}
- - name: Dynamically set MY_CONTAINER output option
- id: mycontainer
- run: echo "MY_CONTAINER=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/heat:${{ github.event.inputs.imageTag }}-${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
- - name: Dynamically set MY_DATE output option
- id: mydate
- run: echo "MY_DATE=${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
-
- change-original-images:
- runs-on: ubuntu-latest
- needs: [build-and-push-image]
- permissions:
- contents: write
- pull-requests: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- - name: Dynamically update the original images file
- run: jq '. + ["${{ needs.build-and-push-image.outputs.MY_CONTAINER }}"] | sort' .original-images.json | tee .original-images.json.new
- - name: Rewrite original images file
- run: mv .original-images.json.new .original-images.json
- - name: Create Pull Request
- id: cpr
- uses: peter-evans/create-pull-request@v7
- with:
- commit-message: Update original images with new container
- committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
- author: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>
- signoff: false
- branch: ${{ needs.build-and-push-image.outputs.MY_DATE }}
- sign-commits: true
- delete-branch: true
- title: 'chore: Update original images'
- body: |
- Update container image
- - Updated original image file with container ${{needs.build-and-push-image.outputs.MY_CONTAINER}}
- change request Auto-generated
- labels: |
- container images
- automated pr
- draft: false
diff --git a/.github/workflows/release-horizon-rxt.yml b/.github/workflows/release-horizon-rxt.yml
deleted file mode 100644
index 9d7f7d8b6..000000000
--- a/.github/workflows/release-horizon-rxt.yml
+++ /dev/null
@@ -1,118 +0,0 @@
-#
-name: Create and publish a Horizon RXT compatible image
-
-# Configures this workflow to run every time a change is pushed to the branch called `release`.
-on:
- workflow_dispatch:
- inputs:
- imageTag:
- description: 'Set tag for the image'
- required: true
- default: 'master-ubuntu_jammy'
- type: choice
- options:
- - master-ubuntu_jammy
- - 2023.1-ubuntu_jammy
- - 2023.2-ubuntu_jammy
- - 2024.1-ubuntu_jammy
- pluginTag:
- description: 'Set release used for the build environment'
- required: true
- default: 'master'
- type: choice
- options:
- - "master"
- - "2023.1"
- - "2023.2"
- - "2024.1"
-
-# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.
-env:
- REGISTRY: ghcr.io
- IMAGE_NAME: ${{ github.repository }}
-
-# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.
-jobs:
- build-and-push-image:
- outputs:
- MY_DATE: ${{ steps.mydate.outputs.MY_DATE }}
- MY_CONTAINER: ${{ steps.mycontainer.outputs.MY_CONTAINER }}
- runs-on: ubuntu-latest
- # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
- permissions:
- contents: read
- packages: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- - name: Log in to the Container registry
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels.
- - name: Extract metadata (tags, labels) for Docker
- id: meta
- uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
- with:
- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages.
- # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository.
- # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step.
- - name: Dynamically set MY_DATE environment variable
- run: echo "MY_DATE=$(date +%s)" >> $GITHUB_ENV
- - name: Build and push Docker image
- uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
- with:
- context: .
- file: Containerfiles/HorizonRXT-Containerfile
- push: true
- tags: |
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/horizon-rxt:${{ github.event.inputs.pluginTag }}
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/horizon-rxt:${{ github.event.inputs.pluginTag }}-${{ env.MY_DATE }}
- labels: ${{ steps.meta.outputs.labels }}
- build-args: |
- VERSION=${{ github.event.inputs.imageTag }}
- PLUGIN_VERSION=${{ github.event.inputs.pluginTag }}
- - name: Dynamically set MY_CONTAINER output option
- id: mycontainer
- run: echo "MY_CONTAINER=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/horizon:${{ github.event.inputs.imageTag }}-${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
- - name: Dynamically set MY_DATE output option
- id: mydate
- run: echo "MY_DATE=${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
-
- change-original-images:
- runs-on: ubuntu-latest
- needs: [build-and-push-image]
- permissions:
- contents: write
- pull-requests: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- - name: Dynamically update the original images file
- run: jq '. + ["${{ needs.build-and-push-image.outputs.MY_CONTAINER }}"] | sort' .original-images.json | tee .original-images.json.new
- - name: Rewrite original images file
- run: mv .original-images.json.new .original-images.json
- - name: Create Pull Request
- id: cpr
- uses: peter-evans/create-pull-request@v7
- with:
- commit-message: Update original images with new container
- committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
- author: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>
- signoff: false
- branch: ${{ needs.build-and-push-image.outputs.MY_DATE }}
- sign-commits: true
- delete-branch: true
- title: 'chore: Update original images'
- body: |
- Update container image
- - Updated original image file with container ${{needs.build-and-push-image.outputs.MY_CONTAINER}}
- change request Auto-generated
- labels: |
- container images
- automated pr
- draft: false
diff --git a/.github/workflows/release-magnum-rxt.yml b/.github/workflows/release-magnum-rxt.yml
deleted file mode 100644
index 36f58d782..000000000
--- a/.github/workflows/release-magnum-rxt.yml
+++ /dev/null
@@ -1,124 +0,0 @@
-#
-name: Create and Publish a Magnum Image
-
-on:
- push:
- paths:
- - .github/workflows/release-magnum-rxt.yml
- - Containerfiles/MagnumRXT-Containerfile
- branches:
- - development
- - main
- workflow_dispatch:
- inputs:
- imageTag:
- description: Set tag for the image
- required: true
- default: 2024.1-ubuntu_jammy
- type: choice
- options:
- - master
- - 2024.1-ubuntu_jammy
- pluginTag:
- description: 'Set release used for the build environment'
- required: true
- default: master
- type: choice
- options:
- - master
-
-# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.
-env:
- REGISTRY: ghcr.io
- IMAGE_NAME: ${{ github.repository }}
- DEF_TAG_NAME: 2024.1-ubuntu_jammy
-
-# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.
-jobs:
- build-and-push-image:
- outputs:
- MY_DATE: ${{ steps.mydate.outputs.MY_DATE }}
- MY_CONTAINER: ${{ steps.mycontainer.outputs.MY_CONTAINER }}
- runs-on: ubuntu-latest
- # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
- permissions:
- contents: read
- packages: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- - name: Log in to the Container registry
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- # ghcr only allows lowercase repository names
- - name: lowercase repo name
- run: |
- echo "IMAGE_NAME=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV}
- # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels.
- - name: Extract metadata (tags, labels) for Docker
- id: meta
- uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
- with:
- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages.
- # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository.
- # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step.
- - name: Dynamically set MY_DATE environment variable
- run: echo "MY_DATE=$(date +%s)" >> $GITHUB_ENV
- - name: Build and push Docker image
- uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
- with:
- context: .
- file: Containerfiles/MagnumRXT-Containerfile
- push: true
- tags: |
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/magnum:${{ github.event.inputs.imageTag || env.DEF_TAG_NAME }}
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/magnum:${{ github.event.inputs.imageTag || env.DEF_TAG_NAME }}-${{ env.MY_DATE }}
- labels: ${{ steps.meta.outputs.labels }}
- build-args: |
- VERSION=${{ github.event.inputs.imageTag || env.DEF_TAG_NAME }}
- PLUGIN_VERSION=${{ github.event.inputs.pluginTag }}
- - name: Dynamically set MY_CONTAINER output option
- id: mycontainer
- run: echo "MY_CONTAINER=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/magnum:${{ github.event.inputs.imageTag }}-${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
- - name: Dynamically set MY_DATE output option
- id: mydate
- run: echo "MY_DATE=${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
-
- change-original-images:
- runs-on: ubuntu-latest
- needs: [build-and-push-image]
- permissions:
- contents: write
- pull-requests: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- - name: Dynamically update the original images file
- run: jq '. + ["${{ needs.build-and-push-image.outputs.MY_CONTAINER }}"] | sort' .original-images.json | tee .original-images.json.new
- - name: Rewrite original images file
- run: mv .original-images.json.new .original-images.json
- - name: Create Pull Request
- id: cpr
- uses: peter-evans/create-pull-request@v7
- with:
- commit-message: Update original images with new container
- committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
- author: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>
- signoff: false
- branch: ${{ needs.build-and-push-image.outputs.MY_DATE }}
- sign-commits: true
- delete-branch: true
- title: 'chore: Update original images'
- body: |
- Update container image
- - Updated original image file with container ${{needs.build-and-push-image.outputs.MY_CONTAINER}}
- change request Auto-generated
- labels: |
- container images
- automated pr
- draft: false
diff --git a/.github/workflows/release-neutron-oslodb.yaml b/.github/workflows/release-neutron-oslodb.yaml
deleted file mode 100644
index 3386e9221..000000000
--- a/.github/workflows/release-neutron-oslodb.yaml
+++ /dev/null
@@ -1,123 +0,0 @@
-#
-name: Create and publish a Neutron oslodb patched image
-
-# Configures this workflow to run every time a change is pushed to the branch called `release`.
-on:
- workflow_dispatch:
- inputs:
- imageTag:
- description: 'Set tag for the image'
- required: true
- default: 'master-ubuntu_jammy'
- type: choice
- options:
- - master-ubuntu_jammy
- - 2024.1-ubuntu_jammy
- pluginTag:
- description: 'Set release used for the build environment'
- required: true
- default: 'master'
- type: choice
- options:
- - "master"
- - "2024.1"
- NeutronTag:
- description: 'Set Neutron version'
- required: true
- default: 'sync-add-mode'
- type: choice
- options:
- - 'sync-add-mode'
- - 'sync-add-mode-2024.1'
-
-# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.
-env:
- REGISTRY: ghcr.io
- IMAGE_NAME: ${{ github.repository }}
-
-# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.
-jobs:
- build-and-push-image:
- outputs:
- MY_DATE: ${{ steps.mydate.outputs.MY_DATE }}
- MY_CONTAINER: ${{ steps.mycontainer.outputs.MY_CONTAINER }}
- runs-on: ubuntu-latest
- # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
- permissions:
- contents: read
- packages: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- - name: Log in to the Container registry
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels.
- - name: Extract metadata (tags, labels) for Docker
- id: meta
- uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
- with:
- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages.
- # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository.
- # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step.
- - name: Dynamically set MY_DATE environment variable
- run: echo "MY_DATE=$(date +%s)" >> $GITHUB_ENV
- - name: Build and push Docker image
- uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
- with:
- context: .
- file: Containerfiles/Neutron-oslo_db-Containerfile
- push: true
- tags: |
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/neutron-oslodb:${{ github.event.inputs.imageTag }}
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/neutron-oslodb:${{ github.event.inputs.imageTag }}-${{ env.MY_DATE }}
- labels: ${{ steps.meta.outputs.labels }}
- build-args: |
- VERSION=${{ github.event.inputs.imageTag }}
- PLUGIN_VERSION=${{ github.event.inputs.pluginTag }}
- NEUTRON_VERSION=${{ github.event.inputs.NeutronTag }}
- - name: Dynamically set MY_CONTAINER output option
- id: mycontainer
- run: echo "MY_CONTAINER=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/neutron-oslodb:${{ github.event.inputs.imageTag }}-${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
- - name: Dynamically set MY_DATE output option
- id: mydate
- run: echo "MY_DATE=${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
-
- change-original-images:
- runs-on: ubuntu-latest
- needs: [build-and-push-image]
- permissions:
- contents: write
- pull-requests: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- - name: Dynamically update the original images file
- run: jq '. + ["${{ needs.build-and-push-image.outputs.MY_CONTAINER }}"] | sort' .original-images.json | tee .original-images.json.new
- - name: Rewrite original images file
- run: mv .original-images.json.new .original-images.json
- - name: Create Pull Request
- id: cpr
- uses: peter-evans/create-pull-request@v7
- with:
- commit-message: Update original images with new container
- committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
- author: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>
- signoff: false
- branch: ${{ needs.build-and-push-image.outputs.MY_DATE }}
- sign-commits: true
- delete-branch: true
- title: 'chore: Update original images'
- body: |
- Update container image
- - Updated original image file with container ${{needs.build-and-push-image.outputs.MY_CONTAINER}}
- change request Auto-generated
- labels: |
- container images
- automated pr
- draft: false
diff --git a/.github/workflows/release-nova-oslodb.yaml b/.github/workflows/release-nova-oslodb.yaml
deleted file mode 100644
index d8c54a984..000000000
--- a/.github/workflows/release-nova-oslodb.yaml
+++ /dev/null
@@ -1,119 +0,0 @@
-#
-name: Create and publish a Nova oslodb patched image
-
-# Configures this workflow to run every time a change is pushed to the branch called `release`.
-on:
- workflow_dispatch:
- inputs:
- imageTag:
- description: 'Set tag for the image'
- required: true
- default: 'master-ubuntu_jammy'
- type: choice
- options:
- - master-ubuntu_jammy
- - 2023.1-ubuntu_jammy
- - 2023.2-ubuntu_jammy
- - 2024.1-ubuntu_jammy
- pluginTag:
- description: 'Set release used for the build environment'
- required: true
- default: 'master'
- type: choice
- options:
- - "master"
- - "2023.1"
- - "2023.2"
- - "2024.1"
-
-# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.
-env:
- REGISTRY: ghcr.io
- IMAGE_NAME: ${{ github.repository }}
-
-# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.
-jobs:
- build-and-push-image:
- outputs:
- MY_DATE: ${{ steps.mydate.outputs.MY_DATE }}
- MY_CONTAINER: ${{ steps.mycontainer.outputs.MY_CONTAINER }}
- runs-on: ubuntu-latest
- # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
- permissions:
- contents: read
- packages: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- - name: Log in to the Container registry
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels.
- - name: Extract metadata (tags, labels) for Docker
- id: meta
- uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
- with:
- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages.
- # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository.
- # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step.
- - name: Dynamically set MY_DATE environment variable
- run: echo "MY_DATE=$(date +%s)" >> $GITHUB_ENV
- - name: Build and push Docker image
- uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
- with:
- context: .
- file: Containerfiles/Nova-oslo_db-Containerfile
- push: true
- tags: |
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/nova-oslodb:${{ github.event.inputs.imageTag }}
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/nova-oslodb:${{ github.event.inputs.imageTag }}-${{ env.MY_DATE }}
- labels: ${{ steps.meta.outputs.labels }}
- build-args: |
- VERSION=${{ github.event.inputs.imageTag }}
- PLUGIN_VERSION=${{ github.event.inputs.pluginTag }}
- - name: Dynamically set MY_CONTAINER output option
- id: mycontainer
- run: echo "MY_CONTAINER=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/nova-oslodb:${{ github.event.inputs.imageTag }}-${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
- - name: Dynamically set MY_DATE output option
- id: mydate
- run: echo "MY_DATE=${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
-
-
- change-original-images:
- runs-on: ubuntu-latest
- needs: [build-and-push-image]
- permissions:
- contents: write
- pull-requests: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- - name: Dynamically update the original images file
- run: jq '. + ["${{ needs.build-and-push-image.outputs.MY_CONTAINER }}"] | sort' .original-images.json | tee .original-images.json.new
- - name: Rewrite original images file
- run: mv .original-images.json.new .original-images.json
- - name: Create Pull Request
- id: cpr
- uses: peter-evans/create-pull-request@v7
- with:
- commit-message: Update original images with new container
- committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
- author: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>
- signoff: false
- branch: ${{ needs.build-and-push-image.outputs.MY_DATE }}
- sign-commits: true
- delete-branch: true
- title: 'chore: Update original images'
- body: |
- Update container image
- - Updated original image file with container ${{needs.build-and-push-image.outputs.MY_CONTAINER}}
- change request Auto-generated
- labels: |
- container images
- automated pr
- draft: false
diff --git a/.github/workflows/release-nova-uefi.yml b/.github/workflows/release-nova-uefi.yml
deleted file mode 100644
index 8a6b88397..000000000
--- a/.github/workflows/release-nova-uefi.yml
+++ /dev/null
@@ -1,118 +0,0 @@
-#
-name: Create and publish a the Nova EFI compatible image
-
-# Configures this workflow to run every time a change is pushed to the branch called `release`.
-on:
- workflow_dispatch:
- inputs:
- imageTag:
- description: 'Set tag for the image'
- required: true
- default: 'master-ubuntu_jammy'
- type: choice
- options:
- - master-ubuntu_jammy
- - 2023.1-ubuntu_jammy
- - 2023.2-ubuntu_jammy
- - 2024.1-ubuntu_jammy
- pluginTag:
- description: 'Set release used for the build environment'
- required: true
- default: 'master'
- type: choice
- options:
- - "master"
- - "2023.1"
- - "2023.2"
- - "2024.1"
-
-# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.
-env:
- REGISTRY: ghcr.io
- IMAGE_NAME: ${{ github.repository }}
-
-# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.
-jobs:
- build-and-push-image:
- outputs:
- MY_DATE: ${{ steps.mydate.outputs.MY_DATE }}
- MY_CONTAINER: ${{ steps.mycontainer.outputs.MY_CONTAINER }}
- runs-on: ubuntu-latest
- # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
- permissions:
- contents: read
- packages: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- - name: Log in to the Container registry
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels.
- - name: Extract metadata (tags, labels) for Docker
- id: meta
- uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
- with:
- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages.
- # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository.
- # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step.
- - name: Dynamically set MY_DATE environment variable
- run: echo "MY_DATE=$(date +%s)" >> $GITHUB_ENV
- - name: Build and push Docker image
- uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
- with:
- context: .
- file: Containerfiles/NovaEFI-Containerfile
- push: true
- tags: |
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/nova-efi:${{ github.event.inputs.imageTag }}
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/nova-efi:${{ github.event.inputs.imageTag }}-${{ env.MY_DATE }}
- labels: ${{ steps.meta.outputs.labels }}
- build-args: |
- VERSION=${{ github.event.inputs.imageTag }}
- PLUGIN_VERSION=${{ github.event.inputs.pluginTag }}
- - name: Dynamically set MY_CONTAINER output option
- id: mycontainer
- run: echo "MY_CONTAINER=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/nova-efi:${{ github.event.inputs.imageTag }}-${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
- - name: Dynamically set MY_DATE output option
- id: mydate
- run: echo "MY_DATE=${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
-
- change-original-images:
- runs-on: ubuntu-latest
- needs: [build-and-push-image]
- permissions:
- contents: write
- pull-requests: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- - name: Dynamically update the original images file
- run: jq '. + ["${{ needs.build-and-push-image.outputs.MY_CONTAINER }}"] | sort' .original-images.json | tee .original-images.json.new
- - name: Rewrite original images file
- run: mv .original-images.json.new .original-images.json
- - name: Create Pull Request
- id: cpr
- uses: peter-evans/create-pull-request@v7
- with:
- commit-message: Update original images with new container
- committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
- author: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>
- signoff: false
- branch: ${{ needs.build-and-push-image.outputs.MY_DATE }}
- sign-commits: true
- delete-branch: true
- title: 'chore: Update original images'
- body: |
- Update container image
- - Updated original image file with container ${{needs.build-and-push-image.outputs.MY_CONTAINER}}
- change request Auto-generated
- labels: |
- container images
- automated pr
- draft: false
diff --git a/.github/workflows/release-octavia-ovn.yml b/.github/workflows/release-octavia-ovn.yml
deleted file mode 100644
index 1221fa84b..000000000
--- a/.github/workflows/release-octavia-ovn.yml
+++ /dev/null
@@ -1,124 +0,0 @@
-name: Create and publish an Octavia compatible image
-
-# Configures this workflow to run every time a change is pushed to the branch called `release`.
-on:
- workflow_dispatch:
- inputs:
- imageTag:
- description: 'Set tag for the image'
- required: true
- default: 'master-ubuntu_jammy'
- type: choice
- options:
- - master-ubuntu_jammy
- - 2024.1-ubuntu_jammy
- pluginTag:
- description: 'Set release used for the build environment'
- required: true
- default: 'master'
- type: choice
- options:
- - "master"
- - "2024.1"
- ovnPluginTag:
- description: 'Set OVN plugin version'
- required: true
- default: 'master'
- type: choice
- options:
- - 'master'
- - '5.0.0'
- - '6.0.0'
- - '7.0.0'
-
-# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.
-env:
- REGISTRY: ghcr.io
- IMAGE_NAME: ${{ github.repository }}
-
-# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.
-jobs:
- build-and-push-image:
- outputs:
- MY_DATE: ${{ steps.mydate.outputs.MY_DATE }}
- MY_CONTAINER: ${{ steps.mycontainer.outputs.MY_CONTAINER }}
- runs-on: ubuntu-latest
- # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
- permissions:
- contents: read
- packages: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- - name: Log in to the Container registry
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels.
- - name: Extract metadata (tags, labels) for Docker
- id: meta
- uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
- with:
- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages.
- # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository.
- # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step.
- - name: Dynamically set MY_DATE environment variable
- run: echo "MY_DATE=$(date +%s)" >> $GITHUB_ENV
- - name: Build and push Docker image
- uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
- with:
- context: .
- file: Containerfiles/OctaviaOVN-Containerfile
- push: true
- tags: |
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/octavia-ovn:${{ github.event.inputs.imageTag }}
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/octavia-ovn:${{ github.event.inputs.imageTag }}-${{ env.MY_DATE }}
- labels: ${{ steps.meta.outputs.labels }}
- build-args: |
- VERSION=${{ github.event.inputs.imageTag }}
- PLUGIN_VERSION=${{ github.event.inputs.pluginTag }}
- OVN_PLUGIN_VERSION=${{ github.event.inputs.ovnPluginTag }}
- - name: Dynamically set MY_CONTAINER output option
- id: mycontainer
- run: echo "MY_CONTAINER=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/nova-efi:${{ github.event.inputs.imageTag }}-${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
- - name: Dynamically set MY_DATE output option
- id: mydate
- run: echo "MY_DATE=${{ env.MY_DATE }}" >> $GITHUB_OUTPUT
-
- change-original-images:
- runs-on: ubuntu-latest
- needs: [build-and-push-image]
- permissions:
- contents: write
- pull-requests: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- - name: Dynamically update the original images file
- run: jq '. + ["${{ needs.build-and-push-image.outputs.MY_CONTAINER }}"] | sort' .original-images.json | tee .original-images.json.new
- - name: Rewrite original images file
- run: mv .original-images.json.new .original-images.json
- - name: Create Pull Request
- id: cpr
- uses: peter-evans/create-pull-request@v7
- with:
- commit-message: Update original images with new container
- committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
- author: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>
- signoff: false
- branch: ${{ needs.build-and-push-image.outputs.MY_DATE }}
- sign-commits: true
- delete-branch: true
- title: 'chore: Update original images'
- body: |
- Update container image
- - Updated original image file with container ${{needs.build-and-push-image.outputs.MY_CONTAINER}}
- change request Auto-generated
- labels: |
- container images
- automated pr
- draft: false
diff --git a/.github/workflows/smoke-cinder-netapp.yml b/.github/workflows/smoke-cinder-netapp.yml
deleted file mode 100644
index 36dc23b92..000000000
--- a/.github/workflows/smoke-cinder-netapp.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-name: Run build check for the Cinder Volume Netapp RXT compatible image
-
-on:
- pull_request:
- paths:
- - Containerfiles/Cinder-volume-netapp-Containerfile
-
-# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.
-env:
- REGISTRY: ghcr.io
- IMAGE_NAME: ${{ github.repository }}
-
-# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.
-jobs:
- build-and-push-image:
- runs-on: ubuntu-latest
- # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
- permissions:
- contents: read
- packages: read
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- - name: Log in to the Container registry
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- # ghcr only allows lowercase repository names
- - name: lowercase repo name
- run: |
- echo "IMAGE_NAME=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV}
- - name: Build Docker image
- uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
- with:
- context: .
- file: Containerfiles/Cinder-volume-netapp-Containerfile
- push: false
- tags: |
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/keystone-rxt:master-ubuntu_jammy
- build-args: |
- VERSION=master-ubuntu_jammy
diff --git a/.github/workflows/smoke-glance.yml b/.github/workflows/smoke-glance.yml
deleted file mode 100644
index 7d0567f6f..000000000
--- a/.github/workflows/smoke-glance.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-name: Run build check for the Glance compatible image
-
-on:
- pull_request:
- paths:
- - Containerfiles/Glance-Containerfile
-
-# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.
-env:
- REGISTRY: ghcr.io
- IMAGE_NAME: ${{ github.repository }}
-
-# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.
-jobs:
- build-and-push-image:
- runs-on: ubuntu-latest
- # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
- permissions:
- contents: read
- packages: read
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- - name: Log in to the Container registry
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- - name: Build Docker image
- uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
- with:
- context: .
- file: Containerfiles/Glance-Containerfile
- push: false
- tags: |
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/glance:master-ubuntu_jammy
- build-args: |
- VERSION=master-ubuntu_jammy
- PLUGIN_VERSION=master
diff --git a/.github/workflows/smoke-heat-rxt.yml b/.github/workflows/smoke-heat-rxt.yml
deleted file mode 100644
index f038661d0..000000000
--- a/.github/workflows/smoke-heat-rxt.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-name: Run build check for the Heat image
-
-on:
- pull_request:
- paths:
- - Containerfiles/HeatRXT-Containerfile
-
-# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.
-env:
- REGISTRY: ghcr.io
- IMAGE_NAME: ${{ github.repository }}
-
-# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.
-jobs:
- build-and-push-image:
- runs-on: ubuntu-latest
- # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
- permissions:
- contents: read
- packages: read
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- - name: Log in to the Container registry
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- - name: Build Docker image
- uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
- with:
- context: .
- file: Containerfiles/HeatRXT-Containerfile
- push: false
- tags: |
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/heat:2024.1-ubuntu_jammy
- build-args: |
- VERSION=2024.1-ubuntu_jammy
diff --git a/.github/workflows/smoke-horizon-rxt.yml b/.github/workflows/smoke-horizon-rxt.yml
deleted file mode 100644
index 5c96b5072..000000000
--- a/.github/workflows/smoke-horizon-rxt.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-name: Run build check for the Horizon RXT compatible image
-
-on:
- pull_request:
- paths:
- - Containerfiles/HorizonRXT-Containerfile
-
-# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.
-env:
- REGISTRY: ghcr.io
- IMAGE_NAME: ${{ github.repository }}
-
-# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.
-jobs:
- build-and-push-image:
- runs-on: ubuntu-latest
- # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
- permissions:
- contents: read
- packages: read
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- - name: Log in to the Container registry
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- - name: Build Docker image
- uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
- with:
- context: .
- file: Containerfiles/HorizonRXT-Containerfile
- push: false
- tags: |
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/horizon-rxt:master-ubuntu_jammy
- build-args: |
- VERSION=master-ubuntu_jammy
- PLUGIN_VERSION=master
diff --git a/.github/workflows/smoke-nova-uefi.yml b/.github/workflows/smoke-nova-uefi.yml
deleted file mode 100644
index f9aa31d8d..000000000
--- a/.github/workflows/smoke-nova-uefi.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-name: Run build check for the Nova EFI compatible image
-
-on:
- pull_request:
- paths:
- - Containerfiles/NovaEFI-Containerfile
-
-# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.
-env:
- REGISTRY: ghcr.io
- IMAGE_NAME: ${{ github.repository }}
-
-# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.
-jobs:
- build-and-push-image:
- runs-on: ubuntu-latest
- # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
- permissions:
- contents: read
- packages: read
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- - name: Log in to the Container registry
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- - name: Build Docker image
- uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
- with:
- context: .
- file: Containerfiles/NovaEFI-Containerfile
- push: false
- tags: |
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/nova-efi:master-ubuntu_jammy
- build-args: |
- VERSION=master-ubuntu_jammy
- PLUGIN_VERSION=master
diff --git a/.github/workflows/smoke-octavia-ovn.yml b/.github/workflows/smoke-octavia-ovn.yml
deleted file mode 100644
index ffebf1def..000000000
--- a/.github/workflows/smoke-octavia-ovn.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-name: Run build check for the Octavia OVN compatible image
-
-on:
- pull_request:
- paths:
- - Containerfiles/OctaviaOVN-Containerfile
-
-# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.
-env:
- REGISTRY: ghcr.io
- IMAGE_NAME: ${{ github.repository }}
-
-# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.
-jobs:
- build-and-push-image:
- runs-on: ubuntu-latest
- # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
- permissions:
- contents: read
- packages: read
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- - name: Log in to the Container registry
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- - name: Build Docker image
- uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
- with:
- context: .
- file: Containerfiles/OctaviaOVN-Containerfile
- push: false
- tags: |
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/octavia-ovn:master-ubuntu_jammy
- build-args: |
- VERSION=master-ubuntu_jammy
- PLUGIN_VERSION=master
diff --git a/.github/workflows/testing-deploy-openstack.yaml b/.github/workflows/testing-deploy-openstack.yaml
deleted file mode 100644
index 60517178f..000000000
--- a/.github/workflows/testing-deploy-openstack.yaml
+++ /dev/null
@@ -1,46 +0,0 @@
-name: testing-openstack-deploy
-
-on:
- workflow_run:
- workflows:
- - Migrate Images to QUAY
- types:
- - completed
- workflow_dispatch:
-
-jobs:
- deploy:
-
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v3
-
- - name: Set up Python environment
- run: sudo apt-get update && sudo apt-get install -y python3-pip
-
- - name: Install requirements
- run: pip3 install -r testing/requirements.txt
-
- - name: Create OpenStack config directory
- run: mkdir -p ~/.config/openstack
-
- - name: Retrieve clouds.yaml from GitHub secrets
- env:
- CLOUDS_YAML: ${{ secrets.CLOUDS_YAML }}
- run: |
- echo "$CLOUDS_YAML" > ~/.config/openstack/clouds.yaml
-
- - name: Retrieve env.yaml from GitHub secrets
- env:
- ENV_YAML: ${{ secrets.ENV_YAML }}
- run: |
- echo "$ENV_YAML" > ~/env.yaml
-
- - name: Run deployment script
- run: bash testing/doit.sh
-
- - name: Cleanup
- if: always()
- run: bash testing/cleanup.sh
diff --git a/.original-images.json b/.original-images.json
index 876901b0e..74abf9c4a 100644
--- a/.original-images.json
+++ b/.original-images.json
@@ -1,6 +1,6 @@
[
+ "cr.fluentbit.io/fluent/fluent-bit:4.0.7",
"docker.io/docker:17.07.0",
- "docker.io/kolla/centos-source-openvswitch-vswitchd:master",
"docker.io/kolla/ubuntu-source-nova-compute-ironic:master",
"docker.io/library/postgres:14.5",
"docker.io/library/postgres:14.5",
@@ -11,13 +11,15 @@
"docker.io/openstackhelm/designate:2024.1-ubuntu_jammy",
"docker.io/openstackhelm/glance:2024.1-ubuntu_jammy",
"docker.io/openstackhelm/horizon:2023.1-ubuntu_jammy",
+ "docker.io/openstackhelm/ironic:2024.1-ubuntu_jammy",
"docker.io/openstackhelm/magnum:2024.1-ubuntu_jammy",
- "docker.io/openstackhelm/masakari:2024.1-ubuntu_jammy",
"docker.io/openstackhelm/masakari-monitors:2024.1-ubuntu_jammy",
+ "docker.io/openstackhelm/masakari:2024.1-ubuntu_jammy",
"docker.io/openstackhelm/neutron:2024.1-ubuntu_jammy",
"docker.io/openstackhelm/osh-selenium:latest-ubuntu_jammy",
"docker.io/openstackhelm/ospurge:latest",
"docker.io/openstackhelm/placement:2024.1-ubuntu_jammy",
+ "docker.io/pbandark/barbican-exporter",
"docker.io/rabbitmq:3.13-management",
"docker.io/wrouesnel/postgres_exporter:v0.4.6",
"docker.io/xrally/xrally-openstack:2.0.0",
@@ -27,18 +29,22 @@
"ghcr.io/rackerlabs/genestack/glance:2024.1-ubuntu_jammy-1740121591",
"ghcr.io/rackerlabs/genestack/gnocchi:2024.1-ubuntu_jammy-1738626728",
"ghcr.io/rackerlabs/genestack/heat:2024.1-ubuntu_jammy-1738626724",
+ "ghcr.io/rackerlabs/genestack/magnum:2024.1-ubuntu_jammy-1742991496",
"ghcr.io/rackerlabs/genestack/neutron-oslodb:2024.1-ubuntu_jammy-1738626982",
"ghcr.io/rackerlabs/genestack/neutron-oslodb:2024.1-ubuntu_jammy-1739651767",
"ghcr.io/rackerlabs/genestack/neutron-oslodb:2024.1-ubuntu_jammy-1742943886",
+ "ghcr.io/rackerlabs/genestack/neutron-oslodb:2024.1-ubuntu_jammy-1750715539",
+ "ghcr.io/rackerlabs/genestack/neutron-oslodb:2024.1-ubuntu_jammy-1750723622",
+ "ghcr.io/rackerlabs/genestack/neutron-oslodb:2024.1-ubuntu_jammy-1750797661",
"ghcr.io/rackerlabs/genestack/nova-efi:2024.1-ubuntu_jammy-1737928811",
+ "ghcr.io/rackerlabs/genestack/nova-efi:2025.1-ubuntu_jammy-1750943616",
"ghcr.io/rackerlabs/genestack/octavia-ovn:2024.1-ubuntu_jammy-1737651745",
"ghcr.io/rackerlabs/keystone-rxt:2024.1-ubuntu_jammy-1747958291",
- "ghcr.io/rackerlabs/keystone-rxt/shibd:1747958286",
"ghcr.io/rackerlabs/skyline-rxt:master-ubuntu_jammy-1748595671",
- "docker.io/openstackhelm/ironic:2024.1-ubuntu_jammy",
"ghcr.io/vexxhost/netoffload:v1.0.1",
"quay.io/airshipit/kubernetes-entrypoint:latest-ubuntu_jammy",
"quay.io/airshipit/porthole-postgresql-utility:latest-ubuntu_bionic",
- "cr.fluentbit.io/fluent/fluent-bit",
- "docker.io/pbandark/barbican-exporter"
+ "quay.io/airshipit/freezer:2025.1-ubuntu_jammy",
+ "quay.io/airshipit/freezer-api:2025.1-ubuntu_jammy",
+ "quay.io/airshipit/blazar:2025.1-ubuntu_jammy"
]
diff --git a/Containerfiles/Glance-Containerfile b/Containerfiles/Glance-Containerfile
deleted file mode 100644
index a710b16b7..000000000
--- a/Containerfiles/Glance-Containerfile
+++ /dev/null
@@ -1,15 +0,0 @@
-# Patch oslo_db to help with deadlocks
-ARG VERSION=master-ubuntu_jammy
-FROM openstackhelm/glance:$VERSION as build
-ARG PLUGIN_VERSION=master
-RUN apt update && apt install -y git
-RUN export ORIG_PLUGIN_VERSION="${PLUGIN_VERSION}"; \
-if [ "${PLUGIN_VERSION}" != 'master' ]; then export PLUGIN_VERSION=stable/${PLUGIN_VERSION}; fi; \
-. /var/lib/openstack/bin/activate; \
-/var/lib/openstack/bin/pip install boto3 os-brick \
- git+https://github.com/openstack/python-cinderclient@${PLUGIN_VERSION}#egg=python-cinderclient \
- git+https://github.com/openstack/oslo.db@${PLUGIN_VERSION}#egg=oslo_db \
- git+https://github.com/openstack/glance@${PLUGIN_VERSION}#egg=glance
-
-FROM openstackhelm/glance:${VERSION}
-COPY --from=build /var/lib/openstack/. /var/lib/openstack/
diff --git a/Containerfiles/HeatRXT-Containerfile b/Containerfiles/HeatRXT-Containerfile
deleted file mode 100644
index 3a4d47fe7..000000000
--- a/Containerfiles/HeatRXT-Containerfile
+++ /dev/null
@@ -1,13 +0,0 @@
-ARG VERSION=master-ubuntu_jammy
-FROM openstackhelm/heat:${VERSION} as build
-RUN apt-get update && apt-get install -y git && apt clean
-RUN /var/lib/openstack/bin/pip install git+https://opendev.org/openstack/heat.git@stable/2024.1
-RUN /var/lib/openstack/bin/pip install --upgrade --force-reinstall pip
-RUN find /var/lib/openstack -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
-
-FROM openstackhelm/heat:${VERSION}
-COPY --from=build /var/lib/openstack/. /var/lib/openstack/
-COPY Containerfiles/patches/heat_keystone_v3_patch.diff /tmp/heat_keystone_v3_patch.diff
-RUN apt-get update && apt-get install -y git
-RUN cd /var/lib/openstack/lib/python3.10/site-packages/ && git apply /tmp/heat_keystone_v3_patch.diff
-RUN rm /tmp/heat_keystone_v3_patch.diff
diff --git a/Containerfiles/HorizonRXT-Containerfile b/Containerfiles/HorizonRXT-Containerfile
deleted file mode 100644
index 696b2c971..000000000
--- a/Containerfiles/HorizonRXT-Containerfile
+++ /dev/null
@@ -1,15 +0,0 @@
-ARG VERSION=master-ubuntu_jammy
-FROM openstackhelm/horizon:${VERSION} as build
-ARG PLUGIN_VERSION=master
-RUN apt update && apt install -y git
-RUN /var/lib/openstack/bin/pip install --upgrade --force-reinstall pip
-RUN export ORIG_PLUGIN_VERSION="${PLUGIN_VERSION}"; \
- if [ "${PLUGIN_VERSION}" != 'master' ]; then export PLUGIN_VERSION=stable/${PLUGIN_VERSION}; fi; \
- . /var/lib/openstack/bin/activate; \
- /var/lib/openstack/bin/pip install --constraint=https://releases.openstack.org/constraints/upper/${ORIG_PLUGIN_VERSION} \
- git+https://opendev.org/openstack/heat-dashboard@${PLUGIN_VERSION}#egg=heat_dashboard \
- git+https://opendev.org/openstack/octavia-dashboard@${PLUGIN_VERSION}#egg=octavia_dashboard
-RUN find /var/lib/openstack -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
-
-FROM openstackhelm/horizon:${VERSION}
-COPY --from=build /var/lib/openstack/. /var/lib/openstack/
diff --git a/Containerfiles/MagnumRXT-Containerfile b/Containerfiles/MagnumRXT-Containerfile
deleted file mode 100644
index 5b6c78b36..000000000
--- a/Containerfiles/MagnumRXT-Containerfile
+++ /dev/null
@@ -1,14 +0,0 @@
-ARG VERSION=master-ubuntu_jammy
-FROM openstackhelm/magnum:${VERSION} as build
-ARG PLUGIN_VERSION=master
-RUN apt-get update && apt-get install -y git && apt clean
-RUN export ORIG_PLUGIN_VERSION="${PLUGIN_VERSION}"; \
-if [ "${PLUGIN_VERSION}" != 'master' ]; then export PLUGIN_VERSION=stable/${PLUGIN_VERSION}; fi; \
-/var/lib/openstack/bin/activate; \
-/var/lib/openstack/bin/pip install git+https://github.com/openstack/oslo.db@${PLUGIN_VERSION}#egg=oslo_db \
- git+https://opendev.org/openstack/magnum-capi-helm@${PLUGIN_VERSION}#egg=magnum_capi_helm
-RUN /var/lib/openstack/bin/pip install --upgrade --force-reinstall pip
-RUN find /var/lib/openstack -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
-
-FROM openstackhelm/magnum:${VERSION}
-COPY --from=build /var/lib/openstack/. /var/lib/openstack/
diff --git a/Containerfiles/Neutron-oslo_db-Containerfile b/Containerfiles/Neutron-oslo_db-Containerfile
deleted file mode 100644
index 45a9647cd..000000000
--- a/Containerfiles/Neutron-oslo_db-Containerfile
+++ /dev/null
@@ -1,15 +0,0 @@
-# Patch oslo_db to help with deadlocks
-ARG VERSION=master-ubuntu_jammy
-FROM openstackhelm/neutron:$VERSION as build
-ARG PLUGIN_VERSION=master
-ARG NEUTRON_VERSION=master
-RUN apt update && apt install -y git
-RUN export ORIG_PLUGIN_VERSION="${PLUGIN_VERSION}"; \
-if [ "${PLUGIN_VERSION}" != 'master' ]; then export PLUGIN_VERSION=stable/${PLUGIN_VERSION}; fi; \
-. /var/lib/openstack/bin/activate; \
-/var/lib/openstack/bin/pip install --upgrade \
-git+https://github.com/openstack/oslo.db@${PLUGIN_VERSION}#egg=oslo_db \
-git+https://github.com/rackerlabs/neutron@${NEUTRON_VERSION}#egg=neutron
-
-FROM openstackhelm/neutron:${VERSION}
-COPY --from=build /var/lib/openstack/. /var/lib/openstack/
diff --git a/Containerfiles/Nova-oslo_db-Containerfile b/Containerfiles/Nova-oslo_db-Containerfile
deleted file mode 100644
index a335e8fa7..000000000
--- a/Containerfiles/Nova-oslo_db-Containerfile
+++ /dev/null
@@ -1,12 +0,0 @@
-# Patch oslo_db to help with deadlocks
-ARG VERSION=master-ubuntu_jammy
-FROM openstackhelm/nova:$VERSION as build
-ARG PLUGIN_VERSION=master
-RUN apt update && apt install -y git
-RUN export ORIG_PLUGIN_VERSION="${PLUGIN_VERSION}"; \
-if [ "${PLUGIN_VERSION}" != 'master' ]; then export PLUGIN_VERSION=stable/${PLUGIN_VERSION}; fi; \
-. /var/lib/openstack/bin/activate; \
-/var/lib/openstack/bin/pip install git+https://github.com/openstack/oslo.db@${PLUGIN_VERSION}#egg=oslo_db
-
-FROM openstackhelm/nova:${VERSION}
-COPY --from=build /var/lib/openstack/. /var/lib/openstack/
diff --git a/Containerfiles/NovaEFI-Containerfile b/Containerfiles/NovaEFI-Containerfile
deleted file mode 100644
index 0c7ab5e2d..000000000
--- a/Containerfiles/NovaEFI-Containerfile
+++ /dev/null
@@ -1,22 +0,0 @@
-ARG VERSION=master-ubuntu_jammy
-FROM openstackhelm/nova:$VERSION as build
-ARG PLUGIN_VERSION=master
-RUN apt update && apt install -y git
-RUN export ORIG_PLUGIN_VERSION="${PLUGIN_VERSION}"; \
-if [ "${PLUGIN_VERSION}" != 'master' ]; then export PLUGIN_VERSION=stable/${PLUGIN_VERSION}; fi; \
-. /var/lib/openstack/bin/activate; \
-/var/lib/openstack/bin/pip install git+https://github.com/openstack/oslo.db@${PLUGIN_VERSION}#egg=oslo_db && \
-/var/lib/openstack/bin/pip install python-barbicanclient
-
-FROM openstackhelm/nova:${VERSION}
-COPY --from=build /var/lib/openstack/. /var/lib/openstack/
-# Packages for the following features:
-# - Nova: EFI
-# - Nova: iSCSI
-# Py Packages for the following features:
-# - Nova: Libosinfo
-RUN apt update && DEBIAN_FRONTEND=noninteractive apt install -y ovmf open-iscsi multipath-tools libgirepository-1.0-1 libgirepository1.0-dev \
- libcairo2-dev python3-dev gcc libosinfo-bin gir1.2-libosinfo-1.0 nfs-common cryptsetup nvme-cli; \
- rm -rf /var/cache/apt/archives /var/lib/apt/lists; \
- apt clean; /var/lib/openstack/bin/pip install pygobject; \
- find /var/lib/openstack -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
diff --git a/Containerfiles/OctaviaOVN-Containerfile b/Containerfiles/OctaviaOVN-Containerfile
deleted file mode 100644
index c0d618a8c..000000000
--- a/Containerfiles/OctaviaOVN-Containerfile
+++ /dev/null
@@ -1,18 +0,0 @@
-ARG VERSION=master-ubuntu_jammy
-FROM openstackhelm/octavia:$VERSION as build
-ARG PLUGIN_VERSION=master
-ARG OVN_PLUGIN_VERSION=master
-RUN apt update && apt install -y git
-RUN /var/lib/openstack/bin/pip install --index-url https://pypi.python.org/simple --upgrade pip
-RUN if [ "${PLUGIN_VERSION}" != 'master' ]; then export PLUGIN_VERSION=stable/${PLUGIN_VERSION}; fi; \
-. /var/lib/openstack/bin/activate; \
-/var/lib/openstack/bin/pip install git+https://github.com/openstack/oslo.db@${PLUGIN_VERSION}#egg=oslo_db
-RUN . /var/lib/openstack/bin/activate; \
-if [ "${OVN_PLUGIN_VERSION}" = 'master' ]; then \
-/var/lib/openstack/bin/pip install git+https://github.com/openstack/ovn-octavia-provider@${OVN_PLUGIN_VERSION}#egg=ovn_octavia_provider; \
-else \
-/var/lib/openstack/bin/pip install --index-url https://pypi.python.org/simple ovn-octavia-provider==${OVN_PLUGIN_VERSION}; \
-fi
-
-FROM openstackhelm/octavia:${VERSION}
-COPY --from=build /var/lib/openstack/. /var/lib/openstack/
diff --git a/ansible/playbooks/deploy-cinder-netapp-volumes-reference.yaml b/ansible/playbooks/deploy-cinder-netapp-volumes-reference.yaml
index 50cf5db3b..4c1414ac0 100644
--- a/ansible/playbooks/deploy-cinder-netapp-volumes-reference.yaml
+++ b/ansible/playbooks/deploy-cinder-netapp-volumes-reference.yaml
@@ -8,7 +8,13 @@
cinder_storage_network_interface: ansible_br_storage
cinder_storage_network_interface_secondary: ansible_br_storage_secondary
cinder_backend_name: "block-ha-performance-at-rest-encrypted,block-ha-standard-at-rest-encrypted,block-ha-performance-end-to-end-encrypted,block-ha-standard-end-to-end-encrypted"
+ virtualenv_path: "/opt/cinder"
storage_network_multipath: false
+ enable_netapp_ssl: false
+ netapp_cert_src_dir: "/opt/genestack/ansible/playbooks/templates/"
+ netapp_cert_filenames:
+ - "ontap-cluster-host.crt"
+ - "ontap-vserver-host.crt"
handlers:
- name: Restart cinder-volume-netapp systemd services
ansible.builtin.systemd:
@@ -65,6 +71,44 @@
regexp: '^InitiatorName=.*|^GenerateName=.*'
line: "InitiatorName={{ initiator_name }}"
+ - name: Copy NetApp client certificates Debian
+ ansible.builtin.copy:
+ src: "{{ netapp_cert_src_dir }}/{{ item }}"
+ dest: "/usr/local/share/ca-certificates/{{ item }}"
+ owner: root
+ group: root
+ mode: '0644'
+ when:
+ - enable_netapp_ssl | bool
+ - ansible_os_family | lower == "debian"
+ loop: "{{ netapp_cert_filenames }}"
+
+ - name: Copy NetApp client certificates Redhat
+ ansible.builtin.copy:
+ src: "{{ netapp_cert_src_dir }}/{{ item }}"
+ dest: "/etc/pki/ca-trust/source/anchors/{{ item }}"
+ owner: root
+ group: root
+ mode: '0644'
+ when:
+ - enable_netapp_ssl | bool
+ - ansible_os_family | lower == "redhat"
+ loop: "{{ netapp_cert_filenames }}"
+
+ - name: Update CA certificate trust Debian
+ ansible.builtin.command:
+ cmd: /usr/sbin/update-ca-certificates
+ when:
+ - enable_netapp_ssl | bool
+ - ansible_os_family | lower == "debian"
+
+ - name: Update CA certificate trust Redhat
+ ansible.builtin.command:
+ cmd: /usr/sbin/update-ca-trust extract
+ when:
+ - enable_netapp_ssl | bool
+ - ansible_os_family | lower == "redhat"
+
- name: Upgrade pip and install required packages
ansible.builtin.pip:
name:
@@ -73,9 +117,39 @@
- "git+https://github.com/openstack/cinder@stable/{{ cinder_release }}"
- "git+https://github.com/rackerlabs/cinder-rxt.git"
state: present
- virtualenv: /opt/cinder
+ virtualenv: "{{ virtualenv_path }}"
virtualenv_command: python3 -m venv
+ - name: "Get Python site-packages path from virtualenv"
+ command: "{{ virtualenv_path }}/bin/python -c 'import site; print(site.getsitepackages()[0])'"
+ register: venv_site
+ changed_when: false
+
+ - name: "Normalize site-packages path"
+ set_fact:
+ venv_site_packages: "{{ venv_site.stdout | trim }}"
+
+ - name: "Ensure site-packages exists"
+ file:
+ path: "{{ venv_site_packages }}"
+ state: directory
+ when: venv_site_packages != ""
+
+ - name: Install eventlet SSL patch
+ ansible.builtin.copy:
+ src: "{{ item.src }}"
+ dest: "{{ item.dest }}"
+ owner: root
+ group: root
+ mode: "{{ item.mode | default('0644') }}"
+ loop:
+ - src: "{{ playbook_dir }}/templates/zzz_eventlet_ssl_patch.pth"
+ dest: "{{ venv_site_packages }}/zzz_eventlet_ssl_patch.pth"
+ mode: "0644"
+ - src: "{{ playbook_dir }}/templates/eventlet_ssl_patch.py"
+ dest: "{{ venv_site_packages }}/eventlet_ssl_patch.py"
+ mode: "0644"
+
- name: Create the cinder system user
ansible.builtin.user:
name: cinder
diff --git a/ansible/playbooks/extra/custom_exporters/md_info_detail.sh b/ansible/playbooks/extra/custom_exporters/md_info_detail.sh
index 5c21b4c5a..c85eb0461 100644
--- a/ansible/playbooks/extra/custom_exporters/md_info_detail.sh
+++ b/ansible/playbooks/extra/custom_exporters/md_info_detail.sh
@@ -79,7 +79,7 @@ for MD_DEVICE in /dev/md*; do
if echo "$line" | grep -E -qv "^/|Array Size|Used Dev Size|Events|Update Time|Check Status|Rebuild Status" ; then
echo -n ", "
MDADM_DETAIL_KEY=$(echo "$line" | cut -d ":" -f 1 | tr -cd '[a-zA-Z0-9]._-')
- MDADM_DETAIL_VALUE=$(echo "$line" | cut -d ":" -f 2- | sed 's:^ ::')
+ MDADM_DETAIL_VALUE=$(echo "$line" | cut -d ":" -f 2- | sed 's:^ ::' | sed 's: $::')
echo -n "${MDADM_DETAIL_KEY}=\"${MDADM_DETAIL_VALUE}\""
fi
fi
diff --git a/ansible/playbooks/octavia-preconf-main.yaml b/ansible/playbooks/octavia-preconf-main.yaml
index 618a1c7ba..e0bc5076d 100644
--- a/ansible/playbooks/octavia-preconf-main.yaml
+++ b/ansible/playbooks/octavia-preconf-main.yaml
@@ -14,6 +14,9 @@
octavia_os_identity_api_version: 3
octavia_os_auth_version: 3
octavia_nova_endpoint_type: "{{ octavia_os_endpoint_type }}"
+ octavia_helm_values_file: "{{ octavia_helm_file }}"
+ interface: "{{ interface }}"
+ endpoint_type: "{{ endpoint_type }}"
environment:
OS_ENDPOINT_TYPE: "{{ octavia_os_endpoint_type }}"
OS_INTERFACE: "{{ octavia_os_interface}}"
diff --git a/ansible/playbooks/templates/eventlet_ssl_patch.py b/ansible/playbooks/templates/eventlet_ssl_patch.py
new file mode 100644
index 000000000..4b5f03098
--- /dev/null
+++ b/ansible/playbooks/templates/eventlet_ssl_patch.py
@@ -0,0 +1,13 @@
+import os, ssl
+
+os.environ.setdefault("EVENTLET_NO_GREENDNS", "yes")
+try:
+ from eventlet.green import ssl as gssl
+
+ def _safe_green_create_default_context(*a, **kw):
+ return ssl._create_default_https_context(*a, **kw)
+
+ gssl.green_create_default_context = _safe_green_create_default_context
+except Exception as e:
+ # don't crash the process if eventlet isn't here yet
+ pass
diff --git a/ansible/playbooks/templates/zzz_eventlet_ssl_patch.pth b/ansible/playbooks/templates/zzz_eventlet_ssl_patch.pth
new file mode 100644
index 000000000..2bc84d6c5
--- /dev/null
+++ b/ansible/playbooks/templates/zzz_eventlet_ssl_patch.pth
@@ -0,0 +1 @@
+import eventlet_ssl_patch
diff --git a/ansible/roles/host_setup/files/queue_max.sh b/ansible/roles/host_setup/files/queue_max.sh
index 3f593c64b..f341e3f1e 100644
--- a/ansible/roles/host_setup/files/queue_max.sh
+++ b/ansible/roles/host_setup/files/queue_max.sh
@@ -16,7 +16,7 @@ set -e
function ethernetDevs () {
# Returns all physical devices
ip -details -json link show | jq -r '.[] |
- if .linkinfo.info_kind // .link_type == "loopback" or (.ifname | test("idrac+")) then
+ if .linkinfo.info_kind // .link_type == "loopback" or (.ifname | test("idrac+")) or (.ifname | test("wlp+")) then
empty
else
.ifname
diff --git a/ansible/roles/host_setup/handlers/main.yml b/ansible/roles/host_setup/handlers/main.yml
index 0c814b8c7..bcb81b0b1 100644
--- a/ansible/roles/host_setup/handlers/main.yml
+++ b/ansible/roles/host_setup/handlers/main.yml
@@ -65,3 +65,9 @@
ansible.builtin.apt:
update_cache: yes
cache_valid_time: 600
+
+- name: Restart lldpd
+ ansible.builtin.systemd:
+ name: "lldpd.service"
+ state: "restarted"
+ enabled: true
diff --git a/ansible/roles/host_setup/tasks/custom_multipath.yml b/ansible/roles/host_setup/tasks/custom_multipath.yml
index 14c6aa96c..188225d3a 100644
--- a/ansible/roles/host_setup/tasks/custom_multipath.yml
+++ b/ansible/roles/host_setup/tasks/custom_multipath.yml
@@ -16,6 +16,7 @@
- name: Copy over multipath Round Robin configuration file
when:
- custom_multipath | default(false) | bool
+ - ('openstack_compute_nodes' in group_names)
block:
- name: Install Packages
ansible.builtin.package:
@@ -36,6 +37,8 @@
- name: Install open-iscsi and multipath on nova compute nodes
when:
- enable_iscsi | default(false) | bool
+ - custom_multipath | default(false) | bool
+ - ('openstack_compute_nodes' in group_names)
block:
- name: Install Packages
ansible.builtin.package:
@@ -61,3 +64,32 @@
notify:
- Restart iscsid
- Restart multipathd and multipath-tools service
+
+- name: Install open-iscsi on block nodes
+ when:
+ - enable_iscsi | default(false) | bool
+ - ('cinder_storage_nodes' in group_names)
+ block:
+ - name: Install Packages
+ ansible.builtin.package:
+ name:
+ - open-iscsi
+ state: "{{ iscsi_package_state | default('present') }}"
+ update_cache: true
+ - name: Determine initiator name
+ set_fact:
+ initiator_name: >
+ {% set _iqn = "iqn.2004-10.com." + ansible_distribution |lower() + ":" + ansible_hostname -%}
+ {% if ansible_iscsi_iqn is defined -%}
+ {% if (ansible_iscsi_iqn |length >= 15) -%}
+ {% set _iqn = ansible_iscsi_iqn -%}
+ {% endif -%}
+ {% endif -%}
+ {{ _iqn }}
+ - name: Set iscsi initiator name
+ ansible.builtin.lineinfile:
+ path: /etc/iscsi/initiatorname.iscsi
+ regexp: '^InitiatorName=.*|^GenerateName=.*'
+ line: "InitiatorName={{ initiator_name }}"
+ notify:
+ - Restart iscsid
diff --git a/ansible/roles/host_setup/tasks/main.yml b/ansible/roles/host_setup/tasks/main.yml
index 91fcafeef..1b54c5ee5 100644
--- a/ansible/roles/host_setup/tasks/main.yml
+++ b/ansible/roles/host_setup/tasks/main.yml
@@ -137,6 +137,17 @@
retries: 5
delay: 2
+# NOTE(cloudnull): This configuration will ensure that LLDP is working on all interfaces
+# except our overlay and tenant networks.
+- name: Create base LLDPD configuration
+ ansible.builtin.copy:
+ content: |
+ DAEMON_ARGS="-c -I *,!tap*,!ovn*,!genev*,!mirror*,!o-hm*"
+ dest: /etc/default/lldpd
+ mode: "0644"
+ notify:
+ - Restart lldpd
+
- name: Ensure timesyncd is running
ansible.builtin.service:
name: systemd-timesyncd
diff --git a/ansible/roles/host_setup/tasks/raid_cli_tools.yml b/ansible/roles/host_setup/tasks/raid_cli_tools.yml
index fdc4c082e..34dd68921 100644
--- a/ansible/roles/host_setup/tasks/raid_cli_tools.yml
+++ b/ansible/roles/host_setup/tasks/raid_cli_tools.yml
@@ -3,6 +3,10 @@
ansible.builtin.package_facts:
manager: auto
+- name: Load additional variables
+ include_vars:
+ file: "{{ role_path }}/vars/raid_cli_tools.yml"
+
- name: Install PERCCLI command line tool for DELL servers
when:
- ansible_system_vendor | lower == "dell inc."
@@ -19,10 +23,13 @@
http_agent: Chrome/1337
validate_certs: false
dest: "{{ dell_tools.download_path }}"
+ status_code: [200, 304]
+ mode: '0755'
- name: Extract PERCCLI tar.gz
ansible.builtin.unarchive:
src: "{{ dell_tools.download_path }}"
dest: "{{ dell_tools.tmp_dir }}"
+ remote_src: true
- name: Install perccli APT
when: ansible_os_family | lower == "debian"
ansible.builtin.apt:
@@ -64,27 +71,69 @@
- (ansible_system_vendor | lower == "hp" or ansible_system_vendor | lower == "hpe")
- "'ssacli' not in ansible_facts.packages"
block:
+ - name: Ensure keyring dir and staging dir exist
+ ansible.builtin.file:
+ path: "{{ item }}"
+ state: directory
+ mode: '0755'
+ loop:
+ - "{{ hp_tools.apt.gpg_keyring | dirname }}"
+ - "/usr/share/keyrings/hpe-keys.d"
+ become: true
- name: Download HP tools apt keys
ansible.builtin.uri:
url: "{{ item.url }}"
dest: "{{ item.download_file }}"
- with_items: "{{ hp_tools.repo_keys }}"
- when:
- - hp_tools.repo_keys is defined
+ status_code: [200, 304] # accept Not Modified
+ mode: "0644"
+ loop: "{{ hp_tools.repo_keys }}"
+ when: hp_tools.repo_keys is defined
register: download_keys_url
- until: download_keys_url is success
+ changed_when: download_keys_url.status == 200 # 304 -> not changed
retries: 2
delay: 4
- - name: Add HP tools apt keys to gpg
+ until: download_keys_url is success
+ - name: Remove existing consolidated HPE keyring (if corrupted)
+ ansible.builtin.file:
+ path: "{{ hp_tools.apt.gpg_keyring }}"
+ state: absent
+ become: true
+ - name: Ensure staging dir for ASCII keys exists
+ ansible.builtin.file:
+ path: "/tmp/hpe-keys.asc.d"
+ state: directory
+ mode: "0755"
+ - name: Stage downloaded ASCII keys
+ ansible.builtin.copy:
+ src: "{{ item.download_file }}"
+ dest: "/tmp/hpe-keys.asc.d/{{ item.url | basename }}"
+ remote_src: true
+ mode: "0644"
+ loop: "{{ hp_tools.repo_keys }}"
+ when: hp_tools.repo_keys is defined
+ - name: Concatenate ASCII keys
+ ansible.builtin.assemble:
+ src: "/tmp/hpe-keys.asc.d"
+ dest: "/tmp/hpe-keys.asc"
+ regexp: ".*\\.pub$"
+ mode: "0644"
+ - name: Build consolidated HPE keyring from ASCII bundle
ansible.builtin.command:
- cmd: "cat {{ item.download_file }} | gpg --dearmor | sudo tee -a {{ hp_tools.apt.gpg_keyring }} > /dev/null"
- with_items: "{{ hp_tools.repo_keys }}"
- when:
- - hp_tools.repo_keys is defined
- register: add_keys_url
- until: add_keys_url is success
- retries: 2
- delay: 2
+ cmd: >-
+ gpg --batch --yes --dearmor
+ --output '{{ hp_tools.apt.gpg_keyring }}'
+ '/tmp/hpe-keys.asc'
+ register: dearmor_out
+ changed_when: dearmor_out.rc == 0
+ become: true
+ - name: Remove ASCII staging files
+ ansible.builtin.file:
+ path: "/tmp/hpe-keys.asc.d"
+ state: absent
+ - name: Remove ASCII bundle
+ ansible.builtin.file:
+ path: "/tmp/hpe-keys.asc"
+ state: absent
- name: Add HP tools MCP apt repositories
ansible.builtin.apt_repository:
repo: "{{ hp_tools.apt.deb_repo }}"
diff --git a/ansible/roles/host_setup/vars/debian.yml b/ansible/roles/host_setup/vars/debian.yml
index 7cf625a0c..e1adb329a 100644
--- a/ansible/roles/host_setup/vars/debian.yml
+++ b/ansible/roles/host_setup/vars/debian.yml
@@ -41,8 +41,8 @@ _host_distro_packages:
- apt-utils
- bridge-utils
- cgroup-tools
- - curl
- cryptsetup
+ - curl
- dmeventd
- dstat
- ebtables
@@ -50,6 +50,8 @@ _host_distro_packages:
- iptables
- irqbalance
- libkmod2
+ - lldpd
+ - lsscsi
- lvm2
- nfs-client
- nvme-cli
diff --git a/ansible/roles/host_setup/vars/raid-cli-tools.yml b/ansible/roles/host_setup/vars/raid-cli-tools.yml
deleted file mode 100644
index ac8d87a39..000000000
--- a/ansible/roles/host_setup/vars/raid-cli-tools.yml
+++ /dev/null
@@ -1,33 +0,0 @@
----
-hp_tools:
- sdr_url: "https://downloads.linux.hpe.com/SDR"
- repo_keys:
- - {url: "{{hp_tools.sdr_url}}/hpPublicKey2048_key1.pub", download_file: "/tmp/hpPublicKey2048_key1.pub"}
- - {url: "{{hp_tools.sdr_url}}/hpePublicKey2048_key1.pub", download_file: "/tmp/hpePublicKey2048_key1.pub"}
- - {url: "{{hp_tools.sdr_url}}/hpePublicKey2048_key2.pub", download_file: "/tmp/hpePublicKey2048_key2.pub"}
- apt:
- mcp_version: "current"
- gpg_keyring: "/usr/share/keyrings/hpePublicKey.gpg"
- repo_str: "[signed-by={{hp_tools.apt.gpg_keyring}}] https://downloads.linux.hpe.com/SDR/repo/mcp"
- deb_repo: "deb {{hp_tools.apt.repo_str}} {{ansible_lsb.codename}}/{{hp_tools.apt.mcp_version}} non-free"
- deb_src_repo: "deb-src {{hp_tools.apt.repo_str}} {{ansible_lsb.codename}}/{{hp_tools.apt.mcp_version}} non-free"
- state: "present"
- repo_list_file: "mcp"
- rpm:
- url: "https://downloads.linux.hpe.com/repo/mcp"
- dist: "{{ansible_distribution}}"
- dist_ver: "{{ansible_distribution_version}}"
- arch: "{{ansible_architecture}}"
- filename: "mcp"
- package: ssacli
-
-dell_tools:
- file_tar_gz: "PERCCLI_7.2616.0_Linux.tar.gz"
- url: "https://dl.dell.com/FOLDER11213122M/1/{{dell_tools.file_tar_gz}}"
- tmp_dir: "/tmp/perccli"
- download_path: "{{dell_tools.tmp_dir}}/{{dell_tools.file_tar_gz}}"
- deb_file: "{{dell_tools.tmp_dir}}/perccli_007.2616.0000.0000_all.deb"
- rpm_file: "{{dell_tools.tmp_dir}}/perccli-007.2616.0000.0000-1.noarch.rpm"
- perccli_path: "/opt/MegaRAID/perccli/perccli64"
- symlink_path: "/usr/sbin/perccli"
- symlink_64_path: "/usr/sbin/perccli64"
diff --git a/ansible/roles/host_setup/vars/raid_cli_tools.yml b/ansible/roles/host_setup/vars/raid_cli_tools.yml
new file mode 100644
index 000000000..6a9f81bcc
--- /dev/null
+++ b/ansible/roles/host_setup/vars/raid_cli_tools.yml
@@ -0,0 +1,47 @@
+---
+# --------- HPE / HP ---------
+hpe_sdr_url: "https://downloads.linux.hpe.com/SDR"
+hpe_gpg_keyring: "/usr/share/keyrings/hpePublicKey.gpg"
+hpe_repo_base: "https://downloads.linux.hpe.com/SDR/repo/mcp"
+hpe_mcp_version: "current"
+
+hpe_repo_str: "[signed-by={{ hpe_gpg_keyring }}] {{ hpe_repo_base }}"
+
+hpe_repo_keys:
+ - {url: "{{ hpe_sdr_url }}/hpPublicKey2048_key1.pub", download_file: "/tmp/hpPublicKey2048_key1.pub"}
+ - {url: "{{ hpe_sdr_url }}/hpePublicKey2048_key1.pub", download_file: "/tmp/hpePublicKey2048_key1.pub"}
+ - {url: "{{ hpe_sdr_url }}/hpePublicKey2048_key2.pub", download_file: "/tmp/hpePublicKey2048_key2.pub"}
+
+hp_tools:
+ sdr_url: "{{ hpe_sdr_url }}"
+ repo_keys: "{{ hpe_repo_keys }}"
+ apt:
+ mcp_version: "{{ hpe_mcp_version }}"
+ gpg_keyring: "{{ hpe_gpg_keyring }}"
+ repo_str: "{{ hpe_repo_str }}"
+ deb_repo: "deb {{ hpe_repo_str }} {{ ansible_lsb.codename }}/{{ hpe_mcp_version }} non-free"
+ deb_src_repo: "deb-src {{ hpe_repo_str }} {{ ansible_lsb.codename }}/{{ hpe_mcp_version }} non-free"
+ state: "present"
+ repo_list_file: "mcp"
+ rpm:
+ url: "https://downloads.linux.hpe.com/repo/mcp"
+ dist: "{{ ansible_distribution }}"
+ dist_ver: "{{ ansible_distribution_version }}"
+ arch: "{{ ansible_architecture }}"
+ filename: "mcp"
+ package: "ssacli"
+
+# --------- Dell ---------
+dell_perc_file_tar_gz: "PERCCLI_7.2616.0_Linux.tar.gz"
+dell_tmp_dir: "/tmp/perccli"
+
+dell_tools:
+ file_tar_gz: "{{ dell_perc_file_tar_gz }}"
+ url: "https://dl.dell.com/FOLDER11213122M/1/{{ dell_perc_file_tar_gz }}"
+ tmp_dir: "{{ dell_tmp_dir }}"
+ download_path: "{{ dell_tmp_dir }}/{{ dell_perc_file_tar_gz }}"
+ deb_file: "{{ dell_tmp_dir }}/perccli_007.2616.0000.0000_all.deb"
+ rpm_file: "{{ dell_tmp_dir }}/perccli-007.2616.0000.0000-1.noarch.rpm"
+ perccli_path: "/opt/MegaRAID/perccli/perccli64"
+ symlink_path: "/usr/sbin/perccli"
+ symlink_64_path: "/usr/sbin/perccli64"
diff --git a/ansible/roles/host_setup/vars/ubuntu.yml b/ansible/roles/host_setup/vars/ubuntu.yml
index 3e547cac9..429cc103c 100644
--- a/ansible/roles/host_setup/vars/ubuntu.yml
+++ b/ansible/roles/host_setup/vars/ubuntu.yml
@@ -49,6 +49,8 @@ _host_distro_packages:
- iptables
- irqbalance
- libkmod2
+ - lldpd
+ - lsscsi
- lvm2
- nfs-client
- nvme-cli
diff --git a/ansible/roles/octavia_preconf/defaults/main.yml b/ansible/roles/octavia_preconf/defaults/main.yml
index ff2e3b6bb..670b020a8 100644
--- a/ansible/roles/octavia_preconf/defaults/main.yml
+++ b/ansible/roles/octavia_preconf/defaults/main.yml
@@ -26,6 +26,7 @@ lb_mgmt_subnet_gateway: '172.16.29.1'
amphora_icmp_enabled: true
amphora_ssh_enabled: true
lb_health_mgr_secgrp_name: "lb-health-mgr-secgroup"
+lb_worker_secgrp_name: "lb-worker-secgroup"
lb_mgmt_secgrp_name: "lb-mgmt-secgroup"
# these are the defaults for the flavor, image and ssh keypair
diff --git a/ansible/roles/octavia_preconf/files/create_worker_ports.sh b/ansible/roles/octavia_preconf/files/create_worker_ports.sh
new file mode 100755
index 000000000..d4cb7149c
--- /dev/null
+++ b/ansible/roles/octavia_preconf/files/create_worker_ports.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+# We need to create the ports with shell scripts
+# the ansible module currently doesn't provide
+# --host argument
+
+set -xe
+
+# Obtain the network_id and secgroup_id from and
+# cloud name from ansible task
+NET_ID=$1
+SECGRP_ID=$2
+CLOUD_NAME=$3
+
+export OS_CLOUD=$CLOUD_NAME
+
+# Obtain the list of kubernetes nodes with
+# "openstack-control-plane=enabled" label
+CONTROLLER_IP_PORT_LIST=()
+CTRLS=$(kubectl get nodes -l openstack-control-plane=enabled -o name | awk -F"/" '{print $2}')
+for node in $CTRLS
+do
+ node_short=$(echo "$node" | awk -F"." '{print $1}')
+ PORTNAME=octavia-worker-port-$node_short
+ if ! PORT_DATA=$(openstack port show "$PORTNAME" -c fixed_ips -f json); then
+ PORT_DATA=$(openstack port create "$PORTNAME" --security-group "$SECGRP_ID" \
+ --device-owner Octavia:worker \
+ --host="$node" \
+ --network "$NET_ID" \
+ -c fixed_ips \
+ -f json)
+ fi
+ for IP in $(echo "$PORT_DATA" | awk 'BEGIN { FS = "\"" } /ip_address/ { print $(NF - 1) }'); do
+ CONTROLLER_IP_PORT_LIST+=("$IP:5555")
+ done
+done
+
+readarray -t sorted < <(for item in "${CONTROLLER_IP_PORT_LIST[@]}"; do echo "${item}"; done | sort)
+echo $(IFS=,; echo "${sorted[*]}") > /tmp/octavia_worker_controller_ip_port_list
diff --git a/ansible/roles/octavia_preconf/tasks/main.yml b/ansible/roles/octavia_preconf/tasks/main.yml
index 05ba0195f..afe6911d3 100644
--- a/ansible/roles/octavia_preconf/tasks/main.yml
+++ b/ansible/roles/octavia_preconf/tasks/main.yml
@@ -21,6 +21,11 @@
tags:
- always
+- name: import tasks to create worker ports
+ import_tasks: octavia_worker_ports.yml
+ tags:
+ - always
+
- name: import tasks to create amphora image, flavor and ssh keypair
import_tasks: octavia_amphora_keypair_image_flavor.yml
tags:
diff --git a/ansible/roles/octavia_preconf/tasks/octavia_amphora_keypair_image_flavor.yml b/ansible/roles/octavia_preconf/tasks/octavia_amphora_keypair_image_flavor.yml
index 2dfcdaa14..7ade3dc41 100644
--- a/ansible/roles/octavia_preconf/tasks/octavia_amphora_keypair_image_flavor.yml
+++ b/ansible/roles/octavia_preconf/tasks/octavia_amphora_keypair_image_flavor.yml
@@ -49,10 +49,10 @@
filename: /tmp/test-only-amphora-x64-haproxy-ubuntu-{{ amphora_image_version }}.qcow2
container_format: bare
disk_format: qcow2
- visibility: public
+ visibility: private
protected: true
tags:
- - amphora
+ - amphora
interface: public
register: push_amphora_image
until: push_amphora_image is success
diff --git a/ansible/roles/octavia_preconf/tasks/octavia_lb_net_setup.yml b/ansible/roles/octavia_preconf/tasks/octavia_lb_net_setup.yml
index 679cdf46e..e1313b44f 100644
--- a/ansible/roles/octavia_preconf/tasks/octavia_lb_net_setup.yml
+++ b/ansible/roles/octavia_preconf/tasks/octavia_lb_net_setup.yml
@@ -30,3 +30,21 @@
until: create_lb_mgmt_subnet is success
retries: 5
delay: 5
+
+# Bit of a hack to ensure gateway is disabled until ansible-playbook releases the fix..
+# disabling the gateway works on 'updates' as-is but not on creates yet..
+- name: Update subnet for lb-mgmt-net
+ openstack.cloud.subnet:
+ name: lb-mgmt-subnet
+ state: present
+ enable_dhcp: true
+ cidr: "{{ lb_mgmt_subnet_cidr }}"
+ allocation_pool_start: "{{ lb_mgmt_subnet_pool_start }}"
+ allocation_pool_end: "{{ lb_mgmt_subnet_pool_end }}"
+ disable_gateway_ip: true
+ network_name: lb-mgmt-net
+ interface: public
+ register: create_lb_mgmt_subnet
+ until: create_lb_mgmt_subnet is success
+ retries: 5
+ delay: 5
diff --git a/ansible/roles/octavia_preconf/tasks/octavia_sec_group.yml b/ansible/roles/octavia_preconf/tasks/octavia_sec_group.yml
index d7180176f..3ed5c0070 100644
--- a/ansible/roles/octavia_preconf/tasks/octavia_sec_group.yml
+++ b/ansible/roles/octavia_preconf/tasks/octavia_sec_group.yml
@@ -81,3 +81,27 @@
until: lb_health_mgr_secgroup_r1 is success
retries: 5
delay: 5
+
+- name: Create security group for worker ports
+ openstack.cloud.security_group:
+ name: "{{ lb_worker_secgrp_name }}"
+ state: present
+ description: "security group for worker ports"
+ interface: public
+ register: create_lb_worker_secgroup
+ until: create_lb_worker_secgroup is success
+ retries: 5
+ delay: 5
+
+- name: Create Security group rule to allow traffic on port 5555 for worker
+ openstack.cloud.security_group_rule:
+ security_group: "{{ create_lb_worker_secgroup.security_group.id }}"
+ state: present
+ protocol: udp
+ port_range_min: 5555
+ port_range_max: 5555
+ interface: public
+ register: lb_worker_secgroup_r1
+ until: lb_worker_secgroup_r1 is success
+ retries: 5
+ delay: 5
diff --git a/ansible/roles/octavia_preconf/tasks/octavia_worker_ports.yml b/ansible/roles/octavia_preconf/tasks/octavia_worker_ports.yml
new file mode 100644
index 000000000..96d92524f
--- /dev/null
+++ b/ansible/roles/octavia_preconf/tasks/octavia_worker_ports.yml
@@ -0,0 +1,22 @@
+---
+# These are the tasks for creating health_mgr
+# ports for octavia; the ports are created with
+# a shell script as the ansible modules currently
+# don't support all the required params for creating
+# ports
+- name: Obtain the UUID of the lb-mgmt-net
+ openstack.cloud.networks_info:
+ name: lb-mgmt-net
+ interface: public
+ register: lb_mgmt_info
+
+- name: Obtain the UUID of the worker secgroup
+ openstack.cloud.security_group_info:
+ name: "{{ lb_worker_secgrp_name }}"
+ interface: public
+ register: lb_worker_secgrp_info
+
+- name: run the shell script to create worker ports if required
+ script:
+ cmd: create_worker_ports.sh {{ lb_mgmt_info.networks[0].id }} {{ lb_worker_secgrp_info.security_groups[0].id }} {{ lookup('env', 'OS_CLOUD') | default('openstack_helm') }}
+ creates: /tmp/octavia_worker_controller_ip_port_list
diff --git a/base-helm-configs/barbican/barbican-helm-overrides.yaml b/base-helm-configs/barbican/barbican-helm-overrides.yaml
index 543ef7074..5b7346e29 100644
--- a/base-helm-configs/barbican/barbican-helm-overrides.yaml
+++ b/base-helm-configs/barbican/barbican-helm-overrides.yaml
@@ -1,18 +1,18 @@
---
images:
tags:
- barbican_api: "quay.io/rackspace/rackerlabs-barbican:2024.1-ubuntu_jammy"
- barbican_db_sync: "quay.io/rackspace/rackerlabs-barbican:2024.1-ubuntu_jammy"
- bootstrap: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_drop: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_init: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- dep_check: "quay.io/rackspace/rackerlabs-kubernetes-entrypoint:latest-ubuntu_jammy"
- image_repo_sync: "quay.io/rackspace/rackerlabs-docker:17.07.0"
- ks_endpoints: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_service: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_user: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- rabbit_init: "quay.io/rackspace/rackerlabs-rabbitmq:3.13-management"
- scripted_test: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
+ barbican_api: "ghcr.io/rackerlabs/genestack-images/barbican:2024.1-latest"
+ barbican_db_sync: "ghcr.io/rackerlabs/genestack-images/barbican:2024.1-latest"
+ bootstrap: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_drop: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_init: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ dep_check: "ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest"
+ image_repo_sync: null
+ ks_endpoints: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_service: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_user: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ rabbit_init: null
+ scripted_test: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
# NOTE: (brew) CPU requests values based on a three node
# hyperconverged lab (/scripts/hyperconverged-lab.sh).
@@ -25,6 +25,14 @@ pod:
memory: "256Mi"
cpu: "100m"
limits: {}
+ lifecycle:
+ upgrades:
+ deployments:
+ revision_history: 3
+ pod_replacement_strategy: RollingUpdate
+ rolling_update:
+ max_unavailable: 20%
+ max_surge: 3
dependencies:
static:
diff --git a/base-helm-configs/ceilometer/ceilometer-helm-overrides.yaml b/base-helm-configs/ceilometer/ceilometer-helm-overrides.yaml
index 34a66a2cf..8808dbd6f 100644
--- a/base-helm-configs/ceilometer/ceilometer-helm-overrides.yaml
+++ b/base-helm-configs/ceilometer/ceilometer-helm-overrides.yaml
@@ -1,17 +1,17 @@
---
images:
tags:
- test: "quay.io/rackspace/rackerlabs-xrally-openstack:2.0.0"
+ test: null
ceilometer_db_sync: "quay.io/rackspace/rackerlabs-ceilometer:2024.1-ubuntu_jammy"
- rabbit_init: "quay.io/rackspace/rackerlabs-rabbitmq:3.13-management"
- ks_user: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_service: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
+ rabbit_init: null
+ ks_user: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_service: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
ceilometer_central: "quay.io/rackspace/rackerlabs-ceilometer:2024.1-ubuntu_jammy"
ceilometer_compute: "quay.io/rackspace/rackerlabs-ceilometer:2024.1-ubuntu_jammy"
ceilometer_ipmi: "quay.io/rackspace/rackerlabs-ceilometer:2024.1-ubuntu_jammy"
ceilometer_notification: "quay.io/rackspace/rackerlabs-ceilometer:2024.1-ubuntu_jammy"
- dep_check: "quay.io/rackspace/rackerlabs-kubernetes-entrypoint:latest-ubuntu_jammy"
- image_repo_sync: "quay.io/rackspace/rackerlabs-docker:17.07.0"
+ dep_check: "ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest"
+ image_repo_sync: null
pull_policy: "Always"
conf:
@@ -504,7 +504,9 @@ conf:
name:
fields: payload.router.name
resource_id:
- fields: ["payload.router.id", "payload.id"]
+ fields: payload.router.id
+ event_type:
+ fields: event_type
- event_type: floatingip.*
traits:
<<: *network_traits
@@ -1051,9 +1053,13 @@ conf:
ip.floating:
event_create:
- floatingip.create.end
- event_delete: floatingip.delete.end
+ - router.create.end
+ event_delete:
+ - floatingip.delete.end
+ - router.delete.end
event_update:
- floatingip.update.end
+ - router.update.end
event_attributes:
id: resource_id
user_id: user_id
@@ -1691,7 +1697,6 @@ dependencies:
central:
jobs:
- ceilometer-db-sync
- - ceilometer-rabbit-init
- ceilometer-ks-user
services:
- endpoint: internal
@@ -1701,7 +1706,6 @@ dependencies:
ipmi:
jobs:
- ceilometer-db-sync
- - ceilometer-rabbit-init
- ceilometer-ks-user
services:
- endpoint: internal
@@ -1711,7 +1715,6 @@ dependencies:
compute:
jobs:
- ceilometer-db-sync
- - ceilometer-rabbit-init
- ceilometer-ks-user
services:
- endpoint: internal
@@ -1724,7 +1727,6 @@ dependencies:
notification:
jobs:
- ceilometer-db-sync
- - ceilometer-rabbit-init
- ceilometer-ks-user
services:
- endpoint: internal
@@ -1776,34 +1778,13 @@ endpoints:
pod:
resources:
enabled: true
- compute:
- requests:
- memory: {}
- cpu: {}
- limits:
- memory: {}
- cpu: {}
notification:
requests:
- memory: {}
- cpu: {}
+ memory: 256
+ cpu: 500
limits:
- memory: {}
- cpu: {}
- central:
- requests:
- memory: {}
- cpu: {}
- limits:
- memory: {}
- cpu: {}
- ipmi:
- requests:
- memory: {}
- cpu: {}
- limits:
- memory: {}
- cpu: {}
+ memory: 2Gi
+ cpu: "2000m"
replicas:
central: 1
notification: 1
@@ -1813,7 +1794,7 @@ pod:
revision_history: 3
pod_replacement_strategy: RollingUpdate
rolling_update:
- max_unavailable: 1
+ max_unavailable: 20%
max_surge: 3
daemonsets:
pod_replacement_strategy: RollingUpdate
@@ -1821,12 +1802,19 @@ pod:
enabled: true
min_ready_seconds: 0
max_unavailable: 20%
+ disruption_budget:
+ api:
+ min_available: 0
+ termination_grace_period:
+ api:
+ timeout: 600
manifests:
deployment_api: false
deployment_collector: false
ingress_api: false
# using gnocchi so no db init
+ job_rabbit_init: false
job_db_init: false
job_db_init_mongodb: false
job_ks_endpoints: false
diff --git a/base-helm-configs/cinder/cinder-helm-overrides.yaml b/base-helm-configs/cinder/cinder-helm-overrides.yaml
index 3b9df2bdc..b1d3c70a7 100644
--- a/base-helm-configs/cinder/cinder-helm-overrides.yaml
+++ b/base-helm-configs/cinder/cinder-helm-overrides.yaml
@@ -7,29 +7,43 @@ labels:
images:
tags:
- bootstrap: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- cinder_api: "quay.io/rackspace/rackerlabs-cinder:2024.1-ubuntu_jammy"
- cinder_backup: "quay.io/rackspace/rackerlabs-cinder:2024.1-ubuntu_jammy"
+ bootstrap: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ cinder_api: "ghcr.io/rackerlabs/genestack-images/cinder:2024.1-latest"
+ cinder_backup: "ghcr.io/rackerlabs/genestack-images/cinder:2024.1-latest"
cinder_backup_storage_init: "quay.io/rackspace/rackerlabs-ceph-config-helper:latest-ubuntu_jammy"
- cinder_db_sync: "quay.io/rackspace/rackerlabs-cinder:2024.1-ubuntu_jammy"
- cinder_scheduler: "quay.io/rackspace/rackerlabs-cinder:2024.1-ubuntu_jammy"
+ cinder_db_sync: "ghcr.io/rackerlabs/genestack-images/cinder:2024.1-latest"
+ cinder_scheduler: "ghcr.io/rackerlabs/genestack-images/cinder:2024.1-latest"
cinder_storage_init: "quay.io/rackspace/rackerlabs-ceph-config-helper:latest-ubuntu_jammy"
- cinder_volume: "quay.io/rackspace/rackerlabs-cinder:2024.1-ubuntu_jammy"
- cinder_volume_usage_audit: "quay.io/rackspace/rackerlabs-cinder:2024.1-ubuntu_jammy"
- db_drop: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_init: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- dep_check: "quay.io/rackspace/rackerlabs-kubernetes-entrypoint:latest-ubuntu_jammy"
- image_repo_sync: "quay.io/rackspace/rackerlabs-docker:17.07.0"
- ks_endpoints: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_service: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_user: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- rabbit_init: "quay.io/rackspace/rackerlabs-rabbitmq:3.13-management"
- test: "quay.io/rackspace/rackerlabs-xrally-openstack:2.0.0"
+ cinder_volume: "ghcr.io/rackerlabs/genestack-images/cinder:2024.1-latest"
+ cinder_volume_usage_audit: "ghcr.io/rackerlabs/genestack-images/cinder:2024.1-latest"
+ db_drop: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_init: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ dep_check: "ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest"
+ image_repo_sync: null
+ ks_endpoints: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_service: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_user: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ rabbit_init: null
+ test: null
# NOTE: (brew) requests cpu/mem values based on a three node
# hyperconverged lab (/scripts/hyperconverged-lab.sh).
# limit values based on defaults from the openstack-helm charts unless defined
pod:
+ lifecycle:
+ upgrades:
+ deployments:
+ revision_history: 3
+ pod_replacement_strategy: RollingUpdate
+ rolling_update:
+ max_unavailable: 20%
+ max_surge: 3
+ disruption_budget:
+ api:
+ min_available: 0
+ termination_grace_period:
+ api:
+ timeout: 60
resources:
enabled: true
api:
@@ -89,6 +103,8 @@ conf:
volume_clear: zero
volume_driver: cinder_rxt.rackspace.RXTLVM
volume_group: cinder-volumes-1
+ policy:
+ "volume_extension:types_extra_specs:read_sensitive": "rule:xena_system_admin_or_project_reader"
cinder:
DEFAULT:
allow_availability_zone_fallback: true
diff --git a/base-helm-configs/designate/designate-helm-overrides.yaml b/base-helm-configs/designate/designate-helm-overrides.yaml
index f7bfd57b5..8ca01d795 100644
--- a/base-helm-configs/designate/designate-helm-overrides.yaml
+++ b/base-helm-configs/designate/designate-helm-overrides.yaml
@@ -43,22 +43,22 @@ labels:
images:
tags:
- bootstrap: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_init: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_drop: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- rabbit_init: "quay.io/rackspace/rackerlabs-rabbitmq:3.13-management"
- ks_user: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_service: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_endpoints: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- dep_check: "quay.io/rackspace/rackerlabs-kubernetes-entrypoint:latest-ubuntu_jammy"
- designate_db_sync: "quay.io/rackspace/rackerlabs-designate:2024.1-ubuntu_jammy"
- designate_api: "quay.io/rackspace/rackerlabs-designate:2024.1-ubuntu_jammy"
- designate_central: "quay.io/rackspace/rackerlabs-designate:2024.1-ubuntu_jammy"
- designate_mdns: "quay.io/rackspace/rackerlabs-designate:2024.1-ubuntu_jammy"
- designate_worker: "quay.io/rackspace/rackerlabs-designate:2024.1-ubuntu_jammy"
- designate_producer: "quay.io/rackspace/rackerlabs-designate:2024.1-ubuntu_jammy"
- designate_sink: "quay.io/rackspace/rackerlabs-designate:2024.1-ubuntu_jammy"
- image_repo_sync: "quay.io/rackspace/rackerlabs-docker:17.07.0"
+ bootstrap: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_init: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_drop: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ rabbit_init: null
+ ks_user: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_service: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_endpoints: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ dep_check: "ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest"
+ designate_db_sync: "ghcr.io/rackerlabs/genestack-images/designate:2024.1-latest"
+ designate_api: "ghcr.io/rackerlabs/genestack-images/designate:2024.1-latest"
+ designate_central: "ghcr.io/rackerlabs/genestack-images/designate:2024.1-latest"
+ designate_mdns: "ghcr.io/rackerlabs/genestack-images/designate:2024.1-latest"
+ designate_worker: "ghcr.io/rackerlabs/genestack-images/designate:2024.1-latest"
+ designate_producer: "ghcr.io/rackerlabs/genestack-images/designate:2024.1-latest"
+ designate_sink: "ghcr.io/rackerlabs/genestack-images/designate:2024.1-latest"
+ image_repo_sync: null
pull_policy: "IfNotPresent"
local_registry:
active: false
@@ -121,7 +121,7 @@ pod:
revision_history: 3
pod_replacement_strategy: RollingUpdate
rolling_update:
- max_unavailable: 1
+ max_unavailable: 20%
max_surge: 3
disruption_budget:
api:
@@ -138,9 +138,9 @@ pod:
min_available: 0
termination_grace_period:
api:
- timeout: 30
+ timeout: 60
mdns:
- timeout: 30
+ timeout: 60
resources:
enabled: true
api:
diff --git a/base-helm-configs/glance/glance-helm-overrides.yaml b/base-helm-configs/glance/glance-helm-overrides.yaml
index 7c09c62ed..43314bbc7 100644
--- a/base-helm-configs/glance/glance-helm-overrides.yaml
+++ b/base-helm-configs/glance/glance-helm-overrides.yaml
@@ -4,21 +4,21 @@ storage: pvc
images:
tags:
- test: "quay.io/rackspace/rackerlabs-xrally-openstack:2.0.0"
+ test: null
glance_storage_init: "quay.io/rackspace/rackerlabs-ceph-config-helper:latest-ubuntu_jammy"
- glance_metadefs_load: "quay.io/rackspace/rackerlabs-glance:2024.1-ubuntu_jammy"
- db_init: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- glance_db_sync: "quay.io/rackspace/rackerlabs-glance:2024.1-ubuntu_jammy"
- db_drop: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_user: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_service: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_endpoints: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- rabbit_init: "quay.io/rackspace/rackerlabs-rabbitmq:3.13-management"
- glance_api: "quay.io/rackspace/rackerlabs-glance:2024.1-ubuntu_jammy"
+ glance_metadefs_load: "ghcr.io/rackerlabs/genestack-images/glance:2024.1-latest"
+ db_init: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ glance_db_sync: "ghcr.io/rackerlabs/genestack-images/glance:2024.1-latest"
+ db_drop: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_user: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_service: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_endpoints: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ rabbit_init: null
+ glance_api: "ghcr.io/rackerlabs/genestack-images/glance:2024.1-latest"
# Bootstrap image requires curl
- bootstrap: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- dep_check: "quay.io/rackspace/rackerlabs-kubernetes-entrypoint:latest-ubuntu_jammy"
- image_repo_sync: "quay.io/rackspace/rackerlabs-docker:17.07.0"
+ bootstrap: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ dep_check: "ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest"
+ image_repo_sync: null
bootstrap:
enabled: true
@@ -255,14 +255,14 @@ pod:
revision_history: 3
pod_replacement_strategy: RollingUpdate
rolling_update:
- max_unavailable: 1
+ max_unavailable: 20%
max_surge: 3
disruption_budget:
api:
min_available: 0
termination_grace_period:
api:
- timeout: 30
+ timeout: 60
probes:
api:
glance-api:
diff --git a/base-helm-configs/gnocchi/gnocchi-helm-overrides.yaml b/base-helm-configs/gnocchi/gnocchi-helm-overrides.yaml
index d3adf7d9c..1b413091e 100644
--- a/base-helm-configs/gnocchi/gnocchi-helm-overrides.yaml
+++ b/base-helm-configs/gnocchi/gnocchi-helm-overrides.yaml
@@ -4,16 +4,16 @@ images:
db_init: "quay.io/rackspace/rackerlabs-gnocchi:2024.1-ubuntu_jammy"
db_init_indexer: "quay.io/rackspace/rackerlabs-postgres:14.5"
db_sync: "quay.io/rackspace/rackerlabs-gnocchi:2024.1-ubuntu_jammy"
- dep_check: "quay.io/rackspace/rackerlabs-kubernetes-entrypoint:latest-ubuntu_jammy"
+ dep_check: "ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest"
gnocchi_api: "quay.io/rackspace/rackerlabs-gnocchi:2024.1-ubuntu_jammy"
gnocchi_metricd: "quay.io/rackspace/rackerlabs-gnocchi:2024.1-ubuntu_jammy"
gnocchi_resources_cleaner: "quay.io/rackspace/rackerlabs-gnocchi:2024.1-ubuntu_jammy"
gnocchi_statsd: "quay.io/rackspace/rackerlabs-gnocchi:2024.1-ubuntu_jammy"
gnocchi_storage_init: "quay.io/rackspace/rackerlabs-ceph-config-helper:latest-ubuntu_jammy"
- image_repo_sync: "quay.io/rackspace/rackerlabs-docker:17.07.0"
- ks_endpoints: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_service: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_user: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
+ image_repo_sync: null
+ ks_endpoints: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_service: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_user: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
ceph_client:
user_secret_name: gnocchi-temp-keyring
@@ -45,7 +45,7 @@ conf:
gnocchi_api_wsgi:
wsgi:
processes: 2
- threads: 4
+ threads: 1
paste:
"app:gnocchiv1":
paste.app_factory: "gnocchi.rest.app:app_factory"
@@ -100,14 +100,28 @@ pod:
limits: {}
lifecycle:
upgrades:
+ deployments:
+ revision_history: 3
+ pod_replacement_strategy: RollingUpdate
+ rolling_update:
+ max_unavailable: 20%
+ max_surge: 3
daemonsets:
+ pod_replacement_strategy: RollingUpdate
metricd:
- enabled: true
+ enabled: false
+ min_ready_seconds: 0
max_unavailable: 20%
- pod_replacement_strategy: RollingUpdate
statsd:
- enabled: true
+ enabled: false
+ min_ready_seconds: 0
max_unavailable: 20%
+ disruption_budget:
+ api:
+ min_available: 0
+ termination_grace_period:
+ api:
+ timeout: 60
endpoints:
fluentd:
diff --git a/base-helm-configs/grafana/grafana-helm-overrides.yaml b/base-helm-configs/grafana/grafana-helm-overrides.yaml
index df672ec91..6662ba0fa 100644
--- a/base-helm-configs/grafana/grafana-helm-overrides.yaml
+++ b/base-helm-configs/grafana/grafana-helm-overrides.yaml
@@ -1,16 +1,26 @@
---
+
+# Set the custom_host variable to the desired hostname for Grafana
+# This is used to set the domain and root_url in the grafana.ini file
+# and the value of the custom_host variable must be a valid domain.
custom_host: grafana.example.com
+
persistence:
type: pvc
enabled: true
+ storageClassName: general
accessModes:
- ReadWriteMany
+
nodeSelector:
openstack-control-plane: enabled
+
ingress:
enabled: false
+
image:
- tag: 10.3.3
+ tag: "10.3.3"
+
grafana.ini:
paths:
data: /var/lib/grafana/
@@ -24,14 +34,15 @@ grafana.ini:
grafana_net:
url: https://grafana.net
server:
- domain: "{{ .Values.custom_host }}"
- root_url: https://{{ .Values.custom_host }}
+ domain: "{{ .Values.custom_host }}" # Ref: custom_host variable above
+ root_url: "https://{{ .Values.custom_host }}" # Ref: custom_host variable above
database:
type: mysql
host: mariadb-cluster.grafana.svc:3306
user: $__file{/etc/secrets/grafana-db/username}
password: $__file{/etc/secrets/grafana-db/password}
name: grafana
+
datasources:
datasources.yaml:
apiversion: 1
@@ -46,6 +57,7 @@ datasources:
access: proxy
url: http://loki-gateway.{{ $.Release.Namespace }}.svc.cluster.local:80
editable: false
+
alerting:
rules.yaml:
groups:
@@ -106,13 +118,66 @@ alerting:
notifications:
- uid: prom-alertmanager-notification
annotations:
- description: Checks app=ovs (ovs-ovn) pod logs for lines with string
+ description: >-
+ Checks app=ovs (ovs-ovn) pod logs for lines with string
'binding|INFO|cr-lrp'
- summary: This alerts on rapid port claims for cr-lrp ports on OVN gateway nodes,
- which overloads the OVN south database and interferes with the
- function of the affected ports.
+ summary: >-
+ This alerts on rapid port claims for cr-lrp ports on OVN
+ gateway nodes, which overloads the OVN south database and
+ interferes with the function of the affected ports.
labels: {}
isPaused: false
+ # Generated UUID using 'uuidgen'
+ - uid: c14dd8fd-54ec-4e15-9813-e02cc3269899
+ title: Neutron IPAM Duplicate Entry Error
+ condition: B
+ data:
+ - refId: A
+ queryType: instant
+ relativeTimeRange:
+ from: 60
+ to: 0
+ # Using same loki datasource as rule#ba943125-33ca-4e4e-85f8-13359a8e4d65
+ datasourceUid: P8E80F9AEF21F6940
+ model:
+ expr: rate({app="fluentbit"} |= `Duplicate entry|ERROR` [1m])
+ queryType: instant
+ refId: A
+ - refId: B
+ relativeTimeRange:
+ # Past 60 seconds (can be adjusted further)
+ from: 60
+ # 0 denotes till current time
+ to: 0
+ datasourceUid: __expr__
+ model:
+ conditions:
+ - evaluator:
+ params:
+ - 1
+ - 0
+ type: gt
+ operator:
+ type: and
+ reducer:
+ type: avg
+ type: query
+ datasource:
+ name: Expression
+ type: __expr__
+ uid: __expr__
+ expression: A
+ refId: B
+ type: threshold
+ noDataState: OK
+ execErrState: Error
+ for: 0s
+ notifications:
+ - uid: prom-alertmanager-notification
+ annotations:
+ summary: >
+ Checks for log lines containing 'Duplicate entry|ERROR' in nova logs.
+ isPaused: false
contactpoints.yaml:
secret:
apiVersion: 1
@@ -134,11 +199,13 @@ alerting:
group_wait: 1s
group_interval: 1s
repeat_interval: 1s
+
plugins:
- camptocamp-prometheus-alertmanager-datasource
+
extraSecretMounts:
- name: grafana-db-secret-mount
secretName: grafana-db
- defaultMode: 440
+ defaultMode: 0440
mountPath: /etc/secrets/grafana-db
readOnly: true
diff --git a/base-helm-configs/heat/heat-helm-overrides.yaml b/base-helm-configs/heat/heat-helm-overrides.yaml
index 31c5d1f31..0fd78df91 100644
--- a/base-helm-configs/heat/heat-helm-overrides.yaml
+++ b/base-helm-configs/heat/heat-helm-overrides.yaml
@@ -1,28 +1,52 @@
---
images:
tags:
- bootstrap: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_drop: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_init: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- dep_check: "quay.io/rackspace/rackerlabs-kubernetes-entrypoint:latest-ubuntu_jammy"
- heat_api: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- heat_cfn: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- heat_cloudwatch: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- heat_db_sync: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- heat_engine: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- heat_engine_cleaner: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- heat_purge_deleted: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- image_repo_sync: "quay.io/rackspace/rackerlabs-docker:17.07.0"
- ks_endpoints: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_service: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_user: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- rabbit_init: "quay.io/rackspace/rackerlabs-rabbitmq:3.13-management"
- test: "quay.io/rackspace/rackerlabs-xrally-openstack:2.0.0"
+ bootstrap: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_drop: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_init: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ dep_check: "ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest"
+ heat_api: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ heat_cfn: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ heat_cloudwatch: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ heat_db_sync: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ heat_engine: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ heat_engine_cleaner: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ heat_purge_deleted: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ image_repo_sync: null
+ ks_endpoints: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_service: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_user: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ rabbit_init: null
+ test: null
# NOTE: (brew) requests cpu/mem values based on a three node
# hyperconverged lab (/scripts/hyperconverged-lab.sh).
# limit values based on defaults from the openstack-helm charts unless defined
pod:
+ lifecycle:
+ upgrades:
+ deployments:
+ revision_history: 3
+ pod_replacement_strategy: RollingUpdate
+ rolling_update:
+ max_unavailable: 20%
+ max_surge: 3
+ disruption_budget:
+ api:
+ min_available: 0
+ cfn:
+ min_available: 0
+ cloudwatch:
+ min_available: 0
+ termination_grace_period:
+ api:
+ timeout: 60
+ cfn:
+ timeout: 60
+ cloudwatch:
+ timeout: 60
+ engine:
+ timeout: 60
resources:
enabled: true
api:
diff --git a/base-helm-configs/horizon/horizon-helm-overrides.yaml b/base-helm-configs/horizon/horizon-helm-overrides.yaml
index f543a492f..f27c28f78 100644
--- a/base-helm-configs/horizon/horizon-helm-overrides.yaml
+++ b/base-helm-configs/horizon/horizon-helm-overrides.yaml
@@ -1,13 +1,12 @@
---
images:
tags:
- db_init: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_drop: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- horizon_db_sync: "quay.io/rackspace/rackerlabs-horizon:2024.1-ubuntu_jammy"
- horizon: "quay.io/rackspace/rackerlabs-horizon:2024.1-ubuntu_jammy"
- test: "quay.io/rackspace/rackerlabs-osh-selenium:latest-ubuntu_jammy"
- dep_check: "quay.io/rackspace/rackerlabs-kubernetes-entrypoint:latest-ubuntu_jammy"
- image_repo_sync: "quay.io/rackspace/rackerlabs-docker:17.07.0"
+ db_init: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_drop: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ horizon_db_sync: "ghcr.io/rackerlabs/genestack-images/horizon:2024.1-latest"
+ horizon: "ghcr.io/rackerlabs/genestack-images/horizon:2024.1-latest"
+ dep_check: "ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest"
+ image_repo_sync: null
# NOTE: (brew) requests cpu/mem values based on a three node
# hyperconverged lab (/scripts/hyperconverged-lab.sh).
diff --git a/base-helm-configs/ironic/ironic-helm-overrides.yaml b/base-helm-configs/ironic/ironic-helm-overrides.yaml
index 249d89cc1..97a599842 100644
--- a/base-helm-configs/ironic/ironic-helm-overrides.yaml
+++ b/base-helm-configs/ironic/ironic-helm-overrides.yaml
@@ -6,33 +6,33 @@
---
images:
tags:
- ironic_manage_cleaning_network: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ironic_retrive_cleaning_network: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ironic_retrive_swift_config: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- bootstrap: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_drop: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_init: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ironic_db_sync: "quay.io/rackspace/rackerlabs-ironic:2024.1-ubuntu_jammy"
- ks_user: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_service: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_endpoints: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- rabbit_init: "quay.io/rackspace/rackerlabs-rabbitmq:3.13-management"
- ironic_api: "quay.io/rackspace/rackerlabs-ironic:2024.1-ubuntu_jammy"
- ironic_conductor: "quay.io/rackspace/rackerlabs-ironic:2024.1-ubuntu_jammy"
- ironic_pxe: "quay.io/rackspace/rackerlabs-ironic:2024.1-ubuntu_jammy"
- ironic_pxe_init: "quay.io/rackspace/rackerlabs-ironic:2024.1-ubuntu_jammy"
+ ironic_manage_cleaning_network: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ironic_retrive_cleaning_network: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ironic_retrive_swift_config: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ bootstrap: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_drop: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_init: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ironic_db_sync: "ghcr.io/rackerlabs/genestack-images/ironic-api:2024.1-latest"
+ ks_user: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_service: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_endpoints: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ rabbit_init: null
+ ironic_api: "ghcr.io/rackerlabs/genestack-images/ironic-api:2024.1-latest"
+ ironic_conductor: "ghcr.io/rackerlabs/genestack-images/ironic-conductor:2024.1-latest"
+ ironic_pxe: "ghcr.io/rackerlabs/genestack-images/ironic-pxe:2024.1-latest"
+ ironic_pxe_init: "ghcr.io/rackerlabs/genestack-images/ironic-api:2024.1-latest"
ironic_pxe_http: "docker.io/nginx:1.13.3" # Retained from openstack-helm default
- ironic_inspector: "quay.io/rackspace/rackerlabs-ironic-inspector:2024.1-ubuntu_jammy"
- ironic_inspector_db_sync: "quay.io/rackspace/rackerlabs-ironic-inspector:2024.1-ubuntu_jammy"
- dep_check: "quay.io/rackspace/rackerlabs-kubernetes-entrypoint:latest-ubuntu_jammy"
- image_repo_sync: "quay.io/rackspace/rackerlabs-docker:17.07.0"
+ ironic_inspector: "ghcr.io/rackerlabs/genestack-images/ironic-inspector:2024.1-latest"
+ ironic_inspector_db_sync: "ghcr.io/rackerlabs/genestack-images/ironic-inspector:2024.1-latest"
+ dep_check: "ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest"
+ image_repo_sync: null
pull_policy: "IfNotPresent"
conf:
ironic:
DEFAULT:
log_config_append: /etc/ironic/logging.conf
- tempdir: /var/lib/openstack-helm/tmp # Matches openstack-helm default
+ tempdir: /tmp
default_deploy_interface: "direct"
default_inspect_interface: "inspector"
default_network_interface: "neutron"
@@ -41,6 +41,7 @@ conf:
enabled_deploy_interfaces: "direct,ramdisk"
enabled_inspect_interfaces: "inspector,no-inspect"
enabled_management_interfaces: "ipmitool,redfish"
+ enabled_network_interfaces: "flat,neutron"
enabled_power_interfaces: "ipmitool,redfish"
enabled_raid_interfaces: "no-raid"
database:
@@ -112,6 +113,32 @@ network:
neutron_subnet_alloc_end: 172.24.6.200
neutron_subnet_dns_nameserver: 8.8.8.8 # Aligned with Neutron's OVN DNS
+bootstrap:
+ image:
+ enabled: true
+ openstack:
+ enabled: true
+ ks_user: ironic
+ # NOTE: if source_base is null the source will be used as is
+ source_base: http://tarballs.openstack.org/ironic-python-agent/tinyipa/files
+ structured:
+ ironic-agent.initramfs:
+ source: tinyipa-stable-2024.1.gz
+ disk_format: ari
+ container_format: ari
+ ironic-agent.kernel:
+ source: tinyipa-stable-2024.1.vmlinuz
+ disk_format: aki
+ container_format: aki
+ network:
+ enabled: false
+ openstack:
+ enabled: false
+ object_store:
+ enabled: false
+ openstack:
+ enabled: false
+
dependencies:
static:
api:
@@ -119,8 +146,6 @@ dependencies:
- ironic-db-sync
- ironic-ks-user
- ironic-ks-endpoints
- - ironic-manage-cleaning-network
- - ironic-rabbit-init
services:
- endpoint: internal
service: oslo_db
@@ -133,8 +158,6 @@ dependencies:
- ironic-db-sync
- ironic-ks-user
- ironic-ks-endpoints
- - ironic-manage-cleaning-network
- - ironic-rabbit-init
services:
- endpoint: internal
service: oslo_db
@@ -233,12 +256,12 @@ manifests:
ingress_api: false
job_bootstrap: false
job_db_drop: false
- job_db_init: true
+ job_db_init: false
job_db_sync: true
job_ks_endpoints: true
job_ks_service: true
job_ks_user: true
- job_manage_cleaning_network: true
- job_rabbit_init: true
+ job_manage_cleaning_network: false
+ job_rabbit_init: false
service_ingress_api: false
statefulset_conductor: true
diff --git a/base-helm-configs/keystone/keystone-helm-overrides.yaml b/base-helm-configs/keystone/keystone-helm-overrides.yaml
index f2c34a22d..4abc23dbc 100644
--- a/base-helm-configs/keystone/keystone-helm-overrides.yaml
+++ b/base-helm-configs/keystone/keystone-helm-overrides.yaml
@@ -1,27 +1,41 @@
---
images:
tags:
- bootstrap: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_drop: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_init: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- dep_check: "quay.io/rackspace/rackerlabs-kubernetes-entrypoint:latest-ubuntu_jammy"
- image_repo_sync: "quay.io/rackspace/rackerlabs-docker:17.07.0"
- keystone_api: "quay.io/rackspace/rackerlabs-keystone-rxt:2024.1-ubuntu_jammy-1747958291"
- keystone_credential_cleanup: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- keystone_credential_rotate: "quay.io/rackspace/rackerlabs-keystone-rxt:2024.1-ubuntu_jammy-1747958291"
- keystone_credential_setup: "quay.io/rackspace/rackerlabs-keystone-rxt:2024.1-ubuntu_jammy-1747958291"
- keystone_db_sync: "quay.io/rackspace/rackerlabs-keystone-rxt:2024.1-ubuntu_jammy-1747958291"
- keystone_domain_manage: "quay.io/rackspace/rackerlabs-keystone-rxt:2024.1-ubuntu_jammy-1747958291"
- keystone_fernet_rotate: "quay.io/rackspace/rackerlabs-keystone-rxt:2024.1-ubuntu_jammy-1747958291"
- keystone_fernet_setup: "quay.io/rackspace/rackerlabs-keystone-rxt:2024.1-ubuntu_jammy-1747958291"
- ks_user: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- rabbit_init: "quay.io/rackspace/rackerlabs-rabbitmq:3.13-management"
- test: "quay.io/rackspace/rackerlabs-xrally-openstack:2.0.0"
+ bootstrap: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_drop: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_init: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ dep_check: "ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest"
+ image_repo_sync: null
+ keystone_api: "ghcr.io/rackerlabs/genestack-images/keystone:2024.1-latest"
+ keystone_credential_cleanup: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ keystone_credential_rotate: "ghcr.io/rackerlabs/genestack-images/keystone:2024.1-latest"
+ keystone_credential_setup: "ghcr.io/rackerlabs/genestack-images/keystone:2024.1-latest"
+ keystone_db_sync: "ghcr.io/rackerlabs/genestack-images/keystone:2024.1-latest"
+ keystone_domain_manage: "ghcr.io/rackerlabs/genestack-images/keystone:2024.1-latest"
+ keystone_fernet_rotate: "ghcr.io/rackerlabs/genestack-images/keystone:2024.1-latest"
+ keystone_fernet_setup: "ghcr.io/rackerlabs/genestack-images/keystone:2024.1-latest"
+ ks_user: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ rabbit_init: null
+ test: null
# NOTE: (brew) requests cpu/mem values based on a three node
# hyperconverged lab (/scripts/hyperconverged-lab.sh).
# limit values based on defaults from the openstack-helm charts unless defined
pod:
+ lifecycle:
+ upgrades:
+ deployments:
+ revision_history: 3
+ pod_replacement_strategy: RollingUpdate
+ rolling_update:
+ max_unavailable: 20%
+ max_surge: 3
+ disruption_budget:
+ api:
+ min_available: 0
+ termination_grace_period:
+ api:
+ timeout: 60
resources:
enabled: true
api:
@@ -85,6 +99,11 @@ conf:
rackspace:
role_attribute: os_flex
role_attribute_enforcement: false
+ # NOTE(cloudnull): See https://docs.openstack.org/keystone/latest/admin/configuration.html#security-compliance-and-pci-dss for more
+ security_compliance:
+ lockout_failure_attempts: 6
+ lockout_duration: 1800
+ disable_user_account_days_inactive: 90
logging:
logger_root:
handlers:
diff --git a/base-helm-configs/kube-ovn/kube-ovn-helm-overrides.yaml b/base-helm-configs/kube-ovn/kube-ovn-helm-overrides.yaml
index 961c044ff..3296fea38 100644
--- a/base-helm-configs/kube-ovn/kube-ovn-helm-overrides.yaml
+++ b/base-helm-configs/kube-ovn/kube-ovn-helm-overrides.yaml
@@ -3,13 +3,13 @@
# Declare variables to be passed into your templates.
global:
registry:
- address: docker.io/kubeovn
+ address: ghcr.io/rackerlabs/genestack-images
imagePullSecrets: []
images:
kubeovn:
repository: kube-ovn
vpcRepository: vpc-nat-gateway
- tag: v1.13.13
+ tag: v1.13.14-latest
support_arm: true
thirdparty: true
@@ -41,27 +41,27 @@ networking:
#VLAN_NAME: "ovn-vlan"
#VLAN_ID: "100"
EXCHANGE_LINK_NAME: false
- ENABLE_EIP_SNAT: true
+ ENABLE_EIP_SNAT: false
DEFAULT_SUBNET: "ovn-default"
DEFAULT_VPC: "ovn-cluster"
NODE_SUBNET: "join" #mesh network
- ENABLE_ECMP: false
+ ENABLE_ECMP: true
ENABLE_METRICS: true
# comma-separated string of nodelocal DNS ip addresses
NODE_LOCAL_DNS_IP: ""
- PROBE_INTERVAL: 180000
- OVN_NORTHD_PROBE_INTERVAL: 5000
- OVN_LEADER_PROBE_INTERVAL: 5
- OVN_REMOTE_PROBE_INTERVAL: 10000
+ PROBE_INTERVAL: 60000
+ OVN_NORTHD_PROBE_INTERVAL: 15000
+ OVN_LEADER_PROBE_INTERVAL: 15
+ OVN_REMOTE_PROBE_INTERVAL: 30000
OVN_REMOTE_OPENFLOW_INTERVAL: 180
- OVN_NORTHD_N_THREADS: 1
- ENABLE_COMPACT: false
+ OVN_NORTHD_N_THREADS: 4 # Number of threads for ovn-northd, default is 4 production environments could set it to a higher value.
+ ENABLE_COMPACT: true
func:
ENABLE_LB: true
ENABLE_NP: true
ENABLE_EXTERNAL_VPC: true
- HW_OFFLOAD: false
+ HW_OFFLOAD: false # Enable hardware offload, if supported by the underlying network hardware.
ENABLE_LB_SVC: false
ENABLE_KEEP_VM_IP: true
LS_DNAT_MOD_DL_DST: true
@@ -77,8 +77,8 @@ func:
ENABLE_OVN_IPSEC: false
ENABLE_ANP: false
SET_VXLAN_TX_OFF: false
- OVSDB_CON_TIMEOUT: 3
- OVSDB_INACTIVITY_TIMEOUT: 10
+ OVSDB_CON_TIMEOUT: 5
+ OVSDB_INACTIVITY_TIMEOUT: 30
ENABLE_LIVE_MIGRATION_OPTIMIZE: true
ipv4:
@@ -91,8 +91,8 @@ ipv4:
performance:
GC_INTERVAL: 0
- INSPECT_INTERVAL: 20
- OVS_VSCTL_CONCURRENCY: 100
+ INSPECT_INTERVAL: 300
+ OVS_VSCTL_CONCURRENCY: 150
debug:
ENABLE_MIRROR: false
diff --git a/base-helm-configs/libvirt/libvirt-helm-overrides.yaml b/base-helm-configs/libvirt/libvirt-helm-overrides.yaml
index fb36e8157..1ad90d51d 100644
--- a/base-helm-configs/libvirt/libvirt-helm-overrides.yaml
+++ b/base-helm-configs/libvirt/libvirt-helm-overrides.yaml
@@ -1,9 +1,9 @@
---
images:
tags:
- libvirt: docker.io/openstackhelm/libvirt:2024.1-ubuntu_jammy
+ libvirt: ghcr.io/rackerlabs/genestack-images/libvirt:latest
ceph_config_helper: docker.io/openstackhelm/ceph-config-helper:ubuntu_jammy_18.2.2-1-20240312
- dep_check: quay.io/airshipit/kubernetes-entrypoint:latest-ubuntu_jammy
+ dep_check: ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest
network:
backend:
- ovn
@@ -18,3 +18,12 @@ dependencies:
ovn:
libvirt:
pod: [] # In a hybrid deployment, we don't want to run ovn-controller on the same node as libvirt
+pod:
+ lifecycle:
+ upgrades:
+ daemonsets:
+ pod_replacement_strategy: RollingUpdate
+ libvirt:
+ enabled: true
+ min_ready_seconds: 0
+ max_unavailable: 20%
diff --git a/base-helm-configs/magnum/magnum-helm-overrides.yaml b/base-helm-configs/magnum/magnum-helm-overrides.yaml
index 047bf3481..d2cc00d26 100644
--- a/base-helm-configs/magnum/magnum-helm-overrides.yaml
+++ b/base-helm-configs/magnum/magnum-helm-overrides.yaml
@@ -1,23 +1,37 @@
---
images:
tags:
- bootstrap: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_drop: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_init: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- dep_check: "quay.io/rackspace/rackerlabs-kubernetes-entrypoint:latest-ubuntu_jammy"
- image_repo_sync: "quay.io/rackspace/rackerlabs-docker:17.07.0"
- ks_endpoints: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_service: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_user: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- magnum_api: "quay.io/rackspace/rackerlabs-magnum:2024.1-ubuntu_jammy"
- magnum_conductor: "quay.io/rackspace/rackerlabs-magnum:2024.1-ubuntu_jammy"
- magnum_db_sync: "quay.io/rackspace/rackerlabs-magnum:2024.1-ubuntu_jammy"
- rabbit_init: "quay.io/rackspace/rackerlabs-rabbitmq:3.13-management"
+ bootstrap: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_drop: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_init: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ dep_check: "ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest"
+ image_repo_sync: null
+ ks_endpoints: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_service: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_user: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ magnum_api: "ghcr.io/rackerlabs/genestack-images/magnum:2024.1-latest"
+ magnum_conductor: "ghcr.io/rackerlabs/genestack-images/magnum:2024.1-latest"
+ magnum_db_sync: "ghcr.io/rackerlabs/genestack-images/magnum:2024.1-latest"
+ rabbit_init: null
# NOTE: (brew) requests cpu/mem values based on a three node
# hyperconverged lab (/scripts/hyperconverged-lab.sh).
# limit values based on defaults from the openstack-helm charts unless defined
pod:
+ lifecycle:
+ upgrades:
+ deployments:
+ revision_history: 3
+ pod_replacement_strategy: RollingUpdate
+ rolling_update:
+ max_unavailable: 20%
+ max_surge: 3
+ disruption_budget:
+ api:
+ min_available: 0
+ termination_grace_period:
+ api:
+ timeout: 60
resources:
enabled: true
api:
diff --git a/base-helm-configs/masakari/masakari-helm-overrides.yaml b/base-helm-configs/masakari/masakari-helm-overrides.yaml
index 530fc4e9a..61fc9948d 100644
--- a/base-helm-configs/masakari/masakari-helm-overrides.yaml
+++ b/base-helm-configs/masakari/masakari-helm-overrides.yaml
@@ -13,26 +13,50 @@
---
images:
tags:
- db_init: quay.io/airshipit/heat:2024.1-ubuntu_jammy
+ db_init: ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest
db_sync: docker.io/openstackhelm/masakari:2024.1-ubuntu_jammy
- db_drop: quay.io/airshipit/heat:2024.1-ubuntu_jammy
- ks_endpoints: quay.io/airshipit/heat:2024.1-ubuntu_jammy
- ks_service: quay.io/airshipit/heat:2024.1-ubuntu_jammy
- ks_user: quay.io/airshipit/heat:2024.1-ubuntu_jammy
- masakari_api: quay.io/rackspace/rackerlabs-masakari:2024.1-ubuntu_jammy
- masakari_engine: quay.io/rackspace/rackerlabs-masakari:2024.1-ubuntu_jammy
+ db_drop: ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest
+ ks_endpoints: ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest
+ ks_service: ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest
+ ks_user: ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest
+ masakari_api: ghcr.io/rackerlabs/genestack-images/masakari:2024.1-latest
+ masakari_engine: ghcr.io/rackerlabs/genestack-images/masakari:2024.1-latest
# TEMP HOST-MONITOR IMAGE TO FIX: https://review.opendev.org/c/openstack/masakari-monitors/+/951336
masakari_host_monitor: kernelpanic53/rackerlabs-masakari-monitors:zhmarvi-ubuntu_jammy_v1.0
- masakari_process_monitor: quay.io/rackspace/rackerlabs-masakari-monitors:2024.1-ubuntu_jammy
- masakari_instance_monitor: quay.io/rackspace/rackerlabs-masakari-monitors:2024.1-ubuntu_jammy
+ masakari_process_monitor: ghcr.io/rackerlabs/genestack-images/masakari-monitors:2024.1-latest
+ masakari_instance_monitor: ghcr.io/rackerlabs/genestack-images/masakari-monitors:2024.1-latest
rabbit_init: docker.io/rabbitmq:3.13-management
- dep_check: quay.io/airshipit/kubernetes-entrypoint:latest-ubuntu_focal
+ dep_check: ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest
pull_policy: "IfNotPresent"
# NOTE: (brew) requests cpu/mem values based on a three node
# hyperconverged lab (/scripts/hyperconverged-lab.sh).
# limit values based on defaults from the openstack-helm charts unless defined
pod:
+ lifecycle:
+ upgrades:
+ deployments:
+ revision_history: 3
+ pod_replacement_strategy: RollingUpdate
+ rolling_update:
+ max_unavailable: 20%
+ max_surge: 3
+ daemonsets:
+ pod_replacement_strategy: RollingUpdate
+ compute:
+ enabled: true
+ min_ready_seconds: 0
+ max_unavailable: 20%
+ disruption_budget:
+ masakari_api:
+ min_available: 0
+ masakari_engine:
+ min_available: 0
+ termination_grace_period:
+ masakari_api:
+ timeout: 60
+ masakari_engine:
+ timeout: 60
resources:
enabled: true
masakari_api:
diff --git a/base-helm-configs/neutron/neutron-helm-overrides.yaml b/base-helm-configs/neutron/neutron-helm-overrides.yaml
index 2ccf08bd0..69956bf77 100644
--- a/base-helm-configs/neutron/neutron-helm-overrides.yaml
+++ b/base-helm-configs/neutron/neutron-helm-overrides.yaml
@@ -1,35 +1,35 @@
---
images:
tags:
- bootstrap: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_init: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_drop: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_user: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_service: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_endpoints: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- neutron_db_sync: "quay.io/rackspace/rackerlabs-neutron:2024.1-ubuntu_jammy"
- neutron_dhcp: "quay.io/rackspace/rackerlabs-neutron:2024.1-ubuntu_jammy"
- neutron_l3: "quay.io/rackspace/rackerlabs-neutron:2024.1-ubuntu_jammy"
- neutron_l2gw: "quay.io/rackspace/rackerlabs-neutron:2024.1-ubuntu_jammy"
- neutron_linuxbridge_agent: "quay.io/rackspace/rackerlabs-neutron:2024.1-ubuntu_jammy"
- neutron_metadata: "quay.io/rackspace/rackerlabs-neutron:2024.1-ubuntu_jammy"
- neutron_ovn_metadata: "quay.io/rackspace/rackerlabs-neutron:2024.1-ubuntu_jammy"
- neutron_ovn_vpn: "quay.io/rackspace/rackerlabs-neutron:2024.1-ubuntu_jammy"
- neutron_openvswitch_agent: "quay.io/rackspace/rackerlabs-neutron:2024.1-ubuntu_jammy"
- neutron_server: "quay.io/rackspace/rackerlabs-neutron:2024.1-ubuntu_jammy"
- neutron_rpc_server: "quay.io/rackspace/rackerlabs-neutron:2024.1-ubuntu_jammy"
- neutron_bagpipe_bgp: "quay.io/rackspace/rackerlabs-neutron:2024.1-ubuntu_jammy"
- neutron_netns_cleanup_cron: "quay.io/rackspace/rackerlabs-neutron:2024.1-ubuntu_jammy"
- test: "quay.io/rackspace/rackerlabs-xrally-openstack:2.0.0"
+ bootstrap: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_init: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_drop: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_user: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_service: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_endpoints: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ neutron_db_sync: "ghcr.io/rackerlabs/genestack-images/neutron:2024.1-latest"
+ neutron_dhcp: "ghcr.io/rackerlabs/genestack-images/neutron:2024.1-latest"
+ neutron_l3: "ghcr.io/rackerlabs/genestack-images/neutron:2024.1-latest"
+ neutron_l2gw: "ghcr.io/rackerlabs/genestack-images/neutron:2024.1-latest"
+ neutron_linuxbridge_agent: "ghcr.io/rackerlabs/genestack-images/neutron:2024.1-latest"
+ neutron_metadata: "ghcr.io/rackerlabs/genestack-images/neutron:2024.1-latest"
+ neutron_ovn_metadata: "ghcr.io/rackerlabs/genestack-images/neutron:2024.1-latest"
+ neutron_ovn_vpn: "ghcr.io/rackerlabs/genestack-images/neutron:2024.1-latest"
+ neutron_openvswitch_agent: "ghcr.io/rackerlabs/genestack-images/neutron:2024.1-latest"
+ neutron_server: "ghcr.io/rackerlabs/genestack-images/neutron:2024.1-latest"
+ neutron_rpc_server: "ghcr.io/rackerlabs/genestack-images/neutron:2024.1-latest"
+ neutron_bagpipe_bgp: "ghcr.io/rackerlabs/genestack-images/neutron:2024.1-latest"
+ neutron_netns_cleanup_cron: "ghcr.io/rackerlabs/genestack-images/neutron:2024.1-latest"
+ test: null
purge_test: "quay.io/rackspace/rackerlabs-ospurge:latest"
- rabbit_init: "quay.io/rackspace/rackerlabs-rabbitmq:3.13-management"
- netoffload: "quay.io/rackspace/rackerlabs-netoffload:v1.0.1"
- neutron_sriov_agent: "quay.io/rackspace/rackerlabs-neutron:2024.1-ubuntu_jammy"
- neutron_sriov_agent_init: "quay.io/rackspace/rackerlabs-neutron:2024.1-ubuntu_jammy"
- neutron_bgp_dragent: "quay.io/rackspace/rackerlabs-neutron:2024.1-ubuntu_jammy"
- neutron_ironic_agent: "quay.io/rackspace/rackerlabs-neutron:2024.1-ubuntu_jammy"
- dep_check: "quay.io/rackspace/rackerlabs-kubernetes-entrypoint:latest-ubuntu_jammy"
- image_repo_sync: "quay.io/rackspace/rackerlabs-docker:17.07.0"
+ rabbit_init: null
+ netoffload: null
+ neutron_sriov_agent: "ghcr.io/rackerlabs/genestack-images/neutron:2024.1-latest"
+ neutron_sriov_agent_init: "ghcr.io/rackerlabs/genestack-images/neutron:2024.1-latest"
+ neutron_bgp_dragent: "ghcr.io/rackerlabs/genestack-images/neutron:2024.1-latest"
+ neutron_ironic_agent: "ghcr.io/rackerlabs/genestack-images/neutron:2024.1-latest"
+ dep_check: "ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest"
+ image_repo_sync: null
labels:
ovs:
@@ -53,6 +53,8 @@ dependencies:
jobs: null
ovn_metadata:
pod: []
+ ovn_vpn_agent:
+ pod: []
ovs_agent:
jobs: null
rpc_server:
@@ -86,6 +88,62 @@ pod:
cpu: "3000m"
use_fqdn:
neutron_agent: false
+ lifecycle:
+ upgrades:
+ deployments:
+ revision_history: 3
+ pod_replacement_strategy: RollingUpdate
+ rolling_update:
+ max_unavailable: 20%
+ max_surge: 3
+ daemonsets:
+ pod_replacement_strategy: RollingUpdate
+ dhcp_agent:
+ enabled: true
+ min_ready_seconds: 0
+ max_unavailable: 20%
+ l3_agent:
+ enabled: true
+ min_ready_seconds: 0
+ max_unavailable: 20%
+ lb_agent:
+ enabled: true
+ min_ready_seconds: 0
+ max_unavailable: 20%
+ metadata_agent:
+ enabled: true
+ min_ready_seconds: 0
+ max_unavailable: 20%
+ ovn_metadata_agent:
+ enabled: true
+ min_ready_seconds: 0
+ max_unavailable: 20%
+ ovn_vpn_agent:
+ enabled: true
+ min_ready_seconds: 0
+ max_unavailable: 20%
+ ovs_agent:
+ enabled: true
+ min_ready_seconds: 0
+ max_unavailable: 20%
+ sriov_agent:
+ enabled: true
+ min_ready_seconds: 0
+ max_unavailable: 20%
+ netns_cleanup_cron:
+ enabled: true
+ min_ready_seconds: 0
+ max_unavailable: 20%
+ disruption_budget:
+ server:
+ min_available: 0
+ termination_grace_period:
+ server:
+ timeout: 60
+ rpc_server:
+ timeout: 60
+ ironic_agent:
+ timeout: 60
conf:
dhcp_agent:
@@ -111,8 +169,21 @@ conf:
router_scheduler_driver: neutron.scheduler.l3_agent_scheduler.AZLeastRoutersScheduler
rpc_state_report_workers: 2
rpc_workers: 2
- service_plugins: "ovn-router,qos,metering,trunk,segments"
+ # NOTE(cloudnull): in 2025.1 we can add firewall_v2
+ service_plugins: "ovn-router,ovn-vpnaas,qos,metering,trunk,segments"
+ service_providers:
+ service_provider:
+ type: multistring
+ values:
+ - "VPN:strongswan:neutron_vpnaas.services.vpn.service_drivers.ovn_ipsec.IPsecOvnVPNDriver:default"
+ # - "FIREWALL_V2:fwaas_db:neutron_fwaas.services.firewall.service_drivers.ovn.firewall_l3_driver.OVNFwaasDriver:default"
+ fwaas:
+ agent_version: v2
+ driver: neutron_fwaas.services.firewall.service_drivers.ovn.firewall_l3_driver.OVNFwaasDriver
+ # NOTE(cloudnull): in 2025.1 we can enable this
+ enabled: False
agent:
+ extensions: vpnaas
availability_zone: az1
database:
connection_debug: 0
@@ -121,6 +192,8 @@ conf:
idle_timeout: 3600
mysql_sql_mode: {}
use_db_reconnect: true
+ max_pool_size: 30
+ max_overflow: 60
pool_timeout: 60
max_retries: -1
oslo_messaging_rabbit:
@@ -149,6 +222,13 @@ conf:
ovn_l3_scheduler: leastloaded
ovn_nb_connection: "tcp:127.0.0.1:6641"
ovn_sb_connection: "tcp:127.0.0.1:6642"
+ metadata_rate_limiting:
+ rate_limit_enabled: true
+ ip_versions: 4
+ base_window_duration: 60
+ base_query_rate_limit: 6
+ burst_window_duration: 10
+ burst_query_rate_limit: 2
neutron_api_uwsgi:
uwsgi:
processes: 2
@@ -160,11 +240,17 @@ conf:
metadata_workers: 2
ovs:
ovsdb_connection: "tcp:127.0.0.1:6640"
+ ovn_vpn_agent:
+ ovs:
+ ovsdb_connection: "tcp:127.0.0.1:6640"
plugins:
ml2_conf:
agent:
availability_zone: az1
+ # NOTE(cloudnull): in 2025.1 we can add fwaas_v2
extensions: "fip_qos,gateway_ip_qos"
+ fwaas:
+ firewall_l2_driver: noop
ml2:
extension_drivers: "port_security,qos"
mechanism_drivers: ovn
@@ -257,6 +343,7 @@ manifests:
daemonset_metadata_agent: false
daemonset_ovn_metadata_agent: true
daemonset_ovs_agent: false
+ daemonset_ovn_vpn_agent: true
ingress_server: false
job_db_init: false
job_rabbit_init: false
@@ -265,3 +352,4 @@ manifests:
secret_ingress_tls: false
secret_rabbitmq: false
service_ingress_server: false
+ deployment_rpc_server: false
diff --git a/base-helm-configs/nova/nova-helm-overrides.yaml b/base-helm-configs/nova/nova-helm-overrides.yaml
index eb1ef1fbe..24c84c968 100644
--- a/base-helm-configs/nova/nova-helm-overrides.yaml
+++ b/base-helm-configs/nova/nova-helm-overrides.yaml
@@ -1,43 +1,37 @@
---
images:
tags:
- bootstrap: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_drop: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_init: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- dep_check: "quay.io/rackspace/rackerlabs-kubernetes-entrypoint:latest-ubuntu_jammy"
- image_repo_sync: "quay.io/rackspace/rackerlabs-docker:17.07.0"
- ks_endpoints: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_service: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_user: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- nova_api: "quay.io/rackspace/rackerlabs-nova-efi:2024.1-ubuntu_jammy-1737928811"
- nova_archive_deleted_rows: "quay.io/rackspace/rackerlabs-nova-efi:2024.1-ubuntu_jammy-1737928811"
- nova_cell_setup: "quay.io/rackspace/rackerlabs-nova-efi:2024.1-ubuntu_jammy-1737928811"
- nova_cell_setup_init: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- nova_compute: "quay.io/rackspace/rackerlabs-nova-efi:2024.1-ubuntu_jammy-1737928811"
+ bootstrap: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_drop: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_init: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ dep_check: "ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest"
+ image_repo_sync: null
+ ks_endpoints: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_service: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_user: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ nova_api: "ghcr.io/rackerlabs/genestack-images/nova:2024.1-latest"
+ nova_archive_deleted_rows: "ghcr.io/rackerlabs/genestack-images/nova:2024.1-latest"
+ nova_cell_setup: "ghcr.io/rackerlabs/genestack-images/nova:2024.1-latest"
+ nova_cell_setup_init: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ nova_compute: "ghcr.io/rackerlabs/genestack-images/nova:2024.1-latest"
nova_compute_ironic: "docker.io/kolla/ubuntu-source-nova-compute-ironic:wallaby"
- nova_compute_ssh: "quay.io/rackspace/rackerlabs-nova-efi:2024.1-ubuntu_jammy-1737928811"
- nova_conductor: "quay.io/rackspace/rackerlabs-nova-efi:2024.1-ubuntu_jammy-1737928811"
- nova_db_sync: "quay.io/rackspace/rackerlabs-nova-efi:2024.1-ubuntu_jammy-1737928811"
- nova_novncproxy: "quay.io/rackspace/rackerlabs-nova-efi:2024.1-ubuntu_jammy-1737928811"
- nova_novncproxy_assets: "quay.io/rackspace/rackerlabs-nova-efi:2024.1-ubuntu_jammy-1737928811"
- nova_scheduler: "quay.io/rackspace/rackerlabs-nova-efi:2024.1-ubuntu_jammy-1737928811"
+ nova_compute_ssh: "ghcr.io/rackerlabs/genestack-images/nova:2024.1-latest"
+ nova_conductor: "ghcr.io/rackerlabs/genestack-images/nova:2024.1-latest"
+ nova_db_sync: "ghcr.io/rackerlabs/genestack-images/nova:2024.1-latest"
+ nova_novncproxy: "ghcr.io/rackerlabs/genestack-images/nova:2024.1-latest"
+ nova_novncproxy_assets: "ghcr.io/rackerlabs/genestack-images/nova:2024.1-latest"
+ nova_scheduler: "ghcr.io/rackerlabs/genestack-images/nova:2024.1-latest"
nova_service_cleaner: "quay.io/rackspace/rackerlabs-ceph-config-helper:latest-ubuntu_jammy"
- nova_spiceproxy: "quay.io/rackspace/rackerlabs-nova-efi:2024.1-ubuntu_jammy-1737928811"
- nova_spiceproxy_assets: "quay.io/rackspace/rackerlabs-nova-efi:2024.1-ubuntu_jammy-1737928811"
+ nova_spiceproxy: "ghcr.io/rackerlabs/genestack-images/nova:2024.1-latest"
+ nova_spiceproxy_assets: "ghcr.io/rackerlabs/genestack-images/nova:2024.1-latest"
nova_storage_init: "quay.io/rackspace/rackerlabs-ceph-config-helper:latest-ubuntu_jammy"
nova_wait_for_computes_init: "quay.io/rackspace/rackerlabs-hyperkube-amd64:v1.11.6"
- rabbit_init: "quay.io/rackspace/rackerlabs-rabbitmq:3.13-management"
- test: "quay.io/rackspace/rackerlabs-xrally-openstack:2.0.0"
+ rabbit_init: null
+ test: null
network:
backend:
- ovn
- lifecycle:
- upgrades:
- daemonsets:
- compute:
- enabled: true
- max_unavailable: 20%
ssh:
enabled: true
@@ -88,6 +82,8 @@ conf:
handlers:
- stdout
level: INFO
+ ceph:
+ enabled: false
nova:
DEFAULT:
block_device_allocate_retries: 180
@@ -104,6 +100,9 @@ conf:
vif_plugging_timeout: 300
cross_az_attach: true
network_allocate_retries: 3
+ api:
+ vendordata_providers: ['StaticJSON']
+ vendordata_jsonfile_path: /etc/nova/vendor_data.json
api_database:
connection_debug: 0
connection_recycle_time: 600
@@ -170,7 +169,7 @@ conf:
# https://lists.openstack.org/pipermail/openstack-discuss/2023-April/033314.html
# https://review.opendev.org/c/openstack/oslo.messaging/+/866617
kombu_reconnect_delay: 0.5
- schedule:
+ scheduler:
workers: 2
workarounds:
skip_cpu_compare_at_startup: false
@@ -280,6 +279,30 @@ endpoints:
# hyperconverged lab (/scripts/hyperconverged-lab.sh).
# limit values based on defaults from the openstack-helm charts unless defined
pod:
+ lifecycle:
+ upgrades:
+ deployments:
+ revision_history: 3
+ pod_replacement_strategy: RollingUpdate
+ rolling_update:
+ max_unavailable: 20%
+ max_surge: 3
+ daemonsets:
+ pod_replacement_strategy: RollingUpdate
+ compute:
+ enabled: true
+ min_ready_seconds: 0
+ max_unavailable: 20%
+ disruption_budget:
+ metadata:
+ min_available: 0
+ osapi:
+ min_available: 0
+ termination_grace_period:
+ metadata:
+ timeout: 60
+ osapi:
+ timeout: 60
resources:
enabled: true
compute:
@@ -326,6 +349,31 @@ pod:
readOnlyRootFilesystem: false
use_fqdn:
compute: false
+ mounts:
+ nova_compute:
+ init_container: null
+ nova_compute:
+ volumeMounts:
+ - name: metadata-api-static-vendordata
+ mountPath: /etc/nova/vendor_data.json
+ subPath: vendor_data.json
+ readOnly: true
+ volumes:
+ - name: metadata-api-static-vendordata
+ configMap:
+ name: static-vendor-data
+ nova_api_metadata:
+ init_container: null
+ nova_api_metadata:
+ volumeMounts:
+ - name: metadata-api-static-vendordata
+ mountPath: /etc/nova/vendor_data.json
+ subPath: vendor_data.json
+ readOnly: true
+ volumes:
+ - name: metadata-api-static-vendordata
+ configMap:
+ name: static-vendor-data
manifests:
deployment_spiceproxy: false
diff --git a/base-helm-configs/octavia/octavia-helm-overrides.yaml b/base-helm-configs/octavia/octavia-helm-overrides.yaml
index d7d65b2f6..3b0adf587 100644
--- a/base-helm-configs/octavia/octavia-helm-overrides.yaml
+++ b/base-helm-configs/octavia/octavia-helm-overrides.yaml
@@ -1,23 +1,23 @@
---
images:
tags:
- bootstrap: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_drop: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_init: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- dep_check: "quay.io/rackspace/rackerlabs-kubernetes-entrypoint:latest-ubuntu_jammy"
- image_repo_sync: "quay.io/rackspace/rackerlabs-docker:17.07.0"
- ks_endpoints: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_service: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_user: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- octavia_api: "quay.io/rackspace/rackerlabs-octavia-ovn:2024.1-ubuntu_jammy-1737651745"
- octavia_db_sync: "quay.io/rackspace/rackerlabs-octavia-ovn:2024.1-ubuntu_jammy-1737651745"
- octavia_health_manager: "quay.io/rackspace/rackerlabs-octavia-ovn:2024.1-ubuntu_jammy-1737651745"
- octavia_health_manager_init: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- octavia_housekeeping: "quay.io/rackspace/rackerlabs-octavia-ovn:2024.1-ubuntu_jammy-1737651745"
- octavia_worker: "quay.io/rackspace/rackerlabs-octavia-ovn:2024.1-ubuntu_jammy-1737651745"
- openvswitch_vswitchd: "docker.io/kolla/centos-source-openvswitch-vswitchd:rocky"
- rabbit_init: "quay.io/rackspace/rackerlabs-rabbitmq:3.13-management"
- test: "quay.io/rackspace/rackerlabs-xrally-openstack:2.0.0"
+ bootstrap: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_drop: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_init: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ dep_check: "ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest"
+ image_repo_sync: null
+ ks_endpoints: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_service: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_user: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ octavia_api: "ghcr.io/rackerlabs/genestack-images/octavia:2024.1-latest"
+ octavia_db_sync: "ghcr.io/rackerlabs/genestack-images/octavia:2024.1-latest"
+ octavia_health_manager: "ghcr.io/rackerlabs/genestack-images/octavia:2024.1-latest"
+ octavia_health_manager_init: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ octavia_housekeeping: "ghcr.io/rackerlabs/genestack-images/octavia:2024.1-latest"
+ octavia_worker: "ghcr.io/rackerlabs/genestack-images/octavia:2024.1-latest"
+ openvswitch_vswitchd: "ghcr.io/rackerlabs/genestack-images/ovs:v3.5.1-latest"
+ rabbit_init: null
+ test: null
dependencies:
static:
@@ -75,6 +75,8 @@ conf:
use_db_reconnect: true
pool_timeout: 60
max_retries: -1
+ max_overflow: 60
+ max_pool_size: 30
driver_agent:
enabled_provider_agents: ovn
glance:
@@ -181,6 +183,26 @@ endpoints:
# hyperconverged lab (/scripts/hyperconverged-lab.sh).
# limit values based on defaults from the openstack-helm charts unless defined
pod:
+ lifecycle:
+ upgrades:
+ deployments:
+ revision_history: 3
+ pod_replacement_strategy: RollingUpdate
+ rolling_update:
+ max_unavailable: 20%
+ max_surge: 3
+ daemonsets:
+ pod_replacement_strategy: RollingUpdate
+ health_manager:
+ enabled: true
+ min_ready_seconds: 0
+ max_unavailable: 20%
+ disruption_budget:
+ api:
+ min_available: 0
+ termination_grace_period:
+ api:
+ timeout: 60
resources:
enabled: true
api:
diff --git a/base-helm-configs/placement/placement-helm-overrides.yaml b/base-helm-configs/placement/placement-helm-overrides.yaml
index 8b9fa436b..1a8aff451 100644
--- a/base-helm-configs/placement/placement-helm-overrides.yaml
+++ b/base-helm-configs/placement/placement-helm-overrides.yaml
@@ -1,20 +1,34 @@
---
images:
tags:
- db_drop: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- db_init: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- dep_check: "quay.io/rackspace/rackerlabs-kubernetes-entrypoint:latest-ubuntu_jammy"
- image_repo_sync: "quay.io/rackspace/rackerlabs-docker:17.07.0"
- ks_endpoints: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_service: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- ks_user: "quay.io/rackspace/rackerlabs-heat:2024.1-ubuntu_jammy"
- placement: "quay.io/rackspace/rackerlabs-placement:2024.1-ubuntu_jammy"
- placement_db_sync: "quay.io/rackspace/rackerlabs-placement:2024.1-ubuntu_jammy"
+ db_drop: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ db_init: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ dep_check: "ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest"
+ image_repo_sync: null
+ ks_endpoints: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_service: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ ks_user: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
+ placement: "ghcr.io/rackerlabs/genestack-images/placement:2024.1-latest"
+ placement_db_sync: "ghcr.io/rackerlabs/genestack-images/placement:2024.1-latest"
# NOTE: (brew) requests cpu/mem values based on a three node
# hyperconverged lab (/scripts/hyperconverged-lab.sh).
# limit values based on defaults from the openstack-helm charts unless defined
pod:
+ lifecycle:
+ upgrades:
+ deployments:
+ revision_history: 3
+ pod_replacement_strategy: RollingUpdate
+ rolling_update:
+ max_unavailable: 20%
+ max_surge: 3
+ disruption_budget:
+ api:
+ min_available: 0
+ termination_grace_period:
+ api:
+ timeout: 60
resources:
enabled: true
api:
diff --git a/base-helm-configs/prometheus-mysql-exporter/values.yaml b/base-helm-configs/prometheus-mysql-exporter/values.yaml
index b6718430e..5d2205c69 100644
--- a/base-helm-configs/prometheus-mysql-exporter/values.yaml
+++ b/base-helm-configs/prometheus-mysql-exporter/values.yaml
@@ -137,36 +137,36 @@ config: {}
# logFormat: "logger:stderr"
collectors:
- # auto_increment.columns: false
- # binlog_size: false
+ auto_increment.columns: true
+ binlog_size: true
# engine_innodb_status: false
# engine_tokudb_status: false
# global_status: true
# global_variables: true
# info_schema.clientstats: false
- # info_schema.innodb_metrics: false
+ info_schema.innodb_metrics: true
# info_schema.innodb_tablespaces: false
# info_schema.innodb_cmp: false
# info_schema.innodb_cmpmem: false
- # info_schema.processlist: false
+ info_schema.processlist: true
# info_schema.processlist.min_time: 0
- # info_schema.query_response_time: false
+ info_schema.query_response_time: true
# info_schema.tables: true
# info_schema.tables.databases: '*'
- # info_schema.tablestats: false
+ info_schema.tablestats: true
# info_schema.schemastats: false
- # info_schema.userstats: false
+ info_schema.userstats: true
# perf_schema.eventsstatements: false
# perf_schema.eventsstatements.digest_text_limit: 120
# perf_schema.eventsstatements.limit: false
# perf_schema.eventsstatements.timelimit: 86400
- # perf_schema.eventswaits: false
- # perf_schema.file_events: false
+ perf_schema.eventswaits: true
+ perf_schema.file_events: true
# perf_schema.file_instances: false
- # perf_schema.indexiowaits: false
- # perf_schema.tableiowaits: false
- # perf_schema.tablelocks: false
- perf_schema.replication_group_member_stats: true
+ perf_schema.indexiowaits: true
+ perf_schema.tableiowaits: true
+ perf_schema.tablelocks: true
+ # perf_schema.replication_group_member_stats: true
# slave_status: true
# slave_hosts: false
# heartbeat: false
@@ -188,7 +188,7 @@ mysql:
# secret with full config my.cnf
existingConfigSecret:
name: "mariadb-monitor"
- key: "my.conf"
+ key: "my.cnf"
# secret only containing the password
existingPasswordSecret:
name: "mariadb-monitoring"
diff --git a/base-helm-configs/redis-operator/redis-operator-helm-overrides.yaml b/base-helm-configs/redis-operator/redis-operator-helm-overrides.yaml
new file mode 100644
index 000000000..7c465cd11
--- /dev/null
+++ b/base-helm-configs/redis-operator/redis-operator-helm-overrides.yaml
@@ -0,0 +1,226 @@
+# Redis Operator and Cluster Overrides
+# Defines custom settings to override defaults in base values.yaml
+
+# -- Cluster DNS name
+clusterName: ${CLUSTER_NAME}
+
+# Namespace configuration
+# Controls the namespace for the Redis operator and cluster
+namespace:
+ create: true
+ name: redis-systems
+
+# Redis Cluster Configuration Overrides
+redisCluster:
+ # -- Name of the Redis cluster (optional, defaults to empty)
+ name: "redis-cluster"
+ # -- Number of shards in the cluster (implied by leader/follower replicas)
+ clusterSize: 3
+ # -- Redis version to use
+ clusterVersion: v7
+ # -- Enable persistence for the cluster
+ persistenceEnabled: true
+ # -- Image configuration for Redis pods
+ image: quay.io/opstree/redis
+ tag: v7.0.15
+ imagePullPolicy: IfNotPresent
+ # -- Secrets for image pull (optional)
+ imagePullSecrets: []
+ # - name: Secret with Registry credentials
+ # -- Redis authentication secret (optional)
+ redisSecret:
+ secretName: ""
+ secretKey: ""
+ # -- Resource requests and limits (optional)
+ resources: {}
+ # requests:
+ # cpu: 100m
+ # memory: 128Mi
+ # limits:
+ # cpu: 100m
+ # memory: 128Mi
+ # -- Minimum seconds a pod must be ready before considered available
+ minReadySeconds: 0
+ # -- Some fields of statefulset are immutable, such as volumeClaimTemplates.
+ # When set to true, the operator will delete the statefulset and recreate it.
+ #Default is false.
+ recreateStatefulSetOnUpdateInvalid: false
+ # -- Enable pod anti-affinity between leader and follower pods by adding the
+ # appropriate label.
+ # Notice that this requires the operator to have its mutating webhook enabled,
+ # otherwise it will only add an annotation to the RedisCluster CR. Default is
+ # false.
+ enableMasterSlaveAntiAffinity: false
+ # -- Leader configuration
+ leader:
+ replicas: 3
+ serviceType: ClusterIP
+ affinity: {}
+ # nodeAffinity:
+ # requiredDuringSchedulingIgnoredDuringExecution:
+ # nodeSelectorTerms:
+ # - matchExpressions:
+ # - key: disktype
+ # operator: In
+ # values:
+ # - ssd
+ tolerations: []
+ # - key: "key"
+ # operator: "Equal"
+ # value: "value"
+ # effect: "NoSchedule"
+ nodeSelector: {}
+ # memory: medium
+ securityContext: {}
+ pdb:
+ enabled: false
+ maxUnavailable: 1
+ minAvailable: 1
+ livenessProbe: {}
+ # timeoutSeconds: 30
+ # periodSeconds: 45
+ # successThreshold: 1
+ # failureThreshold: 4
+ # initialDelaySeconds: 15
+ readinessProbe: {}
+ # timeoutSeconds: 30
+ # periodSeconds: 45
+ # successThreshold: 1
+ # failureThreshold: 4
+ # initialDelaySeconds: 15
+ # -- Follower configuration
+ follower:
+ replicas: 3
+ serviceType: ClusterIP
+ affinity: {}
+ # nodeAffinity:
+ # requiredDuringSchedulingIgnoredDuringExecution:
+ # nodeSelectorTerms:
+ # - matchExpressions:
+ # - key: disktype
+ # operator: In
+ # values:
+ # - ssd
+ tolerations: []
+ # - key: "key"
+ # operator: "Equal"
+ # value: "value"
+ # effect: "NoSchedule"
+ nodeSelector: {}
+ # memory: medium
+ securityContext: {}
+ pdb:
+ enabled: false
+ maxUnavailable: 1
+ minAvailable: 1
+ livenessProbe: {}
+ # timeoutSeconds: 30
+ # periodSeconds: 45
+ # successThreshold: 1
+ # failureThreshold: 4
+ # initialDelaySeconds: 15
+ readinessProbe: {}
+ # timeoutSeconds: 30
+ # periodSeconds: 45
+ # successThreshold: 1
+ # failureThreshold: 4
+ # initialDelaySeconds: 15
+
+# -- Labels and Annotations
+labels: {}
+ # foo: bar
+ # test: echo
+
+# -- External Configuration
+externalConfig:
+ enabled: false
+ data: {}
+ # tcp-keepalive 400
+ # slowlog-max-len 158
+ # stream-node-max-bytes 2048
+
+# -- External Service Configuration
+externalService:
+ enabled: false
+ serviceType: {}
+ port: {}
+ annotations: {}
+ # foo: bar
+
+# -- Monitoring and Exporter
+serviceMonitor:
+ enabled: false
+ interval: {}
+ scrapeTimeout: {}
+ namespace: {}
+ extraLabels: {}
+ # foo: bar
+ # team: devops
+redisExporter:
+ enabled: false
+ image: {}
+ tag: {}
+ imagePullPolicy: {}
+ resources: {}
+ # requests:
+ # cpu: 100m
+ # memory: 128Mi
+ # limits:
+ # cpu: 100m
+ # memory: 128Mi
+ env: []
+ # - name: VAR_NAME
+ # value: "value1"
+ securityContext: {}
+
+# -- Sidecars and Init Containers
+sidecars: {}
+initContainer:
+ enabled: false
+ image: {}
+ imagePullPolicy: {}
+ resources: {}
+ # requests:
+ # memory: "64Mi"
+ # cpu: "250m"
+ # limits:
+ # memory: "128Mi"
+ # cpu: "500m"
+ env: []
+ command: []
+ args: []
+
+# -- Priority and Security
+priorityClassName: ""
+podSecurityContext: {}
+TLS:
+ ca: {}
+ cert: {}
+ key: {}
+ secret:
+ secretName: ""
+acl:
+ secret:
+ secretName: ""
+env: []
+ # - name: VAR_NAME
+ # value: "value1"
+serviceAccountName: ""
+
+# -- Storage Specification
+storageSpec:
+ volumeClaimTemplate:
+ spec:
+ # storageClassName: standard
+ accessModes: ["ReadWriteOnce"]
+ resources:
+ requests:
+ storage: 1Gi
+ nodeConfVolume: true
+ nodeConfVolumeClaimTemplate:
+ spec:
+ accessModes: ["ReadWriteOnce"]
+ resources:
+ requests:
+ storage: 1Gi
+ # selector: {}
diff --git a/base-kustomize/barbican/base/barbican-rabbitmq-queue.yaml b/base-kustomize/barbican/base/barbican-rabbitmq-queue.yaml
index dcbe1893d..9dd6f2505 100644
--- a/base-kustomize/barbican/base/barbican-rabbitmq-queue.yaml
+++ b/base-kustomize/barbican/base/barbican-rabbitmq-queue.yaml
@@ -4,14 +4,16 @@ kind: User
metadata:
name: barbican
namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
annotations:
helm.sh/resource-policy: keep
meta.helm.sh/release-name: "barbican"
meta.helm.sh/release-namespace: "openstack"
spec:
tags:
- - management # available tags are 'management', 'policymaker', 'monitoring' and 'administrator'
- - policymaker
+ - management # available tags are 'management', 'policymaker', 'monitoring' and 'administrator'
+ - policymaker
rabbitmqClusterReference:
name: rabbitmq # rabbitmqCluster must exist in the same namespace as this resource
namespace: openstack
diff --git a/base-kustomize/cinder/netapp/kustomization.yaml b/base-kustomize/cinder/netapp/kustomization.yaml
index 91f2e9c4d..eb6cddc10 100644
--- a/base-kustomize/cinder/netapp/kustomization.yaml
+++ b/base-kustomize/cinder/netapp/kustomization.yaml
@@ -1,10 +1,10 @@
images:
- name: image-kubernetes-entrypoint-init
- newName: quay.io/airshipit/kubernetes-entrypoint
- newTag: v1.0.0
+ newName: ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint
+ newTag: latest
- name: image-heat-conf-init
- newName: docker.io/openstackhelm/heat
- newTag: 2024.1-ubuntu_jammy
+ newName: ghcr.io/rackerlabs/genestack-images/heat
+ newTag: 2024.1-latest
- name: image-cinder-volume-netapp-init
newName: ghcr.io/rackerlabs/genestack/cinder-volume-rxt
newTag: 2024.1-ubuntu_jammy
diff --git a/base-kustomize/envoyproxy-gateway/base/envoy-service-monitor.yaml b/base-kustomize/envoyproxy-gateway/base/envoy-service-monitor.yaml
new file mode 100644
index 000000000..a2e67f338
--- /dev/null
+++ b/base-kustomize/envoyproxy-gateway/base/envoy-service-monitor.yaml
@@ -0,0 +1,15 @@
+apiVersion: monitoring.coreos.com/v1
+kind: ServiceMonitor
+metadata:
+ name: envoy-gateway-monitor
+ namespace: prometheus
+spec:
+ endpoints:
+ - interval: 15s
+ port: metrics
+ namespaceSelector:
+ matchNames:
+ - envoyproxy-gateway-system
+ selector:
+ matchLabels:
+ app.kubernetes.io/instance: envoyproxy-gateway
diff --git a/base-kustomize/envoyproxy-gateway/base/kustomization.yaml b/base-kustomize/envoyproxy-gateway/base/kustomization.yaml
index 9befd997c..aa708aa44 100644
--- a/base-kustomize/envoyproxy-gateway/base/kustomization.yaml
+++ b/base-kustomize/envoyproxy-gateway/base/kustomization.yaml
@@ -7,3 +7,4 @@ resources:
- envoy-gatewayclass.yaml
- envoy-gateway.yaml
- envoy-endpoint-policies.yaml
+ - envoy-service-monitor.yaml
diff --git a/base-kustomize/glance/base/glance-rabbitmq-queue.yaml b/base-kustomize/glance/base/glance-rabbitmq-queue.yaml
index f3066cf28..2c48dc15d 100644
--- a/base-kustomize/glance/base/glance-rabbitmq-queue.yaml
+++ b/base-kustomize/glance/base/glance-rabbitmq-queue.yaml
@@ -4,15 +4,16 @@ kind: User
metadata:
name: glance
namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
annotations:
helm.sh/resource-policy: keep
- app.kubernetes.io/managed-by: "Helm"
meta.helm.sh/release-name: "glance"
meta.helm.sh/release-namespace: "openstack"
spec:
tags:
- - management # available tags are 'management', 'policymaker', 'monitoring' and 'administrator'
- - policymaker
+ - management # available tags are 'management', 'policymaker', 'monitoring' and 'administrator'
+ - policymaker
rabbitmqClusterReference:
name: rabbitmq # rabbitmqCluster must exist in the same namespace as this resource
namespace: openstack
diff --git a/base-kustomize/heat/base/heat-rabbitmq-queue.yaml b/base-kustomize/heat/base/heat-rabbitmq-queue.yaml
index d9b6e0f87..1daaa7a87 100644
--- a/base-kustomize/heat/base/heat-rabbitmq-queue.yaml
+++ b/base-kustomize/heat/base/heat-rabbitmq-queue.yaml
@@ -4,10 +4,16 @@ kind: User
metadata:
name: heat
namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
+ annotations:
+ helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "heat"
+ meta.helm.sh/release-namespace: "openstack"
spec:
tags:
- - management # available tags are 'management', 'policymaker', 'monitoring' and 'administrator'
- - policymaker
+ - management # available tags are 'management', 'policymaker', 'monitoring' and 'administrator'
+ - policymaker
rabbitmqClusterReference:
name: rabbitmq # rabbitmqCluster must exist in the same namespace as this resource
namespace: openstack
@@ -19,6 +25,12 @@ kind: Vhost
metadata:
name: heat-vhost
namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
+ annotations:
+ helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "heat"
+ meta.helm.sh/release-namespace: "openstack"
spec:
name: "heat" # vhost name; required and cannot be updated
defaultQueueType: quorum # default queue type for this vhost; require RabbitMQ version 3.11.12 or above
@@ -38,6 +50,12 @@ kind: Queue
metadata:
name: heat-queue
namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
+ annotations:
+ helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "heat"
+ meta.helm.sh/release-namespace: "openstack"
spec:
name: heat-qq # name of the queue
vhost: "heat" # default to '/' if not provided
@@ -53,6 +71,12 @@ kind: Permission
metadata:
name: heat-permission
namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
+ annotations:
+ helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "heat"
+ meta.helm.sh/release-namespace: "openstack"
spec:
vhost: "heat" # name of a vhost
userReference:
diff --git a/base-kustomize/heat/base/kustomization.yaml b/base-kustomize/heat/base/kustomization.yaml
index 8da8bc0bf..c686f86e4 100644
--- a/base-kustomize/heat/base/kustomization.yaml
+++ b/base-kustomize/heat/base/kustomization.yaml
@@ -37,7 +37,7 @@ patches:
failureThreshold: 3
httpGet:
path: /
- port: 8004
+ port: 8000
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 60
diff --git a/base-kustomize/ironic/aoi/kustomization.yaml b/base-kustomize/ironic/aio/kustomization.yaml
similarity index 100%
rename from base-kustomize/ironic/aoi/kustomization.yaml
rename to base-kustomize/ironic/aio/kustomization.yaml
diff --git a/base-kustomize/ironic/base/hpa-ironic-api.yaml b/base-kustomize/ironic/base/hpa-ironic-api.yaml
index dfe154f48..f3b498042 100644
--- a/base-kustomize/ironic/base/hpa-ironic-api.yaml
+++ b/base-kustomize/ironic/base/hpa-ironic-api.yaml
@@ -4,7 +4,7 @@ kind: HorizontalPodAutoscaler
metadata:
name: ironic-api
namespace: openstack
- spec:
+spec:
maxReplicas: 9
minReplicas: 2
metrics:
diff --git a/base-kustomize/ironic/base/hpa-iconic-conductor.yaml b/base-kustomize/ironic/base/hpa-ironic-conductor.yaml
similarity index 100%
rename from base-kustomize/ironic/base/hpa-iconic-conductor.yaml
rename to base-kustomize/ironic/base/hpa-ironic-conductor.yaml
diff --git a/base-kustomize/ironic/base/ironic-mariadb-database.yaml b/base-kustomize/ironic/base/ironic-mariadb-database.yaml
index 332004146..7bea3bae6 100644
--- a/base-kustomize/ironic/base/ironic-mariadb-database.yaml
+++ b/base-kustomize/ironic/base/ironic-mariadb-database.yaml
@@ -4,8 +4,12 @@ kind: Database
metadata:
name: ironic
namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
annotations:
helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "ironic"
+ meta.helm.sh/release-namespace: "openstack"
spec:
# If you want the database to be created with a different name than the resource name
# name: data-custom
@@ -20,8 +24,12 @@ kind: User
metadata:
name: ironic
namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
annotations:
helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "ironic"
+ meta.helm.sh/release-namespace: "openstack"
spec:
# If you want the user to be created with a different name than the resource name
# name: user-custom
@@ -40,8 +48,12 @@ kind: Grant
metadata:
name: ironic-grant
namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
annotations:
helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "ironic"
+ meta.helm.sh/release-namespace: "openstack"
spec:
mariaDbRef:
name: mariadb-cluster
diff --git a/base-kustomize/ironic/base/ironic-rabbitmq-queue.yaml b/base-kustomize/ironic/base/ironic-rabbitmq-queue.yaml
index 2846e95c6..89d710459 100644
--- a/base-kustomize/ironic/base/ironic-rabbitmq-queue.yaml
+++ b/base-kustomize/ironic/base/ironic-rabbitmq-queue.yaml
@@ -4,8 +4,12 @@ kind: User
metadata:
name: ironic
namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
annotations:
helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "ironic"
+ meta.helm.sh/release-namespace: "openstack"
spec:
tags:
- management # available tags are 'management', 'policymaker', 'monitoring' and 'administrator'
@@ -21,8 +25,12 @@ kind: Vhost
metadata:
name: ironic-vhost
namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
annotations:
helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "ironic"
+ meta.helm.sh/release-namespace: "openstack"
spec:
name: "ironic" # vhost name; required and cannot be updated
defaultQueueType: quorum # default queue type for this vhost; require RabbitMQ version 3.11.12 or above
@@ -42,8 +50,12 @@ kind: Queue
metadata:
name: ironic-queue
namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
annotations:
helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "ironic"
+ meta.helm.sh/release-namespace: "openstack"
spec:
name: ironic-qq # name of the queue
vhost: "ironic" # default to '/' if not provided
@@ -59,8 +71,12 @@ kind: Permission
metadata:
name: ironic-permission
namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
annotations:
helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "ironic"
+ meta.helm.sh/release-namespace: "openstack"
spec:
vhost: "ironic" # name of a vhost
userReference:
diff --git a/base-kustomize/keystone/base/keystone-rabbitmq-queue.yaml b/base-kustomize/keystone/base/keystone-rabbitmq-queue.yaml
index 9d129a725..50a350e17 100644
--- a/base-kustomize/keystone/base/keystone-rabbitmq-queue.yaml
+++ b/base-kustomize/keystone/base/keystone-rabbitmq-queue.yaml
@@ -2,40 +2,41 @@
apiVersion: rabbitmq.com/v1beta1
kind: User
metadata:
- name: keystone
- namespace: openstack
- annotations:
- helm.sh/resource-policy: keep
- app.kubernetes.io/managed-by: "Helm"
- meta.helm.sh/release-name: "keystone"
- meta.helm.sh/release-namespace: "openstack"
+ name: keystone
+ namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
+ annotations:
+ helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "keystone"
+ meta.helm.sh/release-namespace: "openstack"
spec:
- tags:
- - management
- - policymaker
- rabbitmqClusterReference:
- name: rabbitmq # rabbitmqCluster must exist in the same namespace as this resource
- namespace: openstack
- importCredentialsSecret:
- name: keystone-rabbitmq-password
+ tags:
+ - management
+ - policymaker
+ rabbitmqClusterReference:
+ name: rabbitmq # rabbitmqCluster must exist in the same namespace as this resource
+ namespace: openstack
+ importCredentialsSecret:
+ name: keystone-rabbitmq-password
---
apiVersion: rabbitmq.com/v1beta1
kind: Vhost
metadata:
- name: keystone-vhost
- namespace: openstack
- labels:
- app.kubernetes.io/managed-by: "Helm"
- annotations:
- helm.sh/resource-policy: keep
- meta.helm.sh/release-name: "keystone"
- meta.helm.sh/release-namespace: "openstack"
+ name: keystone-vhost
+ namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
+ annotations:
+ helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "keystone"
+ meta.helm.sh/release-namespace: "openstack"
spec:
- name: "keystone" # vhost name; required and cannot be updated
- defaultQueueType: quorum # default queue type for this vhost; require RabbitMQ version 3.11.12 or above
- rabbitmqClusterReference:
- name: rabbitmq # rabbitmqCluster must exist in the same namespace as this resource
- namespace: openstack
+ name: "keystone" # vhost name; required and cannot be updated
+ defaultQueueType: quorum # default queue type for this vhost; require RabbitMQ version 3.11.12 or above
+ rabbitmqClusterReference:
+ name: rabbitmq # rabbitmqCluster must exist in the same namespace as this resource
+ namespace: openstack
# status:
# conditions:
# - lastTransitionTime: ""
@@ -47,50 +48,50 @@ spec:
apiVersion: rabbitmq.com/v1beta1
kind: Queue
metadata:
- name: keystone-queue
- namespace: openstack
- labels:
- app.kubernetes.io/managed-by: "Helm"
- annotations:
- helm.sh/resource-policy: keep
- meta.helm.sh/release-name: "keystone"
- meta.helm.sh/release-namespace: "openstack"
+ name: keystone-queue
+ namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
+ annotations:
+ helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "keystone"
+ meta.helm.sh/release-namespace: "openstack"
spec:
- name: keystone-qq # name of the queue
- vhost: "keystone" # default to '/' if not provided
- type: quorum # without providing a queue type, rabbitmq creates a classic queue
- autoDelete: false
- durable: true # setting 'durable' to false means this queue won't survive a server restart
- rabbitmqClusterReference:
- name: rabbitmq # rabbitmqCluster must exist in the same namespace as this resource
- namespace: openstack
+ name: keystone-qq # name of the queue
+ vhost: "keystone" # default to '/' if not provided
+ type: quorum # without providing a queue type, rabbitmq creates a classic queue
+ autoDelete: false
+ durable: true # setting 'durable' to false means this queue won't survive a server restart
+ rabbitmqClusterReference:
+ name: rabbitmq # rabbitmqCluster must exist in the same namespace as this resource
+ namespace: openstack
---
apiVersion: rabbitmq.com/v1beta1
kind: Permission
metadata:
- name: keystone-permission
- namespace: openstack
- labels:
- app.kubernetes.io/managed-by: "Helm"
- annotations:
- helm.sh/resource-policy: keep
- meta.helm.sh/release-name: "keystone"
- meta.helm.sh/release-namespace: "openstack"
+ name: keystone-permission
+ namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
+ annotations:
+ helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "keystone"
+ meta.helm.sh/release-namespace: "openstack"
spec:
- vhost: "keystone" # name of a vhost
- userReference:
- name: "keystone" # name of a user.rabbitmq.com in the same namespace; must specify either spec.userReference or spec.user
- permissions:
- write: ".*"
- configure: ".*"
- read: ".*"
- rabbitmqClusterReference:
- name: rabbitmq # rabbitmqCluster must exist in the same namespace as this resource
- namespace: openstack
+ vhost: "keystone" # name of a vhost
+ userReference:
+ name: "keystone" # name of a user.rabbitmq.com in the same namespace; must specify either spec.userReference or spec.user
+ permissions:
+ write: ".*"
+ configure: ".*"
+ read: ".*"
+ rabbitmqClusterReference:
+ name: rabbitmq # rabbitmqCluster must exist in the same namespace as this resource
+ namespace: openstack
# status:
# conditions:
# - lastTransitionTime: ""
# status: "True" # true, false, or unknown
# type: Ready
# Reason: "SuccessfulCreateOrUpdate" # status false result in reason FailedCreateOrUpdate
-# Message: "" # set when status is false
\ No newline at end of file
+# Message: "" # set when status is false
diff --git a/base-kustomize/keystone/federation/kustomization.yaml b/base-kustomize/keystone/federation/kustomization.yaml
index 34a394d6f..630078f64 100644
--- a/base-kustomize/keystone/federation/kustomization.yaml
+++ b/base-kustomize/keystone/federation/kustomization.yaml
@@ -6,8 +6,8 @@ resources:
images:
- name: keystone-shib
- newName: ghcr.io/rackerlabs/keystone-rxt/shibd
- newTag: "1747958286"
+ newName: ghcr.io/rackerlabs/genestack-images/shibd
+ newTag: "latest"
patches:
- target:
diff --git a/base-kustomize/masakari/base/masakari-rabbitmq-queue.yaml b/base-kustomize/masakari/base/masakari-rabbitmq-queue.yaml
index a770034ef..3a5bdbfd0 100644
--- a/base-kustomize/masakari/base/masakari-rabbitmq-queue.yaml
+++ b/base-kustomize/masakari/base/masakari-rabbitmq-queue.yaml
@@ -4,8 +4,12 @@ kind: User
metadata:
name: masakari
namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
annotations:
helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "masakari"
+ meta.helm.sh/release-namespace: "openstack"
spec:
tags:
- management # available tags are 'management', 'policymaker', 'monitoring' and 'administrator'
@@ -21,8 +25,12 @@ kind: Vhost
metadata:
name: masakari-vhost
namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
annotations:
helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "masakari"
+ meta.helm.sh/release-namespace: "openstack"
spec:
name: "masakari" # vhost name; required and cannot be updated
defaultQueueType: quorum # default queue type for this vhost; require RabbitMQ version 3.11.12 or above
@@ -35,8 +43,12 @@ kind: Queue
metadata:
name: masakari-queue
namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
annotations:
helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "masakari"
+ meta.helm.sh/release-namespace: "openstack"
spec:
name: masakari-qq # name of the queue
vhost: "masakari" # default to '/' if not provided
@@ -52,8 +64,12 @@ kind: Permission
metadata:
name: masakari-permission
namespace: openstack
+ labels:
+ app.kubernetes.io/managed-by: "Helm"
annotations:
helm.sh/resource-policy: keep
+ meta.helm.sh/release-name: "masakari"
+ meta.helm.sh/release-namespace: "openstack"
spec:
vhost: "masakari" # name of a vhost
userReference:
diff --git a/base-kustomize/neutron/base/hpa-neutron-rpc-server.yaml b/base-kustomize/neutron/base/hpa-neutron-rpc-server.yaml
deleted file mode 100644
index 0ac8c8d1e..000000000
--- a/base-kustomize/neutron/base/hpa-neutron-rpc-server.yaml
+++ /dev/null
@@ -1,26 +0,0 @@
----
-apiVersion: autoscaling/v2
-kind: HorizontalPodAutoscaler
-metadata:
- name: neutron-rpc-server
- namespace: openstack
-spec:
- maxReplicas: 9
- minReplicas: 2
- metrics:
- - resource:
- name: cpu
- target:
- averageUtilization: 80
- type: Utilization
- type: Resource
- - resource:
- name: memory
- target:
- averageUtilization: 80
- type: Utilization
- type: Resource
- scaleTargetRef:
- apiVersion: apps/v1
- kind: Deployment
- name: neutron-rpc-server
diff --git a/base-kustomize/neutron/base/kustomization.yaml b/base-kustomize/neutron/base/kustomization.yaml
index 677186a8f..98617a65a 100644
--- a/base-kustomize/neutron/base/kustomization.yaml
+++ b/base-kustomize/neutron/base/kustomization.yaml
@@ -5,7 +5,6 @@ resources:
- neutron-rabbitmq-queue.yaml
- all.yaml
- hpa-neutron-server.yaml
- - hpa-neutron-rpc-server.yaml
- policies.yaml
patches:
diff --git a/base-kustomize/nova/base/kustomization.yaml b/base-kustomize/nova/base/kustomization.yaml
index 570c66098..9766f8f2c 100644
--- a/base-kustomize/nova/base/kustomization.yaml
+++ b/base-kustomize/nova/base/kustomization.yaml
@@ -11,3 +11,4 @@ resources:
- hpa-nova-novncproxy.yaml
- hpa-nova-scheduler.yaml
- policies.yaml
+ - static-vendordata-configmap.yaml
diff --git a/base-kustomize/nova/base/static-vendordata-configmap.yaml b/base-kustomize/nova/base/static-vendordata-configmap.yaml
new file mode 100644
index 000000000..291f523ea
--- /dev/null
+++ b/base-kustomize/nova/base/static-vendordata-configmap.yaml
@@ -0,0 +1,7 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: static-vendor-data
+ namespace: openstack
+data:
+ vendor_data.json: '{}'
diff --git a/base-kustomize/octavia/base/kustomization.yaml b/base-kustomize/octavia/base/kustomization.yaml
index e6c15ac33..3377cd48b 100644
--- a/base-kustomize/octavia/base/kustomization.yaml
+++ b/base-kustomize/octavia/base/kustomization.yaml
@@ -4,11 +4,11 @@ sortOptions:
images:
- name: image-kubernetes-entrypoint-init
- newName: quay.io/airshipit/kubernetes-entrypoint
- newTag: v1.0.0
+ newName: ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint
+ newTag: latest
- name: image-octavia-ovn
- newName: quay.io/rackspace/rackerlabs-octavia-ovn
- newTag: 2024.1-ubuntu_jammy-1737651745
+ newName: ghcr.io/rackerlabs/genestack-images/octavia
+ newTag: 2024.1-latest
resources:
- octavia-mariadb-database.yaml
@@ -20,6 +20,24 @@ resources:
# To run the OVN driver, the octavia-api container must have an agent container within the same pod.
patches:
+ - target:
+ kind: Secret
+ name: octavia-etc
+ patch: |-
+ - op: add
+ path: /data/policy.yaml
+ value: b3NfbG9hZC1iYWxhbmNlcl9hcGk6Zmxhdm9yLXByb2ZpbGU6Z2V0X29uZTogcnVsZTpsb2FkLWJhbGFuY2VyOnJlYWQKb3NfbG9hZC1iYWxhbmNlcl9hcGk6Zmxhdm9yLXByb2ZpbGU6Z2V0X2FsbDogcnVsZTpsb2FkLWJhbGFuY2VyOnJlYWQ=
+ - target:
+ kind: Deployment
+ name: octavia-api
+ patch: |-
+ - op: add
+ path: /spec/template/spec/containers/0/volumeMounts/-
+ value:
+ name: octavia-etc
+ mountPath: /etc/octavia/policy.yaml
+ subPath: policy.yaml
+ readOnly: true
- target:
kind: Deployment
name: octavia-api
diff --git a/base-kustomize/ovn/base/ovn-setup.yaml b/base-kustomize/ovn/base/ovn-setup.yaml
index bbb539b9e..94cf706e2 100644
--- a/base-kustomize/ovn/base/ovn-setup.yaml
+++ b/base-kustomize/ovn/base/ovn-setup.yaml
@@ -140,7 +140,7 @@ spec:
emptyDir: {}
initContainers:
- name: init
- image: "quay.io/airshipit/kubernetes-entrypoint:latest-ubuntu_jammy"
+ image: "ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest"
imagePullPolicy: IfNotPresent
securityContext:
allowPrivilegeEscalation: true
@@ -213,7 +213,7 @@ spec:
- 'echo "$$SCRIPT" > /tmp/script && ash /tmp/script'
containers:
- name: ovn-setup-exec
- image: "docker.io/openstackhelm/ovn:ubuntu_jammy"
+ image: "ghcr.io/rackerlabs/genestack-images/ovs:v3.5.1-latest"
imagePullPolicy: IfNotPresent
command:
- bash
diff --git a/base-kustomize/skyline/base/deployment-apiserver.yaml b/base-kustomize/skyline/base/deployment-apiserver.yaml
index 8145908b5..a438485ca 100644
--- a/base-kustomize/skyline/base/deployment-apiserver.yaml
+++ b/base-kustomize/skyline/base/deployment-apiserver.yaml
@@ -64,7 +64,7 @@ spec:
defaultMode: 0555
initContainers:
- name: init
- image: "quay.io/airshipit/kubernetes-entrypoint:latest-ubuntu_jammy"
+ image: "ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest"
imagePullPolicy: IfNotPresent
securityContext:
allowPrivilegeEscalation: true
@@ -101,7 +101,7 @@ spec:
- kubernetes-entrypoint
volumeMounts: []
- name: skyline-apiserver-service-init
- image: "docker.io/openstackhelm/heat:2023.1-ubuntu_jammy"
+ image: "ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest"
imagePullPolicy: IfNotPresent
resources:
limits:
@@ -335,11 +335,11 @@ spec:
key: prometheus_endpoint
optional: true
- name: skyline-apiserver-db-migrate
- image: "quay.io/rackspace/rackerlabs-skyline-rxt:master-ubuntu_jammy-1748595671"
+ image: "ghcr.io/rackerlabs/genestack-images/skyline:2024.2-latest"
imagePullPolicy: IfNotPresent
resources:
requests:
- memory: "64Mi"
+ memory: "256Mi"
cpu: "100m"
limits:
memory: "4096Mi"
@@ -358,14 +358,14 @@ spec:
readOnly: true
containers:
- name: skyline-apiserver
- image: "quay.io/rackspace/rackerlabs-skyline-rxt:master-ubuntu_jammy-1748595671"
+ image: "ghcr.io/rackerlabs/genestack-images/skyline:2024.2-latest"
imagePullPolicy: IfNotPresent
resources:
- limits:
- memory: "1Gi"
requests:
- cpu: "0.25"
- memory: "64Mi"
+ memory: "256Mi"
+ cpu: "100m"
+ limits:
+ memory: "4096Mi"
command:
- bash
- -c
diff --git a/bin/create-secrets.sh b/bin/create-secrets.sh
index 01d2fbc30..eda025b04 100755
--- a/bin/create-secrets.sh
+++ b/bin/create-secrets.sh
@@ -2,7 +2,7 @@
# shellcheck disable=SC2086
usage() {
- echo "Usage: $0 [--region Genestack Prometheus Alerts This service requires information about you that your identity provider
+
+
LABELS = {{ $labels }}
| critical |
+| **TLS certificate expiring** | SSL certificate will expire soon on (instance {{ $labels.instance }}) | SSL certificate expires within 30 days.
VALUE = {{ $value }}
LABELS = {{ $labels }}
| warning |
+| **TLS certificate expiring** | SSL certificate will expire soon on (instance {{ $labels.instance }}) | SSL certificate expires within 15 days.
VALUE = {{ $value }}
LABELS = {{ $labels }}
| critical |
+
+
+---
+
+## Compute Resource Alerts
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **AbnormalInstanceFailures** | Instance build failure rate is abnormally high | This indicates a major problem building compute instances.
View logs and take action to resolve the build failures.
| critical |
+| **InstancesStuckInFailureState** | Instances stuck in failure state for a prolonged period | There are instances stuck in a building or error state for a prolonged period
that need to be cleaned up.
| warning |
+
+
+---
+
+## Image Resource Alerts
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **AbnormalImageFailures** | Image create failure rate is abnormally high | This indicates a major problem creating images.
View logs and take action to resolve the build failures.
| critical |
+| **ImagesStuckInFailureState** | Images stuck in failure state for a prolonged period | There are images stuck in a failure state for a prolonged period
that need to be cleaned up.
| warning |
+
+
+---
+
+## Linux MDM device and RAID alerts
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **NodeMdInfoFailedDeviceCritical** | NVME device on Linux software RAID failure info | {{ $labels.name }}
Number MD Failed:{{ $labels.FailedDevices }}
LABELS: {{ $labels }} | critical |
+| **NodeMdInfoStateCritical** | Linux software MD RAID State is NOT active\|clean | {{ $labels.name }}
State:{{ $labels.State }}
LABELS: {{ $labels }} | critical |
+| **NodeMdInfoSuperblockPersistenceCritical** | Linux software MD Superblock is NOT persistent | {{ $labels.name }}
Persistence:{{ $labels.Persistence }}
LABELS: {{ $labels }} | critical |
+| **NodeMdStateCritical** | Linux MDM RAID State is {{ $labels.state }} | {{ $labels.name }}
MD RAID status:{{ $value }}
MD RAID device:{{ $labels.device }}
LABELS: {{ $labels }} | critical |
+
+
+---
+
+## MariaDB backup alerts
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **mariadbBackupCritical** | Second successive MariaDB backup not successful within 1 hour of scheduled run | Second successive MariaDB backup not successful within 1 hour of scheduled run.
| critical |
+| **mariadbBackupWarning** | Last MariaDB backup not successful within 1 hour of scheduled run | Last MariaDB backup not successful within 1 hour of scheduled run.
| warning |
+
+
+---
+
+## Multipath path checker alerts
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **NodeDmpathInfoMultipathCritical** | Multipathd paths are NOT active\|ready and paths are likely orphaned | {{ $labels.name }}
labels: {{ $labels }} | critical |
+
+
+---
+
+## Mysql Alerts
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **MysqlDown** | MariaDB down (instance {{ $labels.instance }}) | MariaDB instance is down on {{ $labels.instance }}
VALUE = {{ $value }}
LABELS = {{ $labels }}
| critical |
+| **MysqlRestarted** | MySQL restarted (instance {{ $labels.instance }}) | MySQL has just been restarted, less than one minute ago on {{ $labels.instance }}.
VALUE = {{ $value }}
LABELS = {{ $labels }}
| info |
+| **MysqlSlowQueries** | MySQL slow queries (instance {{ $labels.instance }}) | MySQL server has some new slow queries.
VALUE = {{ $value }}
LABELS = {{ $labels }}
| warning |
+| **MysqlTooManyConnections(>80%)** | Database too many connections (> 90%) (instance {{ $labels.instance }}) | More than 90% of MySQL connections are in use on {{ $labels.instance }}
VALUE = {{ $value }}
LABELS = {{ $labels }}
| warning |
+
+
+---
+
+## OVN backup alerts
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **ovnBackupDiskUsageCritical** | OVN backup volume >= 90% disk usage | OVN backup volume >= 90% disk usage.
| critical |
+| **ovnBackupDiskUsageWarning** | OVN backup volume >= 80% disk usage | OVN backup volume >= 80% disk usage.
| warning |
+| **ovnBackupUploadCritical** | Second successive OVN backup not uploaded within 1 hour of scheduled run | Second successive OVN backup not uploaded within 1 hour of scheduled run.
| critical |
+| **ovnBackupUploadWarning** | Last OVN backup not uploaded within 1 hour of scheduled run | Last OVN backup not uploaded within 1 hour of scheduled run.
| warning |
+
+
+---
+
+## Octavia Resource Alerts
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **LoadbalancersInError** | Loadbalancer stuck in error state for a prolonged period | This may indicate a potential problem with failover and/or health manager services.
This could also indicate other problems building load balancers in general.
| critical |
+
+
+---
+
+## Volume Alerts
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **KubernetesVolumeOutOfDiskSpace** | Kubernetes Volume out of disk space (instance {{ $labels.instance }}) | Volume is almost full (< 20% left).
VALUE = {{ $value }}
LABELS = {{ $labels }}
| warning |
+
+
+---
+
+## alertmanager.rules
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **AlertmanagerClusterCrashlooping** | Half or more of the Alertmanager instances within the same cluster are crashlooping. | {{ $value \| humanizePercentage }} of Alertmanager instances within the {{$labels.job}} cluster have restarted at least 5 times in the last 10m. | critical |
+| **AlertmanagerClusterDown** | Half or more of the Alertmanager instances within the same cluster are down. | {{ $value \| humanizePercentage }} of Alertmanager instances within the {{$labels.job}} cluster have been up for less than half of the last 5m. | critical |
+| **AlertmanagerClusterFailedToSendAlerts** | All Alertmanager instances in a cluster failed to send notifications to a critical integration. | The minimum notification failure rate to {{ $labels.integration }} sent from any instance in the {{$labels.job}} cluster is {{ $value \| humanizePercentage }}. | critical |
+| **AlertmanagerClusterFailedToSendAlerts** | All Alertmanager instances in a cluster failed to send notifications to a non-critical integration. | The minimum notification failure rate to {{ $labels.integration }} sent from any instance in the {{$labels.job}} cluster is {{ $value \| humanizePercentage }}. | warning |
+| **AlertmanagerConfigInconsistent** | Alertmanager instances within the same cluster have different configurations. | Alertmanager instances within the {{$labels.job}} cluster have different configurations. | critical |
+| **AlertmanagerFailedReload** | Reloading an Alertmanager configuration has failed. | Configuration has failed to load for {{ $labels.namespace }}/{{ $labels.pod}}. | critical |
+| **AlertmanagerFailedToSendAlerts** | An Alertmanager instance failed to send notifications. | Alertmanager {{ $labels.namespace }}/{{ $labels.pod}} failed to send {{ $value \| humanizePercentage }} of notifications to {{ $labels.integration }}. | warning |
+| **AlertmanagerMembersInconsistent** | A member of an Alertmanager cluster has not found all other cluster members. | Alertmanager {{ $labels.namespace }}/{{ $labels.pod}} has only found {{ $value }} members of the {{$labels.job}} cluster. | critical |
+
+
+---
+
+## config-reloaders
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **ConfigReloaderSidecarErrors** | config-reloader sidecar has not had a successful reload for 10m | Errors encountered while the {{$labels.pod}} config-reloader sidecar attempts to sync config in {{$labels.namespace}} namespace.
As a result, configuration for service running in {{$labels.pod}} may be stale and cannot be updated anymore. | warning |
+
+
+---
+
+## etcd
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **etcdDatabaseHighFragmentationRatio** | etcd database size in use is less than 50% of the actual allocated storage. | etcd cluster "{{ $labels.job }}": database size in use on instance {{ $labels.instance }} is {{ $value \| humanizePercentage }} of the actual allocated disk space, please run defragmentation (e.g. etcdctl defrag) to retrieve the unused fragmented disk space. | warning |
+| **etcdDatabaseQuotaLowSpace** | etcd cluster database is running full. | etcd cluster "{{ $labels.job }}": database size exceeds the defined quota on etcd instance {{ $labels.instance }}, please defrag or increase the quota as the writes to etcd will be disabled when it is full. | critical |
+| **etcdExcessiveDatabaseGrowth** | etcd cluster database growing very fast. | etcd cluster "{{ $labels.job }}": Predicting running out of disk space in the next four hours, based on write observations within the past four hours on etcd instance {{ $labels.instance }}, please check as it might be disruptive. | warning |
+| **etcdGRPCRequestsSlow** | etcd grpc requests are slow | etcd cluster "{{ $labels.job }}": 99th percentile of gRPC requests is {{ $value }}s on etcd instance {{ $labels.instance }} for {{ $labels.grpc_method }} method. | critical |
+| **etcdHighCommitDurations** | etcd cluster 99th percentile commit durations are too high. | etcd cluster "{{ $labels.job }}": 99th percentile commit durations {{ $value }}s on etcd instance {{ $labels.instance }}. | warning |
+| **etcdHighFsyncDurations** | etcd cluster 99th percentile fsync durations are too high. | etcd cluster "{{ $labels.job }}": 99th percentile fsync durations are {{ $value }}s on etcd instance {{ $labels.instance }}. | warning |
+| **etcdHighFsyncDurations** | etcd cluster 99th percentile fsync durations are too high. | etcd cluster "{{ $labels.job }}": 99th percentile fsync durations are {{ $value }}s on etcd instance {{ $labels.instance }}. | critical |
+| **etcdHighNumberOfFailedGRPCRequests** | etcd cluster has high number of failed grpc requests. | etcd cluster "{{ $labels.job }}": {{ $value }}% of requests for {{ $labels.grpc_method }} failed on etcd instance {{ $labels.instance }}. | warning |
+| **etcdHighNumberOfFailedGRPCRequests** | etcd cluster has high number of failed grpc requests. | etcd cluster "{{ $labels.job }}": {{ $value }}% of requests for {{ $labels.grpc_method }} failed on etcd instance {{ $labels.instance }}. | critical |
+| **etcdHighNumberOfFailedProposals** | etcd cluster has high number of proposal failures. | etcd cluster "{{ $labels.job }}": {{ $value }} proposal failures within the last 30 minutes on etcd instance {{ $labels.instance }}. | warning |
+| **etcdHighNumberOfLeaderChanges** | etcd cluster has high number of leader changes. | etcd cluster "{{ $labels.job }}": {{ $value }} leader changes within the last 15 minutes. Frequent elections may be a sign of insufficient resources, high network latency, or disruptions by other components and should be investigated. | warning |
+| **etcdInsufficientMembers** | etcd cluster has insufficient number of members. | etcd cluster "{{ $labels.job }}": insufficient members ({{ $value }}). | critical |
+| **etcdMemberCommunicationSlow** | etcd cluster member communication is slow. | etcd cluster "{{ $labels.job }}": member communication with {{ $labels.To }} is taking {{ $value }}s on etcd instance {{ $labels.instance }}. | warning |
+| **etcdMembersDown** | etcd cluster members are down. | etcd cluster "{{ $labels.job }}": members are down ({{ $value }}). | warning |
+| **etcdNoLeader** | etcd cluster has no leader. | etcd cluster "{{ $labels.job }}": member {{ $labels.instance }} has no leader. | critical |
+
+
+---
+
+## fluentbit serviceMonitor alert
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **MissingFluentbitServiceMonitor** | ServiceMonitor 'fluentbit-fluent-bit' is either down or missing. | Check if the Fluentbit ServiceMonitor is properly configured and deployed.
| critical |
+
+
+---
+
+## general.rules
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **InfoInhibitor** | Info-level alert inhibition. | This is an alert that is used to inhibit info alerts.
By themselves, the info-level alerts are sometimes very noisy, but they are relevant when combined with
other alerts.
This alert fires whenever there's a severity="info" alert, and stops firing when another alert with a
severity of 'warning' or 'critical' starts firing on the same namespace.
This alert should be routed to a null receiver and configured to inhibit alerts with severity="info".
| none |
+| **TargetDown** | One or more targets are unreachable. | {{ printf "%.4g" $value }}% of the {{ $labels.job }}/{{ $labels.service }} targets in {{ $labels.namespace }} namespace are down. | warning |
+| **Watchdog** | An alert that should always be firing to certify that Alertmanager is working properly. | This is an alert meant to ensure that the entire alerting pipeline is functional.
This alert is always firing, therefore it should always be firing in Alertmanager
and always fire against a receiver. There are integrations with various notification
mechanisms that send a notification when this alert is not firing. For example the
"DeadMansSnitch" integration in PagerDuty.
| none |
+
+
+---
+
+## kube-apiserver-slos
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **KubeAPIErrorBudgetBurn** | The API server is burning too much error budget. | The API server is burning too much error budget on cluster {{ $labels.cluster }}. | critical |
+| **KubeAPIErrorBudgetBurn** | The API server is burning too much error budget. | The API server is burning too much error budget on cluster {{ $labels.cluster }}. | critical |
+| **KubeAPIErrorBudgetBurn** | The API server is burning too much error budget. | The API server is burning too much error budget on cluster {{ $labels.cluster }}. | warning |
+| **KubeAPIErrorBudgetBurn** | The API server is burning too much error budget. | The API server is burning too much error budget on cluster {{ $labels.cluster }}. | warning |
+
+
+---
+
+## kube-state-metrics
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **KubeStateMetricsListErrors** | kube-state-metrics is experiencing errors in list operations. | kube-state-metrics is experiencing errors at an elevated rate in list operations. This is likely causing it to not be able to expose metrics about Kubernetes objects correctly or at all. | critical |
+| **KubeStateMetricsShardingMismatch** | kube-state-metrics sharding is misconfigured. | kube-state-metrics pods are running with different --total-shards configuration, some Kubernetes objects may be exposed multiple times or not exposed at all. | critical |
+| **KubeStateMetricsShardsMissing** | kube-state-metrics shards are missing. | kube-state-metrics shards are missing, some Kubernetes objects are not being exposed. | critical |
+| **KubeStateMetricsWatchErrors** | kube-state-metrics is experiencing errors in watch operations. | kube-state-metrics is experiencing errors at an elevated rate in watch operations. This is likely causing it to not be able to expose metrics about Kubernetes objects correctly or at all. | critical |
+
+
+---
+
+## kubernetes-apps
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **KubeContainerWaiting** | Pod container waiting longer than 1 hour | pod/{{ $labels.pod }} in namespace {{ $labels.namespace }} on container {{ $labels.container}} has been in waiting state for longer than 1 hour. (reason: "{{ $labels.reason }}") on cluster {{ $labels.cluster }}. | warning |
+| **KubeDaemonSetMisScheduled** | DaemonSet pods are misscheduled. | {{ $value }} Pods of DaemonSet {{ $labels.namespace }}/{{ $labels.daemonset }} are running where they are not supposed to run on cluster {{ $labels.cluster }}. | warning |
+| **KubeDaemonSetNotScheduled** | DaemonSet pods are not scheduled. | {{ $value }} Pods of DaemonSet {{ $labels.namespace }}/{{ $labels.daemonset }} are not scheduled on cluster {{ $labels.cluster }}. | warning |
+| **KubeDaemonSetRolloutStuck** | DaemonSet rollout is stuck. | DaemonSet {{ $labels.namespace }}/{{ $labels.daemonset }} has not finished or progressed for at least 15m on cluster {{ $labels.cluster }}. | warning |
+| **KubeDeploymentGenerationMismatch** | Deployment generation mismatch due to possible roll-back | Deployment generation for {{ $labels.namespace }}/{{ $labels.deployment }} does not match, this indicates that the Deployment has failed but has not been rolled back on cluster {{ $labels.cluster }}. | warning |
+| **KubeDeploymentReplicasMismatch** | Deployment has not matched the expected number of replicas. | Deployment {{ $labels.namespace }}/{{ $labels.deployment }} has not matched the expected number of replicas for longer than 15 minutes on cluster {{ $labels.cluster }}. | warning |
+| **KubeDeploymentRolloutStuck** | Deployment rollout is not progressing. | Rollout of deployment {{ $labels.namespace }}/{{ $labels.deployment }} is not progressing for longer than 15 minutes on cluster {{ $labels.cluster }}. | warning |
+| **KubeHpaMaxedOut** | HPA is running at max replicas | HPA {{ $labels.namespace }}/{{ $labels.horizontalpodautoscaler }} has been running at max replicas for longer than 15 minutes on cluster {{ $labels.cluster }}. | warning |
+| **KubeHpaReplicasMismatch** | HPA has not matched desired number of replicas. | HPA {{ $labels.namespace }}/{{ $labels.horizontalpodautoscaler }} has not matched the desired number of replicas for longer than 15 minutes on cluster {{ $labels.cluster }}. | warning |
+| **KubeJobFailed** | Job failed to complete. | Job {{ $labels.namespace }}/{{ $labels.job_name }} failed to complete. Removing failed job after investigation should clear this alert on cluster {{ $labels.cluster }}. | warning |
+| **KubeJobNotCompleted** | Job did not complete in time | Job {{ $labels.namespace }}/{{ $labels.job_name }} is taking more than {{ "43200" \| humanizeDuration }} to complete on cluster {{ $labels.cluster }}. | warning |
+| **KubePodCrashLooping** | Pod is crash looping. | Pod {{ $labels.namespace }}/{{ $labels.pod }} ({{ $labels.container }}) is in waiting state (reason: "CrashLoopBackOff") on cluster {{ $labels.cluster }}. | warning |
+| **KubePodNotReady** | Pod has been in a non-ready state for more than 15 minutes. | Pod {{ $labels.namespace }}/{{ $labels.pod }} has been in a non-ready state for longer than 15 minutes on cluster {{ $labels.cluster }}. | warning |
+| **KubeStatefulSetGenerationMismatch** | StatefulSet generation mismatch due to possible roll-back | StatefulSet generation for {{ $labels.namespace }}/{{ $labels.statefulset }} does not match, this indicates that the StatefulSet has failed but has not been rolled back on cluster {{ $labels.cluster }}. | warning |
+| **KubeStatefulSetReplicasMismatch** | StatefulSet has not matched the expected number of replicas. | StatefulSet {{ $labels.namespace }}/{{ $labels.statefulset }} has not matched the expected number of replicas for longer than 15 minutes on cluster {{ $labels.cluster }}. | warning |
+| **KubeStatefulSetUpdateNotRolledOut** | StatefulSet update has not been rolled out. | StatefulSet {{ $labels.namespace }}/{{ $labels.statefulset }} update has not been rolled out on cluster {{ $labels.cluster }}. | warning |
+
+
+---
+
+## kubernetes-resources
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **CPUThrottlingHigh** | Processes experience elevated CPU throttling. | {{ $value \| humanizePercentage }} throttling of CPU in namespace {{ $labels.namespace }} for container {{ $labels.container }} in pod {{ $labels.pod }} on cluster {{ $labels.cluster }}. | info |
+| **KubeCPUOvercommit** | Cluster has overcommitted CPU resource requests. | Cluster {{ $labels.cluster }} has overcommitted CPU resource requests for Pods by {{ $value }} CPU shares and cannot tolerate node failure. | warning |
+| **KubeCPUQuotaOvercommit** | Cluster has overcommitted CPU resource requests. | Cluster {{ $labels.cluster }} has overcommitted CPU resource requests for Namespaces. | warning |
+| **KubeMemoryOvercommit** | Cluster has overcommitted memory resource requests. | Cluster {{ $labels.cluster }} has overcommitted memory resource requests for Pods by {{ $value \| humanize }} bytes and cannot tolerate node failure. | warning |
+| **KubeMemoryQuotaOvercommit** | Cluster has overcommitted memory resource requests. | Cluster {{ $labels.cluster }} has overcommitted memory resource requests for Namespaces. | warning |
+| **KubeQuotaAlmostFull** | Namespace quota is going to be full. | Namespace {{ $labels.namespace }} is using {{ $value \| humanizePercentage }} of its {{ $labels.resource }} quota on cluster {{ $labels.cluster }}. | info |
+| **KubeQuotaExceeded** | Namespace quota has exceeded the limits. | Namespace {{ $labels.namespace }} is using {{ $value \| humanizePercentage }} of its {{ $labels.resource }} quota on cluster {{ $labels.cluster }}. | warning |
+| **KubeQuotaFullyUsed** | Namespace quota is fully used. | Namespace {{ $labels.namespace }} is using {{ $value \| humanizePercentage }} of its {{ $labels.resource }} quota on cluster {{ $labels.cluster }}. | info |
+
+
+---
+
+## kubernetes-storage
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **KubePersistentVolumeErrors** | PersistentVolume is having issues with provisioning. | The persistent volume {{ $labels.persistentvolume }} {{ with $labels.cluster -}} on Cluster {{ . }} {{- end }} has status {{ $labels.phase }}. | critical |
+| **KubePersistentVolumeFillingUp** | PersistentVolume is filling up. | The PersistentVolume claimed by {{ $labels.persistentvolumeclaim }} in Namespace {{ $labels.namespace }} {{ with $labels.cluster -}} on Cluster {{ . }} {{- end }} is only {{ $value \| humanizePercentage }} free. | critical |
+| **KubePersistentVolumeFillingUp** | PersistentVolume is filling up. | Based on recent sampling, the PersistentVolume claimed by {{ $labels.persistentvolumeclaim }} in Namespace {{ $labels.namespace }} {{ with $labels.cluster -}} on Cluster {{ . }} {{- end }} is expected to fill up within four days. Currently {{ $value \| humanizePercentage }} is available. | warning |
+| **KubePersistentVolumeInodesFillingUp** | PersistentVolumeInodes are filling up. | The PersistentVolume claimed by {{ $labels.persistentvolumeclaim }} in Namespace {{ $labels.namespace }} {{ with $labels.cluster -}} on Cluster {{ . }} {{- end }} only has {{ $value \| humanizePercentage }} free inodes. | critical |
+| **KubePersistentVolumeInodesFillingUp** | PersistentVolumeInodes are filling up. | Based on recent sampling, the PersistentVolume claimed by {{ $labels.persistentvolumeclaim }} in Namespace {{ $labels.namespace }} {{ with $labels.cluster -}} on Cluster {{ . }} {{- end }} is expected to run out of inodes within four days. Currently {{ $value \| humanizePercentage }} of its inodes are free. | warning |
+
+
+---
+
+## kubernetes-system
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **KubeClientErrors** | Kubernetes API server client is experiencing errors. | Kubernetes API server client '{{ $labels.job }}/{{ $labels.instance }}' is experiencing {{ $value \| humanizePercentage }} errors on cluster {{ $labels.cluster }}. | warning |
+| **KubeVersionMismatch** | Different semantic versions of Kubernetes components running. | There are {{ $value }} different semantic versions of Kubernetes components running on cluster {{ $labels.cluster }}. | warning |
+
+
+---
+
+## kubernetes-system-apiserver
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **KubeAPIDown** | Target disappeared from Prometheus target discovery. | KubeAPI has disappeared from Prometheus target discovery. | critical |
+| **KubeAPITerminatedRequests** | The kubernetes apiserver has terminated {{ $value \| humanizePercentage }} of its incoming requests. | The kubernetes apiserver has terminated {{ $value \| humanizePercentage }} of its incoming requests on cluster {{ $labels.cluster }}. | warning |
+| **KubeAggregatedAPIDown** | Kubernetes aggregated API is down. | Kubernetes aggregated API {{ $labels.name }}/{{ $labels.namespace }} has been only {{ $value \| humanize }}% available over the last 10m on cluster {{ $labels.cluster }}. | warning |
+| **KubeAggregatedAPIErrors** | Kubernetes aggregated API has reported errors. | Kubernetes aggregated API {{ $labels.instance }}/{{ $labels.name }} has reported {{ $labels.reason }} errors on cluster {{ $labels.cluster }}. | warning |
+| **KubeClientCertificateExpiration** | Client certificate is about to expire. | A client certificate used to authenticate to kubernetes apiserver is expiring in less than 7.0 days on cluster {{ $labels.cluster }}. | warning |
+| **KubeClientCertificateExpiration** | Client certificate is about to expire. | A client certificate used to authenticate to kubernetes apiserver is expiring in less than 24.0 hours on cluster {{ $labels.cluster }}. | critical |
+
+
+---
+
+## kubernetes-system-controller-manager
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **KubeControllerManagerDown** | Target disappeared from Prometheus target discovery. | KubeControllerManager has disappeared from Prometheus target discovery. | critical |
+
+
+---
+
+## kubernetes-system-kube-proxy
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **KubeProxyDown** | Target disappeared from Prometheus target discovery. | KubeProxy has disappeared from Prometheus target discovery. | critical |
+
+
+---
+
+## kubernetes-system-kubelet
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **KubeNodeEviction** | Node is evicting pods. | Node {{ $labels.node }} on {{ $labels.cluster }} is evicting Pods due to {{ $labels.eviction_signal }}. Eviction occurs when eviction thresholds are crossed, typically caused by Pods exceeding RAM/ephemeral-storage limits. | info |
+| **KubeNodeNotReady** | Node is not ready. | {{ $labels.node }} has been unready for more than 15 minutes on cluster {{ $labels.cluster }}. | warning |
+| **KubeNodePressure** | Node has as active Condition. | {{ $labels.node }} on cluster {{ $labels.cluster }} has active Condition {{ $labels.condition }}. This is caused by resource usage exceeding eviction thresholds. | info |
+| **KubeNodeReadinessFlapping** | Node readiness status is flapping. | The readiness status of node {{ $labels.node }} has changed {{ $value }} times in the last 15 minutes on cluster {{ $labels.cluster }}. | warning |
+| **KubeNodeUnreachable** | Node is unreachable. | {{ $labels.node }} is unreachable and some workloads may be rescheduled on cluster {{ $labels.cluster }}. | warning |
+| **KubeletClientCertificateExpiration** | Kubelet client certificate is about to expire. | Client certificate for Kubelet on node {{ $labels.node }} expires in {{ $value \| humanizeDuration }} on cluster {{ $labels.cluster }}. | warning |
+| **KubeletClientCertificateExpiration** | Kubelet client certificate is about to expire. | Client certificate for Kubelet on node {{ $labels.node }} expires in {{ $value \| humanizeDuration }} on cluster {{ $labels.cluster }}. | critical |
+| **KubeletClientCertificateRenewalErrors** | Kubelet has failed to renew its client certificate. | Kubelet on node {{ $labels.node }} has failed to renew its client certificate ({{ $value \| humanize }} errors in the last 5 minutes) on cluster {{ $labels.cluster }}. | warning |
+| **KubeletDown** | Target disappeared from Prometheus target discovery. | Kubelet has disappeared from Prometheus target discovery. | critical |
+| **KubeletPlegDurationHigh** | Kubelet Pod Lifecycle Event Generator is taking too long to relist. | The Kubelet Pod Lifecycle Event Generator has a 99th percentile duration of {{ $value }} seconds on node {{ $labels.node }} on cluster {{ $labels.cluster }}. | warning |
+| **KubeletPodStartUpLatencyHigh** | Kubelet Pod startup latency is too high. | Kubelet Pod startup 99th percentile latency is {{ $value }} seconds on node {{ $labels.node }} on cluster {{ $labels.cluster }}. | warning |
+| **KubeletServerCertificateExpiration** | Kubelet server certificate is about to expire. | Server certificate for Kubelet on node {{ $labels.node }} expires in {{ $value \| humanizeDuration }} on cluster {{ $labels.cluster }}. | warning |
+| **KubeletServerCertificateExpiration** | Kubelet server certificate is about to expire. | Server certificate for Kubelet on node {{ $labels.node }} expires in {{ $value \| humanizeDuration }} on cluster {{ $labels.cluster }}. | critical |
+| **KubeletServerCertificateRenewalErrors** | Kubelet has failed to renew its server certificate. | Kubelet on node {{ $labels.node }} has failed to renew its server certificate ({{ $value \| humanize }} errors in the last 5 minutes) on cluster {{ $labels.cluster }}. | warning |
+| **KubeletTooManyPods** | Kubelet is running at capacity. | Kubelet '{{ $labels.node }}' is running at {{ $value \| humanizePercentage }} of its Pod capacity on cluster {{ $labels.cluster }}. | info |
+
+
+---
+
+## kubernetes-system-scheduler
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **KubeSchedulerDown** | Target disappeared from Prometheus target discovery. | KubeScheduler has disappeared from Prometheus target discovery. | critical |
+
+
+---
+
+## mariadb-alerts
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **MariaDBDown** | MariaDB not up and running, immediate attention is required. | MariaDB {{$labels.job}} on {{$labels.instance}} is not up. | critical |
+| **MariaDBReplicationErrors** | MariaDB is reporting replication errors from {{$labels.instance}}, immediate attention is required. | MariaDB {{$labels.job}} on {{$labels.instance}} is reporting replication errors. | critical |
+| **MysqlSlaveReplicationLag** | MySQL Slave replication lag (instance {{ $labels.instance }}) | MySQL replication lag on {{ $labels.instance }}
VALUE = {{ $value }}
LABELS = {{ $labels }} | critical |
+| **MysqlTooManyConnections(>80%)** | MySQL too many connections (> 80%) (instance {{ $labels.instance }}) | More than 80% of MySQL connections are in use on {{ $labels.instance }}
VALUE = {{ $value }}
LABELS = {{ $labels }} | warning |
+
+
+---
+
+## node-exporter
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **NodeBondingDegraded** | Bonding interface is degraded | Bonding interface {{ $labels.master }} on {{ $labels.instance }} is in degraded state due to one or more slave failures. | warning |
+| **NodeCPUHighUsage** | High CPU usage. | CPU usage at {{ $labels.instance }} has been above 90% for the last 15 minutes, is currently at {{ printf "%.2f" $value }}%.
| info |
+| **NodeClockNotSynchronising** | Clock not synchronising. | Clock at {{ $labels.instance }} is not synchronising. Ensure NTP is configured on this host. | warning |
+| **NodeClockSkewDetected** | Clock skew detected. | Clock at {{ $labels.instance }} is out of sync by more than 0.05s. Ensure NTP is configured correctly on this host. | warning |
+| **NodeDiskIOSaturation** | Disk IO queue is high. | Disk IO queue (aqu-sq) is high on {{ $labels.device }} at {{ $labels.instance }}, has been above 10 for the last 30 minutes, is currently at {{ printf "%.2f" $value }}.
This symptom might indicate disk saturation.
| warning |
+| **NodeFileDescriptorLimit** | Kernel is predicted to exhaust file descriptors limit soon. | File descriptors limit at {{ $labels.instance }} is currently at {{ printf "%.2f" $value }}%. | warning |
+| **NodeFileDescriptorLimit** | Kernel is predicted to exhaust file descriptors limit soon. | File descriptors limit at {{ $labels.instance }} is currently at {{ printf "%.2f" $value }}%. | critical |
+| **NodeFilesystemAlmostOutOfFiles** | Filesystem has less than 5% inodes left. | Filesystem on {{ $labels.device }}, mounted on {{ $labels.mountpoint }}, at {{ $labels.instance }} has only {{ printf "%.2f" $value }}% available inodes left. | warning |
+| **NodeFilesystemAlmostOutOfFiles** | Filesystem has less than 3% inodes left. | Filesystem on {{ $labels.device }}, mounted on {{ $labels.mountpoint }}, at {{ $labels.instance }} has only {{ printf "%.2f" $value }}% available inodes left. | critical |
+| **NodeFilesystemAlmostOutOfSpace** | Filesystem has less than 5% space left. | Filesystem on {{ $labels.device }}, mounted on {{ $labels.mountpoint }}, at {{ $labels.instance }} has only {{ printf "%.2f" $value }}% available space left. | warning |
+| **NodeFilesystemAlmostOutOfSpace** | Filesystem has less than 3% space left. | Filesystem on {{ $labels.device }}, mounted on {{ $labels.mountpoint }}, at {{ $labels.instance }} has only {{ printf "%.2f" $value }}% available space left. | critical |
+| **NodeFilesystemFilesFillingUp** | Filesystem is predicted to run out of inodes within the next 24 hours. | Filesystem on {{ $labels.device }}, mounted on {{ $labels.mountpoint }}, at {{ $labels.instance }} has only {{ printf "%.2f" $value }}% available inodes left and is filling up. | warning |
+| **NodeFilesystemFilesFillingUp** | Filesystem is predicted to run out of inodes within the next 4 hours. | Filesystem on {{ $labels.device }}, mounted on {{ $labels.mountpoint }}, at {{ $labels.instance }} has only {{ printf "%.2f" $value }}% available inodes left and is filling up fast. | critical |
+| **NodeFilesystemSpaceFillingUp** | Filesystem is predicted to run out of space within the next 24 hours. | Filesystem on {{ $labels.device }}, mounted on {{ $labels.mountpoint }}, at {{ $labels.instance }} has only {{ printf "%.2f" $value }}% available space left and is filling up. | warning |
+| **NodeFilesystemSpaceFillingUp** | Filesystem is predicted to run out of space within the next 4 hours. | Filesystem on {{ $labels.device }}, mounted on {{ $labels.mountpoint }}, at {{ $labels.instance }} has only {{ printf "%.2f" $value }}% available space left and is filling up fast. | critical |
+| **NodeHighNumberConntrackEntriesUsed** | Number of conntrack are getting close to the limit. | {{ $labels.instance }} {{ $value \| humanizePercentage }} of conntrack entries are used. | warning |
+| **NodeMemoryHighUtilization** | Host is running out of memory. | Memory is filling up at {{ $labels.instance }}, has been above 90% for the last 15 minutes, is currently at {{ printf "%.2f" $value }}%.
| warning |
+| **NodeMemoryMajorPagesFaults** | Memory major page faults are occurring at very high rate. | Memory major pages are occurring at very high rate at {{ $labels.instance }}, 500 major page faults per second for the last 15 minutes, is currently at {{ printf "%.2f" $value }}.
Please check that there is enough memory available at this instance.
| warning |
+| **NodeNetworkReceiveErrs** | Network interface is reporting many receive errors. | {{ $labels.instance }} interface {{ $labels.device }} has encountered {{ printf "%.0f" $value }} receive errors in the last two minutes. | warning |
+| **NodeNetworkTransmitErrs** | Network interface is reporting many transmit errors. | {{ $labels.instance }} interface {{ $labels.device }} has encountered {{ printf "%.0f" $value }} transmit errors in the last two minutes. | warning |
+| **NodeRAIDDegraded** | RAID Array is degraded. | RAID array '{{ $labels.device }}' at {{ $labels.instance }} is in degraded state due to one or more disks failures. Number of spare drives is insufficient to fix issue automatically. | critical |
+| **NodeRAIDDiskFailure** | Failed device in RAID array. | At least one device in RAID array at {{ $labels.instance }} failed. Array '{{ $labels.device }}' needs attention and possibly a disk swap. | warning |
+| **NodeSystemSaturation** | System saturated, load per core is very high. | System load per core at {{ $labels.instance }} has been above 2 for the last 15 minutes, is currently at {{ printf "%.2f" $value }}.
This might indicate this instance resources saturation and can cause it becoming unresponsive.
| warning |
+| **NodeSystemdServiceCrashlooping** | Systemd service keeps restaring, possibly crash looping. | Systemd service {{ $labels.name }} has being restarted too many times at {{ $labels.instance }} for the last 15 minutes. Please check if service is crash looping. | warning |
+| **NodeSystemdServiceFailed** | Systemd service has entered failed state. | Systemd service {{ $labels.name }} has entered failed state at {{ $labels.instance }} | warning |
+| **NodeTextFileCollectorScrapeError** | Node Exporter text file collector failed to scrape. | Node Exporter text file collector on {{ $labels.instance }} failed to scrape. | warning |
+
+
+---
+
+## node-network
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **NodeNetworkInterfaceFlapping** | Network interface is often changing its status | Network interface "{{ $labels.device }}" changing its up status often on node-exporter {{ $labels.namespace }}/{{ $labels.pod }} | warning |
+
+
+---
+
+## pod-state-alerts
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **HighPodRestartRate** | High pod restart count detected | Pod {{ $labels.pod }} in namespace {{ $labels.namespace }} is restarting frequently, which may indicate network instability. | warning |
+| **KubePodNotReadyCritical** | Pod has been in a non-ready state for more than 5 minutes. | Pod {{ $labels.namespace }}/{{ $labels.pod }} has been in a non-ready state for longer than 5 minutes. | critical |
+| **TooManyContainerRestarts** | Container named {{ $labels.container }} in {{ $labels.pod }} in {{ $labels.namespace }} has restarted too many times in a short period and needs to be investigated. | Namespace: {{$labels.namespace}}
Pod name: {{$labels.pod}}
Container name: {{$labels.container}}
| critical |
+
+
+---
+
+## prometheus
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **PrometheusBadConfig** | Failed Prometheus configuration reload. | Prometheus {{$labels.namespace}}/{{$labels.pod}} has failed to reload its configuration. | critical |
+| **PrometheusDuplicateTimestamps** | Prometheus is dropping samples with duplicate timestamps. | Prometheus {{$labels.namespace}}/{{$labels.pod}} is dropping {{ printf "%.4g" $value }} samples/s with different values but duplicated timestamp. | warning |
+| **PrometheusErrorSendingAlertsToAnyAlertmanager** | Prometheus encounters more than 3% errors sending alerts to any Alertmanager. | {{ printf "%.1f" $value }}% minimum errors while sending alerts from Prometheus {{$labels.namespace}}/{{$labels.pod}} to any Alertmanager. | critical |
+| **PrometheusErrorSendingAlertsToSomeAlertmanagers** | More than 1% of alerts sent by Prometheus to a specific Alertmanager were affected by errors. | {{ printf "%.1f" $value }}% of alerts sent by Prometheus {{$labels.namespace}}/{{$labels.pod}} to Alertmanager {{$labels.alertmanager}} were affected by errors. | warning |
+| **PrometheusHighQueryLoad** | Prometheus is reaching its maximum capacity serving concurrent requests. | Prometheus {{$labels.namespace}}/{{$labels.pod}} query API has less than 20% available capacity in its query engine for the last 15 minutes. | warning |
+| **PrometheusKubernetesListWatchFailures** | Requests in Kubernetes SD are failing. | Kubernetes service discovery of Prometheus {{$labels.namespace}}/{{$labels.pod}} is experiencing {{ printf "%.0f" $value }} failures with LIST/WATCH requests to the Kubernetes API in the last 5 minutes. | warning |
+| **PrometheusLabelLimitHit** | Prometheus has dropped targets because some scrape configs have exceeded the labels limit. | Prometheus {{$labels.namespace}}/{{$labels.pod}} has dropped {{ printf "%.0f" $value }} targets because some samples exceeded the configured label_limit, label_name_length_limit or label_value_length_limit. | warning |
+| **PrometheusMissingRuleEvaluations** | Prometheus is missing rule evaluations due to slow rule group evaluation. | Prometheus {{$labels.namespace}}/{{$labels.pod}} has missed {{ printf "%.0f" $value }} rule group evaluations in the last 5m. | warning |
+| **PrometheusNotConnectedToAlertmanagers** | Prometheus is not connected to any Alertmanagers. | Prometheus {{$labels.namespace}}/{{$labels.pod}} is not connected to any Alertmanagers. | warning |
+| **PrometheusNotIngestingSamples** | Prometheus is not ingesting samples. | Prometheus {{$labels.namespace}}/{{$labels.pod}} is not ingesting samples. | warning |
+| **PrometheusNotificationQueueRunningFull** | Prometheus alert notification queue predicted to run full in less than 30m. | Alert notification queue of Prometheus {{$labels.namespace}}/{{$labels.pod}} is running full. | warning |
+| **PrometheusOutOfOrderTimestamps** | Prometheus drops samples with out-of-order timestamps. | Prometheus {{$labels.namespace}}/{{$labels.pod}} is dropping {{ printf "%.4g" $value }} samples/s with timestamps arriving out of order. | warning |
+| **PrometheusRemoteStorageFailures** | Prometheus fails to send samples to remote storage. | Prometheus {{$labels.namespace}}/{{$labels.pod}} failed to send {{ printf "%.1f" $value }}% of the samples to {{ $labels.remote_name}}:{{ $labels.url }} | critical |
+| **PrometheusRemoteWriteBehind** | Prometheus remote write is behind. | Prometheus {{$labels.namespace}}/{{$labels.pod}} remote write is {{ printf "%.1f" $value }}s behind for {{ $labels.remote_name}}:{{ $labels.url }}. | critical |
+| **PrometheusRemoteWriteDesiredShards** | Prometheus remote write desired shards calculation wants to run more than configured max shards. | Prometheus {{$labels.namespace}}/{{$labels.pod}} remote write desired shards calculation wants to run {{ $value }} shards for queue {{ $labels.remote_name}}:{{ $labels.url }}, which is more than the max of {{ printf `prometheus_remote_storage_shards_max{instance="%s",job="kube-prometheus-stack-prometheus",namespace="prometheus"}` $labels.instance \| query \| first \| value }}. | warning |
+| **PrometheusRuleFailures** | Prometheus is failing rule evaluations. | Prometheus {{$labels.namespace}}/{{$labels.pod}} has failed to evaluate {{ printf "%.0f" $value }} rules in the last 5m. | critical |
+| **PrometheusSDRefreshFailure** | Failed Prometheus SD refresh. | Prometheus {{$labels.namespace}}/{{$labels.pod}} has failed to refresh SD with mechanism {{$labels.mechanism}}. | warning |
+| **PrometheusScrapeBodySizeLimitHit** | Prometheus has dropped some targets that exceeded body size limit. | Prometheus {{$labels.namespace}}/{{$labels.pod}} has failed {{ printf "%.0f" $value }} scrapes in the last 5m because some targets exceeded the configured body_size_limit. | warning |
+| **PrometheusScrapeSampleLimitHit** | Prometheus has failed scrapes that have exceeded the configured sample limit. | Prometheus {{$labels.namespace}}/{{$labels.pod}} has failed {{ printf "%.0f" $value }} scrapes in the last 5m because some targets exceeded the configured sample_limit. | warning |
+| **PrometheusTSDBCompactionsFailing** | Prometheus has issues compacting blocks. | Prometheus {{$labels.namespace}}/{{$labels.pod}} has detected {{$value \| humanize}} compaction failures over the last 3h. | warning |
+| **PrometheusTSDBReloadsFailing** | Prometheus has issues reloading blocks from disk. | Prometheus {{$labels.namespace}}/{{$labels.pod}} has detected {{$value \| humanize}} reload failures over the last 3h. | warning |
+| **PrometheusTargetLimitHit** | Prometheus has dropped targets because some scrape configs have exceeded the targets limit. | Prometheus {{$labels.namespace}}/{{$labels.pod}} has dropped {{ printf "%.0f" $value }} targets because the number of targets exceeded the configured target_limit. | warning |
+| **PrometheusTargetSyncFailure** | Prometheus has failed to sync targets. | {{ printf "%.0f" $value }} targets in Prometheus {{$labels.namespace}}/{{$labels.pod}} have failed to sync because invalid configuration was supplied. | critical |
+
+
+---
+
+## prometheus-operator
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **PrometheusOperatorListErrors** | Errors while performing list operations in controller. | Errors while performing List operations in controller {{$labels.controller}} in {{$labels.namespace}} namespace. | warning |
+| **PrometheusOperatorNodeLookupErrors** | Errors while reconciling Prometheus. | Errors while reconciling Prometheus in {{ $labels.namespace }} Namespace. | warning |
+| **PrometheusOperatorNotReady** | Prometheus operator not ready | Prometheus operator in {{ $labels.namespace }} namespace isn't ready to reconcile {{ $labels.controller }} resources. | warning |
+| **PrometheusOperatorReconcileErrors** | Errors while reconciling objects. | {{ $value \| humanizePercentage }} of reconciling operations failed for {{ $labels.controller }} controller in {{ $labels.namespace }} namespace. | warning |
+| **PrometheusOperatorRejectedResources** | Resources rejected by Prometheus operator | Prometheus operator in {{ $labels.namespace }} namespace rejected {{ printf "%0.0f" $value }} {{ $labels.controller }}/{{ $labels.resource }} resources. | warning |
+| **PrometheusOperatorStatusUpdateErrors** | Errors while updating objects status. | {{ $value \| humanizePercentage }} of status update operations failed for {{ $labels.controller }} controller in {{ $labels.namespace }} namespace. | warning |
+| **PrometheusOperatorSyncFailed** | Last controller reconciliation failed | Controller {{ $labels.controller }} in {{ $labels.namespace }} namespace fails to reconcile {{ $value }} objects. | warning |
+| **PrometheusOperatorWatchErrors** | Errors while performing watch operations in controller. | Errors while performing watch operations in controller {{$labels.controller}} in {{$labels.namespace}} namespace. | warning |
+
+
+---
+
+## rabbitmq
+| Alert Name | Summary | Description | Severity |
+| :--- | :--- | :--- | :--- |
+| **ContainerRestarts** | Investigate why the container got restarted.
Check the logs of the current container: `kubectl -n {{ $labels.namespace }} logs {{ $labels.pod }}`
Check the logs of the previous container: `kubectl -n {{ $labels.namespace }} logs {{ $labels.pod }} --previous`
Check the last state of the container: `kubectl -n {{ $labels.namespace }} get pod {{ $labels.pod }} -o jsonpath='{.status.containerStatuses[].lastState}'`
| Over the last 10 minutes, container `{{ $labels.container }}`
restarted `{{ $value \| printf "%.0f" }}` times in pod `{{ $labels.pod }}` of RabbitMQ cluster
`{{ $labels.rabbitmq_cluster }}` in namespace `{{ $labels.namespace }}`.
| warning |
+| **FileDescriptorsNearLimit** | More than 80% of file descriptors are used on the RabbitMQ node.
When this value reaches 100%, new connections will not be accepted and disk write operations may fail.
Client libraries, peer nodes and CLI tools will not be able to connect when the node runs out of available file descriptors.
See https://www.rabbitmq.com/production-checklist.html#resource-limits-file-handle-limit.
| `{{ $value \| humanizePercentage }}` file descriptors of file
descriptor limit are used in RabbitMQ node `{{ $labels.rabbitmq_node }}`,
pod `{{ $labels.pod }}`, RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}`,
namespace `{{ $labels.namespace }}`.
| warning |
+| **HighConnectionChurn** | More than 10% of total connections are churning.
This means that client application connections are short-lived instead of long-lived.
Read https://www.rabbitmq.com/connections.html#high-connection-churn to understand why this is an anti-pattern.
| Over the last 5 minutes, `{{ $value \| humanizePercentage }}`
of total connections are closed or opened per second in RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}`
in namespace `{{ $labels.namespace }}`.
| warning |
+| **InsufficientEstablishedErlangDistributionLinks** | RabbitMQ clusters have a full mesh topology.
All RabbitMQ nodes connect to all other RabbitMQ nodes in both directions.
The expected number of established Erlang distribution links is therefore `n*(n-1)` where `n` is the number of RabbitMQ nodes in the cluster.
Therefore, the expected number of distribution links are `0` for a 1-node cluster, `6` for a 3-node cluster, and `20` for a 5-node cluster.
This alert reports that the number of established distributions links is less than the expected number.
Some reasons for this alert include failed network links, network partitions, failed clustering (i.e. nodes can't join the cluster).
Check the panels `All distribution links`, `Established distribution links`, `Connecting distributions links`, `Waiting distribution links`, and `distribution links`
of the Grafana dashboard `Erlang-Distribution`.
Check the logs of the RabbitMQ nodes: `kubectl -n {{ $labels.namespace }} logs -l app.kubernetes.io/component=rabbitmq,app.kubernetes.io/name={{ $labels.rabbitmq_cluster }}`
| There are only `{{ $value }}` established Erlang distribution links
in RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}` in namespace `{{ $labels.namespace }}`.
| warning |
+| **LowDiskWatermarkPredicted** | Based on the trend of available disk space over the past 24 hours, it's predicted that, in 24 hours from now, a disk alarm will be triggered since the free disk space will drop below the free disk space limit.
This alert is reported for the partition where the RabbitMQ data directory is stored.
When the disk alarm will be triggered, all publishing connections across all cluster nodes will be blocked.
See
https://www.rabbitmq.com/alarms.html,
https://www.rabbitmq.com/disk-alarms.html,
https://www.rabbitmq.com/production-checklist.html#resource-limits-disk-space,
https://www.rabbitmq.com/persistence-conf.html,
https://www.rabbitmq.com/connection-blocked.html.
| The predicted free disk space in 24 hours from now is `{{ $value \| humanize1024 }}B`
in RabbitMQ node `{{ $labels.rabbitmq_node }}`, pod `{{ $labels.pod }}`,
RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}`, namespace `{{ $labels.namespace }}`.
| warning |
+| **MemoryAlarm** | A RabbitMQ node reached the `vm_memory_high_watermark` threshold.
See https://www.rabbitmq.com/docs/alarms#overview, https://www.rabbitmq.com/docs/memory.
| RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}` memory alarm active. Publishers are blocked.
| warning |
+| **NoMajorityOfNodesReady** | No majority of nodes have been ready for the last 5 minutes.
Check the details of the pods:
`kubectl -n {{ $labels.namespace }} describe pods -l app.kubernetes.io/component=rabbitmq,app.kubernetes.io/name={{ $labels.label_app_kubernetes_io_name }}`
| Only `{{ $value }}` replicas are ready in StatefulSet `{{ $labels.statefulset }}`
of RabbitMQ cluster `{{ $labels.label_app_kubernetes_io_name }}` in namespace `{{ $labels.namespace }}`.
| warning |
+| **PersistentVolumeMissing** | RabbitMQ needs a PersistentVolume for its data.
However, there is no PersistentVolume bound to the PersistentVolumeClaim.
This means the requested storage could not be provisioned.
Check the status of the PersistentVolumeClaim: `kubectl -n {{ $labels.namespace }} describe pvc {{ $labels.persistentvolumeclaim }}`.
| PersistentVolumeClaim `{{ $labels.persistentvolumeclaim }}` of
RabbitMQ cluster `{{ $labels.label_app_kubernetes_io_name }}` in namespace
`{{ $labels.namespace }}` is not bound.
| critical |
+| **QueueHasNoConsumers** | Messages are sitting idle in the queue, without any processing.
This alert is highly application specific (and e.g. doesn't make sense for stream queues).
| Over the last 10 minutes, non-empty queue `{{ $labels.queue }}` with {{ $value }} messages
in virtual host `{{ $labels.vhost }}` didn't have any consumers in
RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}` in namespace `{{ $labels.namespace }}`.
| warning |
+| **QueueIsGrowing** | Queue size is steadily growing over time.
| Over the last 10 minutes, queue `{{ $labels.queue }}` in virtual host `{{ $labels.vhost }}`
was growing. 10 minute moving average has grown by {{ $value }}.
This happens in RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}` in namespace `{{ $labels.namespace }}`.
| warning |
+| **RabbitmqDiskAlarm** | A RabbitMQ node reached the `disk_free_limit` threshold.
See https://www.rabbitmq.com/docs/alarms#overview, https://www.rabbitmq.com/docs/disk-alarms.
| RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}` disk alarm active. Publishers are blocked.
| warning |
+| **RabbitmqFileDescriptorAlarm** | A RabbitMQ node ran out of file descriptors.
See https://www.rabbitmq.com/docs/alarms#file-descriptors.
| RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}` file descriptor alarm active. Publishers are blocked.
| warning |
+| **TCPSocketsNearLimit** | More than 80% of TCP sockets are open on the RabbitMQ node.
When this value reaches 100%, new connections will not be accepted.
Client libraries, peer nodes and CLI tools will not be able to connect when the node runs out of available TCP sockets.
See https://www.rabbitmq.com/networking.html.
| `{{ $value \| humanizePercentage }}` TCP sockets of TCP socket
limit are open in RabbitMQ node `{{ $labels.rabbitmq_node }}`, pod `{{ $labels.pod }}`,
RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}`, namespace `{{ $labels.namespace }}`.
| warning |
+| **UnroutableMessages** | There are messages published into an exchange which cannot be routed and are either dropped silently, or returned to publishers.
Is your routing topology set up correctly?
Check your application code and bindings between exchanges and queues.
See
https://www.rabbitmq.com/publishers.html#unroutable,
https://www.rabbitmq.com/confirms.html#when-publishes-are-confirmed.
| There were `{{ $value \| printf "%.0f" }}` unroutable messages within the last
5 minutes in RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}` in namespace
`{{ $labels.namespace }}`.
| warning |
+
+
+---
+
diff --git a/docs/import-grafana-dashboard.md b/docs/import-grafana-dashboard.md
new file mode 100644
index 000000000..6c294c346
--- /dev/null
+++ b/docs/import-grafana-dashboard.md
@@ -0,0 +1,38 @@
+# Grafana Dashboard Import Script
+
+This script helps you **import Grafana dashboards** from a local directory that contains JSON files. Each file must contain a valid Grafana dashboard definition.
+
+
+## Prerequisites
+- A running [monitoring stack](https://github.com/rackerlabs/genestack/blob/main/docs/monitoring-info.md)
+- Dashboards exported as valid [JSON files](https://github.com/rackerlabs/genestack/tree/main/etc/grafana-dashboards)
+
+## Environment Variables
+Set the following environment variables before running the script:
+
+| Variable | Required | Description | Default |
+|-------------------|----------|-------------------------------------------------------|---------------------------------|
+| `GRAFANA_PASSWORD`| True | Grafana admin password | None. |
+| `GRAFANA_USERNAME`| False | Grafana admin username | `admin` |
+| `GRAFANA_URL` | False | URL of your Grafana instance | `http://grafana.grafana.svc.cluster.local:80` |
+
+
+## Usage
+```bash
+# python import_dashboard.py -h
+usage: import_dashboard.py [-h] -d DIR [-ds DATASOURCE]
+
+Import Grafana dashboards from a local directory.
+
+options:
+ -h, --help show this help message and exit
+ -d DIR, --dir DIR Path to directory containing dashboard JSON files
+ -ds DATASOURCE, --datasource DATASOURCE
+ Name of the Prometheus datasource. Default: "Prometheus"
+
+export GRAFANA_USERNAME=admin
+export GRAFANA_URL=https://grafana.sjc3.rackspacecloud.com
+export GRAFANA_PASSWORD=your_admin_password
+
+python import_dashboards.py --dir /opt/genestack/etc/grafana-dashboards/ --datasource Prometheus
+```
diff --git a/docs/infrastructure-envoy-gateway-api-security.md b/docs/infrastructure-envoy-gateway-api-security.md
new file mode 100644
index 000000000..829d792dd
--- /dev/null
+++ b/docs/infrastructure-envoy-gateway-api-security.md
@@ -0,0 +1,127 @@
+# Security Policies
+
+From [Envoy documentation](https://gateway.envoyproxy.io/docs/concepts/introduction/gateway_api_extensions/security-policy/):
+
+SecurityPolicy is an Envoy Gateway extension to the Kubernetes Gateway API that allows you to define authentication and authorization requirements for traffic entering your gateway. It acts as a security layer that only properly authenticated and authorized requests are allowed through your backend services.
+
+In this section we will be implementing [oidc](https://gateway.envoyproxy.io/docs/tasks/security/oidc/) authentication to auth using Azure AD.
+
+!!! note "You must have deployed Envoy Gateway already and installed the CRDs before this will work"
+
+## Create the HTTPRoute
+
+!!! note "The examples used here reference alertmanager. You will change the settings as necessary for your application/s"
+
+``` yaml title="alertmanager-gw-route.yaml"
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+ annotations:
+ name: alertmanager-gateway-route
+ namespace: prometheus
+spec:
+ hostnames:
+ - alertmanager.example.com
+ parentRefs:
+ - group: gateway.networking.k8s.io
+ kind: Gateway
+ name: flex-internal-gateway
+ namespace: internal
+ sectionName: am-https
+ rules:
+ - backendRefs:
+ - group: ""
+ kind: Service
+ name: kube-prometheus-stack-alertmanager
+ port: 9093
+ weight: 1
+ matches:
+ - path:
+ type: PathPrefix
+ value: /
+```
+
+`kubectl apply -f alertmanager-gw-route.yaml`
+
+### Check/update your listener
+
+Make sure you have a listener configured on your gateway for the HTTPRoute you created. As an example, you should have something like the following in your gateway configuration:
+
+``` yaml
+ - allowedRoutes:
+ namespaces:
+ from: All
+ hostname: alertmanager.example.com
+ name: am-https
+ port: 443
+ protocol: HTTPS
+ tls:
+ certificateRefs:
+ - group: ""
+ kind: Secret
+ name: alertmanager-envoy-secret
+ mode: Terminate
+```
+
+
+## Register an OIDC application
+
+Registering the Azure OIDC application is beyond the scope of this article. You will need to add a redirect url and you will need to know your client and tenant ids as well as your client secret. Once you have all that information, you may proceed to configuring the Kubernetes secret and security policy.
+
+## Kubernetes secret
+
+You will need to create a kubernetes secret that contains the client secret for your Azure application. You can either use a yaml file or paste the secret on the command line.
+
+=== "CLI"
+ ``` shell
+ read -s CLIENT_SECRET
+ read -p "Please enter the application namespace: " APP_NAMESPACE
+ read -p "Please enter the application name: " APP_NAME
+ kubectl -n ${APP_NAMESPACE} create secret generic azuread-client-secret-${APP_NAME} --from-literal=client-secret=${CLIENT_SECRET}
+ ```
+
+=== "YAML"
+ ``` yaml title="azuread-client-secret-APP_NAME.yaml"
+ apiVersion: v1
+ data:
+ client-secret:
DFW, SJC, IAD"] --> B[MariaDB Instances]
+ B -->|Backup Data| C[MariaDB Operator]
+ C -->|Create Backup| D[Backup CRD]
+ D -->|Store Backup| E["Swift Object Storage
mariadb-backups"]
+ E -->|Retrieve Backup| F[Restore CRD]
+ F -->|Restore Data| C
+ C -->|Restore to MariaDB| B
+ E -->|Download Backup| G[Overseer Nodes]
+ G -->|Execute Restore| H[AWS CLI]
+ H -->|Restore to MariaDB| B
+
+ I --> A
+ J --> A
+ K --> A
+```
+
+## 3. Restore Using Kubernetes `Restore` CRD
+### CRD(Custom Resource Definition)
+- The Restore CRD is a Custom Resource Definintion, a kubernetes feature that extend the API to define custom resources for managing restore operations. For detailed information on CRD, refers to the [Kubernetes Documentation on Custom Resources.](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/).
+
+This method automates the restore process using the MariaDB Operator, applicable to all production regions.
+
+ ### 3.1 Backup and Restore of Specific Databases
+ Backup Context: Backups are created with the Backup resource, which by default includes all logical databases. To back up specific databases, the databases field can be used (e.g., db1, db2, db3), influencing the content available for restoration. For detailed backup creation, refer to the backup documentation or administrator.
+
+ Restore Configuration: By default, all databases in the backup are restored. To restore a single database, specify the database field in the Restore resource:
+
+ ``` yaml
+ apiVersion: k8s.mariadb.com/v1alpha1
+ kind: Restore
+ metadata:
+ name: restore
+ spec:
+ mariaDbRef:
+ name: mariadb
+ backupRef:
+ name: backup
+ database: db1
+ ```
+ ### 3.2 Procedure
+ #### 1. Configure the Restore CRD:
+ Create a file named `restore.yaml` with the following content, adjusting the region-specific details:
+
+ ``` yaml
+ apiVersion: k8s.mariadb.com/v1alpha1
+ kind: Restore
+ metadata:
+ name: maria-restore
+ namespace:
+
We're sorry, but you cannot access this service at this time.
+
+
Your session was already invalidated before your information could + be examined for completeness.
++You were trying to access the following URL: +
+ + +
For more information about this service, including what user information is +required for access, please visit our +information page.
+This web site requires you to login before proceeding. Please identify + the domain name of your organization:
+ + + +The system was unable to determine how to proceed using the value you supplied.
+Status of Global Logout:
If the message above indicates success, you have been logged out of all +the applications and systems that support the logout mechanism.
+ +Regardless of the outcome, it is strongly advised that you close your browser +to ensure that you complete the logout process.
+ + + diff --git a/etc/keystone-sp/shibboleth/localLogout.html b/etc/keystone-sp/shibboleth/localLogout.html new file mode 100644 index 000000000..75bd3e170 --- /dev/null +++ b/etc/keystone-sp/shibboleth/localLogout.html @@ -0,0 +1,27 @@ + + + + + + + +The identity provider supplying your login credentials is not authorized +for use with this service or does not support the necessary capabilities.
+ +To report this problem, please contact the site administrator at
+
Please include the following error message in any email:
+Identity provider lookup failed at (
EntityID:
You remain logged into one or more applications accessed during your session. +To complete the logout process, please close/exit your browser completely.
+ + + diff --git a/etc/keystone-sp/shibboleth/postTemplate.html b/etc/keystone-sp/shibboleth/postTemplate.html new file mode 100644 index 000000000..d8c4728d0 --- /dev/null +++ b/etc/keystone-sp/shibboleth/postTemplate.html @@ -0,0 +1,37 @@ + + +The system encountered an error at
To report this problem, please contact the site administrator at
+
Please include the following message in any email:
+Error from identity provider:
++ Status:+
++ Sub-Status: +
++ Message: +
+
+You have attemped to submit information without the protection
+of TLS to this site.
+
+For the protection of your submission and the integrity of the site,
+this is not permitted. Please try accessing the server with a
+URL starting with https:// and report this problem
+to