| #cloud-config |
| # |
| # Copyright 2024 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. |
| |
| write_files: |
| - path: /tmp/gpu-installer-test/test.sh |
| permissions: 0644 |
| owner: root |
| content: | |
| #!/bin/bash |
| set -o errexit |
| set -o pipefail |
| |
| fail() { |
| echo "TestFail: $@" |
| exit 1 |
| } |
| |
| # Sets up the Docker environment and fetches metadata values necessary for configuring the COS GPU installer. |
| setUp() { |
| export DOCKER_CONFIG=/mnt/stateful_partition/docker-config |
| mkdir -p $DOCKER_CONFIG |
| if ! docker-credential-gcr configure-docker; then |
| fail "Docker credentials configuration failed." |
| fi |
| |
| # Fetching metadata values |
| BUILD_GCR=$(curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/attributes/build-gcr) |
| TAG=$(curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/attributes/tag) |
| docker pull ${BUILD_GCR}/cos-gpu-installer:${TAG} |
| } |
| |
| # Installation of GPU driver |
| installGPUDriver() { |
| if ! COS_GPU_INSTALLER=${BUILD_GCR}/cos-gpu-installer:${TAG} cos-extensions install gpu; then |
| fail "GPU driver installation failed." |
| else |
| echo "GPU driver installation succeeded." |
| fi |
| } |
| |
| # Test if NVIDIA kernel modules are loaded |
| testNvidiaKernelModules() { |
| if ! lsmod | grep -q "nvidia"; then |
| fail "NVIDIA kernel modules are not loaded." |
| else |
| echo "NVIDIA kernel modules test passed." |
| fi |
| } |
| |
| # Test NVIDIA SMI |
| testNvidiaSMI() { |
| if ! /var/lib/nvidia/bin/nvidia-smi; then |
| fail "NVIDIA SMI failed" |
| else |
| echo "NVIDIA SMI test passed" |
| fi |
| } |
| |
| main() { |
| setUp |
| installGPUDriver |
| testNvidiaKernelModules |
| testNvidiaSMI |
| } |
| main 2>&1 | sed "s/^/TestStatus: /" |
| echo "TestPass: all tests passed" |
| |
| |
| - path: /etc/systemd/system/gpu-install-test.service |
| permissions: 0644 |
| owner: root |
| content: | |
| [Unit] |
| Description=Preloader test |
| Wants=network-online.target gcr-online.target docker.service |
| After=network-online.target gcr-online.target docker.service |
| |
| [Service] |
| Type=oneshot |
| RemainAfterExit=yes |
| User=root |
| ExecStart=/bin/bash /tmp/gpu-installer-test/test.sh |
| StandardOutput=tty |
| StandardError=tty |
| TTYPath=/dev/ttyS0 |
| |
| runcmd: |
| - systemctl daemon-reload |
| - systemctl --no-block start gpu-install-test.service |