Skip to content

Commit

Permalink
feat: use --api-versions during helm chart rendering (argoproj#3243)
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexander Matyushentsev authored Mar 17, 2020
1 parent b3f8e7a commit 42d5723
Show file tree
Hide file tree
Showing 15 changed files with 222 additions and 89 deletions.
2 changes: 1 addition & 1 deletion controller/appcontroller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ func newFakeController(data *fakeData) *ApplicationController {
ctrl.stateCache = &mockStateCache
mockStateCache.On("IsNamespaced", mock.Anything, mock.Anything).Return(true, nil)
mockStateCache.On("GetManagedLiveObjs", mock.Anything, mock.Anything).Return(data.managedLiveObjs, nil)
mockStateCache.On("GetServerVersion", mock.Anything).Return("v1.2.3", nil)
mockStateCache.On("GetVersionsInfo", mock.Anything).Return("v1.2.3", nil, nil)
response := make(map[kube.ResourceKey]argoappv1.ResourceNode)
for k, v := range data.namespacedResources {
response[k] = v.ResourceNode
Expand Down
10 changes: 6 additions & 4 deletions controller/cache/cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (

log "github.com/sirupsen/logrus"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/watch"
Expand All @@ -28,7 +29,7 @@ type cacheSettings struct {

type LiveStateCache interface {
// Returns k8s server version
GetServerVersion(serverURL string) (string, error)
GetVersionsInfo(serverURL string) (string, []metav1.APIGroup, error)
// Returns true of given group kind is a namespaced resource
IsNamespaced(server string, gk schema.GroupKind) (bool, error)
// Executes give callback against resource specified by the key and all its children
Expand Down Expand Up @@ -196,12 +197,13 @@ func (c *liveStateCache) GetManagedLiveObjs(a *appv1.Application, targetObjs []*
}
return clusterInfo.getManagedLiveObjs(a, targetObjs, c.metricsServer)
}
func (c *liveStateCache) GetServerVersion(serverURL string) (string, error) {

func (c *liveStateCache) GetVersionsInfo(serverURL string) (string, []metav1.APIGroup, error) {
clusterInfo, err := c.getSyncedCluster(serverURL)
if err != nil {
return "", err
return "", nil, err
}
return clusterInfo.serverVersion, nil
return clusterInfo.serverVersion, clusterInfo.apiGroups, nil
}

func isClusterHasApps(apps []interface{}, cluster *appv1.Cluster) bool {
Expand Down
2 changes: 1 addition & 1 deletion controller/cache/cache_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func TestGetServerVersion(t *testing.T) {
},
}}

version, err := cache.GetServerVersion("http://localhost")
version, _, err := cache.GetVersionsInfo("http://localhost")
assert.NoError(t, err)
assert.Equal(t, "123", version)
}
7 changes: 7 additions & 0 deletions controller/cache/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ type clusterInfo struct {
syncError error
apisMeta map[schema.GroupKind]*apiMeta
serverVersion string
apiGroups []metav1.APIGroup
// namespacedResources is a simple map which indicates a groupKind is namespaced
namespacedResources map[schema.GroupKind]bool

Expand Down Expand Up @@ -349,6 +350,12 @@ func (c *clusterInfo) sync() (err error) {
return err
}
c.serverVersion = version
groups, err := c.kubectl.GetAPIGroups(config)
if err != nil {
return err
}
c.apiGroups = groups

apis, err := c.kubectl.GetAPIResources(config, c.cacheSettingsSrc().ResourcesFilter)
if err != nil {
return err
Expand Down
23 changes: 17 additions & 6 deletions controller/cache/mocks/LiveStateCache.go

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

9 changes: 8 additions & 1 deletion controller/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,10 +136,16 @@ func (m *appStateManager) getRepoObjs(app *v1alpha1.Application, source v1alpha1
return nil, nil, nil, err
}
ts.AddCheckpoint("build_options_ms")
serverVersion, err := m.liveStateCache.GetServerVersion(app.Spec.Destination.Server)
serverVersion, apiGroups, err := m.liveStateCache.GetVersionsInfo(app.Spec.Destination.Server)
if err != nil {
return nil, nil, nil, err
}
var apiVersions []string
for _, g := range apiGroups {
for _, v := range g.Versions {
apiVersions = append(apiVersions, v.GroupVersion)
}
}
ts.AddCheckpoint("version_ms")
manifestInfo, err := repoClient.GenerateManifest(context.Background(), &apiclient.ManifestRequest{
Repo: repo,
Expand All @@ -155,6 +161,7 @@ func (m *appStateManager) getRepoObjs(app *v1alpha1.Application, source v1alpha1
BuildOptions: buildOptions,
},
KubeVersion: serverVersion,
ApiVersions: apiVersions,
})
if err != nil {
return nil, nil, nil, err
Expand Down
Loading

0 comments on commit 42d5723

Please sign in to comment.