Skip to content

Commit 0ae5882

Browse files
chore: Print in-cluster svr addr disabled warning when server starts (#14553)
* chore: Print in-cluster svr addr disabled warning when server starts Signed-off-by: Yuan Tang <[email protected]> * fix: mock Signed-off-by: Yuan Tang <[email protected]> * no interface change Signed-off-by: Michael Crenshaw <[email protected]> --------- Signed-off-by: Yuan Tang <[email protected]> Signed-off-by: Michael Crenshaw <[email protected]> Co-authored-by: Michael Crenshaw <[email protected]>
1 parent e10c418 commit 0ae5882

File tree

4 files changed

+69
-43
lines changed

4 files changed

+69
-43
lines changed

server/server.go

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import (
2525

2626
// nolint:staticcheck
2727
golang_proto "github.com/golang/protobuf/proto"
28+
"k8s.io/apimachinery/pkg/labels"
29+
"k8s.io/apimachinery/pkg/selection"
2830

2931
"github.com/argoproj/notifications-engine/pkg/api"
3032
"github.com/argoproj/pkg/sync"
@@ -291,7 +293,9 @@ func NewServer(ctx context.Context, opts ArgoCDServerOpts) *ArgoCDServer {
291293

292294
apiFactory := api.NewFactory(settings_notif.GetFactorySettings(argocdService, "argocd-notifications-secret", "argocd-notifications-cm"), opts.Namespace, secretInformer, configMapInformer)
293295

294-
return &ArgoCDServer{
296+
dbInstance := db.NewDB(opts.Namespace, settingsMgr, opts.KubeClientset)
297+
298+
a := &ArgoCDServer{
295299
ArgoCDServerOpts: opts,
296300
log: log.NewEntry(log.StandardLogger()),
297301
settings: settings,
@@ -307,11 +311,19 @@ func NewServer(ctx context.Context, opts ArgoCDServerOpts) *ArgoCDServer {
307311
policyEnforcer: policyEnf,
308312
userStateStorage: userStateStorage,
309313
staticAssets: http.FS(staticFS),
310-
db: db.NewDB(opts.Namespace, settingsMgr, opts.KubeClientset),
314+
db: dbInstance,
311315
apiFactory: apiFactory,
312316
secretInformer: secretInformer,
313317
configMapInformer: configMapInformer,
314318
}
319+
320+
err = a.logInClusterWarnings()
321+
if err != nil {
322+
// Just log. It's not critical.
323+
log.Warnf("Failed to log in-cluster warnings: %v", err)
324+
}
325+
326+
return a
315327
}
316328

317329
const (
@@ -358,6 +370,47 @@ func (l *Listeners) Close() error {
358370
return nil
359371
}
360372

373+
// logInClusterWarnings checks the in-cluster configuration and prints out any warnings.
374+
func (a *ArgoCDServer) logInClusterWarnings() error {
375+
labelSelector := labels.NewSelector()
376+
req, err := labels.NewRequirement(common.LabelKeySecretType, selection.Equals, []string{common.LabelValueSecretTypeCluster})
377+
if err != nil {
378+
return fmt.Errorf("failed to construct cluster-type label selector: %w", err)
379+
}
380+
labelSelector = labelSelector.Add(*req)
381+
secretsLister, err := a.settingsMgr.GetSecretsLister()
382+
if err != nil {
383+
return fmt.Errorf("failed to get secrets lister: %w", err)
384+
}
385+
clusterSecrets, err := secretsLister.Secrets(a.ArgoCDServerOpts.Namespace).List(labelSelector)
386+
if err != nil {
387+
return fmt.Errorf("failed to list cluster secrets: %w", err)
388+
}
389+
var inClusterSecrets []string
390+
for _, clusterSecret := range clusterSecrets {
391+
cluster, err := db.SecretToCluster(clusterSecret)
392+
if err != nil {
393+
return fmt.Errorf("could not unmarshal cluster secret %q: %w", clusterSecret.Name, err)
394+
}
395+
if cluster.Server == v1alpha1.KubernetesInternalAPIServerAddr {
396+
inClusterSecrets = append(inClusterSecrets, clusterSecret.Name)
397+
}
398+
}
399+
if len(inClusterSecrets) > 0 {
400+
// Don't make this call unless we actually have in-cluster secrets, to save time.
401+
dbSettings, err := a.settingsMgr.GetSettings()
402+
if err != nil {
403+
return fmt.Errorf("could not get DB settings: %w", err)
404+
}
405+
if !dbSettings.InClusterEnabled {
406+
for _, clusterName := range inClusterSecrets {
407+
log.Warnf("cluster %q uses in-cluster server address but it's disabled in Argo CD settings", clusterName)
408+
}
409+
}
410+
}
411+
return nil
412+
}
413+
361414
func startListener(host string, port int) (net.Listener, error) {
362415
var conn net.Listener
363416
var realErr error

util/db/cluster.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func (db *db) ListClusters(ctx context.Context) (*appv1.ClusterList, error) {
6868
inClusterEnabled := settings.InClusterEnabled
6969
hasInClusterCredentials := false
7070
for _, clusterSecret := range clusterSecrets {
71-
cluster, err := secretToCluster(clusterSecret)
71+
cluster, err := SecretToCluster(clusterSecret)
7272
if err != nil {
7373
log.Errorf("could not unmarshal cluster secret %s", clusterSecret.Name)
7474
continue
@@ -120,7 +120,7 @@ func (db *db) CreateCluster(ctx context.Context, c *appv1.Cluster) (*appv1.Clust
120120
return nil, err
121121
}
122122

123-
cluster, err := secretToCluster(clusterSecret)
123+
cluster, err := SecretToCluster(clusterSecret)
124124
if err != nil {
125125
return nil, status.Errorf(codes.InvalidArgument, "could not unmarshal cluster secret %s", clusterSecret.Name)
126126
}
@@ -148,7 +148,7 @@ func (db *db) WatchClusters(ctx context.Context,
148148
common.LabelValueSecretTypeCluster,
149149

150150
func(secret *apiv1.Secret) {
151-
cluster, err := secretToCluster(secret)
151+
cluster, err := SecretToCluster(secret)
152152
if err != nil {
153153
log.Errorf("could not unmarshal cluster secret %s", secret.Name)
154154
return
@@ -163,12 +163,12 @@ func (db *db) WatchClusters(ctx context.Context,
163163
},
164164

165165
func(oldSecret *apiv1.Secret, newSecret *apiv1.Secret) {
166-
oldCluster, err := secretToCluster(oldSecret)
166+
oldCluster, err := SecretToCluster(oldSecret)
167167
if err != nil {
168168
log.Errorf("could not unmarshal cluster secret %s", oldSecret.Name)
169169
return
170170
}
171-
newCluster, err := secretToCluster(newSecret)
171+
newCluster, err := SecretToCluster(newSecret)
172172
if err != nil {
173173
log.Errorf("could not unmarshal cluster secret %s", newSecret.Name)
174174
return
@@ -218,7 +218,7 @@ func (db *db) GetCluster(_ context.Context, server string) (*appv1.Cluster, erro
218218
return nil, err
219219
}
220220
if len(res) > 0 {
221-
return secretToCluster(res[0].(*apiv1.Secret))
221+
return SecretToCluster(res[0].(*apiv1.Secret))
222222
}
223223
if server == appv1.KubernetesInternalAPIServerAddr {
224224
return db.getLocalCluster(), nil
@@ -239,7 +239,7 @@ func (db *db) GetProjectClusters(ctx context.Context, project string) ([]*appv1.
239239
}
240240
var res []*appv1.Cluster
241241
for i := range secrets {
242-
cluster, err := secretToCluster(secrets[i].(*apiv1.Secret))
242+
cluster, err := SecretToCluster(secrets[i].(*apiv1.Secret))
243243
if err != nil {
244244
return nil, fmt.Errorf("failed to convert secret to cluster: %w", err)
245245
}
@@ -293,7 +293,7 @@ func (db *db) UpdateCluster(ctx context.Context, c *appv1.Cluster) (*appv1.Clust
293293
if err != nil {
294294
return nil, err
295295
}
296-
cluster, err := secretToCluster(clusterSecret)
296+
cluster, err := SecretToCluster(clusterSecret)
297297
if err != nil {
298298
log.Errorf("could not unmarshal cluster secret %s", clusterSecret.Name)
299299
return nil, err
@@ -360,8 +360,8 @@ func clusterToSecret(c *appv1.Cluster, secret *apiv1.Secret) error {
360360
return nil
361361
}
362362

363-
// secretToCluster converts a secret into a Cluster object
364-
func secretToCluster(s *apiv1.Secret) (*appv1.Cluster, error) {
363+
// SecretToCluster converts a secret into a Cluster object
364+
func SecretToCluster(s *apiv1.Secret) (*appv1.Cluster, error) {
365365
var config appv1.ClusterConfig
366366
if len(s.Data["config"]) > 0 {
367367
err := json.Unmarshal(s.Data["config"], &config)

util/db/cluster_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func Test_secretToCluster(t *testing.T) {
4343
"config": []byte("{\"username\":\"foo\"}"),
4444
},
4545
}
46-
cluster, err := secretToCluster(secret)
46+
cluster, err := SecretToCluster(secret)
4747
require.NoError(t, err)
4848
assert.Equal(t, *cluster, v1alpha1.Cluster{
4949
Name: "test",
@@ -89,7 +89,7 @@ func Test_secretToCluster_NoConfig(t *testing.T) {
8989
"server": []byte("http://mycluster"),
9090
},
9191
}
92-
cluster, err := secretToCluster(secret)
92+
cluster, err := SecretToCluster(secret)
9393
assert.NoError(t, err)
9494
assert.Equal(t, *cluster, v1alpha1.Cluster{
9595
Name: "test",
@@ -111,7 +111,7 @@ func Test_secretToCluster_InvalidConfig(t *testing.T) {
111111
"config": []byte("{'tlsClientConfig':{'insecure':false}}"),
112112
},
113113
}
114-
cluster, err := secretToCluster(secret)
114+
cluster, err := SecretToCluster(secret)
115115
require.Error(t, err)
116116
assert.Nil(t, cluster)
117117
}

util/db/db.go

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@ import (
44
"context"
55
"strings"
66

7-
log "github.com/sirupsen/logrus"
87
v1 "k8s.io/api/core/v1"
98
"k8s.io/client-go/kubernetes"
109

11-
"github.com/argoproj/argo-cd/v2/common"
1210
appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1"
1311
"github.com/argoproj/argo-cd/v2/util/settings"
1412
)
@@ -95,36 +93,11 @@ type db struct {
9593

9694
// NewDB returns a new instance of the argo database
9795
func NewDB(namespace string, settingsMgr *settings.SettingsManager, kubeclientset kubernetes.Interface) ArgoDB {
98-
dbInstance := db{
96+
return &db{
9997
settingsMgr: settingsMgr,
10098
ns: namespace,
10199
kubeclientset: kubeclientset,
102100
}
103-
dbInstance.logInClusterWarning()
104-
return &dbInstance
105-
}
106-
107-
func (db *db) logInClusterWarning() {
108-
clusterSecrets, err := db.listSecretsByType(common.LabelValueSecretTypeCluster)
109-
if err != nil {
110-
log.WithError(err).Errorln("could not list secrets by type")
111-
}
112-
dbSettings, err := db.settingsMgr.GetSettings()
113-
if err != nil {
114-
log.WithError(err).Errorln("could not get DB settings")
115-
}
116-
for _, clusterSecret := range clusterSecrets {
117-
cluster, err := secretToCluster(clusterSecret)
118-
if err != nil {
119-
log.Errorf("could not unmarshal cluster secret %s", clusterSecret.Name)
120-
continue
121-
}
122-
if cluster.Server == appv1.KubernetesInternalAPIServerAddr {
123-
if !dbSettings.InClusterEnabled {
124-
log.Warnf("cluster %q uses in-cluster server address but it's disabled in Argo CD settings", cluster.Name)
125-
}
126-
}
127-
}
128101
}
129102

130103
func (db *db) getSecret(name string, cache map[string]*v1.Secret) (*v1.Secret, error) {

0 commit comments

Comments
 (0)