Skip to content
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

Add partial support for DownwardsAPI with kctrl package release #1580

Merged
merged 1 commit into from
Jul 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cli/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ require (
github.com/cppforlife/color v1.9.1-0.20200716202919-6706ac40b835
github.com/cppforlife/go-cli-ui v0.0.0-20220520125801-e45d9169a663
github.com/getkin/kin-openapi v0.81.0
github.com/google/gnostic v0.5.7-v3refs
github.com/google/go-containerregistry v0.13.0
github.com/k14s/difflib v0.0.0-20201117154628-0c031775bf57
github.com/mitchellh/go-wordwrap v1.0.1
Expand Down Expand Up @@ -45,7 +46,6 @@ require (
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/google/gnostic v0.5.7-v3refs // indirect
github.com/google/go-cmp v0.5.9 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/uuid v1.2.0 // indirect
Expand Down
1 change: 1 addition & 0 deletions cli/pkg/kctrl/cmd/app/release/app_spec_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ func (b *AppSpecBuilder) Build() (kcv1alpha1.AppSpec, error) {
},
},
Spec: kcv1alpha1.AppSpec{
ServiceAccountName: "fake-sa",
Fetch: []kcv1alpha1.AppFetch{
{
// To be replaced by local fetch
Expand Down
52 changes: 51 additions & 1 deletion cli/pkg/kctrl/local/min_core_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@ package local
import (
"context"

openapi_v2 "github.com/google/gnostic/openapiv2"
authenticationv1api "k8s.io/api/authentication/v1"
corev1api "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
types "k8s.io/apimachinery/pkg/types"
version "k8s.io/apimachinery/pkg/version"
watch "k8s.io/apimachinery/pkg/watch"
aplcorev1 "k8s.io/client-go/applyconfigurations/core/v1"
discovery "k8s.io/client-go/discovery"
Expand Down Expand Up @@ -64,6 +66,7 @@ import (
storagev1 "k8s.io/client-go/kubernetes/typed/storage/v1"
storagev1alpha1 "k8s.io/client-go/kubernetes/typed/storage/v1alpha1"
storagev1beta1 "k8s.io/client-go/kubernetes/typed/storage/v1beta1"
"k8s.io/client-go/openapi"
rest "k8s.io/client-go/rest"
)

Expand Down Expand Up @@ -91,7 +94,7 @@ type MinCoreClient struct {

var _ kubernetes.Interface = &MinCoreClient{}

func (*MinCoreClient) Discovery() discovery.DiscoveryInterface { panic("Not implemented"); return nil }
func (*MinCoreClient) Discovery() discovery.DiscoveryInterface { return &MinDiscoveryClient{} }
func (*MinCoreClient) AdmissionregistrationV1() admissionregistrationv1.AdmissionregistrationV1Interface {
panic("Not implemented")
return nil
Expand Down Expand Up @@ -172,6 +175,11 @@ func (*MinCoreClient) CoordinationV1() coordinationv1.CoordinationV1Interface {
return nil
}
func (c *MinCoreClient) CoreV1() corev1.CoreV1Interface {
if c.client == nil {
// To be used only while releasing packages where we do not expect nil client to be used
// MinServiceAccount will mock necessary bits
return &MinCoreV1Client{nil, c.localSecrets, c.localConfigMaps}
}
return &MinCoreV1Client{c.client.CoreV1(), c.localSecrets, c.localConfigMaps}
}
func (*MinCoreClient) DiscoveryV1() discoveryv1.DiscoveryV1Interface {
Expand Down Expand Up @@ -324,6 +332,10 @@ func (*MinCoreV1Client) Services(namespace string) corev1.ServiceInterface {
return nil
}
func (c *MinCoreV1Client) ServiceAccounts(namespace string) corev1.ServiceAccountInterface {
if c.client == nil {
// To handle package release scenarios with DownwardsAPI
return &ServiceAccounts{namespace, nil}
}
return &ServiceAccounts{namespace, c.client.ServiceAccounts(namespace)}
}

Expand Down Expand Up @@ -452,6 +464,10 @@ func (*ServiceAccounts) DeleteCollection(ctx context.Context, opts metav1.Delete
return nil
}
func (sa *ServiceAccounts) Get(ctx context.Context, name string, opts metav1.GetOptions) (*corev1api.ServiceAccount, error) {
if sa.client == nil {
// To handle package release scenarios with DownwardsAPI
return &corev1api.ServiceAccount{}, nil
}
return sa.client.Get(ctx, name, opts)
}
func (*ServiceAccounts) List(ctx context.Context, opts metav1.ListOptions) (*corev1api.ServiceAccountList, error) {
Expand All @@ -471,5 +487,39 @@ func (*ServiceAccounts) Apply(ctx context.Context, serviceAccount *aplcorev1.Ser
return nil, nil
}
func (sa *ServiceAccounts) CreateToken(ctx context.Context, serviceAccountName string, tokenRequest *authenticationv1api.TokenRequest, opts metav1.CreateOptions) (*authenticationv1api.TokenRequest, error) {
if sa.client == nil {
// To handle package release scenarios with DownwardsAPI
return &authenticationv1api.TokenRequest{}, nil
}
return sa.client.CreateToken(ctx, serviceAccountName, tokenRequest, opts)
}

// Minimum required values to
type MinDiscoveryClient struct{}

var _ discovery.DiscoveryInterface = &MinDiscoveryClient{}

func (*MinDiscoveryClient) ServerVersion() (*version.Info, error) {
return &version.Info{Major: "1", Minor: "30.0-invalid", GitVersion: "1.30.0-invalid"}, nil
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this cause a problem if the packages are expecting an older version? If the ytt template have a check or if the helm template only include a certain image if the k8s version is 1.28?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It also might be ok if we do not support this use case but it has to be documented somewhere.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we will be documenting it, the expectation right now is that folks are not swapping images because of versions, they would generally be passing it along as env values if the image is expected to behave differently.
We will definitely call out the values being used in the docs.

}

func (*MinDiscoveryClient) ServerGroups() (*metav1.APIGroupList, error) {
return &metav1.APIGroupList{}, nil
}

func (*MinDiscoveryClient) RESTClient() rest.Interface { panic("Not implemented") }
func (*MinDiscoveryClient) ServerResourcesForGroupVersion(groupVersion string) (*metav1.APIResourceList, error) {
panic("Not implemented")
}
func (*MinDiscoveryClient) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
panic("Not implemented")
}
func (*MinDiscoveryClient) ServerPreferredResources() ([]*metav1.APIResourceList, error) {
panic("Not implemented")
}
func (*MinDiscoveryClient) ServerPreferredNamespacedResources() ([]*metav1.APIResourceList, error) {
panic("Not implemented")
}
func (*MinDiscoveryClient) OpenAPISchema() (*openapi_v2.Document, error) { panic("Not implemented") }
func (*MinDiscoveryClient) OpenAPIV3() openapi.Client { panic("Not implemented") }
func (*MinDiscoveryClient) WithLegacy() discovery.DiscoveryInterface { panic("Not implemented") }
Loading