{"id":18810369,"url":"https://github.com/absaoss/external-dns-infoblox-webhook","last_synced_at":"2025-07-21T05:06:40.491Z","repository":{"id":241590187,"uuid":"807141266","full_name":"AbsaOSS/external-dns-infoblox-webhook","owner":"AbsaOSS","description":"Infoblox provider based on in-tree provider for ExternalDNS","archived":false,"fork":false,"pushed_at":"2025-07-17T07:02:05.000Z","size":108,"stargazers_count":15,"open_issues_count":6,"forks_count":10,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-07-17T12:11:24.952Z","etag":null,"topics":["dns","external-dns","external-dns-webhook","go","golang","infoblox","infoblox-api"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AbsaOSS.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-05-28T14:54:16.000Z","updated_at":"2025-07-17T07:02:09.000Z","dependencies_parsed_at":"2024-06-13T15:09:23.985Z","dependency_job_id":"6a815950-dd1e-45c7-8265-ee8255baf9c2","html_url":"https://github.com/AbsaOSS/external-dns-infoblox-webhook","commit_stats":null,"previous_names":["absaoss/external-dns-infoblox-webhook"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/AbsaOSS/external-dns-infoblox-webhook","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbsaOSS%2Fexternal-dns-infoblox-webhook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbsaOSS%2Fexternal-dns-infoblox-webhook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbsaOSS%2Fexternal-dns-infoblox-webhook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbsaOSS%2Fexternal-dns-infoblox-webhook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AbsaOSS","download_url":"https://codeload.github.com/AbsaOSS/external-dns-infoblox-webhook/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbsaOSS%2Fexternal-dns-infoblox-webhook/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266242072,"owners_count":23898102,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dns","external-dns","external-dns-webhook","go","golang","infoblox","infoblox-api"],"created_at":"2024-11-07T23:19:59.037Z","updated_at":"2025-07-21T05:06:40.485Z","avatar_url":"https://github.com/AbsaOSS.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# external-dns-infoblox-webhook\n\nInfoblox provider based on in-tree provider for ExternalDNS. Supported records:\n\n| Record Type | Status     |\n|-------------|------------|\n| A           | supported  |\n| CNAME       | supported  |\n| TXT         | supported  |\n| PTR         | not tested |\n\n\n## Quick start\n\nTo run the provider, you must provide the following Environment Variables:\n\n**Infoblox Environment Variables**:\n\n| Environment Variable                | Default value | Required |\n|-------------------------------------|---------------|----------|\n| INFOBLOX_HOST                       | localhost     | true     |\n| INFOBLOX_PORT                       | 443           | true     |\n| INFOBLOX_WAPI_USER                  |               | true     |\n| INFOBLOX_WAPI_PASSWORD              |               | true     |\n| INFOBLOX_VERSION                    |               | true     |\n| INFOBLOX_SSL_VERIFY                 | true          | false    |\n| INFOBLOX_DRY_RUN                    | false         | false    |\n| INFOBLOX_VIEW                       | default       | false    |\n| INFOBLOX_MAX_RESULTS                | 1500          | false    |\n| INFOBLOX_CREATE_PTR                 | false         | false    |\n| INFOBLOX_DEFAULT_TTL                | 300           | false    |\n| INFOBLOX_EXTENSIBLE_ATTRIBUTES_JSON | {}            | false    |\n\n### INFOBLOX_CREATE_PTR\n\nWhen infoblox `INFOBLOX_CREATE_PTR` is set to `true`, make shure that `DOMAIN_FILTER` contains the zone for reversed lookup.\n\n```bash\nDOMAIN_FILTER=\"cloud.example, 1.2.3.0/24\"\n```\n\n**external-dns-infoblox-webhook Environment Variables**:\n\n| Environment Variable           | Default value | Required |\n|--------------------------------|---------------|----------|\n| SERVER_HOST                    | 127.0.0.1     | true     |\n| SERVER_PORT                    | 8888          | true     |   \n| HEALTH_CHECK_PORT              | 8080          | false    |\n| SERVER_READ_TIMEOUT            |               | false    |\n| SERVER_WRITE_TIMEOUT           |               | false    |\n| DOMAIN_FILTER                  |               | false    |\n| EXCLUDE_DOMAIN_FILTER          |               | false    |\n| REGEXP_DOMAIN_FILTER           |               | false    |\n| REGEXP_DOMAIN_FILTER_EXCLUSION |               | false    |\n| REGEXP_NAME_FILTER             |               | false    |\n\n\n## Contribution\nAll PRs are welcome, but before you create a PR, make sure your changes pass the linters and the apache2 license is \ninjected into the newly added files. The `make lint` command will do this for you. \n\nAnother point is the tests. If you create/change functionality, make sure the tests are running, updated or necessary ones \nare added. The `make test` command is used to run the tests.\n\nAll commits MUST be SIGNED before merge into main branch.\n\n## Running locally\n\nTo run provider in a local environment, you must provide all required settings through environment variables.\nTo run locally, set `SERVER_HOST` to `localhost`, otherwise leave it at `0.0.0.0`.\nInfoblox Provider is a simple web server with several clearly defined routers:\n\n| Route            | Method |\n|------------------|--------|\n| /healthz         | GET    |\n| /records         | GET    |\n| /records         | POST   |\n| /adjustendpoints | POST   |\n\n#### Reading Data\nRead data by HTTP GET to `/records`, see:\n```shell\ncurl -H 'Accept: application/external.dns.webhook+json;version=1' localhost:8888/records\n```\nIf you set DOMAIN_FILTER, DNS will return all records from this domain(s). Because the returned data for a given\ndomain can be large - in some cases tens of thousands of records, it is advisable to use filters to reduce the \ndata to the desired result. Filters are specified via environment variables: `DOMAIN_FILTER`,`EXCLUDE_DOMAIN_FILTER`,\n`REGEXP_DOMAIN_FILTER`,`REGEXP_DOMAIN_FILTER_EXCLUSION`,`REGEXP_NAME_FILTER`.\n\nThe following example demonstrates the use of a filter:\n```shell\n# We are looking for all records in these two domains. \n# Unfortunately, they may contain tens of thousands of records.\nDOMAIN_FILTER=org.eu.cloud.example.com,org-hq.us.cloud.example.com\n\n# If DOMAIN_FILTER is not enough, you can use regex. Once you use REGEXP_DOMAIN_FILTER, DOMAIN_FILTER will be ignored.\n# In following example we restrict zones to *.eu.cloud.example.com or *.org-hq.us.cloud.example.com.\nREGEXP_DOMAIN_FILTER=(eu.cloud|org-hq.us).cloud.example.com\n\n# Finally, we filter only those records that have `my-project.org-hq` or `.us.cloud` in the name\nREGEXP_NAME_FILTER=(my-project.org-hq|.us.cloud)\n```\n\n#### Writing Data\n\nHere are the updating rules according to which the data in the DNS server will be updated:\n\n- if updateNew is not part of Update Old , object should be created\n- if updateOld is not part of Update New , object should be deleted\n- if information is not present (TTL might change) , object should be updated\n- if we rename the object, object should be deleted and created\n\n\nBased on the rules I am providing some examples of `data.json` creating, changing and deleting records in DNS.\n\n```shell\ncurl -X POST -H 'Accept: application/external.dns.webhook+json;version=1;' -H 'Content-Type: application/external.dns.webhook+json;version=1' -d @data.json localhost:8888/records\n```\n\nCreate `test.cloud.example.com`\n```json\n{\"Create\":null,\"UpdateOld\":null,\"UpdateNew\":[{\"dnsName\":\"test.cloud.example.com\",\"targets\":[\"1.3.2.1\"],\"recordType\":\"A\",\"recordTTL\":300}],\"Delete\":null}\n```\n\nUpdate `test.cloud.example.com` (DELETE one record `test.cloud.example.com` and CREATE two records `new-test.cloud.example.com`)\n```json\n{\"Create\":null,\"UpdateOld\":[{\"dnsName\":\"test.cloud.example.com\",\"targets\":[\"1.3.2.1\"],\"recordType\":\"A\",\"recordTTL\":300}],\"UpdateNew\":[{\"dnsName\":\"new-test.cloud.example.com\",\"targets\":[\"1.2.3.4\",\"4.3.2.1\"],\"recordType\":\"A\",\"recordTTL\":300}],\"Delete\":null}\n```\n\nDelete `test-new.cloud.example.com`\n```json\n{\"Create\":null,\"UpdateOld\":[{\"dnsName\":\"new-test.cloud.example.\",\"targets\":[\"1.2.3.4\",\"4.3.2.1\"],\"recordType\":\"A\",\"recordTTL\":300}],\"UpdateNew\":null,\"Delete\":null}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabsaoss%2Fexternal-dns-infoblox-webhook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabsaoss%2Fexternal-dns-infoblox-webhook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabsaoss%2Fexternal-dns-infoblox-webhook/lists"}