Skip to content

Commit

Permalink
chore(apis): Regenerate API types in accordance with openapi3 specifi…
Browse files Browse the repository at this point in the history
…cation

In kube 1.17, the openapi structural schema validation was updated to validate
CRDs according to the documented API semantics of x-kubernetes-list-type and
x-kubernetes-map-type atomic to reject non-atomic sub-types. This PR updates
the API types to follow the specification.
See kubernetes/kubernetes#84722 for more details.
  • Loading branch information
anik120 committed Mar 19, 2020
1 parent b4a603f commit fb47fbe
Show file tree
Hide file tree
Showing 13 changed files with 220 additions and 92 deletions.
1 change: 1 addition & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1179,6 +1179,7 @@ k8s.io/apimachinery v0.16.7/go.mod h1:Xk2vD2TRRpuWYLQNM6lT9R7DSFZUYG03SarNkbGrnK
k8s.io/apimachinery v0.17.1/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg=
k8s.io/apimachinery v0.17.3 h1:f+uZV6rm4/tHE7xXgLyToprg6xWairaClGVkm2t8omg=
k8s.io/apimachinery v0.17.3/go.mod h1:gxLnyZcGNdZTCLnq3fgzyg2A5BVCHTNDFrw8AmuJ+0g=
k8s.io/apimachinery v0.17.4 h1:UzM+38cPUJnzqSQ+E1PY4YxMHIzQyCg29LOoGfo79Zw=
k8s.io/apiserver v0.0.0-20190918160949-bfa5e2e684ad h1:IMoNR9pilTBaCS5WpwWnAdmoVYVeXowOD3bLrwxIAtQ=
k8s.io/apiserver v0.0.0-20190918160949-bfa5e2e684ad/go.mod h1:XPCXEwhjaFN29a8NldXA901ElnKeKLrLtREO9ZhFyhg=
k8s.io/apiserver v0.16.7/go.mod h1:/5zSatF30/L9zYfMTl55jzzOnx7r/gGv5a5wtRp8yAw=
Expand Down
4 changes: 2 additions & 2 deletions pkg/api/apis/operators/clusterserviceversion_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ type CRDDescription struct {
Resources []APIResourceReference
StatusDescriptors []StatusDescriptor
SpecDescriptors []SpecDescriptor
ActionDescriptor []ActionDescriptor
ActionDescriptors []ActionDescriptor
}

// APIServiceDescription provides details to OLM about apis provided via aggregation
Expand All @@ -124,7 +124,7 @@ type APIServiceDescription struct {
Resources []APIResourceReference
StatusDescriptors []StatusDescriptor
SpecDescriptors []SpecDescriptor
ActionDescriptor []ActionDescriptor
ActionDescriptors []ActionDescriptor
}

// APIResourceReference is a Kubernetes resource type used by a custom resource
Expand Down
4 changes: 3 additions & 1 deletion pkg/api/apis/operators/v1/operatorgroup_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ type OperatorGroupSpec struct {
// TargetNamespaces is an explicit set of namespaces to target.
// If it is set, Selector is ignored.
// +optional
// +listType=set
TargetNamespaces []string `json:"targetNamespaces,omitempty"`

// ServiceAccountName is the admin specified service account which will be
Expand All @@ -40,6 +41,7 @@ type OperatorGroupSpec struct {
// OperatorGroupStatus is the status for an OperatorGroupResource.
type OperatorGroupStatus struct {
// Namespaces is the set of target namespaces for the OperatorGroup.
// +listType=set
Namespaces []string `json:"namespaces,omitempty"`

// ServiceAccountRef references the service account object specified.
Expand Down Expand Up @@ -69,7 +71,7 @@ type OperatorGroup struct {
type OperatorGroupList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata"`

// +listType=set
Items []OperatorGroup `json:"items"`
}

Expand Down
135 changes: 81 additions & 54 deletions pkg/api/apis/operators/v1alpha1/clusterserviceversion_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,9 @@ type NamedInstallStrategy struct {

// StrategyDeploymentPermissions describe the rbac rules and service account needed by the install strategy
type StrategyDeploymentPermissions struct {
ServiceAccountName string `json:"serviceAccountName"`
Rules []rbac.PolicyRule `json:"rules"`
ServiceAccountName string `json:"serviceAccountName"`
// +listType=set
Rules []rbac.PolicyRule `json:"rules"`
}

// StrategyDeploymentSpec contains the name and spec for the deployment ALM should create
Expand All @@ -77,62 +78,73 @@ func (d *StrategyDetailsDeployment) GetStrategyName() string {
// StatusDescriptor describes a field in a status block of a CRD so that OLM can consume it
// +k8s:openapi-gen=true
type StatusDescriptor struct {
Path string `json:"path"`
DisplayName string `json:"displayName,omitempty"`
Description string `json:"description,omitempty"`
XDescriptors []string `json:"x-descriptors,omitempty"`
Path string `json:"path"`
DisplayName string `json:"displayName,omitempty"`
Description string `json:"description,omitempty"`
// +listType=set
XDescriptors []string `json:"xDescriptors,omitempty"`
Value *json.RawMessage `json:"value,omitempty"`
}

// SpecDescriptor describes a field in a spec block of a CRD so that OLM can consume it
// +k8s:openapi-gen=true
type SpecDescriptor struct {
Path string `json:"path"`
DisplayName string `json:"displayName,omitempty"`
Description string `json:"description,omitempty"`
XDescriptors []string `json:"x-descriptors,omitempty"`
Path string `json:"path"`
DisplayName string `json:"displayName,omitempty"`
Description string `json:"description,omitempty"`
// +listType=set
XDescriptors []string `json:"xDescriptors,omitempty"`
Value *json.RawMessage `json:"value,omitempty"`
}

// ActionDescriptor describes a declarative action that can be performed on a custom resource instance
// +k8s:openapi-gen=true
type ActionDescriptor struct {
Path string `json:"path"`
DisplayName string `json:"displayName,omitempty"`
Description string `json:"description,omitempty"`
XDescriptors []string `json:"x-descriptors,omitempty"`
Path string `json:"path"`
DisplayName string `json:"displayName,omitempty"`
Description string `json:"description,omitempty"`
// +listType=set
XDescriptors []string `json:"xDescriptors,omitempty"`
Value *json.RawMessage `json:"value,omitempty"`
}

// CRDDescription provides details to OLM about the CRDs
// +k8s:openapi-gen=true
type CRDDescription struct {
Name string `json:"name"`
Version string `json:"version"`
Kind string `json:"kind"`
DisplayName string `json:"displayName,omitempty"`
Description string `json:"description,omitempty"`
Resources []APIResourceReference `json:"resources,omitempty"`
StatusDescriptors []StatusDescriptor `json:"statusDescriptors,omitempty"`
SpecDescriptors []SpecDescriptor `json:"specDescriptors,omitempty"`
ActionDescriptor []ActionDescriptor `json:"actionDescriptors,omitempty"`
Name string `json:"name"`
Version string `json:"version"`
Kind string `json:"kind"`
DisplayName string `json:"displayName,omitempty"`
Description string `json:"description,omitempty"`
// +listType=set
Resources []APIResourceReference `json:"resources,omitempty"`
// +listType=set
StatusDescriptors []StatusDescriptor `json:"statusDescriptors,omitempty"`
// +listType=set
SpecDescriptors []SpecDescriptor `json:"specDescriptors,omitempty"`
// +listType=set
ActionDescriptors []ActionDescriptor `json:"actionDescriptors,omitempty"`
}

// APIServiceDescription provides details to OLM about apis provided via aggregation
// +k8s:openapi-gen=true
type APIServiceDescription struct {
Name string `json:"name"`
Group string `json:"group"`
Version string `json:"version"`
Kind string `json:"kind"`
DeploymentName string `json:"deploymentName,omitempty"`
ContainerPort int32 `json:"containerPort,omitempty"`
DisplayName string `json:"displayName,omitempty"`
Description string `json:"description,omitempty"`
Resources []APIResourceReference `json:"resources,omitempty"`
StatusDescriptors []StatusDescriptor `json:"statusDescriptors,omitempty"`
SpecDescriptors []SpecDescriptor `json:"specDescriptors,omitempty"`
ActionDescriptor []ActionDescriptor `json:"actionDescriptors,omitempty"`
Name string `json:"name"`
Group string `json:"group"`
Version string `json:"version"`
Kind string `json:"kind"`
DeploymentName string `json:"deploymentName,omitempty"`
ContainerPort int32 `json:"containerPort,omitempty"`
DisplayName string `json:"displayName,omitempty"`
Description string `json:"description,omitempty"`
// +listType=set
Resources []APIResourceReference `json:"resources,omitempty"`
// +listType=set
StatusDescriptors []StatusDescriptor `json:"statusDescriptors,omitempty"`
// +listType=set
SpecDescriptors []SpecDescriptor `json:"specDescriptors,omitempty"`
// +listType=set
ActionDescriptors []ActionDescriptor `json:"actionDescriptors,omitempty"`
}

// APIResourceReference is a Kubernetes resource type used by a custom resource
Expand All @@ -154,15 +166,19 @@ func (d APIServiceDescription) GetName() string {
// If the CRD is present in the Owned list, it is implicitly required.
// +k8s:openapi-gen=true
type CustomResourceDefinitions struct {
Owned []CRDDescription `json:"owned,omitempty"`
// +listType=set
Owned []CRDDescription `json:"owned,omitempty"`
// +listType=set
Required []CRDDescription `json:"required,omitempty"`
}

// APIServiceDefinitions declares all of the extension apis managed or required by
// an operator being ran by ClusterServiceVersion.
// +k8s:openapi-gen=true
type APIServiceDefinitions struct {
Owned []APIServiceDescription `json:"owned,omitempty"`
// +listType=set
Owned []APIServiceDescription `json:"owned,omitempty"`
// +listType=set
Required []APIServiceDescription `json:"required,omitempty"`
}

Expand All @@ -174,18 +190,24 @@ type ClusterServiceVersionSpec struct {
Maturity string `json:"maturity,omitempty"`
CustomResourceDefinitions CustomResourceDefinitions `json:"customresourcedefinitions,omitempty"`
APIServiceDefinitions APIServiceDefinitions `json:"apiservicedefinitions,omitempty"`
NativeAPIs []metav1.GroupVersionKind `json:"nativeAPIs,omitempty"`
MinKubeVersion string `json:"minKubeVersion,omitempty"`
DisplayName string `json:"displayName"`
Description string `json:"description,omitempty"`
Keywords []string `json:"keywords,omitempty"`
Maintainers []Maintainer `json:"maintainers,omitempty"`
Provider AppLink `json:"provider,omitempty"`
Links []AppLink `json:"links,omitempty"`
Icon []Icon `json:"icon,omitempty"`
// +listType=set
NativeAPIs []metav1.GroupVersionKind `json:"nativeAPIs,omitempty"`
MinKubeVersion string `json:"minKubeVersion,omitempty"`
DisplayName string `json:"displayName"`
Description string `json:"description,omitempty"`
// +listType=set
Keywords []string `json:"keywords,omitempty"`
// +listType=set
Maintainers []Maintainer `json:"maintainers,omitempty"`
Provider AppLink `json:"provider,omitempty"`
// +listType=set
Links []AppLink `json:"links,omitempty"`
// +listType=set
Icon []Icon `json:"icon,omitempty"`

// InstallModes specify supported installation types
// +optional
// +listType=set
InstallModes []InstallMode `json:"installModes,omitempty"`

// The name of a CSV this one replaces. Should match the `metadata.Name` field of the old CSV.
Expand All @@ -195,11 +217,13 @@ type ClusterServiceVersionSpec struct {
// Map of string keys and values that can be used to organize and categorize
// (scope and select) objects.
// +optional
// +listType=map
Labels map[string]string `json:"labels,omitempty" protobuf:"bytes,11,rep,name=labels"`

// Annotations is an unstructured key value map stored with a resource that may be
// set by external tools to store and retrieve arbitrary metadata.
// +optional
// +listType=map
Annotations map[string]string `json:"annotations,omitempty" protobuf:"bytes,12,rep,name=annotations"`

// Label selector for related resources.
Expand Down Expand Up @@ -348,13 +372,14 @@ type DependentStatus struct {
}

type RequirementStatus struct {
Group string `json:"group"`
Version string `json:"version"`
Kind string `json:"kind"`
Name string `json:"name"`
Status StatusReason `json:"status"`
Message string `json:"message"`
UUID string `json:"uuid,omitempty"`
Group string `json:"group"`
Version string `json:"version"`
Kind string `json:"kind"`
Name string `json:"name"`
Status StatusReason `json:"status"`
Message string `json:"message"`
UUID string `json:"uuid,omitempty"`
// +listType=set
Dependents []DependentStatus `json:"dependents,omitempty"`
}

Expand All @@ -377,8 +402,10 @@ type ClusterServiceVersionStatus struct {
// +optional
LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"`
// List of conditions, a history of state transitions
// +listType=set
Conditions []ClusterServiceVersionCondition `json:"conditions,omitempty"`
// The status of each requirement for this CSV
// +listType=set
RequirementStatus []RequirementStatus `json:"requirementStatus,omitempty"`
// Last time the owned APIService certs were updated
// +optional
Expand Down Expand Up @@ -407,7 +434,7 @@ type ClusterServiceVersion struct {
type ClusterServiceVersionList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata"`

// +listType=set
Items []ClusterServiceVersion `json:"items"`
}

Expand Down
8 changes: 4 additions & 4 deletions pkg/api/apis/operators/v1alpha1/zz_generated.conversion.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions pkg/api/apis/operators/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions pkg/api/apis/operators/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions pkg/package-server/apis/operators/packagemanifest.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ func CreateCSVDescription(csv *operatorsv1alpha1.ClusterServiceVersion) CSVDescr
Name: csv.Spec.Provider.Name,
URL: csv.Spec.Provider.URL,
},
Annotations: csv.GetAnnotations(),
LongDescription: csv.Spec.Description,
InstallModes: csv.Spec.InstallModes,
Annotations: csv.GetAnnotations(),
Description: csv.Spec.Description,
InstallModes: csv.Spec.InstallModes,
CustomResourceDefinitions: operatorsv1alpha1.CustomResourceDefinitions{
Owned: descriptionsForCRDs(csv.Spec.CustomResourceDefinitions.Owned),
Required: descriptionsForCRDs(csv.Spec.CustomResourceDefinitions.Required),
Expand Down
4 changes: 2 additions & 2 deletions pkg/package-server/apis/operators/packagemanifest_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,8 @@ type CSVDescription struct {
Provider AppLink
Annotations map[string]string

// LongDescription is the CSV's description
LongDescription string
// Description is the CSV's description
Description string

// InstallModes specify supported installation types
InstallModes []operatorv1alpha1.InstallMode
Expand Down
2 changes: 1 addition & 1 deletion pkg/package-server/apis/operators/v1/packagemanifest.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ func CreateCSVDescription(csv *operatorsv1alpha1.ClusterServiceVersion) CSVDescr
URL: csv.Spec.Provider.URL,
},
Annotations: csv.GetAnnotations(),
LongDescription: csv.Spec.Description,
Description: csv.Spec.Description,
InstallModes: csv.Spec.InstallModes,
CustomResourceDefinitions: csv.Spec.CustomResourceDefinitions,
APIServiceDefinitions: csv.Spec.APIServiceDefinitions,
Expand Down
Loading

0 comments on commit fb47fbe

Please sign in to comment.