-
Notifications
You must be signed in to change notification settings - Fork 313
Add storage pool blueprints and integration tests for VM, GKE, and Slurm #6150
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
rahimkhan19
wants to merge
40
commits into
GoogleCloudPlatform:develop
Choose a base branch
from
rahimkhan19:pd-integration-tests
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
40 commits
Select commit
Hold shift + click to select a range
7146e52
feat: add support for storage pools to boot and additional persistent…
rahimkhan19 b8f111f
feat: migrate additional disks to google-beta provider and add Hyperd…
rahimkhan19 d8ec71c
refactor: move storage pool validation to root resource
rahimkhan19 a561161
fix: add null check to storage pool precondition
rahimkhan19 648eb8b
feat: add support for GKE storage pools in node pools and storage cla…
rahimkhan19 b8ff09e
chore: updarted readme
rahimkhan19 ad47a85
feat: allow empty strings for disk storage pool configuration
rahimkhan19 45add66
feat: add support for Hyperdisk storage pools to Slurm controller, lo…
rahimkhan19 78d1101
use try() blocks instead of lookup()
rahimkhan19 c7a348a
feat: add disk_storage_pool support to slurm-gcp modules and instance…
rahimkhan19 81bb7dc
update storage pool descriptions and restrict validation to hyperdisk…
rahimkhan19 1397b5b
clarify storage pool requirements in vm-instance variables
rahimkhan19 3a726c7
fix: simplify storage pool precondition logic and update additional_p…
rahimkhan19 a4406d2
restrict storage pool support to specific Hyperdisk types
rahimkhan19 bf24b49
clarify disk_storage_pool requirements
rahimkhan19 f718258
fix: correct storage-pool parameter to storage-pools in GKE StorageCl…
rahimkhan19 3c92d75
chore: upgrade google provider to v5.30.0, migrate additional_disks t…
rahimkhan19 953a343
fix: restrict boot disk storage pools to hyperdisk-balanced
rahimkhan19 53bfb39
feat: add validation for hyperdisk-balanced boot disk requirements
rahimkhan19 dabd6a8
feat: add validation for Hyperdisk configurations
rahimkhan19 03bb78b
chore:update disk_storage_pool documentation in vm-instance module
rahimkhan19 b875856
docs: clarify storage pool hyperdisk limitations
rahimkhan19 9e25a0a
fix: set storage_pool to null when empty
rahimkhan19 41510eb
Merge pd-support branches
rahimkhan19 ef5c35a
Merge branch 'develop' of https://github.com/rahimkh-git/cluster-tool…
rahimkhan19 1d3ee76
Merge branch 'develop' of https://github.com/rahimkh-git/cluster-tool…
rahimkhan19 4024c4b
Merge branch 'develop' of https://github.com/rahimkh-git/cluster-tool…
rahimkhan19 d479bc7
added integration test and blueprint for vm storage pools
rahimkhan19 621e7c3
feat: GKE storage pool blueprint and integration test updates
rahimkhan19 88fbced
feat: rename vm storage
rahimkhan19 5e8ccd6
feat: slurm storage pool blueprint and integration changes
rahimkhan19 b8dda55
fix: update storage-slurm configuration, standardize test file extens…
rahimkhan19 c2be4a4
Merge branch 'develop' of https://github.com/rahimkh-git/cluster-tool…
rahimkhan19 ff34947
refactor: update storage pool validation to check instance templates
rahimkhan19 4496e70
refactor: rename storage blueprint, add storage-vm example, update do…
rahimkhan19 79d9693
refactor: update pod wait condition in validation playbooks
rahimkhan19 8621d3e
fix: update instance template filter in storage validation
rahimkhan19 30f12a6
chore: increase storage pool capacity and throughput in daily tests
rahimkhan19 68931cf
feat: add node selector to GKE storage pool test
rahimkhan19 fb386ec
Merge branch 'develop' of https://github.com/rahimkh-git/cluster-tool…
rahimkhan19 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,48 @@ | ||
| # Copyright 2026 Google LLC | ||
| # | ||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||
| # you may not use this file except in compliance with the License. | ||
| # You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
|
|
||
| --- | ||
| blueprint_name: storage-vm | ||
|
rahimkhan19 marked this conversation as resolved.
|
||
| vars: | ||
| project_id: ## Set GCP Project ID Here ## | ||
| deployment_name: vm-storage | ||
| region: us-central1 | ||
| zone: us-central1-b | ||
| test_name: vm-storage | ||
| network_name: default-net | ||
| hyperdisk_balanced_storage_pool: projects/$(vars.project_id)/zones/$(vars.zone)/storagePools/your-pool-balanced | ||
| hyperdisk_throughput_storage_pool: projects/$(vars.project_id)/zones/$(vars.zone)/storagePools/your-pool-throughput | ||
|
|
||
| deployment_groups: | ||
| - group: primary | ||
| modules: | ||
| - id: network | ||
| source: modules/network/vpc | ||
| settings: | ||
| network_name: $(vars.network_name) | ||
| network_description: "Test network for $(vars.test_name) in $(vars.region)" | ||
| - id: vm | ||
| source: modules/compute/vm-instance | ||
| use: | ||
| - network | ||
| settings: | ||
| machine_type: c3d-standard-4 | ||
| instance_count: 1 | ||
| disk_type: hyperdisk-balanced | ||
| disk_storage_pool: $(vars.hyperdisk_balanced_storage_pool) | ||
| additional_persistent_disks: | ||
| count: 1 | ||
| type: hyperdisk-throughput | ||
| size: 2048 | ||
| storage_pool: $(vars.hyperdisk_throughput_storage_pool) | ||
163 changes: 163 additions & 0 deletions
163
tools/cloud-build/daily-tests/ansible_playbooks/test-validation/test-gke-storage-pool.yml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,163 @@ | ||
| # Copyright 2026 Google LLC | ||
| # | ||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||
| # you may not use this file except in compliance with the License. | ||
| # You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
|
|
||
| --- | ||
| - name: Verify GKE Node Pool Storage Pool | ||
| delegate_to: localhost | ||
| ansible.builtin.shell: | | ||
| # The cluster name defaults to deployment_name in our GKE module | ||
| gcloud container node-pools describe hp-pool --cluster {{ deployment_name }} --region {{ region }} --project {{ project }} --format="value(config.storagePools)" | ||
| register: gke_node_pool | ||
| changed_when: false | ||
| # Ignore errors in case the cluster is zonal instead of regional, and try zonal | ||
| ignore_errors: true | ||
|
|
||
| - name: Verify GKE Node Pool Storage Pool (Zonal Fallback) | ||
| delegate_to: localhost | ||
| ansible.builtin.shell: | | ||
| gcloud container node-pools describe hp-pool --cluster {{ deployment_name }} --zone {{ zone }} --project {{ project }} --format="value(config.storagePools)" | ||
| register: gke_node_pool_zonal | ||
| changed_when: false | ||
| when: gke_node_pool.failed | ||
|
|
||
| - name: Set GKE Node Pool Result | ||
| delegate_to: localhost | ||
| ansible.builtin.set_fact: | ||
| gke_node_pool_output: "{{ gke_node_pool.stdout if not gke_node_pool.failed else gke_node_pool_zonal.stdout }}" | ||
|
|
||
| - name: Assert GKE Node Pool uses Balanced Storage Pool | ||
| delegate_to: localhost | ||
| ansible.builtin.assert: | ||
| that: | ||
| - hyperdisk_balanced_pool in gke_node_pool_output | ||
|
|
||
|
|
||
| - name: Authenticate to GKE Cluster (Regional) | ||
| delegate_to: localhost | ||
| ansible.builtin.shell: | | ||
| gcloud container clusters get-credentials {{ deployment_name }} --region {{ region }} --project {{ project }} | ||
| register: gke_auth | ||
| changed_when: false | ||
| ignore_errors: true | ||
|
|
||
| - name: Authenticate to GKE Cluster (Zonal Fallback) | ||
| delegate_to: localhost | ||
| ansible.builtin.shell: | | ||
| gcloud container clusters get-credentials {{ deployment_name }} --zone {{ zone }} --project {{ project }} | ||
| changed_when: false | ||
| when: gke_auth.failed | ||
|
|
||
| - name: Verify StorageClass contains storage-pools (Balanced) | ||
| delegate_to: localhost | ||
| ansible.builtin.shell: | | ||
| kubectl get sc hyperdisk-balanced-sc -o yaml | ||
| register: sc_balanced | ||
| changed_when: false | ||
|
|
||
| - name: Assert StorageClass contains storage-pools (Balanced) | ||
| delegate_to: localhost | ||
| ansible.builtin.assert: | ||
| that: | ||
| - "'storage-pools: projects/{{ project }}' in sc_balanced.stdout" | ||
| - hyperdisk_balanced_pool in sc_balanced.stdout | ||
|
|
||
| - name: Verify StorageClass contains storage-pools (Throughput) | ||
| delegate_to: localhost | ||
| ansible.builtin.shell: | | ||
| kubectl get sc hyperdisk-throughput-sc -o yaml | ||
| register: sc_throughput | ||
| changed_when: false | ||
|
|
||
| - name: Assert StorageClass contains storage-pools (Throughput) | ||
| delegate_to: localhost | ||
| ansible.builtin.assert: | ||
| that: | ||
| - "'storage-pools: projects/{{ project }}' in sc_throughput.stdout" | ||
| - hyperdisk_throughput_pool in sc_throughput.stdout | ||
|
|
||
| - name: Deploy Test Pod to trigger PVC binding | ||
| delegate_to: localhost | ||
| ansible.builtin.shell: | | ||
| cat <<'POD' | kubectl apply -f - | ||
| apiVersion: v1 | ||
| kind: Pod | ||
| metadata: | ||
| name: test-hd-pod | ||
| spec: | ||
| containers: | ||
| - name: test | ||
| image: busybox | ||
| command: ["sleep", "3600"] | ||
| volumeMounts: | ||
| - mountPath: "/data-balanced" | ||
| name: vol-balanced | ||
| - mountPath: "/data-throughput" | ||
| name: vol-throughput | ||
| nodeSelector: | ||
| cloud.google.com/gke-nodepool: hp-pool | ||
| volumes: | ||
| - name: vol-balanced | ||
| persistentVolumeClaim: | ||
| claimName: hyperdisk-balanced-pvc-0 | ||
| - name: vol-throughput | ||
| persistentVolumeClaim: | ||
| claimName: hyperdisk-throughput-pvc-0 | ||
| POD | ||
| changed_when: true | ||
|
|
||
| - name: Wait for Test Pod to be Running (Binding PVCs) | ||
| delegate_to: localhost | ||
| ansible.builtin.shell: | | ||
| kubectl wait --for=condition=Ready pod/test-hd-pod --timeout=600s | ||
| changed_when: false | ||
|
|
||
| - name: Get Persistent Volume names (Balanced) | ||
| delegate_to: localhost | ||
| ansible.builtin.shell: | | ||
| kubectl get pvc hyperdisk-balanced-pvc-0 -o jsonpath='{.spec.volumeName}' | ||
| register: pv_balanced_name | ||
| changed_when: false | ||
|
|
||
| - name: Get Persistent Volume names (Throughput) | ||
| delegate_to: localhost | ||
| ansible.builtin.shell: | | ||
| kubectl get pvc hyperdisk-throughput-pvc-0 -o jsonpath='{.spec.volumeName}' | ||
| register: pv_throughput_name | ||
| changed_when: false | ||
|
|
||
| - name: Verify GCP Persistent Disk Placement (Balanced) | ||
| delegate_to: localhost | ||
| ansible.builtin.shell: | | ||
| gcloud compute disks describe {{ pv_balanced_name.stdout }} --zone {{ zone }} --project {{ project }} --format="value(storagePool)" | ||
| register: disk_pool_balanced | ||
| changed_when: false | ||
|
|
||
| - name: Assert Balanced Disk is in Storage Pool | ||
| delegate_to: localhost | ||
| ansible.builtin.assert: | ||
| that: | ||
| - hyperdisk_balanced_pool in disk_pool_balanced.stdout | ||
|
|
||
| - name: Verify GCP Persistent Disk Placement (Throughput) | ||
| delegate_to: localhost | ||
| ansible.builtin.shell: | | ||
| gcloud compute disks describe {{ pv_throughput_name.stdout }} --zone {{ zone }} --project {{ project }} --format="value(storagePool)" | ||
| register: disk_pool_throughput | ||
| changed_when: false | ||
|
|
||
| - name: Assert Throughput Disk is in Storage Pool | ||
| delegate_to: localhost | ||
| ansible.builtin.assert: | ||
| that: | ||
| - hyperdisk_throughput_pool in disk_pool_throughput.stdout |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.