Skip to content

Conversation

@dpacheconr
Copy link
Contributor

@dpacheconr dpacheconr commented Nov 14, 2025

Summary

Add support for cascading registry, pullSecrets, and pullPolicy from global settings to k8s-agents-operator.

Phase 1: Global.Images.Registry Support ✅

  • Updated values.yaml with clarifying comments for controller manager image
  • Added helper k8s-agents-operator.manager.image in _helpers.tpl to check global.images.registry fallback
  • Updated deployment.yaml to use the new image helper

Phase 2: Global.Images.PullSecrets Support ✅

  • Added global.images.pullSecrets support to deployment.yaml
  • Global and chart-level pullSecrets are concatenated together using concat helper

Phase 3: Global.Images.PullPolicy Support ✅ (NEW)

  • Added pullPolicy helper k8s-agents-operator.manager.imagePullPolicy in _helpers.tpl
  • Updated deployment.yaml to use pullPolicy helper
  • Configuration respects hierarchy: global setting → chart-level setting → default (IfNotPresent)

Configuration Hierarchy

For Image Registry:

  1. global.images.registry (if set AND repository matches default)
  2. Explicit repository configuration (takes precedence)
  3. Default: Docker Hub path

For ImagePullSecrets:

  1. global.images.pullSecrets (highest priority)
  2. Chart-level controllerManager.manager.image.pullSecrets
    Both sources are concatenated to support flexible secret management.

For ImagePullPolicy:

  1. global.images.pullPolicy (highest priority)
  2. Chart-level controllerManager.manager.image.pullPolicy
  3. Default: IfNotPresent

Implementation Details

  • If global.images.registry is set AND repository matches the default, uses global registry
  • If repository is explicitly set to custom value, that takes precedence
  • If global registry is not set, defaults to Docker Hub path (newrelic/k8s-agents-operator)
  • PullPolicy hierarchy ensures global settings cascade down when no explicit chart configuration is provided

Backward Compatibility

Fully backward compatible:

  • Existing values.yaml configurations continue to work unchanged
  • If controllerManager.manager.image.repository is explicitly set, it takes precedence
  • Charts using nri-bundle with global.images.registry now work correctly
  • Default behavior unchanged (uses Docker Hub path if neither is set)

Test Plan

Phase 1 (Registry):

  • ✓ Global registry is used when set: my.private.registry.com/newrelic/k8s-agents-operator:0.32.2
  • ✓ Defaults to Docker Hub when global registry not configured: newrelic/k8s-agents-operator:0.32.2
  • ✓ Explicit repository configuration overrides global registry

Phase 2 (PullSecrets):

  • ✓ No pullSecrets set → No imagePullSecrets section rendered
  • ✓ Global pullSecrets only → Uses global
  • ✓ Both global + chart pullSecrets → Uses both (global items first)

Phase 3 (PullPolicy):

  • ✓ Global pullPolicy is used when set and no chart-level policy exists
  • ✓ Defaults to IfNotPresent when neither global nor chart policy is set
  • ✓ Explicit chart-level pullPolicy overrides global setting

Impact

Once merged, users can now configure k8s-agents-operator with global image settings:

```yaml
global:
images:
registry: "my.private.registry.com"
pullSecrets:
- name: my-registry-credentials
pullPolicy: Always
```

This is part of a broader effort to ensure all New Relic Helm charts in the nri-bundle support consistent private registry configuration through global.images settings.

@dpacheconr dpacheconr requested a review from a team as a code owner November 14, 2025 13:20
@dpacheconr dpacheconr changed the title feat: support global.images.registry for controller image feat: add global.images registry and pullSecrets support to k8s-agents-operator Nov 14, 2025
@dpacheconr dpacheconr changed the title feat: add global.images registry and pullSecrets support to k8s-agents-operator feat: add global.images registry, pullSecrets, and pullPolicy support to k8s-agents-operator Nov 14, 2025
@dpacheconr dpacheconr force-pushed the support/global-images-registry branch from c293d69 to 8d8fb4c Compare November 14, 2025 18:04
Make the k8s-agents-operator controller image respect the global.images.registry
setting, enabling consistent private registry configuration across nri-bundle.

Changes:
- Updated values.yaml default repository with clarifying comments
- Modified _helpers.tpl to use global registry when default repository is configured
- Maintains backward compatibility with explicit repository overrides
- Supports SHA256 digest references

Implementation details:
- If global.images.registry is set AND repository matches default, uses global registry
- If repository is explicitly set to a custom value, that takes precedence
- If global registry is not set, defaults to Docker Hub path

Tested scenarios:
✓ Global registry is used when set and repository is default
✓ Defaults to Docker Hub when global registry not configured
✓ Explicit repository configuration overrides global
✓ SHA256 digest references continue to work
Update imagePullSecrets handling to cascade from global.images.pullSecrets:
- Updated deployment.yaml to include global.images.pullSecrets rendering
- Both global and chart-level pullSecrets are concatenated together

Configuration hierarchy:
1. global.images.pullSecrets (applied first)
2. image.pullSecrets (applied second - chart level)
Both sources are concatenated to support flexible secret management.
Add support for cascading pullPolicy from global.images.pullPolicy setting:
- Added k8s-agents-operator.manager.imagePullPolicy helper in _helpers.tpl
- Updated deployment.yaml to use the helper instead of inline default

Configuration hierarchy:
1. global.images.pullPolicy (highest priority)
2. controllerManager.manager.image.pullPolicy
3. Default: IfNotPresent

Users can now configure pull policy globally:
global:
  images:
    pullPolicy: Always
@dpacheconr dpacheconr force-pushed the support/global-images-registry branch from 8d8fb4c to 3962e8e Compare November 14, 2025 18:19
@codecov
Copy link

codecov bot commented Nov 17, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 69.54%. Comparing base (6a9d2bf) to head (b8c11a6).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #421      +/-   ##
==========================================
- Coverage   69.64%   69.54%   -0.11%     
==========================================
  Files          46       46              
  Lines        2840     2840              
==========================================
- Hits         1978     1975       -3     
- Misses        695      697       +2     
- Partials      167      168       +1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants