--- name: cosa-platforms description: Build disk images, upload to cloud providers, and run tests or spawn instances on non-QEMU platforms (AWS, GCP, Azure, ISO, metal, etc.) --- # Platform Images and Cloud Testing with cosa This skill covers working with non-QEMU platforms in coreos-assembler: building platform-specific disk images, uploading them to cloud providers, running kola tests on cloud platforms, and spawning interactive cloud instances. ## Related skills - Load the **cosa-basics** skill for workdir setup, the `cosa()` bash alias, and general build workflow. - Load the **cosa-kola** skill for general kola test mechanics (test discovery, result inspection, common flags, external tests). - This skill adds the platform-specific details on top of those. ## Key documentation references Do NOT duplicate these docs. Read them at runtime for command details: | File | What it covers | |------|----------------| | `docs/mantle/credentials.md` | Credential setup for all platforms (AWS, Azure, GCP, OpenStack, DO, ESX, etc.) | | `docs/cosa.md` | Command reference including `osbuild` and `imageupload-*` | | `docs/cosa/imageupload-aws.md` | AWS AMI upload (IAM permissions, credentials) | | `docs/cosa/osbuild-secex.md` | IBM Secure Execution image building | | `docs/cosa/run.md` | `cosa run` (QEMU-only) and `kola spawn` for cloud instances | | `docs/kola.md` ("Run tests on cloud platforms") | Cloud testing examples for AWS, GCP, Azure | | `mantle/cmd/kola/options.go` | Source of truth for all platform-specific flags | ## Supported platforms Kola supports the following platforms via the `-p`/`--platform` flag: | Platform | `-p` value | Image flag | Default credentials | |----------|-----------|------------|-------------------| | AWS | `aws` | `--aws-ami` | `~/.aws/credentials` | | Azure | `azure` | `--azure-disk-uri` | `~/.azure/azureCreds.json` | | DigitalOcean | `do` | `--do-image` | `~/.config/digitalocean.json` | | ESX/VMware | `esx` | `--esx-base-vm` | `~/.config/esx.json` | | GCP | `gcp` | `--gcp-image` | GCP service account JSON key | | OpenStack | `openstack` | `--openstack-image` | `~/.config/openstack.json` | | QEMU | `qemu` | `--qemu-image` | (none) | | QEMU ISO | `qemu-iso` | `--qemu-iso` | (none) | Read `docs/mantle/credentials.md` for full credential setup details per platform, and `mantle/cmd/kola/options.go` or `cosa kola run -h` for the complete flag list. ## Workflow ### Step 1: Build the platform image ``` cosa osbuild ``` Use `cosa osbuild --supported-platforms` to list all available platforms. Multiple platforms can be built in one invocation: ``` cosa osbuild aws azure gcp ``` This creates disk images in the appropriate format for each platform (e.g. VMDK for AWS, VHD for Azure, tar.gz for GCP, raw for metal). ### Step 2: Upload to the cloud provider For cloud platforms that require image upload: ``` cosa imageupload- ``` Available upload targets: `aliyun`, `aws`, `azure`, `gcp`, `powervs`. Read `docs/cosa/imageupload-aws.md` for AWS-specific IAM and credential setup. Not all platforms have an `imageupload-*` command; for those that don't, use `ore` directly or upload manually. ### Step 3: Set up credentials Read `docs/mantle/credentials.md` for per-platform credential configuration. Each platform has its own credential file format and default location (see the table above). ### Step 4: Run tests on a cloud platform ``` cosa kola run -p [platform-specific flags] ``` Examples: ``` # AWS cosa kola run -p aws --aws-ami --aws-region us-east-1 basic # GCP cosa kola run -p gcp --gcp-image --gcp-json-key --gcp-project basic # Azure cosa kola run -p azure --azure-credentials --azure-disk-uri basic ``` Read `docs/kola.md` ("Run tests on cloud platforms") for more examples. For the full list of flags per platform, read `mantle/cmd/kola/options.go` or run `cosa kola run -h`. ### Step 5: Spawn instances for interactive debugging ``` cosa kola spawn -p [platform-specific flags] ``` This launches an instance and opens an SSH shell without running tests. Useful for interactive debugging. Key flags: | Flag | Purpose | |------|---------| | `--shell` / `-s` | Open an SSH shell (default: true) | | `--detach` / `-t` | Spawn in the background (implies `--shell=false --remove=false --verbose --keys`) | | `--remove=false` | Keep the instance running after the shell exits | | `--keys` / `-k` | Inject SSH keys from the agent and `~/.ssh/` | | `--nodecount` / `-c` | Number of instances to spawn | | `--userdata` / `-u` | Path to Ignition/Butane config for the instance | | `--ssh-command` / `-x` | Run a command over SSH instead of opening a shell | Note: `--reconnect` is only available on QEMU platforms. Read `docs/cosa/run.md` ("Running on cloud platforms") for more details. ## Important notes - `cosa run` is QEMU-only. For all other platforms, use `cosa kola run -p ` (for tests) or `cosa kola spawn -p ` (for interactive instances). - When a cosa build exists in the workdir, kola auto-fills platform image references from the build metadata (e.g. AMI for AWS, image name for GCP). This means you may not need to specify `--aws-ami` etc. if the build already has that info in `meta.json`. Check `builds///meta.json` to see if the cloud image info is present. - If images already exist in the cloud for a build, you can skip both `cosa osbuild` and `cosa imageupload-*` entirely. Just fetch the build metadata with a lightweight `cosa buildfetch` (no `--artifact` or `--decompress` needed): ``` cosa buildfetch -b ``` Without `--artifact`, this only downloads a few small metadata files (`meta.json`, `commitmeta.json`, etc.) -- not any disk images. The `meta.json` contains the cloud image references (AMI IDs, GCP image names, etc.) and kola will pick them up automatically when you run `cosa kola run -p `. - Instance types default to reasonable values per platform and architecture (e.g. `m5.large` for AWS x86_64, `c6g.xlarge` for aarch64). Override with platform-specific type flags (e.g. `--aws-type`, `--gcp-machinetype`, `--azure-size`).