New here? Pick the path that matches you.
You are… Start with Just trying out an example Quick start below — copy, paste, run. First-time contributor CONTRIBUTING.md — make install && make hooksgets you set up in a couple of minutes.New to NetApp ONTAP Troubleshooting guide plus the per-style READMEs in python/ontap/,ansible/ontap/,terraform/ontap/,go/ontap/.Stuck or have a question Open a Discussion — faster than a GitHub issue for questions.
Pace is an open-source library of ready-to-run NetApp storage automation examples, implemented three ways - side by side - so you can pick the style your team already uses.
| Style | Tool | In a sentence |
|---|---|---|
| Imperative scripts | Python or Go | You write each step yourself. |
| Declarative playbooks | Ansible | You describe the outcome. |
| Stateful blueprints | Terraform | The tool tracks every change. |
Same task, same outcome - different trade-offs in readability, idempotency, and lifecycle management.
The examples in this repository target NetApp ONTAP - see Prerequisites for the exact requirements.
Within each style, examples are grouped by the NetApp product they automate, so you can copy one product's directory without dragging in anything else:
| Product | Directories | Status |
|---|---|---|
| ONTAP | python/ontap/ · ansible/ontap/ · terraform/ontap/ · go/ontap/ |
Every example below |
| Console | python/console/local/ · ansible/console/local/ · terraform/console/local/ · go/console/local/ |
Placeholder - no examples yet |
Every example is indexed in catalog.yaml (machine-readable)
with its product, prerequisites, run commands, and inputs/outputs. Human-readable
sections live in the per-product READMEs linked below.
Visit netapp.github.io/pace for the full guided tour, live code examples, and side-by-side comparisons.
Pick a style and run the matching block. All examples use placeholder host names and credentials - swap them for your own before running.
Imperative scripts - Python
cd python/ontap
pip install -r requirements.txt
export ONTAP_HOST=10.0.0.1 ONTAP_USER=admin ONTAP_PASS=changeme
python cluster_info.pyDeclarative playbooks - Ansible
cd ansible/ontap
ansible-galaxy collection install -r requirements.yml
cp group_vars/ontap.yml.example group_vars/ontap.yml # edit with your details
ansible-playbook -i inventory/hosts.yml cluster_info.ymlStateful blueprints - Terraform
cd terraform/ontap/cluster-info
cp terraform.tfvars.example terraform.tfvars # edit with your details
terraform init && terraform applyImperative scripts - Go
cd go/ontap/cluster_info
export ONTAP_HOST=10.0.0.1 ONTAP_USER=admin ONTAP_PASS=changeme
go run .Each product directory has its own README with full setup steps, options, and example output.
| ONTAP use case | Python | Ansible | Terraform | Go |
|---|---|---|---|---|
| Cluster info | python/ontap/ | ansible/ontap/ | terraform/ontap/ | go/ontap/ |
| NFS provision | python/ontap/ | ansible/ontap/ | terraform/ontap/ | go/ontap/ |
| CIFS provision | python/ontap/ | ansible/ontap/ | terraform/ontap/ | go/ontap/ |
| Cluster setup | python/ontap/ | ansible/ontap/ | — | go/ontap/ |
| SnapMirror provision (source) | python/ontap/ | ansible/ontap/ | — | go/ontap/ |
| SnapMirror provision (dest) | python/ontap/ | ansible/ontap/ | — | go/ontap/ |
| SnapMirror test failover | python/ontap/ | ansible/ontap/ | — | go/ontap/ |
| SnapMirror cleanup failover | python/ontap/ | ansible/ontap/ | — | go/ontap/ |
- ONTAP cluster reachable over HTTPS (9.8+ recommended)
- Admin credentials, or a user with appropriate RBAC permissions
- Network access to the cluster management LIF
Credentials are never hardcoded. Each style uses its native secret
mechanism - environment variables, Ansible Vault, or Terraform sensitive
variables.
SSL verification is disabled by default for self-signed certificates
| Style | Enable verification |
|---|---|
| Python | export ONTAP_VERIFY_SSL=true |
| Ansible | ontap_validate_certs: true in ansible/ontap/group_vars/ontap.yml |
| Terraform | validate_certs = true in terraform.tfvars |
| Go | Pass true as the verifySSL arg to ontapclient.New |
Once CA-signed certificates are in place, we recommend turning it on.
| Link | What's inside |
|---|---|
| Example catalog | Machine-readable index of all use cases |
| Catalog spec | Field definitions for catalog.yaml |
| Project website | Guided tour, prompts, full contribution guide |
| Choosing an approach | Decision guide and feature matrix |
| AI prompt catalog | Prompts for planning, generating, reviewing |
| Platform API patterns | REST conventions, auth, async jobs |
| Troubleshooting | Common errors and fixes |
| Testing | What to run and capture in the PR Test Report |
| Contributing | Fork, branch, run checks, open a PR |
| Security policy | How to report a vulnerability privately |
Apache-2.0 © NetApp