Building Your First Terraform Provider with Pyvider
This tutorial walks through building a minimal Terraform provider in Python using Pyvider. By the end you’ll have a working provider that manages a simple resource.
Prerequisites
- Python 3.11+
uvorpip- Terraform or OpenTofu installed
Setup
uv init my-provider
cd my-provider
uv add pyvider
Define Your Provider
Create my_provider/__init__.py:
from pyvider.providers import register_provider, BaseProvider
@register_provider("mycloud")
class MyCloudProvider(BaseProvider):
"""A minimal cloud provider."""
pass
Define a Resource
Create my_provider/server.py:
from pyvider.resources import register_resource, BaseResource
from pyvider.schema import s_resource, a_str
import attrs
@attrs.define
class ServerState:
name: str = ""
id: str = ""
@register_resource("server")
class Server(BaseResource):
@classmethod
def get_schema(cls):
return s_resource({
"name": a_str(required=True),
"id": a_str(computed=True),
})
async def _create_apply(self, ctx):
state = ServerState(name=ctx.config.name, id="srv-123")
return state, None
async def read(self, ctx):
return ctx.state
Run It
pyvider install # installs the provider for Terraform
terraform init
terraform apply
For more detail, see the full documentation.