resource_remote: add artifactapi_remote_ansible #23

Merged
benvin merged 4 commits from benvin/remote-ansible into main 2026-10-18 18:02:32 +11:00
3 changed files with 56 additions and 0 deletions
+30
View File
@@ -0,0 +1,30 @@
# `artifactapi_remote_ansible`
Per-type remote resources manage upstream repository proxies. Each type applies its own mutability classification rules automatically (e.g., Docker classifies tag manifests as mutable and blobs as immutable; Helm classifies `index.yaml` as mutable).
## Common Attributes
| Attribute | Required | Default | Description |
|----------------------|----------|---------|-------------------------------------------------------------------|
| `name` | Yes | | Unique name (forces replacement on change) |
| `base_url` | Yes | | Upstream repository URL |
| `description` | No | `""` | Human-readable description |
| `username` | No | `""` | Upstream auth username (sensitive) |
| `password` | No | `""` | Upstream auth password (sensitive) |
| `immutable_ttl` | No | `0` | TTL in seconds for immutable artifacts (0 = cache forever) |
| `mutable_ttl` | No | `3600` | TTL in seconds for mutable artifacts |
| `check_mutable` | No | `true` | Enable conditional revalidation for mutable artifacts |
| `patterns` | No | | Allowlist of path patterns to proxy (empty = all) |
| `blocklist` | No | | Paths to always deny (checked before patterns) |
| `mutable_patterns` | No | | Override: treat matching paths as mutable |
| `immutable_patterns` | No | | Override: treat matching paths as immutable |
| `quarantine_enabled` | No | `false` | Enable quarantine for new artifacts |
| `quarantine_days` | No | `3` | Days to quarantine new artifacts |
| `stale_on_error` | No | `true` | Serve stale cache when upstream is unreachable |
| `upstream_dial_timeout` | No | `0` | Upstream TCP connect timeout in seconds (0 = server default) |
| `upstream_tls_timeout` | No | `0` | Upstream TLS handshake timeout in seconds (0 = server default) |
| `upstream_response_header_timeout` | No | `0` | Upstream response-header timeout in seconds (0 = server default) |
## Example
See `examples/resources/artifactapi_remote_ansible/main.tf`.
@@ -0,0 +1,23 @@
terraform {
required_providers {
artifactapi = {
source = "artifactapi.example.com/terraform-unkin/artifactapi"
version = "0.0.1"
}
}
}
provider "artifactapi" {
endpoint = "https://artifactapi.example.com"
}
# Ansible remote proxies the Galaxy v3 collections API.
# The provider knows JSON metadata is mutable; collection tarballs are immutable.
resource "artifactapi_remote_ansible" "galaxy" {
name = "galaxy"
base_url = "https://galaxy.ansible.com"
description = "Ansible Galaxy"
immutable_ttl = 0
mutable_ttl = 300
}
@@ -0,0 +1,3 @@
package provider
func init() { registerResource(newRemoteResource("ansible")) }