Skip to main content

Versioned fluxcd models for cloudcoil

Project description

cloudcoil-models-fluxcd

Versioned fluxcd models for cloudcoil.

🔧 Installation

Using uv (recommended):

# Install with FluxCD support
uv add cloudcoil.models.fluxcd

Using pip:

pip install cloudcoil.models.fluxcd

💡 Examples

Using FluxCD Models

from cloudcoil import apimachinery
import cloudcoil.models.fluxcd.source.v1 as fluxsource
import cloudcoil.models.fluxcd.kustomize.v1 as fluxkustomize

# Create a GitRepository
repo = fluxsource.GitRepository(
    metadata=apimachinery.ObjectMeta(name="my-app"),
    spec=fluxsource.GitRepositorySpec(
        url="https://github.com/org/repo",
        ref=fluxsource.Ref(
            branch="main"
        ),
        interval="1m"
    )
).create()

# Create a Kustomization
kustomization = fluxkustomize.Kustomization(
    metadata=apimachinery.ObjectMeta(name="my-app"),
    spec=fluxkustomize.KustomizationSpec(
        interval="5m",
        path="./kustomize",
        source_ref=fluxkustomize.SourceRef(
            kind="GitRepository",
            name="my-app"
        ),
        prune=True
    )
).create()

# List GitRepositories
for repo in fluxsource.GitRepository.list():
    print(f"Found repository: {repo.metadata.name}")

# Update a GitRepository
repo.spec.interval = "5m"
repo.save()

# Delete resources
fluxkustomize.Kustomization.delete("my-app")
fluxsource.GitRepository.delete("my-app")

Using the Fluent Builder API

Cloudcoil provides a powerful fluent builder API with full IDE support and rich autocomplete capabilities. The builder pattern ensures type safety and provides intelligent code suggestions as you type:

from cloudcoil.models.fluxcd.source.v1 import GitRepository
from cloudcoil.models.fluxcd.kustomize.v1 import Kustomization

# Create a GitRepository using the builder
# Every step provides rich autocomplete and type hints
repo = (
    GitRepository.builder()  # IDE shows all available builder methods
    .metadata(lambda m: m   # IDE shows all ObjectMeta fields
        .name("my-app")
        .namespace("default")
    )
    .spec(
        lambda s: s         # IDE shows all GitRepositorySpec fields
        .url("https://github.com/org/repo")
        .interval("1m")
        .ref(lambda r: r    # IDE shows all Ref fields
            .branch("main")
        )
    )
    .build()
)

# The builder validates your configuration at compile time
kustomization = (
    Kustomization.builder()
    .metadata(lambda m: m.name("my-app").namespace("default"))
    .spec(
        lambda s: s.path("./kustomize")
        .interval("5m")
        .source_ref(lambda r: r.kind("GitRepository").name("my-app"))
        .prune(True)
    )
    .build()
)

The fluent builder provides:

  • ✨ Full IDE support with detailed type information
  • 🔍 Rich autocomplete for all fields and nested objects
  • ⚡ Compile-time validation of your configuration
  • 🎯 Clear and chainable API that guides you through resource creation

Using the Context Manager Builder API

For complex nested resources, Cloudcoil also provides a context manager-based builder pattern that can make the structure more clear:

from cloudcoil.models.fluxcd.source.v1 import GitRepository
from cloudcoil.models.fluxcd.kustomize.v1 import Kustomization

# Create a GitRepository using context managers
with GitRepository.new() as repo:
    with repo.metadata() as metadata:
        metadata.name("my-app")
        metadata.namespace("default")
        metadata.labels({"env": "prod"})
    
    with repo.spec() as spec:
        spec.url("https://github.com/org/repo")
        spec.interval("1m")
        
        with spec.ref() as ref:
            ref.branch("main")

final_repo = repo.build()

# Create a Kustomization using context managers
with Kustomization.new() as kustomization:
    with kustomization.metadata() as metadata:
        metadata.name("my-app")
        metadata.namespace("default")
    
    with kustomization.spec() as spec:
        spec.path("./kustomize")
        spec.interval("5m")
        spec.prune(True)
        
        with spec.source_ref() as ref:
            ref.kind("GitRepository")
            ref.name("my-app")

final_kustomization = kustomization.build()

The context manager builder provides:

  • 🎭 Clear visual nesting of resource structure
  • 🔒 Automatic resource cleanup
  • 🎯 Familiar Python context manager pattern
  • ✨ Same great IDE support as the fluent builder

Mixing Builder Styles

CloudCoil's intelligent builder system automatically detects which style you're using and provides appropriate IDE support:

from cloudcoil.models.fluxcd.source.v1 import GitRepository
from cloudcoil import apimachinery

# Mixing styles lets you choose the best approach for each part
with GitRepository.new() as repo:
    # Direct object initialization with full type checking
    repo.metadata(apimachinery.ObjectMeta(
        name="my-app",
        namespace="default",
        labels={"env": "prod"}
    ))
    
    with repo.spec() as spec:
        # Simple fields directly
        spec.url("https://github.com/org/repo")
        spec.interval("1m")
        # Fluent style
        spec.ref(lambda r: r
            .branch("main")
            .tag("v1.0.0")
        )
        # Direct assignment
        spec.timeout = "1m"

final_repo = repo.build()

This flexibility allows you to:

  • 🔀 Choose the most appropriate style for each part of your configuration
  • 📖 Maximize readability for both simple and complex structures
  • 🎨 Format your code according to your team's preferences
  • 🧠 Get full IDE support with automatic style detection
  • ✨ Enjoy rich autocomplete in all styles
  • ⚡ Benefit from type checking across mixed styles
  • 🎯 Receive immediate feedback on type errors
  • 🔍 See documentation for all fields regardless of style

📚 Documentation

For complete documentation, visit cloudcoil.github.io/cloudcoil

📜 License

Apache License, Version 2.0 - see LICENSE

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cloudcoil_models_fluxcd-2.4.0.1.tar.gz (228.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cloudcoil_models_fluxcd-2.4.0.1-py3-none-any.whl (184.8 kB view details)

Uploaded Python 3

File details

Details for the file cloudcoil_models_fluxcd-2.4.0.1.tar.gz.

File metadata

File hashes

Hashes for cloudcoil_models_fluxcd-2.4.0.1.tar.gz
Algorithm Hash digest
SHA256 73d0301a3c0abe5f085fb1680e254d84053f5aa06afb2c9eb1ff094a4d851cb3
MD5 bb78379fac49ab2ea8c7394846714f73
BLAKE2b-256 ca5e0a705b67d36a9d4bf166715d14d8935ff1489b576cb43234f3ae2d9f87a3

See more details on using hashes here.

Provenance

The following attestation bundles were made for cloudcoil_models_fluxcd-2.4.0.1.tar.gz:

Publisher: pypi_publish.yml on cloudcoil/models-fluxcd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cloudcoil_models_fluxcd-2.4.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for cloudcoil_models_fluxcd-2.4.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 417f67076a3e9d64ef4045a8affc0bbd0617aaf42a0fd4070bd205197b609904
MD5 5f04ccad8e7be3001f6c32aac240bcbe
BLAKE2b-256 53bcf12e665c8ca73dbcd8dbdb1298d702887e28312d5a0e30eadaa8e015b1ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for cloudcoil_models_fluxcd-2.4.0.1-py3-none-any.whl:

Publisher: pypi_publish.yml on cloudcoil/models-fluxcd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page