@@ -44,19 +44,24 @@ func createRootCommand() *cobra.Command {
44
44
func createStaticModeCommand () * cobra.Command {
45
45
// flag names
46
46
const (
47
- gatewayFlag = "gateway"
48
- configFlag = "config"
49
- serviceFlag = "service"
50
- updateGCStatusFlag = "update-gatewayclass-status"
51
- metricsDisableFlag = "metrics-disable"
52
- metricsSecureFlag = "metrics-secure-serving"
53
- metricsPortFlag = "metrics-port"
54
- healthDisableFlag = "health-disable"
55
- healthPortFlag = "health-port"
56
- leaderElectionDisableFlag = "leader-election-disable"
57
- leaderElectionLockNameFlag = "leader-election-lock-name"
58
- plusFlag = "nginx-plus"
59
- gwAPIExperimentalFlag = "gateway-api-experimental-features"
47
+ gatewayFlag = "gateway"
48
+ configFlag = "config"
49
+ serviceFlag = "service"
50
+ updateGCStatusFlag = "update-gatewayclass-status"
51
+ metricsDisableFlag = "metrics-disable"
52
+ metricsSecureFlag = "metrics-secure-serving"
53
+ metricsPortFlag = "metrics-port"
54
+ healthDisableFlag = "health-disable"
55
+ healthPortFlag = "health-port"
56
+ leaderElectionDisableFlag = "leader-election-disable"
57
+ leaderElectionLockNameFlag = "leader-election-lock-name"
58
+ productTelemetryDisableFlag = "product-telemetry-disable"
59
+ plusFlag = "nginx-plus"
60
+ gwAPIExperimentalFlag = "gateway-api-experimental-features"
61
+ usageReportSecretFlag = "usage-report-secret"
62
+ usageReportServerURLFlag = "usage-report-server-url"
63
+ usageReportSkipVerifyFlag = "usage-report-skip-verify"
64
+ usageReportClusterNameFlag = "usage-report-cluster-name"
60
65
)
61
66
62
67
// flag values
@@ -95,9 +100,19 @@ func createStaticModeCommand() *cobra.Command {
95
100
value : "nginx-gateway-leader-election-lock" ,
96
101
}
97
102
98
- plus bool
99
-
100
103
gwExperimentalFeatures bool
104
+
105
+ disableProductTelemetry bool
106
+
107
+ plus bool
108
+ usageReportSkipVerify bool
109
+ usageReportClusterName = stringValidatingValue {
110
+ validator : validateQualifiedName ,
111
+ }
112
+ usageReportSecretName = namespacedNameValue {}
113
+ usageReportServerURL = stringValidatingValue {
114
+ validator : validateURL ,
115
+ }
101
116
)
102
117
103
118
cmd := & cobra.Command {
@@ -134,6 +149,11 @@ func createStaticModeCommand() *cobra.Command {
134
149
return errors .New ("POD_NAME environment variable must be set" )
135
150
}
136
151
152
+ imageSource := os .Getenv ("BUILD_AGENT" )
153
+ if imageSource != "gha" && imageSource != "local" {
154
+ imageSource = "unknown"
155
+ }
156
+
137
157
period , err := time .ParseDuration (telemetryReportPeriod )
138
158
if err != nil {
139
159
return fmt .Errorf ("error parsing telemetry report period: %w" , err )
@@ -144,6 +164,20 @@ func createStaticModeCommand() *cobra.Command {
144
164
gwNsName = & gateway .value
145
165
}
146
166
167
+ var usageReportConfig * config.UsageReportConfig
168
+ if cmd .Flags ().Changed (usageReportSecretFlag ) {
169
+ if ! plus {
170
+ return errors .New ("usage-report arguments are only valid if using nginx-plus" )
171
+ }
172
+
173
+ usageReportConfig = & config.UsageReportConfig {
174
+ SecretNsName : usageReportSecretName .value ,
175
+ ServerURL : usageReportServerURL .value ,
176
+ ClusterDisplayName : usageReportClusterName .value ,
177
+ InsecureSkipVerify : usageReportSkipVerify ,
178
+ }
179
+ }
180
+
147
181
conf := config.Config {
148
182
GatewayCtlrName : gatewayCtlrName .value ,
149
183
ConfigName : configName .String (),
@@ -167,15 +201,20 @@ func createStaticModeCommand() *cobra.Command {
167
201
Port : metricsListenPort .value ,
168
202
Secure : metricsSecure ,
169
203
},
170
- LeaderElection : config.LeaderElection {
204
+ LeaderElection : config.LeaderElectionConfig {
171
205
Enabled : ! disableLeaderElection ,
172
206
LockName : leaderElectionLockName .String (),
173
207
Identity : podName ,
174
208
},
175
- Plus : plus ,
176
- TelemetryReportPeriod : period ,
177
- Version : version ,
178
- ExperimentalFeatures : gwExperimentalFeatures ,
209
+ UsageReportConfig : usageReportConfig ,
210
+ ProductTelemetryConfig : config.ProductTelemetryConfig {
211
+ TelemetryReportPeriod : period ,
212
+ Enabled : ! disableProductTelemetry ,
213
+ },
214
+ Plus : plus ,
215
+ Version : version ,
216
+ ExperimentalFeatures : gwExperimentalFeatures ,
217
+ ImageSource : imageSource ,
179
218
}
180
219
181
220
if err := static .StartManager (conf ); err != nil {
@@ -282,6 +321,13 @@ func createStaticModeCommand() *cobra.Command {
282
321
"A Lease object with this name will be created in the same Namespace as the controller." ,
283
322
)
284
323
324
+ cmd .Flags ().BoolVar (
325
+ & disableProductTelemetry ,
326
+ productTelemetryDisableFlag ,
327
+ false ,
328
+ "Disable the collection of product telemetry." ,
329
+ )
330
+
285
331
cmd .Flags ().BoolVar (
286
332
& plus ,
287
333
plusFlag ,
@@ -297,6 +343,33 @@ func createStaticModeCommand() *cobra.Command {
297
343
"Requires the Gateway APIs installed from the experimental channel." ,
298
344
)
299
345
346
+ cmd .Flags ().Var (
347
+ & usageReportSecretName ,
348
+ usageReportSecretFlag ,
349
+ "The namespace/name of the Secret containing the credentials for NGINX Plus usage reporting." ,
350
+ )
351
+
352
+ cmd .Flags ().Var (
353
+ & usageReportServerURL ,
354
+ usageReportServerURLFlag ,
355
+ "The base server URL of the NGINX Plus usage reporting server." ,
356
+ )
357
+
358
+ cmd .MarkFlagsRequiredTogether (usageReportSecretFlag , usageReportServerURLFlag )
359
+
360
+ cmd .Flags ().Var (
361
+ & usageReportClusterName ,
362
+ usageReportClusterNameFlag ,
363
+ "The display name of the Kubernetes cluster in the NGINX Plus usage reporting server." ,
364
+ )
365
+
366
+ cmd .Flags ().BoolVar (
367
+ & usageReportSkipVerify ,
368
+ usageReportSkipVerifyFlag ,
369
+ false ,
370
+ "Disable client verification of the NGINX Plus usage reporting server certificate." ,
371
+ )
372
+
300
373
return cmd
301
374
}
302
375
0 commit comments