-
Notifications
You must be signed in to change notification settings - Fork 565
[WIP] SPLAT-2206: Added AWS dedicated host support #2484
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?
Conversation
@vr4manta: This pull request references SPLAT-2206 which is a valid jira issue. Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.21.0" version, but no target version was set. In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
1 similar comment
@vr4manta: This pull request references SPLAT-2206 which is a valid jira issue. Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.21.0" version, but no target version was set. In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
Hello @vr4manta! Some important instructions when contributing to openshift/api: |
Does this API already exist upstream in CAPA? |
165b8e8
to
92afa52
Compare
@JoelSpeed Yes, this is already merged and pulled into OpenShift. Working on just the static version since dynamic is not finished upstream. |
/assign |
92afa52
to
f9a28b8
Compare
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: The full list of commands accepted by this bot can be found here.
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
f9a28b8
to
0fcff1c
Compare
0fcff1c
to
b088b27
Compare
// +kubebuilder:validation:Pattern=`^h-[0-9a-f]{17}$` | ||
// +kubebuilder:validation:MaxLength=19 | ||
// +openshift:enable:FeatureGate=AWSDedicatedHosts | ||
// +optional |
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.
Please include constraints, explained in plain sentences, in the GoDoc.
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.
I'll update this.
|
||
// hostID specifies the Dedicated Host on which the instance must be started. | ||
// This field is mutually exclusive with DynamicHostAllocation. | ||
// +kubebuilder:validation:Pattern=`^h-[0-9a-f]{17}$` |
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.
While I know that this is a machine API and as such the validations run through a webhook, we no longer recommend the use of the kubebuilder:validation:Pattern
marker and prefer using the kubebuilder:validation:XValidation
marker to write CEL expressions with more user-friendly error messages than what would be returned by the pattern marker.
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.
sure, i can make this change
// +kubebuilder:validation:MaxLength=19 | ||
// +openshift:enable:FeatureGate=AWSDedicatedHosts | ||
// +optional | ||
HostID *string `json:"hostID,omitempty"` |
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.
What is the difference between setting this to ""
and omitting the field entirely?
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.
There should be no difference. I would assume this field is not set if user not intending to place instances into a dedicated host.
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.
If there is no difference, this should not be a pointer and should have a minimum length of 1. This is probably what the linter is complaining about.
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.
Since this is validated by Go based webhooks, and not openapi, the linter is wrong on this one.
If we make this not a pointer, then the Go code has no way to know if this was deliberately set to ""
or not. We don't want ""
to be valid, so this needs to be a pointer so that we can check that.
In this case (and future cases like this in these providerspec APIs) we will want to make exceptions to the serialization rules on the linter.
We may want to even disable the serialization rules on these particular APIs somehow 🤔
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.
Ah, I went into standard API review mode here and forgot this API is webhook validation 🤦
Thanks for catching that!
We may want to even disable the serialization rules on these particular APIs somehow
Can we do this via codegen configurations?
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.
Can we do this via codegen configurations?
No, but we should be able to disable using the .golangci-lint.yaml
config, ideally we could have a different config for the APIs that act like this, these MAPI ones aren't the only ones (e.g. the aggregated APIs we support too)
// hostAffinity specifies the dedicated host affinity setting for the instance. | ||
// When HostAffinity is set to host, an instance started onto a specific host always restarts on the same host if stopped. | ||
// When HostAffinity is set to default, and you stop and restart the instance, it can be restarted on any available host. | ||
// When HostAffinity is defined, HostID is required. |
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.
Whether it is set to host
or default
, hostID
will be required?
Also, when referring to a field use the serialized form of the field name as that is what end-users would be familiar with:
// When HostAffinity is defined, HostID is required. | |
// When HostAffinity is defined, hostID is required. |
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.
Yes, if hostID
is set, this field will be could required. The idea was that if they do not set this field when hostID is set, it will default to host
behavior.
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.
To clarify, hostID
is required when hostAffinity
is set to host
and should be forbidden otherwise?
// When HostAffinity is defined, HostID is required. | ||
// +openshift:enable:FeatureGate=AWSDedicatedHosts | ||
// +optional | ||
HostAffinity *HostAffinity `json:"hostAffinity,omitempty"` |
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.
What happens if I don't supply this value?
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.
It will default to host
. I have been playing with trying to make linter happy with the configs today (which I put this into WIP). I will update the godoc to reflect this default behavior shortly.
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.
So are the options here actually omitted (i.e don't set hostAffinity
and hostID
to use default AWS affinity logic) and Host
(i.e I want it to use be assigned to this host)?
// hostAffinity specifies the dedicated host affinity setting for the instance. | ||
// When HostAffinity is set to host, an instance started onto a specific host always restarts on the same host if stopped. | ||
// When HostAffinity is set to default, and you stop and restart the instance, it can be restarted on any available host. | ||
// When HostAffinity is defined, HostID is required. |
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.
For enum fields we generally try to follow the pattern of:
hostAffinity ...
Allowed values are Host, Default, and omitted.
When set to Host, ...
When set to Default, ...
When omitted, ...
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.
Ok, i'll make this godoc update
) | ||
|
||
// HostAffinity describes the host affinity of an EC2 Instance | ||
// +kubebuilder:validation:Enum:=host;default;"" |
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.
Enums should be CamelCase:
// +kubebuilder:validation:Enum:=host;default;"" | |
// +kubebuilder:validation:Enum:=Host;Default;"" |
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.
I thought it should. I was copying what was in CAPA. I'll make these adjustments.
// HostAffinity describes the host affinity of an EC2 Instance | ||
// +kubebuilder:validation:Enum:=host;default;"" | ||
// +kubebuilder:default="" |
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.
How is setting ""
different than omitting the field that uses this type altogether?
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.
This was an attempt to make linter happy. I'll see if I can drop this which is what I am attempting.
@vr4manta: all tests passed! Full PR test history. Your PR dashboard. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here. |
SPLAT-2206
Changes