-
Notifications
You must be signed in to change notification settings - Fork 262
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
🌱 ORC: Generate common parts of resource API #2203
🌱 ORC: Generate common parts of resource API #2203
Conversation
✅ Deploy Preview for kubernetes-sigs-cluster-api-openstack ready!
To edit notification comments on pull requests, go to your Netlify site configuration. |
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.
/approve
(tiny typo below)
// +kubebuilder:validation:Format:=uuid | ||
ID *string `json:"id,omitempty"` | ||
|
||
// Filter contains an resource query which is expected to return a single |
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.
// Filter contains an resource query which is expected to return a single | |
// Filter contains a resource query which is expected to return a single |
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: lentzi90 The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
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 is a great first step. Thank you for setting up this generator! I hope its life will be glorious and short, until we can use generics in the API.
// Import refers to an existing ORC object which will be imported instead of | ||
// creating a new resource. |
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.
An existing ORC object? Isn't this the ORC object?
// Import refers to an existing ORC object which will be imported instead of | |
// creating a new resource. | |
// Import refers to an existing OpenStack resource which will be imported instead of | |
// creating a new one. |
Filter *{{ .Name }}Filter `json:"filter,omitempty"` | ||
} | ||
|
||
// {{ .Name }}Spec defines the desired state of a ORC object. |
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.
a
or an
?
// | ||
// Resource may not be specified if the management policy is `unmanaged`. | ||
// | ||
// Resource must be specified when the management policy is `managed`. |
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.
Unless an arcane grammar rule applies here, can we use if
for both cases for consistency?
// Resource must be specified when the management policy is `managed`. | |
// Resource must be specified if the management policy is `managed`. |
|
||
// ManagementPolicy defines how ORC will treat the object. Valid values are | ||
// `managed`: ORC will create, update, and delete the resource; `unmanaged`: | ||
// ORC will import an existing resource, and will not apply updates to it or |
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.
Is "nor" a word you'd use here?
// ORC will import an existing resource, and will not apply updates to it or | |
// ORC will import an existing resource, and will not apply updates to it nor |
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.
Honestly I can't think of a practical case when I'd use 'nor' outside of formal logic except: neither this not that. It would be weird here.
// Progressing indicates the state of the OpenStack resource not currently | ||
// reflect the desired state, but that reconciliation is progressing. |
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.
Is it just me or this sentence reads weird?
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 does.
APIVersion: "v1alpha1", | ||
SpecExtraValidations: []specExtraValidation{ | ||
{ | ||
Rule: "!has(self.__import__) ? has(self.resource.content) : true", |
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 is a good first step, but going forward we probably want a more structured way to define required fields in the spec...
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 particular one is special because the Image controller is a snowflake. This is a controller-specific validation at the spec level. I don't expect this to be a common pattern.
codegen depends on interfaces generated by controller-gen. However, controller-gen will fail during code inspection if the applyconfiguration package does not already exist because it is imported by the code being inspected. This is a bootstrapping problem. We ensure the applyconfiguration package exists by adding a doc.go.
5d4c506
to
d5e31bb
Compare
/lgtm |
Just discovered a templating bug in this PR while adding subnet: the spec ends up on the same line as the previous validation. Will fix. |
d5e31bb
to
e4e85c3
Compare
/hold cancel |
/lgtm |
Adds a very simple code generator which simply uses a go template to generate the common parts of an ORC resource API.
My preference was to do this with generics, but for now this breaks controller-tools: kubernetes-sigs/controller-tools#844
/hold