Skip to content

Commit 18f973b

Browse files
authored
Merge branch 'main' into evolve_oidc_logout
2 parents 9a7ea6b + ca0c643 commit 18f973b

File tree

16 files changed

+298
-223
lines changed

16 files changed

+298
-223
lines changed

.github/actions/smoke-tests/action.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,23 +80,23 @@ runs:
8080
token_format: access_token
8181
workload_identity_provider: ${{ inputs.gcr-workload-identity-secret }}
8282
service_account: ${{ inputs.gcr-service-account-secret }}
83-
if: ${{ ! inputs.forked-workflow }}
83+
if: ${{ inputs.forked-workflow == 'false' }}
8484

8585
- name: Login to GCR
8686
uses: docker/login-action@v3
8787
with:
8888
registry: gcr.io
8989
username: oauth2accesstoken
9090
password: ${{ steps.auth.outputs.access_token }}
91-
if: ${{ ! inputs.forked-workflow }}
91+
if: ${{ inputs.forked-workflow == 'false' }}
9292

9393
- name: Build ${{ inputs.image }} Container
9494
uses: docker/build-push-action@v3
9595
with:
9696
file: build/Dockerfile
9797
context: "."
9898
cache-from: type=gha,scope=${{ inputs.image }}${{ contains(inputs.marker, 'dos') && '-dos' || '' }}${{ contains(inputs.marker, 'appprotect') && '-nap' || '' }}
99-
target: goreleaser${{ inputs.forked-workflow && '' || '-prebuilt' }}
99+
target: goreleaser${{ inputs.forked-workflow == 'false' && '-prebuilt' || '' }}
100100
tags: "docker.io/nginx/${{ steps.ingress-type.outputs.name }}:${{ steps.ingress-type.outputs.tag }}"
101101
load: true
102102
pull: true
@@ -138,7 +138,7 @@ runs:
138138
tags: ${{ inputs.test-image }}
139139
pull: true
140140
load: true
141-
if: ${{ inputs.forked-workflow }}
141+
if: ${{ inputs.forked-workflow == 'true' }}
142142

143143
- name: Run Smoke Tests
144144
run: |

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ jobs:
4545
ic_version: ${{ steps.vars.outputs.ic_version }}
4646
publish_images: ${{ steps.vars.outputs.publish }}
4747
docker_md5: ${{ steps.vars.outputs.docker_md5 }}
48-
forked_workflow: ${{ github.event.pull_request.head.repo.full_name != github.repository }}
48+
forked_workflow: ${{ (github.event.pull_request.head.repo.full_name != github.repository) && ! (startsWith(github.ref, 'refs/heads/release-') || github.ref_name == 'main') }}
4949
steps:
5050
- name: Checkout Repository
5151
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

internal/externaldns/controller.go

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package externaldns
22

33
import (
44
"context"
5+
"errors"
56
"fmt"
67
"sync"
78
"time"
@@ -58,7 +59,7 @@ type ExtDNSOpts struct {
5859
}
5960

6061
// NewController takes external dns config and return a new External DNS Controller.
61-
func NewController(opts *ExtDNSOpts) *ExtDNSController {
62+
func NewController(opts *ExtDNSOpts) (*ExtDNSController, error) {
6263
ig := make(map[string]*namespacedInformer)
6364
c := &ExtDNSController{
6465
ctx: opts.context,
@@ -74,35 +75,44 @@ func NewController(opts *ExtDNSOpts) *ExtDNSController {
7475
// no initial namespaces with watched label - skip creating informers for now
7576
break
7677
}
77-
c.newNamespacedInformer(ns)
78+
_, err := c.newNamespacedInformer(ns)
79+
if err != nil {
80+
return nil, err
81+
}
7882
}
7983

8084
c.sync = SyncFnFor(c.recorder, c.client, c.informerGroup)
81-
return c
85+
return c, nil
8286
}
8387

84-
func (c *ExtDNSController) newNamespacedInformer(ns string) *namespacedInformer {
88+
func (c *ExtDNSController) newNamespacedInformer(ns string) (*namespacedInformer, error) {
8589
nsi := &namespacedInformer{sharedInformerFactory: k8s_nginx_informers.NewSharedInformerFactoryWithOptions(c.client, c.resync, k8s_nginx_informers.WithNamespace(ns))}
8690
nsi.stopCh = make(chan struct{})
8791
nsi.vsLister = nsi.sharedInformerFactory.K8s().V1().VirtualServers().Lister()
8892
nsi.extdnslister = nsi.sharedInformerFactory.Externaldns().V1().DNSEndpoints().Lister()
8993

90-
nsi.sharedInformerFactory.K8s().V1().VirtualServers().Informer().AddEventHandler(
94+
vsInformer := nsi.sharedInformerFactory.K8s().V1().VirtualServers().Informer()
95+
vsHandlerReg, err := vsInformer.AddEventHandler(
9196
&QueuingEventHandler{
9297
Queue: c.queue,
9398
},
9499
)
95-
96-
nsi.sharedInformerFactory.Externaldns().V1().DNSEndpoints().Informer().AddEventHandler(&BlockingEventHandler{
100+
if err != nil {
101+
return nil, err
102+
}
103+
dnsInformer := nsi.sharedInformerFactory.Externaldns().V1().DNSEndpoints().Informer()
104+
dnsHandlerReg, err := dnsInformer.AddEventHandler(&BlockingEventHandler{
97105
WorkFunc: externalDNSHandler(c.queue),
98106
})
99-
107+
if err != nil {
108+
return nil, err
109+
}
100110
nsi.mustSync = append(nsi.mustSync,
101-
nsi.sharedInformerFactory.K8s().V1().VirtualServers().Informer().HasSynced,
102-
nsi.sharedInformerFactory.Externaldns().V1().DNSEndpoints().Informer().HasSynced,
111+
vsHandlerReg.HasSynced,
112+
dnsHandlerReg.HasSynced,
103113
)
104114
c.informerGroup[ns] = nsi
105-
return nsi
115+
return nsi, nil
106116
}
107117

108118
// Run sets up the event handlers for types we are interested in, as well
@@ -254,16 +264,20 @@ func getNamespacedInformer(ns string, ig map[string]*namespacedInformer) *namesp
254264
}
255265

256266
// AddNewNamespacedInformer adds watchers for a new namespace
257-
func (c *ExtDNSController) AddNewNamespacedInformer(ns string) {
267+
func (c *ExtDNSController) AddNewNamespacedInformer(ns string) error {
258268
glog.V(3).Infof("Adding or Updating cert-manager Watchers for Namespace: %v", ns)
259269
nsi := getNamespacedInformer(ns, c.informerGroup)
260270
if nsi == nil {
261-
nsi = c.newNamespacedInformer(ns)
271+
nsi, err := c.newNamespacedInformer(ns)
272+
if err != nil {
273+
return err
274+
}
262275
nsi.start()
263276
}
264277
if !cache.WaitForCacheSync(nsi.stopCh, nsi.mustSync...) {
265-
return
278+
return errors.New("failed to sync the cache")
266279
}
280+
return nil
267281
}
268282

269283
// RemoveNamespacedInformer removes watchers for a namespace we are no longer watching

internal/k8s/controller.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,9 @@ func NewLoadBalancerController(input NewLoadBalancerControllerInput) *LoadBalanc
274274
}
275275

276276
if input.ExternalDNSEnabled {
277-
lbc.externalDNSController = ed_controller.NewController(ed_controller.BuildOpts(context.TODO(), lbc.namespaceList, lbc.recorder, lbc.confClient, input.ResyncPeriod, isDynamicNs))
277+
if lbc.externalDNSController, err = ed_controller.NewController(ed_controller.BuildOpts(context.TODO(), lbc.namespaceList, lbc.recorder, lbc.confClient, input.ResyncPeriod, isDynamicNs)); err != nil {
278+
glog.Fatalf("failed to initialize ExternalDNS: %v", err)
279+
}
278280
}
279281

280282
glog.V(3).Infof("Nginx Ingress Controller has class: %v", input.IngressClass)
@@ -1142,7 +1144,10 @@ func (lbc *LoadBalancerController) syncNamespace(task task) {
11421144
lbc.certManagerController.AddNewNamespacedInformer(key)
11431145
}
11441146
if lbc.externalDNSController != nil {
1145-
lbc.externalDNSController.AddNewNamespacedInformer(key)
1147+
if err := lbc.externalDNSController.AddNewNamespacedInformer(key); err != nil {
1148+
lbc.syncQueue.Requeue(task, err)
1149+
return
1150+
}
11461151
}
11471152
if !cache.WaitForCacheSync(nsi.stopCh, nsi.cacheSyncs...) {
11481153
return

internal/telemetry/cluster.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ func (c *Collector) ClusterID(ctx context.Context) (string, error) {
2626
return string(cluster.UID), nil
2727
}
2828

29-
// K8sVersion returns a string respresenting the K8s version.
29+
// ClusterVersion returns a string respresenting the K8s version.
3030
// It returns an error if the underlying k8s API client errors.
31-
func (c *Collector) K8sVersion() (string, error) {
31+
func (c *Collector) ClusterVersion() (string, error) {
3232
sv, err := c.Config.K8sClientReader.Discovery().ServerVersion()
3333
if err != nil {
3434
return "", err

internal/telemetry/cluster_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func TestK8sVersionRetrievesClusterVersion(t *testing.T) {
6969
t.Parallel()
7070

7171
c := newTestCollectorForClusterWithNodes(t, node1)
72-
got, err := c.K8sVersion()
72+
got, err := c.ClusterVersion()
7373
if err != nil {
7474
t.Fatal(err)
7575
}

internal/telemetry/collector.go

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import (
77
"runtime"
88
"time"
99

10+
telemetry "github.com/nginxinc/telemetry-exporter/pkg/telemetry"
11+
1012
"github.com/nginxinc/kubernetes-ingress/internal/configs"
1113

1214
k8s_nginx "github.com/nginxinc/kubernetes-ingress/pkg/client/clientset/versioned"
@@ -95,14 +97,13 @@ func (c *Collector) Collect(ctx context.Context) {
9597
}
9698

9799
// BuildReport takes context and builds report from gathered telemetry data.
98-
func (c *Collector) BuildReport(ctx context.Context) (Data, error) {
99-
pm := ProjectMeta{
100-
Name: "NIC",
101-
Version: c.Config.Version,
102-
}
100+
func (c *Collector) BuildReport(ctx context.Context) (telemetry.Exportable, error) {
103101
d := Data{
104-
ProjectMeta: pm,
105-
Arch: runtime.GOARCH,
102+
Data: telemetry.Data{
103+
ProjectName: "NIC",
104+
ProjectVersion: c.Config.Version,
105+
ProjectArchitecture: runtime.GOARCH,
106+
},
106107
}
107108

108109
var err error
@@ -113,16 +114,21 @@ func (c *Collector) BuildReport(ctx context.Context) (Data, error) {
113114
d.TransportServers = int64(c.Config.Configurator.GetTransportServerCounts())
114115
}
115116

116-
if d.NodeCount, err = c.NodeCount(ctx); err != nil {
117-
glog.Errorf("Error collecting telemetry data: Nodes: %v", err)
118-
}
119-
120117
if d.ClusterID, err = c.ClusterID(ctx); err != nil {
121118
glog.Errorf("Error collecting telemetry data: ClusterID: %v", err)
122119
}
123120

124-
if d.K8sVersion, err = c.K8sVersion(); err != nil {
121+
if d.ClusterNodeCount, err = c.NodeCount(ctx); err != nil {
122+
glog.Errorf("Error collecting telemetry data: Nodes: %v", err)
123+
}
124+
125+
if d.ClusterVersion, err = c.ClusterVersion(); err != nil {
125126
glog.Errorf("Error collecting telemetry data: K8s Version: %v", err)
126127
}
127-
return d, err
128+
129+
// TODO: Get Cluster (k8s) platform. e.g. EKS, AWS, Openshift, etc...
130+
131+
// TODO: Get InstallationID
132+
// example of how NGF gets this ID https://github.com/nginxinc/nginx-gateway-fabric/blob/f33db51fc9e05ccf98fc8cdae100772a5cc6775e/internal/mode/static/telemetry/collector.go#L244-L248
133+
return &d, err
128134
}

0 commit comments

Comments
 (0)