-
Notifications
You must be signed in to change notification settings - Fork 839
OCPSTRAT-3624: Add Licenses field to GCPDisk struct #2980
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
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -244,6 +244,21 @@ type GCPDisk struct { | |
| // encryptionKey is the customer-supplied encryption key of the disk. | ||
| // +optional | ||
| EncryptionKey *GCPEncryptionKeyReference `json:"encryptionKey,omitempty"` | ||
| // licenses is a list of URLs of license resources attached to this disk. | ||
| // License URLs must match either the full URL format | ||
| // (https://www.googleapis.com/compute/v1/projects/{project}/global/licenses/{license}) | ||
| // or the short self-link format (projects/{project}/global/licenses/{license}). | ||
| // Each license URL must be at least 1 character and must not exceed 256 characters. | ||
| // When specified, at least 1 and a maximum of 8 licenses may be provided. | ||
| // When omitted, no additional licenses are applied. | ||
| // +optional | ||
| // +listType=atomic | ||
| // +kubebuilder:validation:MinItems=1 | ||
| // +kubebuilder:validation:MaxItems=8 | ||
| // +kubebuilder:validation:items:MinLength=1 | ||
| // +kubebuilder:validation:items:MaxLength=256 | ||
| // +kubebuilder:validation:items:Pattern=`^https?://.+|projects/.+/global/licenses/.+$` | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think the coderabbit review is basically saying the same thing, but this doesn't enforce the documented URL formats. Suggestion via claude: Also, since this is a go field, we would need actual validation (I think in machine-api-operator?) implemented. openshift/machine-api-provider-gcp#184 doesn't cover it either I think
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Good catch — the current pattern This enforces both the full URL format ( Re: webhook validation in machine-api-operator — agreed, the kubebuilder marker gives CRD-level schema validation but doesn't cover runtime webhook validation. PR #184 only does the reconciler passthrough. I'll flag this as a follow-up item for the team to decide whether to add webhook validation in MAO or MAPG. Will push the Pattern fix shortly. AI-generated. Review for accuracy. |
||
| Licenses []string `json:"licenses,omitempty"` | ||
| } | ||
|
|
||
| // GCPMetadata describes metadata for GCP. | ||
|
|
||
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
Repository: openshift/api
Length of output: 50370
🏁 Script executed:
Repository: openshift/api
Length of output: 50370
🏁 Script executed:
Repository: openshift/api
Length of output: 1581
🏁 Script executed:
Repository: openshift/api
Length of output: 1568
🏁 Script executed:
Repository: openshift/api
Length of output: 4481
🌐 Web query:
Google Compute Engine API Disk resourcelicensesfield accepted URI format and license resource URL format💡 Result:
In the Google Compute Engine API, the licenses field in a Disk resource accepts a list of string values, where each string is the full URI of a License resource [1][2][3]. License Resource URI Format The standard URI format for a license resource is: https://www.googleapis.com/compute/v1/projects/{project}/global/licenses/{license_name} [2][4][5] In this structure: - {project}: The name of the project that owns the license (e.g., rhel-cloud, windows-cloud, suse-cloud) [2][4][5]. - {license_name}: The specific name of the license (e.g., rhel-9-server, windows-server-2022-dc) [2][4][5]. Usage in API Requests When updating or specifying licenses via the Compute Engine API (e.g., in a disks.update or disks.insert request), you provide the full URI string [2][6][5]. Example JSON body for a PATCH request: { "name": "DISK_NAME", "licenses": [ "https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-9-server" ] } [2][6][5] Note that while the API documentation sometimes refers to license "references" by their path suffix (e.g., projects/rhel-cloud/global/licenses/rhel-9-server) in descriptive text [2], the accepted format for the field in API request payloads is the fully qualified HTTPS URI [2][6][5]. Additionally, do not confuse the licenses field with the licenseCodes field, which accepts integer license codes instead of URI strings [1][7][4].
Citations:
🏁 Script executed:
Repository: openshift/api
Length of output: 3996
🏁 Script executed:
Repository: openshift/api
Length of output: 25705
🏁 Script executed:
Repository: openshift/api
Length of output: 50369
Enforce the documented GCP license URL contract.
The existing markers enforce only list size and item length. Add an anchored
+kubebuilder:validation:items:Patternallow-list for full GCP License resource URIs, and add invalid-value tests.🤖 Prompt for AI Agents
Sources: Path instructions, MCP tools