-
Notifications
You must be signed in to change notification settings - Fork 18
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
Installationoutputs custom resource #246
Merged
troy0820
merged 4 commits into
getporter:main
from
troy0820:troy0820/installation-outputs-crd
Aug 17, 2023
Merged
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
package v1 | ||
|
||
import ( | ||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
) | ||
|
||
const ( | ||
InstallationOutputSucceeded = "InstallationOutputSucceeded" | ||
AnnotationInstallationOutput = Prefix + "installationoutput" | ||
) | ||
|
||
type Output struct { | ||
Name string `json:"name"` | ||
Type string `json:"type"` | ||
Sensitive bool `json:"sensitive"` | ||
Value string `json:"value"` | ||
} | ||
|
||
// InstallationOutputSpec defines the desired state of InstallationOutput | ||
type InstallationOutputSpec struct { | ||
Name string `json:"name,omitempty"` | ||
|
||
Namespace string `json:"namespace,omitempty"` | ||
} | ||
|
||
// InstallationOutputStatus defines the observed state of InstallationOutput | ||
type InstallationOutputStatus struct { | ||
Phase AgentPhase `json:"phase,omitempty"` | ||
|
||
Conditions []metav1.Condition `json:"conditions,omitempty"` | ||
|
||
Outputs []Output `json:"outputs,omitempty"` | ||
|
||
OutputNames string `json:"outputNames,omitempty"` | ||
} | ||
|
||
//+kubebuilder:object:root=true | ||
//+kubebuilder:subresource:status | ||
|
||
// +kubebuilder:printcolumn:name="Porter Name",type="string",JSONPath=".spec.name" | ||
// +kubebuilder:printcolumn:name="Porter Namespace",type="string",JSONPath=".spec.namespace" | ||
// +kubebuilder:printcolumn:name="Phase",type="string",JSONPath=".status.phase" | ||
// +kubebuilder:printcolumn:name="Output Names",type="string",JSONPath=".status.outputNames",priority=1 | ||
// InstallationOutput is the Schema for the installationoutputs API | ||
type InstallationOutput struct { | ||
metav1.TypeMeta `json:",inline"` | ||
metav1.ObjectMeta `json:"metadata,omitempty"` | ||
|
||
Spec InstallationOutputSpec `json:"spec,omitempty"` | ||
Status InstallationOutputStatus `json:"status,omitempty"` | ||
} | ||
|
||
//+kubebuilder:object:root=true | ||
|
||
// InstallationOutputList contains a list of InstallationOutput | ||
type InstallationOutputList struct { | ||
metav1.TypeMeta `json:",inline"` | ||
metav1.ListMeta `json:"metadata,omitempty"` | ||
Items []InstallationOutput `json:"items"` | ||
} | ||
|
||
func init() { | ||
SchemeBuilder.Register(&InstallationOutput{}, &InstallationOutputList{}) | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
164 changes: 164 additions & 0 deletions
164
config/crd/bases/getporter.org_installationoutputs.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,164 @@ | ||
--- | ||
apiVersion: apiextensions.k8s.io/v1 | ||
kind: CustomResourceDefinition | ||
metadata: | ||
annotations: | ||
controller-gen.kubebuilder.io/version: v0.8.0 | ||
creationTimestamp: null | ||
name: installationoutputs.getporter.org | ||
spec: | ||
group: getporter.org | ||
names: | ||
kind: InstallationOutput | ||
listKind: InstallationOutputList | ||
plural: installationoutputs | ||
singular: installationoutput | ||
scope: Namespaced | ||
versions: | ||
- additionalPrinterColumns: | ||
- jsonPath: .spec.name | ||
name: Porter Name | ||
type: string | ||
- jsonPath: .spec.namespace | ||
name: Porter Namespace | ||
type: string | ||
- jsonPath: .status.phase | ||
name: Phase | ||
type: string | ||
- jsonPath: .status.outputNames | ||
name: Output Names | ||
priority: 1 | ||
type: string | ||
name: v1 | ||
schema: | ||
openAPIV3Schema: | ||
description: InstallationOutput is the Schema for the installationoutputs | ||
API | ||
properties: | ||
apiVersion: | ||
description: 'APIVersion defines the versioned schema of this representation | ||
of an object. Servers should convert recognized schemas to the latest | ||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' | ||
type: string | ||
kind: | ||
description: 'Kind is a string value representing the REST resource this | ||
object represents. Servers may infer this from the endpoint the client | ||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' | ||
type: string | ||
metadata: | ||
type: object | ||
spec: | ||
description: InstallationOutputSpec defines the desired state of InstallationOutput | ||
properties: | ||
name: | ||
type: string | ||
namespace: | ||
type: string | ||
type: object | ||
status: | ||
description: InstallationOutputStatus defines the observed state of InstallationOutput | ||
properties: | ||
conditions: | ||
items: | ||
description: "Condition contains details for one aspect of the current | ||
state of this API Resource. --- This struct is intended for direct | ||
use as an array at the field path .status.conditions. For example, | ||
\n type FooStatus struct{ // Represents the observations of a | ||
foo's current state. // Known .status.conditions.type are: \"Available\", | ||
\"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge | ||
// +listType=map // +listMapKey=type Conditions []metav1.Condition | ||
`json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" | ||
protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" | ||
properties: | ||
lastTransitionTime: | ||
description: lastTransitionTime is the last time the condition | ||
transitioned from one status to another. This should be when | ||
the underlying condition changed. If that is not known, then | ||
using the time when the API field changed is acceptable. | ||
format: date-time | ||
type: string | ||
message: | ||
description: message is a human readable message indicating | ||
details about the transition. This may be an empty string. | ||
maxLength: 32768 | ||
type: string | ||
observedGeneration: | ||
description: observedGeneration represents the .metadata.generation | ||
that the condition was set based upon. For instance, if .metadata.generation | ||
is currently 12, but the .status.conditions[x].observedGeneration | ||
is 9, the condition is out of date with respect to the current | ||
state of the instance. | ||
format: int64 | ||
minimum: 0 | ||
type: integer | ||
reason: | ||
description: reason contains a programmatic identifier indicating | ||
the reason for the condition's last transition. Producers | ||
of specific condition types may define expected values and | ||
meanings for this field, and whether the values are considered | ||
a guaranteed API. The value should be a CamelCase string. | ||
This field may not be empty. | ||
maxLength: 1024 | ||
minLength: 1 | ||
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ | ||
type: string | ||
status: | ||
description: status of the condition, one of True, False, Unknown. | ||
enum: | ||
- "True" | ||
- "False" | ||
- Unknown | ||
type: string | ||
type: | ||
description: type of condition in CamelCase or in foo.example.com/CamelCase. | ||
--- Many .condition.type values are consistent across resources | ||
like Available, but because arbitrary conditions can be useful | ||
(see .node.status.conditions), the ability to deconflict is | ||
important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) | ||
maxLength: 316 | ||
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ | ||
type: string | ||
required: | ||
- lastTransitionTime | ||
- message | ||
- reason | ||
- status | ||
- type | ||
type: object | ||
type: array | ||
outputNames: | ||
type: string | ||
outputs: | ||
items: | ||
properties: | ||
name: | ||
type: string | ||
sensitive: | ||
type: boolean | ||
type: | ||
type: string | ||
value: | ||
type: string | ||
required: | ||
- name | ||
- sensitive | ||
- type | ||
- value | ||
type: object | ||
type: array | ||
phase: | ||
description: AgentPhase are valid statuses of a Porter agent job that | ||
is managing a change to a Porter resource. | ||
type: string | ||
type: object | ||
type: object | ||
served: true | ||
storage: true | ||
subresources: | ||
status: {} | ||
status: | ||
acceptedNames: | ||
kind: "" | ||
plural: "" | ||
conditions: [] | ||
storedVersions: [] |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
Would you want to show the outputs with
-o wide
? Might be nice to add the outputs field with apriority=1
.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.
That's a good idea. I can update this and resolve when it's pushed.
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 don't believe that I can do this being that the column that would display the outputs would need to be able to handle the "array/slice" of "output". Currently the only supported fields are
I was thinking a list of strings comma separated would do but wouldn't be able to be surfaced from the kubebuilder directive.
Would the first output be sufficient?
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.
Yeah, I think you'd have to define another field where you format the string you'd want from the outputs, reconcile it each time, and have the print column reference the new field.
I don't think this should hold up this PR. I was just thinking about how it would feel using kubectl.
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 it's worth having for the user experience, the handling of that could be valuable for the user. That would be great to add in the WIP PR. I'm willing to add it there if it makes sense.
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.
Added
kubectl get installationoutput -A
kubectl get installationoutput -A -o wide
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.
More realistic version of what is to be expected:
kubectl get installationoutput -A -o wide