Compare commits

..

12 Commits

Author SHA1 Message Date
github-actions[bot]
e7891b899a Bump version to 2.7.3 (#13719)
Signed-off-by: GitHub <noreply@github.com>
Co-authored-by: crenshaw-dev <crenshaw-dev@users.noreply.github.com>
2023-05-24 09:36:32 -04:00
gcp-cherry-pick-bot[bot]
ecbb7aa074 fix: prevent concurrent processing if kustomize commonAnnotations exist (#13697) (#13702)
Signed-off-by: yilmazo <onuryilmaz93@yandex.com>
Co-authored-by: Onur Yilmaz <onuryilmaz93@yandex.com>
2023-05-23 11:34:52 -07:00
gcp-cherry-pick-bot[bot]
6d85d6f85f fix: deeplinks API checking wrong permissions (#13664) (#13670)
Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
Co-authored-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
2023-05-19 16:10:47 -07:00
gcp-cherry-pick-bot[bot]
3778173c05 Revert "fix: interpolate gen fix (#12716) (#13061)" (#13666) (#13668)
This reverts commit 1a4a878703.

Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
2023-05-19 16:16:59 -04:00
gcp-cherry-pick-bot[bot]
b0df91d209 fix(appset): handle templating of raw JSON fields (#12947) (#12949) (#13654)
* fix(appset): handle templating of raw JSON fields (#12947)



* revert unnecessary changes



---------

Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
2023-05-18 19:58:17 -04:00
gcp-cherry-pick-bot[bot]
a565d7d3a4 fix: avoid acquiring lock on two mutexes at the same time to prevent deadlock (#13636) (#13648)
Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
Co-authored-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
2023-05-18 13:07:06 -07:00
gcp-cherry-pick-bot[bot]
0794a14400 fix: Reduce of empty array with no initial value for LogsView (#13620) (#13651)
* if not log lines are received (yet) the reduce raises an error and crashes the complete ArgoCDUI

Refs: #13447

Signed-off-by: patst <patrick.steinig@googlemail.com>
Co-authored-by: patst <patrick.steinig@googlemail.com>
2023-05-18 13:05:47 -07:00
Michael Crenshaw
fb2ae1198d fix: append elementsYaml in order to keep fields order (#13335) (#13508)
Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
Co-authored-by: Laurentiu Soica <laurentiu@soica.ro>
2023-05-18 09:42:06 -04:00
gcp-cherry-pick-bot[bot]
ba17262c96 docs: Update kustomize resource to correct path (#13196) (#13632)
This commit updates the kustomize section to include the correct path.  Without the `\base` at the end of the path kustomize errors out trying to find a `kustomization.yaml` since there isn't one in the `ha` directory.

Signed-off-by: Chris Wiggins <5607419+cwiggs@users.noreply.github.com>
Co-authored-by: Chris Wiggins <5607419+cwiggs@users.noreply.github.com>
2023-05-18 09:13:22 -04:00
gcp-cherry-pick-bot[bot]
9599930611 fix: set containerName value for log view selector (#13587) (#13638)
Signed-off-by: Shawn Toffel <shawn.toffel@gmail.com>
Co-authored-by: Shawn Toffel <shawn.toffel@gmail.com>
2023-05-18 09:12:06 -04:00
Jaideep Rao
3f8bd11786 fix: consume cluster cache deadlock fix from gitops-engine (#13612)
Signed-off-by: Jaideep Rao <jaideep.r97@gmail.com>
2023-05-18 09:11:40 -04:00
gcp-cherry-pick-bot[bot]
d80a5d1a27 fix: deeplinks fails when app uses cluster name (#13564) (#13569)
Co-authored-by: Soumya Ghosh Dastidar <44349253+gdsoumya@users.noreply.github.com>
2023-05-12 10:09:54 -07:00
25 changed files with 770 additions and 1011 deletions

View File

@@ -1 +1 @@
2.7.2
2.7.3

View File

@@ -50,17 +50,10 @@ func (m *MatrixGenerator) GenerateParams(appSetGenerator *argoprojiov1alpha1.App
if err != nil {
return nil, err
}
requiresInterpolation := false // Try to generate 2nd generator's params without interpolation
g1, err := m.getParams(appSetGenerator.Matrix.Generators[1], appSet, nil)
if err != nil || g1 == nil {
requiresInterpolation = true
}
for _, a := range g0 {
if requiresInterpolation {
g1, err = m.getParams(appSetGenerator.Matrix.Generators[1], appSet, a)
if err != nil {
return nil, fmt.Errorf("failed to get params for second generator in the matrix generator: %w", err)
}
g1, err := m.getParams(appSetGenerator.Matrix.Generators[1], appSet, a)
if err != nil {
return nil, fmt.Errorf("failed to get params for second generator in the matrix generator: %w", err)
}
for _, b := range g1 {

View File

@@ -2,7 +2,6 @@ package generators
import (
"context"
"github.com/sirupsen/logrus"
"testing"
"time"
@@ -31,7 +30,7 @@ func TestMatrixGenerate(t *testing.T) {
}
listGenerator := &argoprojiov1alpha1.ListGenerator{
Elements: []apiextensionsv1.JSON{{Raw: []byte(`{"cluster": "Cluster","url": "Url"}`)}},
Elements: []apiextensionsv1.JSON{{Raw: []byte(`{"cluster": "Cluster","url": "Url", "templated": "test-{{path.basenameNormalized}}"}`)}},
}
testCases := []struct {
@@ -51,8 +50,8 @@ func TestMatrixGenerate(t *testing.T) {
},
},
expected: []map[string]interface{}{
{"path": "app1", "path.basename": "app1", "path.basenameNormalized": "app1", "cluster": "Cluster", "url": "Url"},
{"path": "app2", "path.basename": "app2", "path.basenameNormalized": "app2", "cluster": "Cluster", "url": "Url"},
{"path": "app1", "path.basename": "app1", "path.basenameNormalized": "app1", "cluster": "Cluster", "url": "Url", "templated": "test-app1"},
{"path": "app2", "path.basename": "app2", "path.basenameNormalized": "app2", "cluster": "Cluster", "url": "Url", "templated": "test-app2"},
},
},
{
@@ -1006,273 +1005,6 @@ func TestMatrixGenerateListElementsYaml(t *testing.T) {
}
}
func TestSkipInterpolatedMatrixCalls(t *testing.T) {
interpolatedGitGenerator := &argoprojiov1alpha1.GitGenerator{
RepoURL: "RepoURL",
Revision: "Revision",
Files: []argoprojiov1alpha1.GitFileGeneratorItem{
{Path: "examples/git-generator-files-discovery/cluster-config/{{name}}.json"},
},
}
nonInterpolatedGitGenerator := &argoprojiov1alpha1.GitGenerator{
RepoURL: "RepoURL",
Revision: "Revision",
Files: []argoprojiov1alpha1.GitFileGeneratorItem{
{Path: "examples/git-generator-files-discovery/cluster-config/base.json"},
},
}
interpolatedClusterGenerator := &argoprojiov1alpha1.ClusterGenerator{
Selector: metav1.LabelSelector{
MatchLabels: nil,
MatchExpressions: []metav1.LabelSelectorRequirement{
{
Key: "environment",
Operator: "Exists",
Values: []string{},
},
},
},
}
testCases := []struct {
name string
baseGenerators []argoprojiov1alpha1.ApplicationSetNestedGenerator
expectedErr error
expected []map[string]interface{}
clientError bool
expectedMock [][]map[string]interface{}
expectedNumCalls int
}{
{
name: "happy flow - generate noninterpolated params",
baseGenerators: []argoprojiov1alpha1.ApplicationSetNestedGenerator{
{ Clusters: interpolatedClusterGenerator },
{ Git: nonInterpolatedGitGenerator },
},
expected: []map[string]interface{}{
{
"path": "examples/git-generator-files-discovery/base.json",
"path.basename": "base",
"path.basenameNormalized": "base",
"path.filename": "base.json",
"path.filenameNormalized": "base.json",
"path[0]": "examples",
"path[1]": "git-generator-files-discovery",
"path[2]": "base",
"name": "dev-01",
"nameNormalized": "dev-01",
"server": "https://dev-01.example.com",
"metadata.labels.environment": "dev",
"metadata.labels.argocd.argoproj.io/secret-type": "cluster",
},
{
"path": "examples/git-generator-files-discovery/base.json",
"path.basename": "base",
"path.basenameNormalized": "base",
"path.filename": "base.json",
"path.filenameNormalized": "base.json",
"path[0]": "examples",
"path[1]": "git-generator-files-discovery",
"path[2]": "base",
"name": "prod-01",
"nameNormalized": "prod-01",
"server": "https://prod-01.example.com",
"metadata.labels.environment": "prod",
"metadata.labels.argocd.argoproj.io/secret-type": "cluster",
},
},
clientError: false,
expectedMock: [][]map[string]interface{}{
{
{
"path": "examples/git-generator-files-discovery/base.json",
"path.basename": "base",
"path.basenameNormalized": "base",
"path.filename": "base.json",
"path.filenameNormalized": "base.json",
"path[0]": "examples",
"path[1]": "git-generator-files-discovery",
"path[2]": "base",
},
},
},
expectedNumCalls: 1,
},
{
name: "happy flow - generate interpolated params",
baseGenerators: []argoprojiov1alpha1.ApplicationSetNestedGenerator{
{ Clusters: interpolatedClusterGenerator },
{ Git: interpolatedGitGenerator },
},
expected: []map[string]interface{}{
{
"path": "examples/git-generator-files-discovery/dev-01.json",
"path.basename": "dev-01",
"path.basenameNormalized": "dev-01",
"path.filename": "dev-01.json",
"path.filenameNormalized": "dev-01.json",
"path[0]": "examples",
"path[1]": "git-generator-files-discovery",
"path[2]": "dev-01",
"name": "dev-01",
"nameNormalized": "dev-01",
"server": "https://dev-01.example.com",
"metadata.labels.environment": "dev",
"metadata.labels.argocd.argoproj.io/secret-type": "cluster",
},
{
"path": "examples/git-generator-files-discovery/prod-01.json",
"path.basename": "prod-01",
"path.basenameNormalized": "prod-01",
"path.filename": "prod-01.json",
"path.filenameNormalized": "prod-01.json",
"path[0]": "examples",
"path[1]": "git-generator-files-discovery",
"path[2]": "prod-01",
"name": "prod-01",
"nameNormalized": "prod-01",
"server": "https://prod-01.example.com",
"metadata.labels.environment": "prod",
"metadata.labels.argocd.argoproj.io/secret-type": "cluster",
},
},
clientError: false,
expectedMock: [][]map[string]interface{}{
{}, // Needed, because the 1st call will fail without interpolation
{ // Subsequent calls will succeed with interpolation
{
"path": "examples/git-generator-files-discovery/dev-01.json",
"path.basename": "dev-01",
"path.basenameNormalized": "dev-01",
"path.filename": "dev-01.json",
"path.filenameNormalized": "dev-01.json",
"path[0]": "examples",
"path[1]": "git-generator-files-discovery",
"path[2]": "dev-01",
},
},
{
{
"path": "examples/git-generator-files-discovery/prod-01.json",
"path.basename": "prod-01",
"path.basenameNormalized": "prod-01",
"path.filename": "prod-01.json",
"path.filenameNormalized": "prod-01.json",
"path[0]": "examples",
"path[1]": "git-generator-files-discovery",
"path[2]": "prod-01",
},
},
},
expectedNumCalls: 3,
},
}
clusters := []client.Object{
&corev1.Secret{
TypeMeta: metav1.TypeMeta{
Kind: "Secret",
APIVersion: "v1",
},
ObjectMeta: metav1.ObjectMeta{
Name: "dev-01",
Namespace: "namespace",
Labels: map[string]string{
"argocd.argoproj.io/secret-type": "cluster",
"environment": "dev",
},
},
Data: map[string][]byte{
"config": []byte("{}"),
"name": []byte("dev-01"),
"server": []byte("https://dev-01.example.com"),
},
Type: corev1.SecretType("Opaque"),
},
&corev1.Secret{
TypeMeta: metav1.TypeMeta{
Kind: "Secret",
APIVersion: "v1",
},
ObjectMeta: metav1.ObjectMeta{
Name: "prod-01",
Namespace: "namespace",
Labels: map[string]string{
"argocd.argoproj.io/secret-type": "cluster",
"environment": "prod",
},
},
Data: map[string][]byte{
"config": []byte("{}"),
"name": []byte("prod-01"),
"server": []byte("https://prod-01.example.com"),
},
Type: corev1.SecretType("Opaque"),
},
}
// convert []client.Object to []runtime.Object, for use by kubefake package
runtimeClusters := []runtime.Object{}
for _, clientCluster := range clusters {
runtimeClusters = append(runtimeClusters, clientCluster)
}
for _, testCase := range testCases {
testCaseCopy := testCase // Since tests may run in parallel
t.Run(testCaseCopy.name, func(t *testing.T) {
genMock := &generatorMock{}
appSet := &argoprojiov1alpha1.ApplicationSet{}
appClientset := kubefake.NewSimpleClientset(runtimeClusters...)
fakeClient := fake.NewClientBuilder().WithObjects(clusters...).Build()
cl := &possiblyErroringFakeCtrlRuntimeClient{
fakeClient,
testCase.clientError,
}
var clusterGenerator = NewClusterGenerator(cl, context.Background(), appClientset, "namespace")
logrus.Debug(clusterGenerator)
for _, g := range testCaseCopy.baseGenerators {
gitGeneratorSpec := argoprojiov1alpha1.ApplicationSetGenerator{
Clusters: g.Clusters,
Git: g.Git,
}
genMock.On("GetTemplate", &gitGeneratorSpec).
Return(&argoprojiov1alpha1.ApplicationSetTemplate{})
}
for _, currMock := range testCaseCopy.expectedMock {
genMock.On("GenerateParams", mock.AnythingOfType("*v1alpha1.ApplicationSetGenerator"), appSet).Return(currMock, nil).Once()
}
var matrixGenerator = NewMatrixGenerator(
map[string]Generator{
"Git": genMock,
"Clusters": clusterGenerator,
},
)
got, err := matrixGenerator.GenerateParams(&argoprojiov1alpha1.ApplicationSetGenerator{
Matrix: &argoprojiov1alpha1.MatrixGenerator{
Generators: testCaseCopy.baseGenerators,
Template: argoprojiov1alpha1.ApplicationSetTemplate{},
},
}, appSet)
genMock.AssertNumberOfCalls(t, "GenerateParams", testCase.expectedNumCalls)
if testCaseCopy.expectedErr != nil {
assert.ErrorIs(t, err, testCaseCopy.expectedErr)
} else {
assert.NoError(t, err)
assert.Equal(t, testCaseCopy.expected, got)
}
})
}
}
type generatorMock struct {
mock.Mock
}

View File

@@ -96,6 +96,25 @@ func (r *Render) deeplyReplace(copy, original reflect.Value, replaceMap map[stri
// specific case time
if currentType == "time.Time" {
copy.Field(i).Set(original.Field(i))
} else if currentType == "Raw.k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" {
var unmarshaled interface{}
originalBytes := original.Field(i).Bytes()
err := json.Unmarshal(originalBytes, &unmarshaled)
if err != nil {
return fmt.Errorf("failed to unmarshal JSON field: %w", err)
}
jsonOriginal := reflect.ValueOf(&unmarshaled)
jsonCopy := reflect.New(jsonOriginal.Type()).Elem()
err = r.deeplyReplace(jsonCopy, jsonOriginal, replaceMap, useGoTemplate)
if err != nil {
return fmt.Errorf("failed to deeply replace JSON field contents: %w", err)
}
jsonCopyInterface := jsonCopy.Interface().(*interface{})
data, err := json.Marshal(jsonCopyInterface)
if err != nil {
return fmt.Errorf("failed to marshal templated JSON field: %w", err)
}
copy.Field(i).Set(reflect.ValueOf(data))
} else if err := r.deeplyReplace(copy.Field(i), original.Field(i), replaceMap, useGoTemplate); err != nil {
return err
}

View File

@@ -488,10 +488,11 @@ func (c *liveStateCache) getSyncedCluster(server string) (clustercache.ClusterCa
func (c *liveStateCache) invalidate(cacheSettings cacheSettings) {
log.Info("invalidating live state cache")
c.lock.Lock()
defer c.lock.Unlock()
c.cacheSettings = cacheSettings
for _, clust := range c.clusters {
clusters := c.clusters
c.lock.Unlock()
for _, clust := range clusters {
clust.Invalidate(clustercache.SetSettings(cacheSettings.clusterSettings))
}
log.Info("live state cache invalidated")

View File

@@ -74,7 +74,7 @@ kind: Kustomization
namespace: argocd
resources:
- github.com/argoproj/argo-cd/manifests/ha?ref=v2.6.2
- github.com/argoproj/argo-cd/manifests/ha/base?ref=v2.6.2
```
## Helm

4
go.mod
View File

@@ -8,7 +8,8 @@ require (
github.com/Masterminds/semver/v3 v3.2.0
github.com/TomOnTime/utfutil v0.0.0-20180511104225-09c41003ee1d
github.com/alicebob/miniredis/v2 v2.23.1
github.com/argoproj/gitops-engine v0.7.1-0.20230214165351-ed70eac8b7bd
github.com/antonmedv/expr v1.9.0
github.com/argoproj/gitops-engine v0.7.1-0.20230512020822-b4dd8b8c3976
github.com/argoproj/notifications-engine v0.4.1-0.20230228182525-f754726f03da
github.com/argoproj/pkg v0.13.7-0.20221221191914-44694015343d
github.com/aws/aws-sdk-go v1.44.164
@@ -113,7 +114,6 @@ require (
require (
github.com/Masterminds/sprig/v3 v3.2.3
github.com/antonmedv/expr v1.9.0
github.com/coreos/go-oidc/v3 v3.4.0
github.com/go-redis/cache/v9 v9.0.0
github.com/robfig/cron/v3 v3.0.1

4
go.sum
View File

@@ -135,8 +135,8 @@ github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.m
github.com/antonmedv/expr v1.9.0 h1:j4HI3NHEdgDnN9p6oI6Ndr0G5QryMY0FNxT4ONrFDGU=
github.com/antonmedv/expr v1.9.0/go.mod h1:5qsM3oLGDND7sDmQGDXHkYfkjYMUX14qsgqmHhwGEk8=
github.com/appscode/go v0.0.0-20191119085241-0887d8ec2ecc/go.mod h1:OawnOmAL4ZX3YaPdN+8HTNwBveT1jMsqP74moa9XUbE=
github.com/argoproj/gitops-engine v0.7.1-0.20230214165351-ed70eac8b7bd h1:4Y76oXOZ2b7px7ppRSNpdxFPhUEw5e3BYEWpxn8pO2I=
github.com/argoproj/gitops-engine v0.7.1-0.20230214165351-ed70eac8b7bd/go.mod h1:WpA/B7tgwfz+sdNE3LqrTrb7ArEY1FOPI2pAGI0hfPc=
github.com/argoproj/gitops-engine v0.7.1-0.20230512020822-b4dd8b8c3976 h1:8i12dOcimhwrJxUznzZR/NW4JpIL5DXZjkI3Bl3yh38=
github.com/argoproj/gitops-engine v0.7.1-0.20230512020822-b4dd8b8c3976/go.mod h1:WpA/B7tgwfz+sdNE3LqrTrb7ArEY1FOPI2pAGI0hfPc=
github.com/argoproj/notifications-engine v0.4.1-0.20230228182525-f754726f03da h1:Vf9xvHcXn4TP/nLIfWn+TaC521V9fpz/DwRP6uEeVR8=
github.com/argoproj/notifications-engine v0.4.1-0.20230228182525-f754726f03da/go.mod h1:05koR0gE/O0i5YDbidg1dpr76XitK4DJveh+dIAq6e8=
github.com/argoproj/pkg v0.13.7-0.20221221191914-44694015343d h1:7fXEKF3OQ9i1PrgieA6FLrXOL3UAKyiotomn0RHevds=

View File

@@ -5,7 +5,7 @@ kind: Kustomization
images:
- name: quay.io/argoproj/argocd
newName: quay.io/argoproj/argocd
newTag: v2.7.2
newTag: v2.7.3
resources:
- ./application-controller
- ./dex

View File

@@ -16700,7 +16700,7 @@ spec:
key: applicationsetcontroller.enable.progressive.syncs
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
name: argocd-applicationset-controller
ports:
@@ -16962,7 +16962,7 @@ spec:
value: /helm-working-dir
- name: HELM_DATA_HOME
value: /helm-working-dir
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -17014,7 +17014,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /var/run/argocd/argocd-cmp-server
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
name: copyutil
securityContext:
allowPrivilegeEscalation: false
@@ -17227,7 +17227,7 @@ spec:
key: controller.kubectl.parallelism.limit
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
name: argocd-application-controller
ports:

View File

@@ -12,4 +12,4 @@ resources:
images:
- name: quay.io/argoproj/argocd
newName: quay.io/argoproj/argocd
newTag: v2.7.2
newTag: v2.7.3

View File

@@ -12,7 +12,7 @@ patches:
images:
- name: quay.io/argoproj/argocd
newName: quay.io/argoproj/argocd
newTag: v2.7.2
newTag: v2.7.3
resources:
- ../../base/application-controller
- ../../base/applicationset-controller

View File

@@ -17921,7 +17921,7 @@ spec:
key: applicationsetcontroller.enable.progressive.syncs
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
name: argocd-applicationset-controller
ports:
@@ -18031,7 +18031,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /shared/argocd-dex
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
name: copyutil
securityContext:
@@ -18088,7 +18088,7 @@ spec:
containers:
- args:
- /usr/local/bin/argocd-notifications
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
livenessProbe:
tcpSocket:
@@ -18393,7 +18393,7 @@ spec:
value: /helm-working-dir
- name: HELM_DATA_HOME
value: /helm-working-dir
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -18445,7 +18445,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /var/run/argocd/argocd-cmp-server
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
name: copyutil
securityContext:
allowPrivilegeEscalation: false
@@ -18727,7 +18727,7 @@ spec:
key: server.enable.proxy.extension
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -18972,7 +18972,7 @@ spec:
key: controller.kubectl.parallelism.limit
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
name: argocd-application-controller
ports:

View File

@@ -1581,7 +1581,7 @@ spec:
key: applicationsetcontroller.enable.progressive.syncs
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
name: argocd-applicationset-controller
ports:
@@ -1691,7 +1691,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /shared/argocd-dex
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
name: copyutil
securityContext:
@@ -1748,7 +1748,7 @@ spec:
containers:
- args:
- /usr/local/bin/argocd-notifications
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
livenessProbe:
tcpSocket:
@@ -2053,7 +2053,7 @@ spec:
value: /helm-working-dir
- name: HELM_DATA_HOME
value: /helm-working-dir
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -2105,7 +2105,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /var/run/argocd/argocd-cmp-server
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
name: copyutil
securityContext:
allowPrivilegeEscalation: false
@@ -2387,7 +2387,7 @@ spec:
key: server.enable.proxy.extension
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -2632,7 +2632,7 @@ spec:
key: controller.kubectl.parallelism.limit
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
name: argocd-application-controller
ports:

View File

@@ -17038,7 +17038,7 @@ spec:
key: applicationsetcontroller.enable.progressive.syncs
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
name: argocd-applicationset-controller
ports:
@@ -17148,7 +17148,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /shared/argocd-dex
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
name: copyutil
securityContext:
@@ -17205,7 +17205,7 @@ spec:
containers:
- args:
- /usr/local/bin/argocd-notifications
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
livenessProbe:
tcpSocket:
@@ -17462,7 +17462,7 @@ spec:
value: /helm-working-dir
- name: HELM_DATA_HOME
value: /helm-working-dir
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -17514,7 +17514,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /var/run/argocd/argocd-cmp-server
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
name: copyutil
securityContext:
allowPrivilegeEscalation: false
@@ -17789,7 +17789,7 @@ spec:
key: server.enable.proxy.extension
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -18029,7 +18029,7 @@ spec:
key: controller.kubectl.parallelism.limit
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
name: argocd-application-controller
ports:

View File

@@ -698,7 +698,7 @@ spec:
key: applicationsetcontroller.enable.progressive.syncs
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
name: argocd-applicationset-controller
ports:
@@ -808,7 +808,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /shared/argocd-dex
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
name: copyutil
securityContext:
@@ -865,7 +865,7 @@ spec:
containers:
- args:
- /usr/local/bin/argocd-notifications
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
livenessProbe:
tcpSocket:
@@ -1122,7 +1122,7 @@ spec:
value: /helm-working-dir
- name: HELM_DATA_HOME
value: /helm-working-dir
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -1174,7 +1174,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /var/run/argocd/argocd-cmp-server
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
name: copyutil
securityContext:
allowPrivilegeEscalation: false
@@ -1449,7 +1449,7 @@ spec:
key: server.enable.proxy.extension
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -1689,7 +1689,7 @@ spec:
key: controller.kubectl.parallelism.limit
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:v2.7.2
image: quay.io/argoproj/argocd:v2.7.3
imagePullPolicy: Always
name: argocd-application-controller
ports:

View File

@@ -183,8 +183,8 @@ func (g ApplicationSetTerminalGenerators) toApplicationSetNestedGenerators() []A
// ListGenerator include items info
type ListGenerator struct {
Elements []apiextensionsv1.JSON `json:"elements" protobuf:"bytes,1,name=elements"`
ElementsYaml string `json:"elementsYaml,omitempty" protobuf:"bytes,2,opt,name=elementsYaml"`
Template ApplicationSetTemplate `json:"template,omitempty" protobuf:"bytes,3,name=template"`
Template ApplicationSetTemplate `json:"template,omitempty" protobuf:"bytes,2,name=template"`
ElementsYaml string `json:"elementsYaml,omitempty" protobuf:"bytes,3,opt,name=elementsYaml"`
}
// MatrixGenerator generates the cartesian product of two sets of parameters. The parameters are defined by two nested

File diff suppressed because it is too large Load Diff

View File

@@ -1024,9 +1024,9 @@ message KustomizeReplica {
message ListGenerator {
repeated k8s.io.apiextensions_apiserver.pkg.apis.apiextensions.v1.JSON elements = 1;
optional string elementsYaml = 2;
optional ApplicationSetTemplate template = 2;
optional ApplicationSetTemplate template = 3;
optional string elementsYaml = 3;
}
message ManagedNamespaceMetadata {

View File

@@ -3659,18 +3659,18 @@ func schema_pkg_apis_application_v1alpha1_ListGenerator(ref common.ReferenceCall
},
},
},
"elementsYaml": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Format: "",
},
},
"template": {
SchemaProps: spec.SchemaProps{
Default: map[string]interface{}{},
Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetTemplate"),
},
},
"elementsYaml": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Format: "",
},
},
},
Required: []string{"elements"},
},

View File

@@ -500,6 +500,7 @@ func NewKustomizeReplica(text string) (*KustomizeReplica, error) {
func (k *ApplicationSourceKustomize) AllowsConcurrentProcessing() bool {
return len(k.Images) == 0 &&
len(k.CommonLabels) == 0 &&
len(k.CommonAnnotations) == 0 &&
k.NamePrefix == "" &&
k.Namespace == "" &&
k.NameSuffix == ""

View File

@@ -2973,11 +2973,21 @@ func TestRetryStrategy_NextRetryAtCustomBackoff(t *testing.T) {
}
func TestSourceAllowsConcurrentProcessing_KustomizeParams(t *testing.T) {
src := ApplicationSource{Path: ".", Kustomize: &ApplicationSourceKustomize{
NameSuffix: "test",
}}
t.Run("Has NameSuffix", func(t *testing.T) {
src := ApplicationSource{Path: ".", Kustomize: &ApplicationSourceKustomize{
NameSuffix: "test",
}}
assert.False(t, src.AllowsConcurrentProcessing())
assert.False(t, src.AllowsConcurrentProcessing())
})
t.Run("Has CommonAnnotations", func(t *testing.T) {
src := ApplicationSource{Path: ".", Kustomize: &ApplicationSourceKustomize{
CommonAnnotations: map[string]string{"foo": "bar"},
}}
assert.False(t, src.AllowsConcurrentProcessing())
})
}
func TestUnSetCascadedDeletion(t *testing.T) {

View File

@@ -1791,7 +1791,7 @@ func (s *Server) Rollback(ctx context.Context, rollbackReq *application.Applicat
}
func (s *Server) ListLinks(ctx context.Context, req *application.ListAppLinksRequest) (*application.LinksResponse, error) {
a, err := s.getApplicationEnforceRBACClient(ctx, rbacpolicy.ActionSync, req.GetNamespace(), req.GetName(), "")
a, err := s.getApplicationEnforceRBACClient(ctx, rbacpolicy.ActionGet, req.GetNamespace(), req.GetName(), "")
if err != nil {
return nil, err
}
@@ -1839,14 +1839,6 @@ func (s *Server) getObjectsForDeepLinks(ctx context.Context, app *appv1.Applicat
return s.db.GetProjectClusters(ctx, project)
}
permitted, err := proj.IsDestinationPermitted(app.Spec.Destination, getProjectClusters)
if err != nil {
return nil, nil, err
}
if !permitted {
return nil, nil, fmt.Errorf("error getting destination cluster")
}
if err := argo.ValidateDestination(ctx, &app.Spec.Destination, s.db); err != nil {
log.WithFields(map[string]interface{}{
"application": app.GetName(),
@@ -1855,6 +1847,14 @@ func (s *Server) getObjectsForDeepLinks(ctx context.Context, app *appv1.Applicat
}).Warnf("cannot validate cluster, error=%v", err.Error())
return nil, nil, nil
}
permitted, err := proj.IsDestinationPermitted(app.Spec.Destination, getProjectClusters)
if err != nil {
return nil, nil, err
}
if !permitted {
return nil, nil, fmt.Errorf("error getting destination cluster")
}
clst, err := s.db.GetCluster(ctx, app.Spec.Destination.Server)
if err != nil {
log.WithFields(map[string]interface{}{

View File

@@ -28,7 +28,7 @@ export const ContainerSelector = ({
if (containerNames.length <= 1) return <></>;
return (
<Tooltip content='Select a container to view logs'>
<select className='argo-field' onChange={e => onClickContainer(containerGroup(e.target.value), containerIndex(e.target.value), 'logs')}>
<select className='argo-field' value={containerName} onChange={e => onClickContainer(containerGroup(e.target.value), containerIndex(e.target.value), 'logs')}>
{containerNames.map(n => (
<option key={n} value={n}>
{n}

View File

@@ -213,12 +213,15 @@ export const PodsLogsViewer = (props: PodLogsProps) => {
log.content?.replace(highlight, (substring: string) => whiteOnYellow + substring + reset);
// logs are in 14px wide fixed width font
const width =
14 *
logs
.map(renderLog)
.map(v => v.length)
.reduce((a, b) => Math.max(a, b));
let width = 0;
if (logs.length > 0) {
width =
14 *
logs
.map(renderLog)
.map(v => v.length)
.reduce((a, b) => Math.max(a, b));
}
const rowRenderer = ({index, key, style}: {index: number; key: string; style: React.CSSProperties}) => {
return (