hashicorp / terraform-plugin-codegen-openapi

OpenAPI to Terraform Provider Code Generation Specification
Mozilla Public License 2.0
49 stars 6 forks source link

Consider mapping JSON schema `ipv4` and `ipv6` formats to `iptypes` custom types #103

Open austinvalle opened 7 months ago

austinvalle commented 7 months ago

Use Cases or Problem Statement

JSON schema (the backbone of all the request/response body schemas in OpenAPI 3.0/3.1) supports designating a type: string as an IPv4 or IPv6 address string via the format field: https://json-schema.org/understanding-json-schema/reference/string#ip-addresses.

Recently, HashiCorp has published terraform-plugin-framework-nettypes, which contains an iptypes package with IPv4Address and IPv6Address custom string types, which provide validation and semantic equality handling (for IPv6) that are often required for IP address strings. The Provider code specification already supports custom types.

Proposal

Proposal

Schema

ipv4_prop:
  description: IPv4 address string!
  type: string
  format: ipv4

IR Attribute

{
  "name": "ipv4_prop",
  "string": {
    "computed_optional_required": "computed",
    "description": "IPv4 address string!",
    "custom_type": {
      "import": {
        "path": "github.com/hashicorp/terraform-plugin-framework-nettypes/iptypes"
      },
      "type": "iptypes.IPv4AddressType",
      "value_type": "iptypes.IPv4Address"
    }
  }
}

Schema

ipv6_prop:
  description: IPv6 address string!
  type: string
  format: ipv6

IR Attribute

{
  "name": "ipv6_prop",
  "string": {
    "computed_optional_required": "computed",
    "description": "IPv6 address string!",
    "custom_type": {
      "import": {
        "path": "github.com/hashicorp/terraform-plugin-framework-nettypes/iptypes"
      },
      "type": "iptypes.IPv6AddressType",
      "value_type": "iptypes.IPv6Address"
    }
  }
}

Additional Information

No response

Code of Conduct