diff --git a/.github/workflows/stackhpc-container-image-build.yml b/.github/workflows/stackhpc-container-image-build.yml index 5474f8ac8..ea38864d4 100644 --- a/.github/workflows/stackhpc-container-image-build.yml +++ b/.github/workflows/stackhpc-container-image-build.yml @@ -18,24 +18,92 @@ on: type: boolean required: false default: false - distro: - description: Container image OS distribution - type: choice + centos-stream-8: + description: Build CentOS Stream 8 images? + type: boolean + required: false + default: true + rocky-linux-9: + description: Build Rocky Linux 9 images? + type: boolean + required: false + default: true + ubuntu-focal: + description: Build Ubuntu Focal 20.04 images? + type: boolean + required: false + default: true + push: + description: Whether to push images + type: boolean required: false - default: centos - options: - - centos - - ubuntu - - rocky + default: true env: ANSIBLE_FORCE_COLOR: True jobs: + generate-tag: + name: Generate container image tag + if: github.repository == 'stackhpc/stackhpc-kayobe-config' + runs-on: [self-hosted, stackhpc-kayobe-config-kolla-builder] + permissions: {} + outputs: + kolla_tag: ${{ steps.kolla_tag.outputs.kolla_tag }} + matrix: ${{ steps.set-matrix.outputs.matrix }} + openstack_release: ${{ steps.openstack_release.outputs.openstack_release }} + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Determine OpenStack release + id: openstack_release + run: | + BRANCH=$(awk -F'=' '/defaultbranch/ {print $2}' .gitreview) + echo "openstack_release=${BRANCH}" | sed "s|stable/||" >> $GITHUB_OUTPUT + + # Generate a tag to apply to all built container images. + # Without this, each kayobe * container image build command would use a different tag. + - name: Generate container image tag + id: kolla_tag + run: | + echo "kolla_tag=$(date +${{ steps.openstack_release.outputs.openstack_release }}-%Y%m%dT%H%M%S)" >> $GITHUB_OUTPUT + + # Dynamically define job matrix. + # We need a separate matrix entry for each distribution, when the relevant input is true. + # https://stackoverflow.com/questions/65384420/how-do-i-make-a-github-action-matrix-element-conditional + - name: Generate build matrix + id: set-matrix + run: | + comma="" + echo -n "matrix={\"distro\": [" >> $GITHUB_OUTPUT + if [[ ${{ inputs.centos-stream-8 }} == 'true' ]]; then + echo -n "$comma\"centos\"" >> $GITHUB_OUTPUT + comma=", " + fi + if [[ ${{ inputs.rocky-linux-9 }} == 'true' ]]; then + echo -n "$comma\"rocky\"" >> $GITHUB_OUTPUT + comma=", " + fi + if [[ ${{ inputs.ubuntu-focal }} == 'true' ]]; then + echo -n "$comma\"ubuntu\"" >> $GITHUB_OUTPUT + comma=", " + fi + echo "]}" >> $GITHUB_OUTPUT + + - name: Display container image tag + run: | + echo "${{ steps.kolla_tag.outputs.kolla_tag }}" + container-image-build: name: Build Kolla container images if: github.repository == 'stackhpc/stackhpc-kayobe-config' runs-on: [self-hosted, stackhpc-kayobe-config-kolla-builder] timeout-minutes: 720 + permissions: {} + strategy: + matrix: ${{ fromJson(needs.generate-tag.outputs.matrix) }} + needs: + - generate-tag steps: - uses: actions/checkout@v3 with: @@ -45,7 +113,7 @@ jobs: uses: actions/checkout@v3 with: repository: stackhpc/kayobe - ref: refs/heads/stackhpc/yoga + ref: refs/heads/stackhpc/${{ needs.generate-tag.outputs.openstack_release }} path: src/kayobe # FIXME: Failed in kolla-ansible : Ensure the latest version of pip is installed @@ -101,57 +169,43 @@ jobs: - name: Build and push kolla overcloud images run: | + args="${{ github.event.inputs.regexes }}" + args="$args -e kolla_base_distro=${{ matrix.distro }}" + args="$args -e kolla_tag=${{ needs.generate-tag.outputs.kolla_tag }}" + if ${{ inputs.push }} == 'true'; then + args="$args --push" + fi source venvs/kayobe/bin/activate && source src/kayobe-config/kayobe-env --environment ci-builder && - kayobe overcloud container image build ${{ github.event.inputs.regexes }} --push -e kolla_base_distro=${{ inputs.distro }} + kayobe overcloud container image build $args env: KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }} if: github.event.inputs.overcloud == 'true' - - name: Display the overcloud container image tag - run: | - echo "$(cat ~/kolla_tag)" - if: github.event.inputs.overcloud == 'true' - - - name: Get built overcloud container images - run: | - sudo docker image ls --filter "reference=ark.stackhpc.com/stackhpc-dev/*:$(cat ~/kolla_tag)" > overcloud-container-images - if: github.event.inputs.overcloud == 'true' - - - name: Upload overcloud-container-images artifact - uses: actions/upload-artifact@v3 - with: - name: Overcloud container images - path: overcloud-container-images - retention-days: 7 - if: github.event.inputs.overcloud == 'true' - - name: Build and push kolla seed images run: | + args="kolla_base_distro=${{ matrix.distro }}" + args="$args -e kolla_tag=${{ needs.generate-tag.outputs.kolla_tag }}" + if ${{ inputs.push }} == 'true'; then + args="$args --push" + fi source venvs/kayobe/bin/activate && source src/kayobe-config/kayobe-env --environment ci-builder && - kayobe seed container image build --push -e kolla_base_distro=${{ inputs.distro }} + kayobe seed container image build $args env: KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }} if: github.event.inputs.seed == 'true' - - name: Display the seed container image tag + - name: Get built container images run: | - echo "$(cat ~/kolla_tag)" - if: github.event.inputs.seed == 'true' + sudo docker image ls --filter "reference=ark.stackhpc.com/stackhpc-dev/${{ matrix.distro }}-*:${{ needs.generate-tag.outputs.kolla_tag }}" > ${{ matrix.distro }}-container-images - - name: Get built seed container images - run: | - sudo docker image ls --filter "reference=ark.stackhpc.com/stackhpc-dev/*:$(cat ~/kolla_tag)" > seed-container-images - if: github.event.inputs.seed == 'true' - - - name: Upload seed-container-images artifact + - name: Upload container images artifact uses: actions/upload-artifact@v3 with: - name: Seed container images - path: seed-container-images + name: ${{ matrix.distro }} container images + path: ${{ matrix.distro }}-container-images retention-days: 7 - if: github.event.inputs.seed == 'true' - name: Prune local Kolla container images over 1 week old run: | @@ -161,8 +215,9 @@ jobs: name: Trigger container image repository sync needs: - container-image-build - if: github.repository == 'stackhpc/stackhpc-kayobe-config' + if: github.repository == 'stackhpc/stackhpc-kayobe-config' && inputs.push runs-on: ubuntu-latest + permissions: {} steps: # NOTE(mgoddard): Trigger another CI workflow in the # stackhpc-release-train repository. diff --git a/.github/workflows/stackhpc-promote.yml b/.github/workflows/stackhpc-promote.yml index 0b4400178..61385c819 100644 --- a/.github/workflows/stackhpc-promote.yml +++ b/.github/workflows/stackhpc-promote.yml @@ -10,6 +10,7 @@ jobs: name: Trigger package repository promotion if: github.repository == 'stackhpc/stackhpc-kayobe-config' runs-on: ubuntu-latest + permissions: {} steps: # NOTE(mgoddard): Trigger another CI workflow in the # stackhpc-release-train repository. diff --git a/doc/source/configuration/cephadm.rst b/doc/source/configuration/cephadm.rst index 0322482c0..8908b351f 100644 --- a/doc/source/configuration/cephadm.rst +++ b/doc/source/configuration/cephadm.rst @@ -242,19 +242,70 @@ for Cinder, Cinder backup, Glance, and Nova in Kolla Ansible. Ceph Commands ~~~~~~~~~~~~~ -It is possible to run an arbitrary list of commands against the cluster after deployment -by setting the ``cephadm_commands`` variable. ``cephadm_commands`` should be a list of commands -to pass to ``cephadm shell -- ceph``. For example: +It is possible to run an arbitrary list of commands against the cluster after +deployment by setting the ``cephadm_commands_pre`` and ``cephadm_commands_post`` +variables. Each should be a list of commands to pass to ``cephadm shell -- +ceph``. For example: .. code:: yaml # A list of commands to pass to cephadm shell -- ceph. See stackhpc.cephadm.commands # for format. - cephadm_commands: + cephadm_commands_pre: # Configure Prometheus exporter to listen on a specific interface. The default # is to listen on all interfaces. - "config set mgr mgr/prometheus/server_addr 10.0.0.1" +Both variables have the same format, however commands in the +``cephadm_commands_pre`` list are executed before the rest of the Ceph +post-deployment configuration is applied. Commands in the +``cephadm_commands_post`` list are executed after the rest of the Ceph +post-deployment configuration is applied. + +Manila & CephFS +~~~~~~~~~~~~~~~ + +Using Manila with the CephFS backend requires the configuration of additional +resources. + +A Manila key should be added to cephadm_keys: + +.. code:: yaml + + # Append the following to cephadm_keys: + - name: client.manila + caps: + mon: "allow r" + mgr: "allow rw" + state: present + +A CephFS filesystem requires two pools, one for metadata and one for data: + +.. code:: yaml + + # Append the following to cephadm_pools: + - name: cephfs_data + application: cephfs + state: present + - name: cephfs_metadata + application: cephfs + state: present + +Finally, the CephFS filesystem itself should be created: + +.. code:: yaml + + # Append the following to cephadm_commands_post: + - "fs new manila-cephfs cephfs_metadata cephfs_data" + - "orch apply mds manila-cephfs" + +In this example, the filesystem is named ``manila-cephfs``. This name +should be used in the Kolla Manila configuration e.g.: + +.. code:: yaml + + manila_cephfs_filesystem_name: manila-cephfs + Deployment ========== diff --git a/doc/source/configuration/lvm.rst b/doc/source/configuration/lvm.rst index 65b892aa8..a96ca8db9 100644 --- a/doc/source/configuration/lvm.rst +++ b/doc/source/configuration/lvm.rst @@ -76,7 +76,7 @@ another LV needs to be grown at a later date. Growroot playbook ================= -A ``growroot.yml`` custom playbook is provied that can be used to grow the +A ``growroot.yml`` custom playbook is provided that can be used to grow the partition and LVM Physical Volume (PV) of the root Volume Group (VG). This allows for expansion of Logical Volumes (LVs) in that VG. diff --git a/doc/source/contributor/environments/ci-builder.rst b/doc/source/contributor/environments/ci-builder.rst index 17b73ad1c..9df7426b5 100644 --- a/doc/source/contributor/environments/ci-builder.rst +++ b/doc/source/contributor/environments/ci-builder.rst @@ -105,10 +105,7 @@ At this point you are ready to build and push some container images. kayobe seed container image build --push kayobe overcloud container image build --push -The container images are tagged as |current_release|-. This Kayobe -configuration includes a hook that writes the tag to ``~/kolla_tag``, since -it is not always simple to determine which tag was last applied to built -images. +The container images are tagged as |current_release|-. To use the new images, edit ``~/src/kayobe-config/etc/kayobe/kolla.yml`` to set the above diff --git a/doc/source/contributor/environments/ci-multinode.rst b/doc/source/contributor/environments/ci-multinode.rst index 0dd787140..93341113a 100644 --- a/doc/source/contributor/environments/ci-multinode.rst +++ b/doc/source/contributor/environments/ci-multinode.rst @@ -38,11 +38,11 @@ Config changes 3. Also under vxlan_interfaces, add vni:x where x is between 500 and 1000 4. Also under vxlan_interfaces, check vxlan_dstport is not 4789 (this causes conflicts, change to 4790) -5. In /etc/kayobe/environments/ci-multinode/tf-networks.yml, edit admin_ips so +5. In etc/kayobe/environments/ci-multinode/tf-networks.yml, edit admin_ips so that the compute and controller IPs line up with the instances that were created earlier, remove the other IPs for seed and cephOSD -6. In /etc/kayobe/environments/ci-multinode/network-allocation.yml, remove all +6. In etc/kayobe/environments/ci-multinode/network-allocation.yml, remove all the entries and just assign ``aio_ips:`` an empty set ``[]`` 7. In etc/kayobe/environments/ci-multinode/inventory/hosts, remove the seed 8. run stackhpc-kayobe-config/etc/kayobe/ansible/growroot.yml (if this fails, @@ -53,3 +53,153 @@ Final steps 1. ``source kayobe-env --environment ci-aio`` 2. Run ``kayobe overcloud host configure`` 3. Run ``kayobe overcloud service deploy`` + + +Manila +====== +The Multinode environment supports Manila with the CephFS native backend, but it +is not enabled by default. To enable it, set the following in +``etc/kayobe/environments/ci-multinode/kolla.yml``: + +.. code-block:: yaml + + kolla_enable_manila: true + kolla_enable_manila_backend_cephfs: true + +And re-run ``kayobe overcloud service deploy`` if you are working on an existing +deployment. + +To test it, you will need two virtual machines. Cirros does not support the Ceph +kernel client, so you will need to use a different image. Any regular Linux +distribution should work. As an example, this guide will use Ubuntu 20.04. + +Download the image locally: + +.. code-block:: bash + + wget http://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img + +Upload the image to Glance: + +.. code-block:: bash + + openstack image create --container-format bare --disk-format qcow2 --file focal-server-cloudimg-amd64.img Ubuntu-20.04 --progress + +Create a keypair: + +.. code-block:: bash + + openstack keypair create --private-key ~/.ssh/id_rsa id_rsa + +Create two virtual machines from the image: + +.. code-block:: bash + + openstack server create --flavor m1.small --image Ubuntu-20.04 --key-name id_rsa --network admin-tenant ubuntu-client-1 + openstack server create --flavor m1.small --image Ubuntu-20.04 --key-name id_rsa --network admin-tenant ubuntu-client-2 + +Wait until the instances are active. It is worth noting that this process can +take a while, especially if the overcloud is deployed to virtual machines. You +can monitor the progress with the following command: + +.. code-block:: bash + + watch openstack server list + +Once they are active, create two floating IPs: + +.. code-block:: bash + + openstack floating ip create external + openstack floating ip create external + +Associate the floating IPs to the instances: + +.. code-block:: bash + + openstack server add floating ip ubuntu-client-1 + openstack server add floating ip ubuntu-client-2 + + +Then SSH into each instance and install the Ceph client: + +.. code-block:: bash + + sudo apt update + sudo apt install -y ceph-common + + +Back on the host, install the Manila client: + +.. code-block:: bash + + pip install python-manilaclient + +Then create a share type and share: + +.. code-block:: bash + + manila type-create cephfs-type false --is_public true + manila type-key cephfs-type set vendor_name=Ceph storage_protocol=CEPHFS + manila create --name test-share --share-type cephfs-type CephFS 2 + +Wait until the share is available: + +.. code-block:: bash + + manila list + +Then allow access to the shares to two users: + +.. code-block:: bash + + manila access-allow test-share cephx alice + manila access-allow test-share cephx bob + +Show the access list to make sure the state of both entries is ``active`` and +take note of the access keys: + +.. code-block:: bash + + manila access-list test-share + +And take note of the path to the share: + +.. code-block:: bash + + manila share-export-location-list test-share + +SSH into the first instance, create a directory for the share, and mount it: + +.. code-block:: bash + + mkdir testdir + sudo mount -t ceph {path} -o name=alice,secret='{access_key}' testdir + +Where the path is the path to the share from the previous step, and the secret +is the access key for the user alice. + +Then create a file in the share: + +.. code-block:: bash + + sudo touch testdir/testfile + +SSH into the second instance, create a directory for the share, and mount it: + +.. code-block:: bash + + mkdir testdir + sudo mount -t ceph {path} -o name=bob,secret='{access_key}' testdir + +Where the path is the same as before, and the secret is the access key for the +user bob. + +Then check that the file created in the first instance is visible in the second +instance: + +.. code-block:: bash + + ls testdir + +If it shows the test file then the share is working correctly. diff --git a/etc/kayobe/ansible/cephadm-commands.yml b/etc/kayobe/ansible/cephadm-commands-post.yml similarity index 52% rename from etc/kayobe/ansible/cephadm-commands.yml rename to etc/kayobe/ansible/cephadm-commands-post.yml index 32742a343..fbca30dfd 100644 --- a/etc/kayobe/ansible/cephadm-commands.yml +++ b/etc/kayobe/ansible/cephadm-commands-post.yml @@ -1,5 +1,5 @@ --- -- name: Ensure additional Ceph commands are run +- name: Ensure additional Ceph commands are run after post-deployment configuration gather_facts: false hosts: mons become: true @@ -9,3 +9,5 @@ tasks: - import_role: name: stackhpc.cephadm.commands + vars: + cephadm_commands: "{{ cephadm_commands_post }}" diff --git a/etc/kayobe/ansible/cephadm-commands-pre.yml b/etc/kayobe/ansible/cephadm-commands-pre.yml new file mode 100644 index 000000000..08047cc51 --- /dev/null +++ b/etc/kayobe/ansible/cephadm-commands-pre.yml @@ -0,0 +1,13 @@ +--- +- name: Ensure additional Ceph commands are run before post-deployment configuration + gather_facts: false + hosts: mons + become: true + tags: + - cephadm + - cephadm-commands + tasks: + - import_role: + name: stackhpc.cephadm.commands + vars: + cephadm_commands: "{{ cephadm_commands_pre }}" diff --git a/etc/kayobe/ansible/cephadm.yml b/etc/kayobe/ansible/cephadm.yml index 1cb4d56e9..b699df153 100644 --- a/etc/kayobe/ansible/cephadm.yml +++ b/etc/kayobe/ansible/cephadm.yml @@ -1,8 +1,9 @@ --- # Deploy Ceph via Cephadm. Create EC profiles, CRUSH rules, pools and keys. - import_playbook: cephadm-deploy.yml -- import_playbook: cephadm-commands.yml +- import_playbook: cephadm-commands-pre.yml - import_playbook: cephadm-ec-profiles.yml - import_playbook: cephadm-crush-rules.yml - import_playbook: cephadm-pools.yml - import_playbook: cephadm-keys.yml +- import_playbook: cephadm-commands-post.yml diff --git a/etc/kayobe/ansible/scripts/smartmon.sh b/etc/kayobe/ansible/scripts/smartmon.sh index 32b3ea81c..c08c46e60 100644 --- a/etc/kayobe/ansible/scripts/smartmon.sh +++ b/etc/kayobe/ansible/scripts/smartmon.sh @@ -106,6 +106,7 @@ parse_smartctl_scsi_attributes() { } parse_smartctl_info() { + shopt -s nocasematch local -i smart_available=0 smart_enabled=0 smart_healthy= local disk="$1" disk_type="$2" local model_family='' device_model='' serial_number='' fw_version='' vendor='' product='' revision='' lun_id='' @@ -199,4 +200,4 @@ for device in ${device_list}; do exit ;; esac -done | format_output \ No newline at end of file +done | format_output diff --git a/etc/kayobe/ansible/write-kolla-tag.yml b/etc/kayobe/ansible/write-kolla-tag.yml deleted file mode 100644 index e0099bb87..000000000 --- a/etc/kayobe/ansible/write-kolla-tag.yml +++ /dev/null @@ -1,19 +0,0 @@ ---- -- name: Write out value of kolla_tag - hosts: localhost - gather_facts: no - vars: - kolla_tag_dest: ~/kolla_tag - tasks: - - name: Query image tag - shell: - cmd: >- - grep '^tag' {{ kolla_build_config_path }}/kolla-build.conf | - sed 's/tag\s=\s\(.*\)/\1/' - become: true - register: tag - - - name: Write out value of kolla_tag - copy: - content: "{{ tag.stdout }}" - dest: "{{ kolla_tag_dest }}" diff --git a/etc/kayobe/cephadm.yml b/etc/kayobe/cephadm.yml index 4f5f0ed7c..ae06880ca 100644 --- a/etc/kayobe/cephadm.yml +++ b/etc/kayobe/cephadm.yml @@ -60,9 +60,12 @@ cephadm_cluster_network: "{{ storage_mgmt_net_name | net_cidr }}" # List of Cephx keys. See stackhpc.cephadm.keys role for format. #cephadm_keys: -# A list of commands to pass to cephadm shell -- ceph. See stackhpc.cephadm.commands -# for format. -#cephadm_commands: +# A list of commands to pass to cephadm shell -- ceph. See +# stackhpc.cephadm.commands for format. Pre commands run before the rest of the +# post-deployment configuration, post commands run after the rest of the +# post-deployment configuration. +#cephadm_commands_pre: +#cephadm_commands_post: ############################################################################### # Kolla Ceph auto-configuration. diff --git a/etc/kayobe/environments/ci-multinode/cephadm.yml b/etc/kayobe/environments/ci-multinode/cephadm.yml index addb37ddf..7885a5735 100644 --- a/etc/kayobe/environments/ci-multinode/cephadm.yml +++ b/etc/kayobe/environments/ci-multinode/cephadm.yml @@ -35,6 +35,12 @@ cephadm_pools: - name: vms application: rbd state: present + - name: cephfs_data + application: cephfs + state: "{{ 'present' if (kolla_enable_manila | bool and kolla_enable_manila_backend_cephfs_native | bool) else 'absent' }}" + - name: cephfs_metadata + application: cephfs + state: "{{ 'present' if (kolla_enable_manila | bool and kolla_enable_manila_backend_cephfs_native | bool) else 'absent' }}" # List of Cephx keys. See stackhpc.cephadm.keys role for format. cephadm_keys: @@ -56,3 +62,16 @@ cephadm_keys: osd: "profile rbd pool=images" mgr: "profile rbd pool=images" state: present + - name: client.manila + caps: + mon: "allow r" + mgr: "allow rw" + state: "{{ 'present' if (kolla_enable_manila | bool and kolla_enable_manila_backend_cephfs_native | bool) else 'absent' }}" + +# List of Cephadm commands to run. See stackhpc.cephadm.commands role for format. +cephadm_commands_pre: [] + +cephadm_commands_post: "{{ cephadm_commands_manila_cephfs_native if (kolla_enable_manila | bool and kolla_enable_manila_backend_cephfs_native | bool) else [] }}" +cephadm_commands_manila_cephfs_native: + - "fs new manila-cephfs cephfs_metadata cephfs_data" + - "orch apply mds manila-cephfs" diff --git a/etc/kayobe/environments/ci-multinode/inventory/group_vars/seed/network-interfaces b/etc/kayobe/environments/ci-multinode/inventory/group_vars/seed/network-interfaces index 0c868b110..a918946eb 100644 --- a/etc/kayobe/environments/ci-multinode/inventory/group_vars/seed/network-interfaces +++ b/etc/kayobe/environments/ci-multinode/inventory/group_vars/seed/network-interfaces @@ -10,6 +10,10 @@ external_interface: "{{ vxlan_interfaces[0].device }}.{{ external_vlan }}" public_interface: "{{ vxlan_interfaces[0].device }}.{{ public_vlan }}" +# The storage interface is required for routing manila traffic between VMs and +# the Storage nodes. +storage_interface: "{{ vxlan_interfaces[0].device }}.{{ storage_vlan }}" + ############################################################################### # Dummy variable to allow Ansible to accept this file. workaround_ansible_issue_8743: yes diff --git a/etc/kayobe/environments/ci-multinode/kolla.yml b/etc/kayobe/environments/ci-multinode/kolla.yml index 97ab76f48..ed2de9f21 100644 --- a/etc/kayobe/environments/ci-multinode/kolla.yml +++ b/etc/kayobe/environments/ci-multinode/kolla.yml @@ -5,3 +5,7 @@ kolla_enable_neutron_provider_networks: true kolla_enable_ovn: true kolla_enable_octavia: true kolla_enable_magnum: true + +# The multinode environment supports Manila but it is not enabled by default. +# kolla_enable_manila: true +# kolla_enable_manila_backend_cephfs_native: true diff --git a/etc/kayobe/environments/ci-multinode/kolla/globals.yml b/etc/kayobe/environments/ci-multinode/kolla/globals.yml index bd726ddc5..e0766e7fe 100644 --- a/etc/kayobe/environments/ci-multinode/kolla/globals.yml +++ b/etc/kayobe/environments/ci-multinode/kolla/globals.yml @@ -22,3 +22,6 @@ es_heap_size: 1g octavia_auto_configure: "no" octavia_provider_drivers: "ovn:OVN provider" octavia_provider_agents: "ovn" + +# Manila CephFS configuration +manila_cephfs_filesystem_name: manila-cephfs diff --git a/etc/kayobe/environments/ci-multinode/seed.yml b/etc/kayobe/environments/ci-multinode/seed.yml index 3eb7afa90..749c398d1 100644 --- a/etc/kayobe/environments/ci-multinode/seed.yml +++ b/etc/kayobe/environments/ci-multinode/seed.yml @@ -3,12 +3,29 @@ seed_bootstrap_user: "{{ os_distribution if os_distribution == 'ubuntu' else 'cl seed_lvm_groups: - "{{ stackhpc_lvm_group_rootvg }}" +seed_extra_network_interfaces: > + "{{ seed_extra_network_interfaces_external + + (seed_extra_network_interfaces_manila if (kolla_enable_manila | bool and kolla_enable_manila_backend_cephfs_native | bool) else []) }}" + # Seed has been provided an external interface # for tempest tests and SSH access to machines. -seed_extra_network_interfaces: +seed_extra_network_interfaces_external: - "external" - "public" +# Seed requires access to the storage network for manila-cephfs. +seed_extra_network_interfaces_manila: + - "storage" + # Enable IP routing and source NAT on the seed, allowing it to be used as the # external subnet gateway and provide internet access for VMs in the deployment. seed_enable_snat: true + +snat_rules_default: + - interface: "{{ ansible_facts.default_ipv4.interface }}" + source_ip: "{{ ansible_facts.default_ipv4.address }}" +snat_rules_manila: + - interface: "{{ storage_interface }}" + source_ip: "{{ ansible_facts[storage_interface].ipv4.address }}" +# Only add the storage snat rule if we are using manila-cephfs. +snat_rules: "{{ snat_rules_default + snat_rules_manila if (kolla_enable_manila | bool and kolla_enable_manila_backend_cephfs_native | bool) else snat_rules_default }}" diff --git a/etc/kayobe/hooks/overcloud-container-image-build/post.d/50-write-kolla-tag.yml b/etc/kayobe/hooks/overcloud-container-image-build/post.d/50-write-kolla-tag.yml deleted file mode 120000 index c685974a2..000000000 --- a/etc/kayobe/hooks/overcloud-container-image-build/post.d/50-write-kolla-tag.yml +++ /dev/null @@ -1 +0,0 @@ -../../../ansible/write-kolla-tag.yml \ No newline at end of file diff --git a/etc/kayobe/hooks/seed-container-image-build/post.d/50-write-kolla-tag.yml b/etc/kayobe/hooks/seed-container-image-build/post.d/50-write-kolla-tag.yml deleted file mode 120000 index c685974a2..000000000 --- a/etc/kayobe/hooks/seed-container-image-build/post.d/50-write-kolla-tag.yml +++ /dev/null @@ -1 +0,0 @@ -../../../ansible/write-kolla-tag.yml \ No newline at end of file diff --git a/etc/kayobe/kolla/config/grafana/dashboards/openstack/hardware_overview.json b/etc/kayobe/kolla/config/grafana/dashboards/openstack/hardware_overview.json index 63bbf4af3..60649ff28 100644 --- a/etc/kayobe/kolla/config/grafana/dashboards/openstack/hardware_overview.json +++ b/etc/kayobe/kolla/config/grafana/dashboards/openstack/hardware_overview.json @@ -530,7 +530,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "smartmon_temperature_case_raw_value{instance=~\"$node\"}", + "expr": "smartmon_temperature_case_raw_value{instance=~\"$node\"} or smartmon_temperature_celsius_raw_value{instance=~\"$node\"}", "format": "table", "hide": false, "instant": true, @@ -664,7 +664,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "avg_over_time(smartmon_temperature_case_raw_value{instance=~\"$node\"}[1h])", + "expr": "avg_over_time(smartmon_temperature_case_raw_value{instance=~\"$node\"}[1h]) or avg_over_time(smartmon_temperature_celsius_raw_value{instance=~\"$node\"}[1h])", "instant": false, "interval": "", "legendFormat": "{{instance}} - {{disk}} - {{serial_number}}", @@ -752,4 +752,4 @@ "version": 5, "weekStart": "" } -{% endraw %} \ No newline at end of file +{% endraw %} diff --git a/releasenotes/notes/fix-hardware-overview-dashboard-temp-ecc047ba46305668.yaml b/releasenotes/notes/fix-hardware-overview-dashboard-temp-ecc047ba46305668.yaml new file mode 100644 index 000000000..6a395888b --- /dev/null +++ b/releasenotes/notes/fix-hardware-overview-dashboard-temp-ecc047ba46305668.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Fixes the hardware overview dashboard to use the correct metric for + displaying drive temps. Now uses an `or` to display whichever metric + is compatible with the drives in the system. The two metrics are + temperature_case_raw_value and temperature_celsius_raw_value. diff --git a/releasenotes/notes/fix-smartmon-script-db2a38df1b245e58.yaml b/releasenotes/notes/fix-smartmon-script-db2a38df1b245e58.yaml new file mode 100644 index 000000000..b71a5c439 --- /dev/null +++ b/releasenotes/notes/fix-smartmon-script-db2a38df1b245e58.yaml @@ -0,0 +1,9 @@ +--- +fixes: + - | + Fixes the smartmon script to be case insensitive when checking for + the inital SMART info. This is to ensure that the script works + correctly on systems where the output of `smartctl -i` is not + capitalised as previously expected by the script. This leads to + badly formatted .prom files which lead to node_exporter failing to + scrape the file. diff --git a/releasenotes/notes/manila-for-multinode-df2186276c6b434a.yaml b/releasenotes/notes/manila-for-multinode-df2186276c6b434a.yaml new file mode 100644 index 000000000..6952fe9bc --- /dev/null +++ b/releasenotes/notes/manila-for-multinode-df2186276c6b434a.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + Adds support for Manila in the ci-multinode environment using the CephFS + native backend. This is disabled by default, but can be enabled by setting + the following variables in the kayobe configuration: + `kolla_enable_manila: true` + `kolla_enable_manila_backend_cephfs_native: true` diff --git a/releasenotes/notes/split-cephadm-commands-pre-post-bddd25b8bd171ab0.yaml b/releasenotes/notes/split-cephadm-commands-pre-post-bddd25b8bd171ab0.yaml new file mode 100644 index 000000000..c39ffa43a --- /dev/null +++ b/releasenotes/notes/split-cephadm-commands-pre-post-bddd25b8bd171ab0.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + Split `cephadm_commands` into `cephadm_commands_pre` and + `cephadm_commands_post` commands. This allows the user to run commands that + must be run before the rest of the post-deployment configuration, as well + as commands that rely on resources created by the post-deployment config. +