-
Notifications
You must be signed in to change notification settings - Fork 2.8k
feat(cli): migrate kingpin to cobra - dual parity #5836
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(cli): migrate kingpin to cobra - dual parity #5836
Conversation
* add FlagBinder with Kingpin and Cobra implementations * support --cli-backend and EXTERNAL_DNS_CLI (default: kingpin) * add tests for binders and CLI switch Refs: kubernetes-sigs#5379 Signed-off-by: Tobias Harnickell <tobias.harnickell@bedag.ch>
Started moving CLI flag registration into a common binder function, avoiding duplication between Kingpin and Cobra. Refs: kubernetes-sigs#5820 Signed-off-by: Tobias Harnickell <tobias.harnickell@bedag.ch>
* Add `regexpValue` and `RegexpVar` to Cobra binder with `setRegexpDefault` * Enforce `--provider` presence and validate against `providerNames * require at least one `--source` and validate against new `allowedSources` * Expand tests for Kingpin and Cobra Refs: kubernetes-sigs#5379 Signed-off-by: Tobias Harnickell <tobias.harnickell@bedag.ch>
Signed-off-by: Tobias Harnickell <tobias.harnickell@bedag.ch>
* Test parity assertion across binders * Test Cobra-specific incapabilities (`--no-<flag>` and env vars) * Deduplicate regexp flag handling Refs: kubernetes-sigs#5379 Signed-off-by: Tobias Harnickell <tobias.harnickell@bedag.ch>
|
Hi @TobyTheHutt. Thanks for your PR. I'm waiting for a kubernetes-sigs member to verify that this patch is reasonable to test. If it is, they should reply with Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
…rate-kingping-to-cobra Signed-off-by: Tobias Harnickell <tobias.harnickell@bedag.ch>
Signed-off-by: Tobias Harnickell <tobias.harnickell@bedag.ch>
|
Could you share evidence that the code is still working? |
|
/ok-to-test |
I won't be able to test all providers, if this is the question. However, I did test to my best skills and knowledge. Following is the config to reproduce the tests, using a local etcd and coredns instance in docker: docker network create extdns
# Create etcd instance
docker run -d --name extdns-etcd --network extdns -p 2379:2379 -p 2380:2380 \
quay.io/coreos/etcd:v3.5.15 /usr/local/bin/etcd \
--name s1 \
--data-dir /etcd-data \
--listen-client-urls http://0.0.0.0:2379 \
--advertise-client-urls http://extdns-etcd:2379 \
--listen-peer-urls http://0.0.0.0:2380 \
--initial-advertise-peer-urls http://extdns-etcd:2380 \
--initial-cluster s1=http://extdns-etcd:2380
# Create Corefile for coredns instance:
cat > Corefile <<'EOF'
example.test:1053 {
errors
log
etcd example.test {
stubzones
path /skydns
endpoint http://extdns-etcd:2379
}
forward . 1.1.1.1 8.8.8.8
cache 30
}
EOF
# Create coredns instance:
docker run -d --name extdns-coredns --network extdns \
-p 1053:1053/udp -p 1053:1053/tcp \
-v "$PWD/Corefile:/Corefile:ro" \
coredns/coredns:1.11.1 -conf /Corefile
# Run externalDNS to point to my local kind cluster using Kingpin backend:
export ETCD_URLS=http://127.0.0.1:2379
./build/external-dns \
--provider=coredns \
--source=ingress --source=service \
--domain-filter=example.test \
--policy=upsert-only \
--registry=txt --txt-owner-id=localdev \
--kubeconfig="$HOME/.kube/config" \
--log-level=debug \
--dry-run
# Run externalDNS to point to my local kind cluster using Cobra backend:
export ETCD_URLS=http://127.0.0.1:2379
./build/external-dns \
--provider=coredns \
--source=ingress --source=service \
--domain-filter=example.test \
--policy=upsert-only \
--registry=txt --txt-owner-id=localdev \
--kubeconfig="$HOME/.kube/config" \
--log-level=debug \
--dry-run
--cli-backend=cobraThe result: With Kingpin: With Cobra: Did I go too far in my code changes, since I cannot test all provider flags? If so, I can still revert changes which I cannot test within reasonable effort and budget. Let me know how to best proceed. I saw the race condition in the test and I'm on track to fix that too. |
|
The failing tests shouldn't be caused by my changes to the binders and flags. The binder package passed, validation passed and failures are isolated to I currently cannot see a connection to my changes and the project wrappers. Just to be sure, I ran the makefile tests in a throttled docker environment with 0.5 CPU, which succeeded. /test pull-external-dns-unit-test |
|
Yeah, there are data races, and the fix awaiting review #5833 |
|
No need to test all providers, just high level smoke test is enough. Need to make sure the code still executes )) |
|
@TobyTheHutt A first fix on the race condition has been merged yesterday (#5841). If you rebase, that should be better. |
…rate-kingping-to-cobra Signed-off-by: Tobias Harnickell <tobias.harnickell@bedag.ch>
|
/lgtm |
|
/approve |
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: mloiseleur The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
…o v0.20.0 (#869) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [registry.k8s.io/external-dns/external-dns](https://github.com/kubernetes-sigs/external-dns) | minor | `v0.19.0` -> `v0.20.0` | --- ### Release Notes <details> <summary>kubernetes-sigs/external-dns (registry.k8s.io/external-dns/external-dns)</summary> ### [`v0.20.0`](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.20.0) [Compare Source](kubernetes-sigs/external-dns@v0.19.0...v0.20.0) #### 🚀 Features - feat: add new flags to allow migration of OwnerID by [@​troll-os](https://github.com/troll-os) in [#​4823](kubernetes-sigs/external-dns#4823) - feat(annotations): add custom annotation prefix support for split horizon DNS by [@​lexfrei](https://github.com/lexfrei) in [#​5889](kubernetes-sigs/external-dns#5889) - feat(aws): add ap-southeast-6 region by [@​rhysmdnz](https://github.com/rhysmdnz) in [#​5812](kubernetes-sigs/external-dns#5812) - feat(chart): Release for v0.19.0 by [@​stevehipwell](https://github.com/stevehipwell) in [#​5819](kubernetes-sigs/external-dns#5819) - feat(cli): add Cobra binder and backend switch by [@​TobyTheHutt](https://github.com/TobyTheHutt) in [#​5820](kubernetes-sigs/external-dns#5820) - feat(cli): migrate kingpin to cobra - dual parity by [@​TobyTheHutt](https://github.com/TobyTheHutt) in [#​5836](kubernetes-sigs/external-dns#5836) - feat(coredns): add annotations for groups by [@​farodin91](https://github.com/farodin91) in [#​5842](kubernetes-sigs/external-dns#5842) - feat(coredns): pass context to etcd client by [@​farodin91](https://github.com/farodin91) in [#​5915](kubernetes-sigs/external-dns#5915) - feat(provider/cloudflare): add support for tags by [@​nkhl99](https://github.com/nkhl99) in [#​5862](kubernetes-sigs/external-dns#5862) - feat(source): add min-ttl support by [@​ivankatliarchuk](https://github.com/ivankatliarchuk) in [#​5641](kubernetes-sigs/external-dns#5641) - feat(source/f5-virtual-server): add host aliases support for Virtual … by [@​shkarface](https://github.com/shkarface) in [#​5745](kubernetes-sigs/external-dns#5745) #### 🐛 Bug fixes - fix(cloudflare): infinite reconciliation loop with cloudflare-record-comment flag by [@​vflaux](https://github.com/vflaux) in [#​5828](kubernetes-sigs/external-dns#5828) - fix: cloudflare softError failedZones by [@​nissessenap](https://github.com/nissessenap) in [#​5899](kubernetes-sigs/external-dns#5899) - fix(controller): panic in OCI provider build by [@​vflaux](https://github.com/vflaux) in [#​5877](kubernetes-sigs/external-dns#5877) - fix(coredns): debug message on labels update by [@​bachorp](https://github.com/bachorp) in [#​5789](kubernetes-sigs/external-dns#5789) - fix(deps): bump openshift with gateway-api by [@​ivankatliarchuk](https://github.com/ivankatliarchuk) in [#​5942](kubernetes-sigs/external-dns#5942) - fix(endpoint): debug message when owner label is missing by [@​bachorp](https://github.com/bachorp) in [#​5788](kubernetes-sigs/external-dns#5788) - fix(endpoint): deduplicate targets by [@​ivankatliarchuk](https://github.com/ivankatliarchuk) in [#​5805](kubernetes-sigs/external-dns#5805) - fix(endpoint/source) Allow '.' in TXT Records by [@​onelapahead](https://github.com/onelapahead) in [#​5844](kubernetes-sigs/external-dns#5844) - fix(gen/metrics): deduplicate generated in metrics.md by [@​vflaux](https://github.com/vflaux) in [#​5837](kubernetes-sigs/external-dns#5837) - fix(service): rollback nodeinformer for addevent handler by [@​ivankatliarchuk](https://github.com/ivankatliarchuk) in [#​5941](kubernetes-sigs/external-dns#5941) - fix(txt-register): reset existingTXTs even when ApplyChanges is skipped to avoid stale TXT records by [@​u-kai](https://github.com/u-kai) in [#​5897](kubernetes-sigs/external-dns#5897) #### 📝 Documentation - docs(advanced): configuration precedence by [@​ivankatliarchuk](https://github.com/ivankatliarchuk) in [#​5871](kubernetes-sigs/external-dns#5871) - docs(aws): add missing supported DNS record types in Route53 ABAC by [@​TobyTheHutt](https://github.com/TobyTheHutt) in [#​5839](kubernetes-sigs/external-dns#5839) - docs(aws): scoping the IAM policy to explicitely defined Route53 zones by [@​crtr109](https://github.com/crtr109) in [#​5663](kubernetes-sigs/external-dns#5663) - docs(ci): improve release note template by [@​mloiseleur](https://github.com/mloiseleur) in [#​5791](kubernetes-sigs/external-dns#5791) - docs: clarify hostname annotation behavior by [@​PseudoResonance](https://github.com/PseudoResonance) in [#​5912](kubernetes-sigs/external-dns#5912) - docs(contributing): add reference to developer documentation by [@​lexfrei](https://github.com/lexfrei) in [#​5923](kubernetes-sigs/external-dns#5923) - docs(core-dns): update tutorial by [@​ivankatliarchuk](https://github.com/ivankatliarchuk) in [#​5926](kubernetes-sigs/external-dns#5926) - docs: fix mkdocs build by [@​mloiseleur](https://github.com/mloiseleur) in [#​5795](kubernetes-sigs/external-dns#5795) - docs(gateway-api): clarify annotation placement for sources by [@​lexfrei](https://github.com/lexfrei) in [#​5918](kubernetes-sigs/external-dns#5918) - docs(myra): add info about protection option and docker image by [@​armaaar](https://github.com/armaaar) in [#​5879](kubernetes-sigs/external-dns#5879) - docs(release): update release docs by [@​ivankatliarchuk](https://github.com/ivankatliarchuk) in [#​5893](kubernetes-sigs/external-dns#5893) - docs(tutorials): import existing DNS records into ExternalDNS by [@​naavveenn](https://github.com/naavveenn) in [#​5811](kubernetes-sigs/external-dns#5811) - docs(txt-registry): improve formatting and examples for apex record by [@​u-kai](https://github.com/u-kai) in [#​5863](kubernetes-sigs/external-dns#5863) - docs(webhook): add volcengine provider to readme by [@​firemiles](https://github.com/firemiles) in [#​5866](kubernetes-sigs/external-dns#5866) #### 📦 Others - Build(tool) remove vacuum by [@​szuecs](https://github.com/szuecs) in [#​5955](kubernetes-sigs/external-dns#5955) - chore(ci): fix releaser script by [@​mloiseleur](https://github.com/mloiseleur) in [#​5953](kubernetes-sigs/external-dns#5953) - chore(ci): speed-up & coveralls by [@​mloiseleur](https://github.com/mloiseleur) in [#​5870](kubernetes-sigs/external-dns#5870) - chore(cloudflare): migrate `DeleteCustomHostname()` to new lib by [@​vflaux](https://github.com/vflaux) in [#​5880](kubernetes-sigs/external-dns#5880) - chore(cloudflare): migrate DeleteDNSRecord() to new lib by [@​vflaux](https://github.com/vflaux) in [#​5780](kubernetes-sigs/external-dns#5780) - chore(cloudflare): migrate ListRecords() to new lib by [@​vflaux](https://github.com/vflaux) in [#​5778](kubernetes-sigs/external-dns#5778) - chore(cloudflare): migrate UpdateDNSRecord() to new lib by [@​vflaux](https://github.com/vflaux) in [#​5781](kubernetes-sigs/external-dns#5781) - chore(controller-gen): move tools under go tools by [@​ivankatliarchuk](https://github.com/ivankatliarchuk) in [#​5878](kubernetes-sigs/external-dns#5878) - chore(deps): bump renovatebot/github-action from 43.0.10 to 43.0.11 in the dev-dependencies group by [@​app/dependabot](https://github.com/app/dependabot) in [#​5823](kubernetes-sigs/external-dns#5823) - chore(deps): bump renovatebot/github-action from 43.0.11 to 43.0.12 in the dev-dependencies group by [@​app/dependabot](https://github.com/app/dependabot) in [#​5840](kubernetes-sigs/external-dns#5840) - chore(deps): bump renovatebot/github-action from 43.0.12 to 43.0.13 in the dev-dependencies group by [@​app/dependabot](https://github.com/app/dependabot) in [#​5856](kubernetes-sigs/external-dns#5856) - chore(deps): bump renovatebot/github-action from 43.0.13 to 43.0.14 in the dev-dependencies group by [@​app/dependabot](https://github.com/app/dependabot) in [#​5874](kubernetes-sigs/external-dns#5874) - chore(deps): bump renovatebot/github-action from 43.0.14 to 43.0.15 in the dev-dependencies group by [@​app/dependabot](https://github.com/app/dependabot) in [#​5890](kubernetes-sigs/external-dns#5890) - chore(deps): bump renovatebot/github-action from 43.0.9 to 43.0.10 in the dev-dependencies group by [@​app/dependabot](https://github.com/app/dependabot) in [#​5797](kubernetes-sigs/external-dns#5797) - chore(deps): bump the dev-dependencies group across 1 directory with 15 updates by [@​app/dependabot](https://github.com/app/dependabot) in [#​5952](kubernetes-sigs/external-dns#5952) - chore(deps): bump the dev-dependencies group across 1 directory with 36 updates by [@​app/dependabot](https://github.com/app/dependabot) in [#​5943](kubernetes-sigs/external-dns#5943) - chore(deps): bump the dev-dependencies group across 1 directory with 5 updates by [@​app/dependabot](https://github.com/app/dependabot) in [#​5940](kubernetes-sigs/external-dns#5940) - chore(deps): bump the dev-dependencies group across 1 directory with 9 updates by [@​app/dependabot](https://github.com/app/dependabot) in [#​5949](kubernetes-sigs/external-dns#5949) - chore(deps): bump the dev-dependencies group with 2 updates by [@​app/dependabot](https://github.com/app/dependabot) in [#​5895](kubernetes-sigs/external-dns#5895) - chore(deps): bump the dev-dependencies group with 2 updates by [@​app/dependabot](https://github.com/app/dependabot) in [#​5946](kubernetes-sigs/external-dns#5946) - chore(deps): bump the dev-dependencies group with 3 updates by [@​app/dependabot](https://github.com/app/dependabot) in [#​5806](kubernetes-sigs/external-dns#5806) - chore(lint): configure goconst linter by [@​lexfrei](https://github.com/lexfrei) in [#​5929](kubernetes-sigs/external-dns#5929) - chore(owners): update reviewers by [@​mloiseleur](https://github.com/mloiseleur) in [#​5925](kubernetes-sigs/external-dns#5925) - chore(pihole): reduce cyclometic complexity of TestListRecords by [@​AndrewCharlesHay](https://github.com/AndrewCharlesHay) in [#​5802](kubernetes-sigs/external-dns#5802) - chore(release): updates kustomize & docs with v0.19.0 by [@​mloiseleur](https://github.com/mloiseleur) in [#​5792](kubernetes-sigs/external-dns#5792) - chore: upgrade ExternalDNS to go v1.25 and golangci-lint v2.5 by [@​mloiseleur](https://github.com/mloiseleur) in [#​5869](kubernetes-sigs/external-dns#5869) - ci(linter): add gochecknoinits by [@​ivankatliarchuk](https://github.com/ivankatliarchuk) in [#​5911](kubernetes-sigs/external-dns#5911) - ci(linter): add go-critic by [@​PascalBourdier](https://github.com/PascalBourdier) in [#​5875](kubernetes-sigs/external-dns#5875) - doc(tutorials/rfc2136): fix RBAC by [@​vflaux](https://github.com/vflaux) in [#​5827](kubernetes-sigs/external-dns#5827) - refactor(annotations): modernize ProviderSpecificAnnotation by [@​ivankatliarchuk](https://github.com/ivankatliarchuk) in [#​5813](kubernetes-sigs/external-dns#5813) - refactor(pihole): reduce cyclomatic complexity of TestProvider by [@​AndrewCharlesHay](https://github.com/AndrewCharlesHay) in [#​5865](kubernetes-sigs/external-dns#5865) - refactor(pihole): reduce cyclomatic complexity of TestProviderV6 by [@​AndrewCharlesHay](https://github.com/AndrewCharlesHay) in [#​5876](kubernetes-sigs/external-dns#5876) - refactor(service): reduce cyclomatic complexity of extractHeadlessEndpoints by [@​AndrewCharlesHay](https://github.com/AndrewCharlesHay) in [#​5822](kubernetes-sigs/external-dns#5822) - refactor(source/nat64): optional source & early prefixes parsing by [@​vflaux](https://github.com/vflaux) in [#​5810](kubernetes-sigs/external-dns#5810) - refactor(source/wrappers): move wrappers logic away from execute file by [@​ivankatliarchuk](https://github.com/ivankatliarchuk) in [#​5888](kubernetes-sigs/external-dns#5888) - test(cloudflare): clear environment variables before setting test values by [@​u-kai](https://github.com/u-kai) in [#​5851](kubernetes-sigs/external-dns#5851) - test(cloudflare): improve coverage of zoneService by [@​vflaux](https://github.com/vflaux) in [#​5800](kubernetes-sigs/external-dns#5800) - test(cloudflare): mock provider for cf change tests by [@​vflaux](https://github.com/vflaux) in [#​5852](kubernetes-sigs/external-dns#5852) - test(cloudflare): modernize zoneDomainFilter test by [@​vflaux](https://github.com/vflaux) in [#​5853](kubernetes-sigs/external-dns#5853) - test(controller): improve code coverage by [@​TobyTheHutt](https://github.com/TobyTheHutt) in [#​5816](kubernetes-sigs/external-dns#5816) - test(source): fqdn for source/service/nodeport/srv records by [@​ivankatliarchuk](https://github.com/ivankatliarchuk) in [#​5554](kubernetes-sigs/external-dns#5554) - test(source/service): add serviceTypeFilter edge case by [@​ivankatliarchuk](https://github.com/ivankatliarchuk) in [#​5872](kubernetes-sigs/external-dns#5872) - test(source/wrappers): fix race condition by [@​vflaux](https://github.com/vflaux) in [#​5841](kubernetes-sigs/external-dns#5841) - test: update goversion label to 1.25 in metrics test by [@​AndrewCharlesHay](https://github.com/AndrewCharlesHay) in [#​5886](kubernetes-sigs/external-dns#5886) - update test certs used for pdns by [@​Raffo](https://github.com/Raffo) in [#​5902](kubernetes-sigs/external-dns#5902) #### 📦 Docker Image ```sh docker pull registry.k8s.io/external-dns/external-dns:v0.20.0 ``` </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xMS4wIiwidXBkYXRlZEluVmVyIjoiNDIuMTEuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwL21pbm9yIl19--> Reviewed-on: https://codeberg.org/JesusMtnez/homelab/pulls/869 Co-authored-by: JesusMtnez-bot <jesusmartinez93+bot@gmail.com> Co-committed-by: JesusMtnez-bot <jesusmartinez93+bot@gmail.com>
What does it do ?
--no-flagsand instead requires the flag to be set tofalseMotivation
Prepare for a migration from Kingpin to Cobra, as suggested in #5379 without breaking user experience.
More
For the moment, full Kingpin functionality is ensured by default. The Cobra backend can be tested using the ENV variable
EXTERNAL_DNS_CLI=cobraor hidden flag--cli-backend=cobra.Continuous maintainability of flags is ensured through the
FlagBinderwhich is picked up by both backends.Next steps would likely be to invite operators to try out the new backend and to document the backend toggle.