Module materialize.cloudtest.k8s.cockroach

Expand source code Browse git
# Copyright Materialize, Inc. and contributors. All rights reserved.
#
# Use of this software is governed by the Business Source License
# included in the LICENSE file at the root of this repository.
#
# As of the Change Date specified in that file, in accordance with
# the Business Source License, use of this software will be governed
# by the Apache License, Version 2.0.

from kubernetes.client import (
    V1ConfigMap,
    V1ConfigMapVolumeSource,
    V1Container,
    V1ContainerPort,
    V1LabelSelector,
    V1ObjectMeta,
    V1PersistentVolumeClaim,
    V1PersistentVolumeClaimSpec,
    V1PodSpec,
    V1PodTemplateSpec,
    V1ResourceRequirements,
    V1Service,
    V1ServicePort,
    V1ServiceSpec,
    V1StatefulSet,
    V1StatefulSetSpec,
    V1Volume,
    V1VolumeMount,
)

from materialize import ROOT
from materialize.cloudtest.k8s import K8sConfigMap, K8sService, K8sStatefulSet
from materialize.mzcompose.services import Cockroach


class CockroachConfigMap(K8sConfigMap):
    def __init__(self) -> None:
        self.config_map = V1ConfigMap(
            metadata=V1ObjectMeta(
                name="cockroach-init",
            ),
            data={
                "setup_materialize.sql": (
                    ROOT / "misc" / "cockroach" / "setup_materialize.sql"
                ).read_text(),
            },
        )


class CockroachService(K8sService):
    def __init__(self) -> None:
        service_port = V1ServicePort(name="sql", port=26257)

        self.service = V1Service(
            api_version="v1",
            kind="Service",
            metadata=V1ObjectMeta(name="cockroach", labels={"app": "cockroach"}),
            spec=V1ServiceSpec(
                type="NodePort", ports=[service_port], selector={"app": "cockroach"}
            ),
        )


class CockroachStatefulSet(K8sStatefulSet):
    def generate_stateful_set(self) -> V1StatefulSet:
        metadata = V1ObjectMeta(name="cockroach", labels={"app": "cockroach"})
        label_selector = V1LabelSelector(match_labels={"app": "cockroach"})
        ports = [V1ContainerPort(container_port=26257, name="sql")]
        volume_mounts = [
            V1VolumeMount(name="data", mount_path="/cockroach/cockroach-data"),
            V1VolumeMount(
                name="cockroach-init", mount_path="/docker-entrypoint-initdb.d"
            ),
        ]

        volume_config = V1ConfigMapVolumeSource(
            name="cockroach-init",
        )

        volumes = [V1Volume(name="cockroach-init", config_map=volume_config)]

        container = V1Container(
            name="cockroach",
            image=f"cockroachdb/cockroach:{Cockroach.DEFAULT_COCKROACH_TAG}",
            args=["start-single-node", "--insecure"],
            ports=ports,
            volume_mounts=volume_mounts,
        )

        pod_spec = V1PodSpec(containers=[container], volumes=volumes)
        template_spec = V1PodTemplateSpec(metadata=metadata, spec=pod_spec)
        claim_templates = [
            V1PersistentVolumeClaim(
                metadata=V1ObjectMeta(name="data"),
                spec=V1PersistentVolumeClaimSpec(
                    access_modes=["ReadWriteOnce"],
                    resources=V1ResourceRequirements(requests={"storage": "1Gi"}),
                ),
            )
        ]

        return V1StatefulSet(
            api_version="apps/v1",
            kind="StatefulSet",
            metadata=metadata,
            spec=V1StatefulSetSpec(
                service_name="cockroach",
                replicas=1,
                selector=label_selector,
                template=template_spec,
                volume_claim_templates=claim_templates,
            ),
        )


COCKROACH_RESOURCES = [
    CockroachConfigMap(),
    CockroachService(),
    CockroachStatefulSet(),
]

Classes

class CockroachConfigMap
Expand source code Browse git
class CockroachConfigMap(K8sConfigMap):
    def __init__(self) -> None:
        self.config_map = V1ConfigMap(
            metadata=V1ObjectMeta(
                name="cockroach-init",
            ),
            data={
                "setup_materialize.sql": (
                    ROOT / "misc" / "cockroach" / "setup_materialize.sql"
                ).read_text(),
            },
        )

Ancestors

class CockroachService
Expand source code Browse git
class CockroachService(K8sService):
    def __init__(self) -> None:
        service_port = V1ServicePort(name="sql", port=26257)

        self.service = V1Service(
            api_version="v1",
            kind="Service",
            metadata=V1ObjectMeta(name="cockroach", labels={"app": "cockroach"}),
            spec=V1ServiceSpec(
                type="NodePort", ports=[service_port], selector={"app": "cockroach"}
            ),
        )

Ancestors

Inherited members

class CockroachStatefulSet
Expand source code Browse git
class CockroachStatefulSet(K8sStatefulSet):
    def generate_stateful_set(self) -> V1StatefulSet:
        metadata = V1ObjectMeta(name="cockroach", labels={"app": "cockroach"})
        label_selector = V1LabelSelector(match_labels={"app": "cockroach"})
        ports = [V1ContainerPort(container_port=26257, name="sql")]
        volume_mounts = [
            V1VolumeMount(name="data", mount_path="/cockroach/cockroach-data"),
            V1VolumeMount(
                name="cockroach-init", mount_path="/docker-entrypoint-initdb.d"
            ),
        ]

        volume_config = V1ConfigMapVolumeSource(
            name="cockroach-init",
        )

        volumes = [V1Volume(name="cockroach-init", config_map=volume_config)]

        container = V1Container(
            name="cockroach",
            image=f"cockroachdb/cockroach:{Cockroach.DEFAULT_COCKROACH_TAG}",
            args=["start-single-node", "--insecure"],
            ports=ports,
            volume_mounts=volume_mounts,
        )

        pod_spec = V1PodSpec(containers=[container], volumes=volumes)
        template_spec = V1PodTemplateSpec(metadata=metadata, spec=pod_spec)
        claim_templates = [
            V1PersistentVolumeClaim(
                metadata=V1ObjectMeta(name="data"),
                spec=V1PersistentVolumeClaimSpec(
                    access_modes=["ReadWriteOnce"],
                    resources=V1ResourceRequirements(requests={"storage": "1Gi"}),
                ),
            )
        ]

        return V1StatefulSet(
            api_version="apps/v1",
            kind="StatefulSet",
            metadata=metadata,
            spec=V1StatefulSetSpec(
                service_name="cockroach",
                replicas=1,
                selector=label_selector,
                template=template_spec,
                volume_claim_templates=claim_templates,
            ),
        )

Ancestors

Methods

def generate_stateful_set(self) ‑> kubernetes.client.models.v1_stateful_set.V1StatefulSet
Expand source code Browse git
def generate_stateful_set(self) -> V1StatefulSet:
    metadata = V1ObjectMeta(name="cockroach", labels={"app": "cockroach"})
    label_selector = V1LabelSelector(match_labels={"app": "cockroach"})
    ports = [V1ContainerPort(container_port=26257, name="sql")]
    volume_mounts = [
        V1VolumeMount(name="data", mount_path="/cockroach/cockroach-data"),
        V1VolumeMount(
            name="cockroach-init", mount_path="/docker-entrypoint-initdb.d"
        ),
    ]

    volume_config = V1ConfigMapVolumeSource(
        name="cockroach-init",
    )

    volumes = [V1Volume(name="cockroach-init", config_map=volume_config)]

    container = V1Container(
        name="cockroach",
        image=f"cockroachdb/cockroach:{Cockroach.DEFAULT_COCKROACH_TAG}",
        args=["start-single-node", "--insecure"],
        ports=ports,
        volume_mounts=volume_mounts,
    )

    pod_spec = V1PodSpec(containers=[container], volumes=volumes)
    template_spec = V1PodTemplateSpec(metadata=metadata, spec=pod_spec)
    claim_templates = [
        V1PersistentVolumeClaim(
            metadata=V1ObjectMeta(name="data"),
            spec=V1PersistentVolumeClaimSpec(
                access_modes=["ReadWriteOnce"],
                resources=V1ResourceRequirements(requests={"storage": "1Gi"}),
            ),
        )
    ]

    return V1StatefulSet(
        api_version="apps/v1",
        kind="StatefulSet",
        metadata=metadata,
        spec=V1StatefulSetSpec(
            service_name="cockroach",
            replicas=1,
            selector=label_selector,
            template=template_spec,
            volume_claim_templates=claim_templates,
        ),
    )