{"id":50432934,"url":"https://github.com/rwahyudi/gib","last_synced_at":"2026-05-31T15:02:04.421Z","repository":{"id":356874143,"uuid":"1233535555","full_name":"rwahyudi/gib","owner":"rwahyudi","description":"gib a fast, lightweight ,  single binary CLI for managing Infoblox without living in the web UI. It keeps Ad-Hoc \u0026 day-to-day DNS work close to the shell , fast and easy.","archived":false,"fork":false,"pushed_at":"2026-05-18T23:54:13.000Z","size":1328,"stargazers_count":0,"open_issues_count":2,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-19T01:46:54.325Z","etag":null,"topics":["dns","infoblox","infoblox-cli","infoblox-wapi","shell"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rwahyudi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-09T04:14:58.000Z","updated_at":"2026-05-18T23:54:18.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rwahyudi/gib","commit_stats":null,"previous_names":["rwahyudi/gib"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/rwahyudi/gib","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwahyudi%2Fgib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwahyudi%2Fgib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwahyudi%2Fgib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwahyudi%2Fgib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rwahyudi","download_url":"https://codeload.github.com/rwahyudi/gib/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwahyudi%2Fgib/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33735663,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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","infoblox","infoblox-cli","infoblox-wapi","shell"],"created_at":"2026-05-31T15:02:03.527Z","updated_at":"2026-05-31T15:02:04.409Z","avatar_url":"https://github.com/rwahyudi.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gib\n\n[![Latest release](https://img.shields.io/github/v/release/rwahyudi/gib?color=0ea5e9)](https://github.com/rwahyudi/gib/releases/latest)\n![Go 1.24](https://img.shields.io/badge/go-1.24-00ADD8)\n[![License: MIT](https://img.shields.io/badge/license-MIT-22c55e)](LICENSE)\n\n`ib` is a fast, lightweight, operator-focused CLI for managing Infoblox DNS and\nIPAM work from the shell.\n\n![ib cli preview](docs/assets/go-record1.gif)\n\nRead-heavy workflows can use a validated Grid Master Candidate, and large\nrecord/IPAM searches use SQLite caching plus bounded workers to stay\nresponsive.\n\n## Features\n\n- Profile management for creating, editing, switching, and deleting multiple Infoblox\n  profiles with encrypted local passwords.\n- Safe read/write routing: GET requests can use a validated GCM read endpoint,\n  while POST, PUT, and DELETE stay on the primary Grid Master.\n- DNS context from configured defaults, shell-session view/zone context,\n  environment variables, or one-command `--view` and `--zone` overrides.\n- DNS record workflows for listing, searching, creating, editing, and deleting\n  records, including filtering, field sorting, selected output columns,\n  interactive duplicate selection, and confirmation.\n- IPAM read workflows for network views, IPv4 network/container list/search/details,\n  address details, and next available IP lookup with network-view selection.\n- Large-zone performance through `/allrecords`, SQLite caching,\n  worker-limited global search, and stale-while-revalidate refreshes.\n- Dynamic shell completion for profiles, views, zones, records, flags, record\n  types, and output formats from the live `ib` binary.\n- Optional JSON Lines audit logging for successful create, edit, and delete\n  actions, with file/syslog support on Linux and Windows Event Log support on Windows.\n- Compact operator output with colorful tables, current-context footers,\n  JSON/CSV output, and progress display for larger searches.\n\n## Install\n\nFor Fedora or EPEL, Copr is the shortest path. The package is named `gib` and\ninstalls the command as `/usr/bin/ib`.\n\n```bash\nsudo dnf install dnf-plugins-core\nsudo dnf copr enable rwahyudi/gib\nsudo dnf install gib\n```\n\nGitHub release assets use stable filenames, so `/releases/latest/download/...`\nalways points at the newest published version.\n\nLinux tarball:\n\n```bash\ncurl -fL https://github.com/rwahyudi/gib/releases/latest/download/ib_linux_amd64.tar.gz | tar -xz ib\nsudo install -m 0755 ib /usr/local/bin/ib\nib -v\nib --help\n```\n\nRPM or DEB package:\n\n```bash\ncurl -fLO https://github.com/rwahyudi/gib/releases/latest/download/ib_linux_amd64.rpm\nsudo dnf install ./ib_linux_amd64.rpm\n\ncurl -fLO https://github.com/rwahyudi/gib/releases/latest/download/ib_linux_amd64.deb\nsudo apt install ./ib_linux_amd64.deb\n```\n\nRPM and DEB packages install `ib` to `/usr/local/bin/ib` and Bash completion to\n`/etc/bash_completion.d/ib`. For the tarball, install completion manually:\n\n```bash\nsudo mkdir -p /etc/bash_completion.d\nib config completion bash | sudo tee /etc/bash_completion.d/ib \u003e/dev/null\n```\n\nOpen a new shell after installing completion.\n\nWindows ZIP:\n\n```powershell\nNew-Item -ItemType Directory -Force \"$HOME\\bin\" | Out-Null\n$archive = \"$env:TEMP\\ib_windows_amd64.zip\"\nInvoke-WebRequest \"https://github.com/rwahyudi/gib/releases/latest/download/ib_windows_amd64.zip\" -OutFile $archive\nExpand-Archive $archive \"$HOME\\bin\\ib-latest\" -Force\nCopy-Item \"$HOME\\bin\\ib-latest\\ib.exe\" \"$HOME\\bin\\ib.exe\" -Force\n```\n\nAdd `$HOME\\bin` to the user `PATH` if needed, open a new PowerShell window, and\nrun `ib config completion windows`. For source builds, see\n[Build From Source](docs/build-from-source.md). For publishing, see\n[Release Process](docs/release-process.md).\n\n## Setup\n\nCreate or edit an Infoblox profile:\n\n```bash\nib config new --default\nsudo ib config new --global-config shared\nsudo ib config edit --global-config shared\nib config edit\nib config list\n```\n\nProfiles store the primary server, auto-detected WAPI version, auto-detected GCM read endpoint when available, credentials, DNS view, default zone, and optional audit logging settings. Config validates server reachability before asking for credentials, then validates the username and password before WAPI setup. Trusted HTTPS certificates are verified; untrusted HTTPS certificates show certificate details and require confirmation before `verify_ssl = false` is saved. If Infoblox returns only one DNS view or one eligible primary forward zone, config selects it automatically. Passwords are encrypted at rest. Unix builds use a key file; native Windows builds use user-scope DPAPI for new writes and can still read existing `enc:v1` key-file profiles.\n\nBy default, profiles live under `~/.ib/`. On Linux, `ib config new --global-config [PROFILE]` writes a shared profile under `/etc/ib/` and asks which Linux group should have access. `ib config new --global-config` and `ib config edit --global-config` must be run as root, for example with `sudo`, because they write `/etc/ib/config` and `/etc/ib/key`. Users in the configured group can read `/etc/ib/config` and `/etc/ib/key`, and can read/write the shared `/etc/ib/cache.sqlite3`. Normal commands merge `/etc/ib/config` with `~/.ib/config`; local profiles and local metadata override matching global names, while global-only profiles remain available. If `/etc/ib/config` is missing or not readable, commands continue silently with local config only. Do not commit `~/.ib/config`, `~/.ib/key`, `/etc/ib/config`, `/etc/ib/key`, or cache data.\n\nAudit logging is disabled by default. When enabled during `ib config new` or `ib config edit`, only successful write actions are logged: DNS record create/edit/delete, DNS zone create/delete, PTR side effects from A/AAAA workflows, and config profile create/edit/delete. Read, list, search, cache, and completion operations are not logged. Linux can log to JSON Lines files or syslog; Windows can log to Windows Event Log or a JSON Lines file. File logging defaults to `~/.ib/audit.jsonl` for local profiles, `/etc/ib/audit.jsonl` for Linux global profiles, and the current config directory on Windows. The file option warns that writable logs are weaker audit evidence, lets you return to method selection, and tests that the chosen path can be opened for writing before saving. Audit failures print a warning but do not fail the completed write action. Secret-looking fields such as passwords, keys, credentials, tokens, and secrets are redacted.\n\n## DNS \n\nDNS commands use this context order:\n\n```text\ncommand --zone/--view -\u003e ib dns zone/view use -\u003e IB_ZONE/IB_VIEW -\u003e configured defaults\n```\n\nOn native Windows, `ib dns zone use` and `ib dns view use` store the same session context files under the user's local app data directory. Run `ib config completion windows` to install the PowerShell integration that passes `IB_SHELL_PID`; shells without that integration should use `IB_ZONE` / `IB_VIEW` or command flags for explicit context.\n\nOverride context for one command without saving it:\n\n```bash\nib dns --zone example.com --view \"DNS Zone View\" list\nib dns --zone example.com create app host 192.0.2.10 -c \"Application host\"\nib dns --view \"DNS Zone View\" search app\n```\n\n## Global Switches\n\n- `-o, --output table|json|csv` is available from the root command and applies\n  to every command. Use `csv` for spreadsheet/script exports, or `json` when\n  piping to tools such as `jq`.\n- `-z, --zone ZONE` and `-v, --view VIEW` are available on `ib dns` and most\n  subcommands. They override the current DNS context for one command only.\n  `ib dns zone list` intentionally accepts only `--view` because it lists zones\n  in a DNS view rather than records inside one zone.\n- `-g, --global` is a search scope switch for `ib dns search`; it searches every\n  searchable zone in the selected DNS view.\n\n## Modules\n\n| Module | Purpose | Start here |\n| --- | --- | --- |\n| `config` | Manage profiles, encrypted credentials, completion, and cache. | `ib config new --default` |\n| `dns` | Manage Infoblox DNS views, zones, records, searches, and context overrides. | `ib dns list` |\n| `net` | Manage IPAM network views, IPv4 networks and containers, addresses, and next-IP lookups. | `ib net list` |\n\n## How It Works\n\n`cmd/ib/main.go` starts the Cobra CLI and hands command behavior to `internal/ibcli`. Profile loading decrypts the stored password, resolves the current DNS view/zone, and builds a WAPI client. GET requests can use a configured GCM read endpoint, while create, update, and delete requests always use the primary server.\n\nDNS listing/search and IPAM read workflows prefer SQLite cache rows from the selected local or global config scope. Freshness is calculated from `cached_at + cache_ttl`; stale rows inside `records_cache_swr_ttl` are returned immediately while one detached refresh process updates the cache. DNS records revalidate with the zone serial before refreshing `/allrecords`; IPAM cache refreshes skip serial checks and re-download the relevant WAPI object.\n\nAudit events are emitted only after successful write operations and use one JSON object per event for Splunk/Sentinel-style ingestion. Each event includes UTC time, local time, timezone, host, OS user, profile, action, operation, target, result, and redacted data.\n\nFor source builds, development checks, and packaging notes, see\n[Build From Source](docs/build-from-source.md). For cache diagrams and worker\nbehavior, see [Performance \u0026 Caching](docs/performance-caching.md).\n\n## Command Reference\n\n### Top Level\n\n| Command | Description |\n| --- | --- |\n| `ib` | Print top-level usage and end with the current profile, DNS view, and DNS zone context. |\n| `ib -v`, `ib --version` | Print the version number and AEST build date. |\n\n### Config\n\n| Command | Description |\n| --- | --- |\n| `ib config` | Show profile overview and short usage. |\n| `ib config new [PROFILE]` | Create a profile; validates server reachability/TLS trust, credentials, and primary access, auto-detects WAPI version and a usable GCM read endpoint, selects single DNS view/zone choices automatically, and can enable audit logging. Add `--global-config` on Linux as root to create the profile under `/etc/ib/`. |\n| `ib config edit [PROFILE]` | Edit an existing profile; server reachability/TLS trust is rechecked, leaving the password blank keeps the current encrypted password, WAPI version detection updates the prompt default when available, and audit logging can be changed. Add `--global-config` on Linux as root to edit the profile under `/etc/ib/`. |\n| `ib config list` | List configured profiles with username, WAPI, SSL, DNS context, and merged config metadata in table output. |\n| `ib config use PROFILE` | Set the local default profile override. The profile may be local or a merged Linux global profile from `/etc/ib/config`. |\n| `ib config delete PROFILE` | Delete a non-default local profile and clear its cache rows. |\n| `ib config completion [bash\\|zsh\\|fish\\|windows]` | Generate or install dynamic shell completion. |\n| `ib config cache status` | Show SQLite cache entries with table statistics, or structured statistics with `-o json`. |\n| `ib config cache clear` | Clear SQLite cache entries for the selected local/global config scope. |\n\n### DNS\n\n| Command | Description |\n| --- | --- |\n| `ib dns` | Show DNS help and the current profile/view/zone context. |\n| `ib dns list [ZONE]` | List records in the current or provided zone. Add `-r` to include child zones, `-t/--type` to filter record types, `-e/--exclude` to hide matching records, `-s/--sort FIELD` to sort, or `-C/--columns LIST` to print selected columns. |\n| `ib dns search KEYWORD` | Search records by name, value, or comment. Complete FQDN keywords can infer the matching forward zone. Use `--global` for all searchable zones, `-r` for child zones under the current/root zone, `-s/--sort FIELD` to sort, or `-C/--columns LIST` to print selected columns. |\n| `ib dns next-ip NETWORK` | Compatibility path for next available IPv4 address lookup against a network or container. Prefer `ib net next-ip NETWORK` for IPAM work. |\n| `ib dns create TYPE NAME VALUE` | Create a DNS record, for example `ib dns create host app 192.0.2.10 -c \"Application host\"`. For PTR, use `ib dns create ptr IP_ADDRESS PTR_TARGET`; the reverse zone is auto-detected unless `--zone` is supplied. |\n| `ib dns edit TYPE NAME [VALUE]` | Edit an existing DNS record. |\n| `ib dns delete TYPE NAME [ZONE]` | Delete a DNS record; prompts for confirmation unless `-y` is used. |\n| `ib dns view list` | List DNS views. |\n| `ib dns view use VIEW` | Set the active DNS view for the current shell session. |\n| `ib dns zone create ZONE` | Create an authoritative DNS zone. |\n| `ib dns zone list [SEARCH]` | List authoritative DNS zones. Add `-t/--type` to filter zone formats, `-e/--exclude` to hide matches, `-s/--sort FIELD` to sort, or `-C/--columns LIST` to print selected columns. |\n| `ib dns zone info ZONE` | Show DNS zone details, with SOA serial rendered as an integer. |\n| `ib dns zone delete ZONE` | Delete an authoritative DNS zone. |\n| `ib dns zone use ZONE` | Set the active DNS zone for the current shell session. |\n\n### IPAM\n\n| Command | Description |\n| --- | --- |\n| `ib net` | Show IPAM command help. |\n| `ib net view list` | List IPAM network views. |\n| `ib net list [SEARCH]` | List IPv4 networks and containers. Add `--network-view` to filter by IPAM network view, `--refresh` to wait for fresh WAPI data, `-s/--sort FIELD` to sort by `network`, `type`, `network_view`, or `comment`, and `-C/--columns LIST` to print selected columns. |\n| `ib net search KEYWORD` | Search IPv4 networks and containers by type, CIDR, network view, or comment. CIDR matches also include related parent and child networks or containers in the same network view; add `--refresh` to wait for fresh WAPI data. |\n| `ib net show NETWORK` | Show details for one IPv4 network or container. Use `--network-view` when a CIDR exists in multiple network views. |\n| `ib net address IP` | Show IPAM details for an IPv4 address, including network, parent container, status, types, names, MAC address, lease state, and comment when available. |\n| `ib net next-ip NETWORK` | Find the next available IPv4 address in a network or container. Use `--network-view` for ambiguous CIDRs, `-n/--num` for multiple addresses, and repeat `-e/--exclude` to skip addresses. |\n\nCommon examples:\n\n```bash\nib dns view list\nib dns view use \"DNS Zone View\"\nib dns zone list\nib dns zone use example.com\nib dns list\nib dns search app\nib dns search ben-dr-vss.net.latrobe.edu.au\nib net view list\nib net list prod --network-view default\nib net address 192.0.2.10 --network-view default\nib net next-ip 192.0.2.0/24 -n 3\nib dns create host app 192.0.2.10 -c \"Application host\"\nib dns create ptr 192.0.2.10 app.example.com\nib dns edit host app 192.0.2.20 -t 300 -c \"Application host\"\nib dns delete a app\n```\n\n`ib dns list` and `ib dns search` operate on the current zone by default. For search, a complete forward FQDN such as `ben-dr-vss.net.latrobe.edu.au` can infer the longest matching authoritative zone, search that zone, and match the relative owner name such as `ben-dr-vss`. With `--global`, search still scans every searchable zone in the selected view, but the relative-owner match is limited to the inferred forward zone so the matching forward record can appear alongside PTR/reverse matches. Add `-r` or `--recursive` to include child zones. For IPv4 reverse DNS, `ib dns list` also accepts a larger CIDR scope such as `10.128.48.0/23` and lists records from matching child reverse zones such as `10.128.48.0/24` and `10.128.49.0/24`. `ib dns list` also supports `-t/--type` and `-e/--exclude` filters like search. Add `-s` or `--sort` to sort by `name`, `type`, `value`, `zone`, `ttl`, or `comment`; a blank `--sort` sorts by name, and a leading minus sorts descending, for example `--sort=-name`. Add `-C` or `--columns` to print selected columns from `type`, `name`, `value`, `zone`, `ttl`, and `comment`, for example `--columns name,value`.\n\n`ib dns zone list` supports the same output control pattern for zones. `--type` filters zone formats `FORWARD`, `IPV4`, or `IPV6`; `--sort` accepts `zone`, `view`, `format`, `ns_group`, or `comment`; and `--columns` selects from the same zone fields. Use `--view` to list zones from another DNS view; `--zone` and `-z` are not accepted by this command.\n\n`ib net list` and `ib net search` are read-only IPAM workflows. Without `--network-view`, they build one merged dataset from unscoped WAPI `network` and `networkcontainer` results plus both object types for each discovered IPAM network view, then de-duplicate by type, CIDR, and network view so every network and container can be displayed. Add `--network-view` to limit the request to one view. Search text matches type, CIDR, network view, and comment. A CIDR-field match also includes related parent and child networks or containers in the same network view, but list/search only display network or container objects returned by Infoblox or the selected cache; covered child CIDRs are not synthesized. Existing IPAM cache rows are returned immediately even after normal SWR expiry, and table output prints a note when a background refresh is queued; use `--refresh` when the command must wait for fresh WAPI data. Default output prints `network`, `type`, and `comment`, with the network first and the type second. Table output color-codes the `network` CIDR by prefix size and the `type` column so `NETWORK` and `CONTAINER` rows are visually distinct. Add `-s` or `--sort` to sort by `network`, `type`, `network_view`, or `comment`; a blank `--sort` sorts by network, and a leading minus sorts descending. Add `-C` or `--columns` to select from `network`, `type`, `network_view`, and `comment`.\n\n`ib net show`, `ib net next-ip`, and the compatibility `ib dns next-ip` path resolve both networks and containers; when the same CIDR exists as both, the container is preferred. `ib net next-ip` can use cached rows for the object lookup, while `ib dns next-ip` performs a live read-only object lookup. Both send the `next_available_ip` function call to the primary server. `ib dns next-ip` remains available for existing scripts, but `ib net next-ip` is the IPAM-oriented command.\n\nAll `ib net` table output prints a compact current-context footer with only the active profile and row count. JSON and CSV keep plain row-only values.\n\n`ib dns delete TYPE NAME` prompts before deleting. Use `-y` or `--yes` to skip the confirmation. If multiple records of that type match, interactive table mode shows a Huh select list so one record can be chosen.\n\n#### Output Controls\n\nRecord, zone, and network list-style commands can sort rows, select columns,\nand emit machine-readable output:\n\n```bash\nib dns list --sort name --columns name,value,ttl\nib dns list --sort=-name --columns zone,name,value -o csv\nib dns search app --global --sort zone --columns zone,name,value -o csv\nib dns list -o json | jq -r '.[] | [.name, .value] | @tsv'\nib dns zone list --sort zone --columns zone,format,comment -o json | jq '.[]'\nib net list --sort network --columns network,type,comment -o json | jq '.[]'\n```\n\nUse `--sort FIELD` for ascending order and `--sort=-FIELD` for descending\norder. Record fields are `name`, `type`, `value`, `zone`, `ttl`, and `comment`;\nzone fields are `zone`, `view`, `format`, `ns_group`, and `comment`; network\nfields are `network`, `type`, `network_view`, and `comment`. Use `--columns` or `-C`\nwith a comma-separated list to keep only the fields you need. Use `-o csv` for\nCSV output, or `-o json` when the next step is a `jq` pipeline.\n\n\n\n## Troubleshooting\n\nIf a DNS write reports a non-JSON WAPI response, `ib` prints the WAPI object,\nHTTP status, content type, and a short response snippet. An HTML snippet usually\nmeans the configured server, WAPI version, credentials, or a proxy/login page is\nanswering the WAPI request instead of Infoblox JSON.\n\n## Cache\n\nZone, record, and IPAM caches are stored in `~/.ib/cache.sqlite3` for local profiles or `/etc/ib/cache.sqlite3` for Linux global profiles.\n\nRecord and IPAM cache freshness uses `cached_at + cache_ttl`. Expired records and IPAM rows inside `records_cache_swr_ttl` are returned immediately while a single background refresh process updates the cache. `ib net list` and `ib net search` go further: when an IPAM network-view, network, or container cache row exists, they return it even after SWR expiry and queue a background refresh; add `--refresh` to wait for fresh WAPI data instead. DNS records revalidate the zone serial before refreshing `/allrecords`; IPAM rows skip serial checks and refresh the relevant `networkview`, `network`, `networkcontainer`, or `ipv4address` WAPI data.\n\nMulti-zone search preloads matching record-cache rows with one SQLite connection before workers start. Workers still fall back to per-zone cache/WAPI checks for missing or expired rows. The WAPI HTTP client keeps a larger per-host connection pool sized from `dns_search_worker_limit` so parallel search can reuse TLS connections instead of repeatedly reconnecting.\n\nWhen DNS record cache is missing or already outside the stale window, list/search waits up to `max_background_worker_wait` seconds for an active background refresh of the same profile and cache scope before doing foreground WAPI refresh work. IPAM `net list` and `net search` only do foreground WAPI work when cache is missing or `--refresh` is set.\n\n`ib net next-ip` can use cached network or container rows to find the target `_ref`, but the `next_available_ip` function call is always sent live to the primary server so returned addresses are current.\n\nShell completion prefetches cache freshness in the background by default. With `completion_cache_prefetch = true`, most DNS completion checks the current DNS view and zone, and network CIDR completion checks the selected IPAM network view, then starts lease-protected zone-list, current-zone record, network-list, or container-list refresh helpers when cache rows are missing or stale. `ib dns create \u003ctab\u003e\u003ctab\u003e` offers supported record types and filters typed prefixes such as `p` to `ptr`; `ib dns delete ptr \u003ctab\u003e\u003ctab\u003e` completes PTR owner IPs from cached reverse-zone records instead of forward-zone names. `ib dns next-ip`, `ib net next-ip`, and `ib net show` complete both network and container CIDRs from the selected cache when available, including stale rows. When the typed value matches a parent CIDR or CIDR prefix, completion also offers child network/container CIDRs in the same network view; if only a larger parent such as `/23` is cached, completion derives direct `/24` child candidates for selection. Completion does not perform foreground Infoblox refresh work. Set `completion_cache_prefetch = false` in `[meta]` to make completion read the selected cache only and skip background refresh starts.\n\n`ib config cache status` keeps the detailed cache row table and adds a colored\nsummary footer for table output: cache entries, cached records, fresh entries,\nnetwork views, networks, containers, IPv4 addresses, SWR-stale entries, expired entries,\nand active refreshes. With `-o json`, it\nreturns `statistics` and `entries`; with `-o csv`, output remains row-only for\nscripts.\n\nSuccessful DNS record create, edit, and delete operations clear the affected zone's record cache and start a background refresh. DNS zone create/delete also refreshes the zone-list cache in the background; deleted zones have their record cache removed.\n\nUseful cache commands:\n\n```bash\nib config cache status\nib config cache clear\n```\n\nTo see whether search used cache or WAPI, run with persistent cache-source diagnostics:\n\n```bash\nIB_SEARCH_DEBUG=1 ib dns search app --global\n```\n\nPowerShell:\n\n```powershell\n$env:IB_SEARCH_DEBUG = \"1\"; ib dns search app --global\n```\n\nDeleting a local profile also clears cache rows for that profile.\n\n## Completion\n\nGenerate dynamic shell completion:\n\n```bash\nib config completion bash \u003e ~/.ib-complete.bash\n. ~/.ib-complete.bash\n```\n\nOn Windows, install native PowerShell completion for the current user:\n\n```powershell\nib config completion windows\n```\n\nRun the Windows installer again after upgrading `ib` if completion behavior\nchanges. It updates the normal PowerShell profile paths plus common OneDrive\nDocuments profile locations. If `ib dns \u003cTab\u003e` offers `dns` instead of DNS\nsubcommands, replace `ib.exe`, rerun `ib config completion windows`, and open a\nnew PowerShell window so the updated script is loaded.\n\nThe generated or installed completion calls the live `ib` binary, so profiles, zones, records, IPAM networks, flags, and output formats are resolved dynamically.\nInstalling from RPM or DEB puts the Bash completion file in `/etc/bash_completion.d/ib`.\n\n## License\n\n`gib` is licensed under the MIT License. See [LICENSE](LICENSE). Binary release\narchives also include [THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md) for\nbundled Go dependency notices. The dependency policy is documented in\n[docs/licensing.md](docs/licensing.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frwahyudi%2Fgib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frwahyudi%2Fgib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frwahyudi%2Fgib/lists"}