Compare commits
19 Commits
Author | SHA1 | Date |
---|---|---|
|
a3f6886cb3 | |
|
599aec9cbc | |
|
4b8134a5f8 | |
|
9c3208ee3a | |
|
c6d4e59028 | |
|
cb051aac61 | |
|
52007e2927 | |
|
bc2d7bbea2 | |
|
d4758e98f1 | |
|
9cf6542828 | |
|
8d495ec202 | |
|
b7e4bf3761 | |
|
f9daa35480 | |
|
d74ad8bff7 | |
|
4ccfb20b30 | |
|
59552d2277 | |
|
1b129d69c9 | |
|
fff57db4fb | |
|
1c85b3937c |
|
@ -0,0 +1,2 @@
|
||||||
|
# wasmCloud operator maintainers
|
||||||
|
* @wasmCloud/operator-maintainers
|
|
@ -32,12 +32,12 @@ jobs:
|
||||||
|
|
||||||
# Used by helm chart-testing below
|
# Used by helm chart-testing below
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v5.1.1
|
uses: actions/setup-python@v5.6.0
|
||||||
with:
|
with:
|
||||||
python-version: '3.12.2'
|
python-version: '3.12.2'
|
||||||
|
|
||||||
- name: Set up chart-testing
|
- name: Set up chart-testing
|
||||||
uses: helm/chart-testing-action@v2.6.1
|
uses: helm/chart-testing-action@v2.7.0
|
||||||
with:
|
with:
|
||||||
version: v3.10.1
|
version: v3.10.1
|
||||||
yamllint_version: 1.35.1
|
yamllint_version: 1.35.1
|
||||||
|
@ -48,7 +48,7 @@ jobs:
|
||||||
ct lint --config charts/wasmcloud-operator/ct.yaml
|
ct lint --config charts/wasmcloud-operator/ct.yaml
|
||||||
|
|
||||||
- name: Create kind cluster
|
- name: Create kind cluster
|
||||||
uses: helm/kind-action@v1.10.0
|
uses: helm/kind-action@v1.12.0
|
||||||
with:
|
with:
|
||||||
version: "v0.22.0"
|
version: "v0.22.0"
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# This file is automatically @generated by Cargo.
|
# This file is automatically @generated by Cargo.
|
||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 3
|
version = 4
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "addr2line"
|
name = "addr2line"
|
||||||
|
@ -974,9 +974,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "handlebars"
|
name = "handlebars"
|
||||||
version = "5.1.0"
|
version = "5.1.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ab283476b99e66691dee3f1640fea91487a8d81f50fb5ecc75538f8f8879a1e4"
|
checksum = "d08485b96a0e6393e9e4d1b8d48cf74ad6c063cd905eb33f42c1ce3f0377539b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"pest",
|
"pest",
|
||||||
|
@ -1037,9 +1037,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hermit-abi"
|
name = "hermit-abi"
|
||||||
version = "0.3.3"
|
version = "0.3.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
|
checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hex"
|
name = "hex"
|
||||||
|
@ -1580,13 +1580,14 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mio"
|
name = "mio"
|
||||||
version = "0.8.11"
|
version = "1.0.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"
|
checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"hermit-abi",
|
||||||
"libc",
|
"libc",
|
||||||
"wasi",
|
"wasi",
|
||||||
"windows-sys 0.48.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1759,16 +1760,6 @@ dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "num_cpus"
|
|
||||||
version = "1.16.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
|
|
||||||
dependencies = [
|
|
||||||
"hermit-abi",
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "object"
|
name = "object"
|
||||||
version = "0.32.1"
|
version = "0.32.1"
|
||||||
|
@ -2468,9 +2459,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "schemars"
|
name = "schemars"
|
||||||
version = "0.8.15"
|
version = "0.8.22"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1f7b0ce13155372a76ee2e1c5ffba1fe61ede73fbea5630d61eee6fac4929c0c"
|
checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dyn-clone",
|
"dyn-clone",
|
||||||
"schemars_derive",
|
"schemars_derive",
|
||||||
|
@ -2480,14 +2471,14 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "schemars_derive"
|
name = "schemars_derive"
|
||||||
version = "0.8.15"
|
version = "0.8.22"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e85e2a16b12bdb763244c69ab79363d71db2b4b918a2def53f80b02e0574b13c"
|
checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"serde_derive_internals",
|
"serde_derive_internals",
|
||||||
"syn 1.0.109",
|
"syn 2.0.38",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -2589,13 +2580,13 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive_internals"
|
name = "serde_derive_internals"
|
||||||
version = "0.26.0"
|
version = "0.29.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c"
|
checksum = "330f01ce65a3a5fe59a60c82f3c9a024b573b8a6e875bd233fe5f934e71d54e3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 1.0.109",
|
"syn 2.0.38",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -2653,9 +2644,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_yaml"
|
name = "serde_yaml"
|
||||||
version = "0.9.25"
|
version = "0.9.29"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574"
|
checksum = "a15e0ef66bf939a7c890a0bf6d5a733c70202225f9888a89ed5c62298b019129"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap 2.0.2",
|
"indexmap 2.0.2",
|
||||||
"itoa",
|
"itoa",
|
||||||
|
@ -2948,21 +2939,20 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio"
|
name = "tokio"
|
||||||
version = "1.36.0"
|
version = "1.42.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931"
|
checksum = "2209a14885b74764cce87ffa777ffa1b8ce81a3f3166c6f886b83337fe7e077f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"backtrace",
|
"backtrace",
|
||||||
"bytes",
|
"bytes",
|
||||||
"libc",
|
"libc",
|
||||||
"mio",
|
"mio",
|
||||||
"num_cpus",
|
|
||||||
"parking_lot",
|
"parking_lot",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"signal-hook-registry",
|
"signal-hook-registry",
|
||||||
"socket2 0.5.6",
|
"socket2 0.5.6",
|
||||||
"tokio-macros",
|
"tokio-macros",
|
||||||
"windows-sys 0.48.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -2977,9 +2967,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio-macros"
|
name = "tokio-macros"
|
||||||
version = "2.2.0"
|
version = "2.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
|
checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -3391,9 +3381,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uuid"
|
name = "uuid"
|
||||||
version = "1.5.0"
|
version = "1.12.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc"
|
checksum = "b3758f5e68192bb96cc8f9b7e2c2cfdabb435499a28499a42f8f984092adad4b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"getrandom",
|
"getrandom",
|
||||||
"serde",
|
"serde",
|
||||||
|
@ -3717,7 +3707,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmcloud-operator"
|
name = "wasmcloud-operator"
|
||||||
version = "0.4.2"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-nats",
|
"async-nats",
|
||||||
|
@ -3757,7 +3747,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmcloud-operator-types"
|
name = "wasmcloud-operator-types"
|
||||||
version = "0.1.8"
|
version = "0.1.9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"k8s-openapi",
|
"k8s-openapi",
|
||||||
"kube",
|
"kube",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "wasmcloud-operator"
|
name = "wasmcloud-operator"
|
||||||
version = "0.4.2"
|
version = "0.5.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
# MAINTAINERS
|
||||||
|
|
||||||
|
The following individuals are responsible for reviewing code, managing issues, and ensuring the overall quality of `wasmcloud-operator`.
|
||||||
|
|
||||||
|
## @wasmCloud/operator-maintainers
|
||||||
|
|
||||||
|
Name: Joonas Bergius
|
||||||
|
GitHub: @joonas
|
||||||
|
Organization: Cosmonic
|
||||||
|
|
||||||
|
Name: Dan Norris
|
||||||
|
GitHub: @protochron
|
||||||
|
Organization: Cosmonic
|
||||||
|
|
||||||
|
Name: Taylor Thomas
|
||||||
|
GitHub: @thomastaylor312
|
||||||
|
Organization: Cosmonic
|
||||||
|
|
||||||
|
Name: Lucas Fontes
|
||||||
|
GitHub: @lxfontes
|
||||||
|
Organization: Cosmonic
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
# Reporting a security issue
|
||||||
|
|
||||||
|
Please refer to the [wasmCloud Security Process and Policy](https://github.com/wasmCloud/wasmCloud/blob/main/SECURITY.md) for details on how to report security issues and vulnerabilities.
|
|
@ -7,7 +7,7 @@ type: application
|
||||||
# This is the chart version. This version number should be incremented each time you make changes
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
# to the chart and its templates, including the app version.
|
# to the chart and its templates, including the app version.
|
||||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||||
version: 0.1.5
|
version: 0.1.6
|
||||||
|
|
||||||
# This is the version number of the application being deployed. This version number should be
|
# This is the version number of the application being deployed. This version number should be
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
|
|
|
@ -43,10 +43,15 @@ Common labels
|
||||||
{{- define "wasmcloud-operator.labels" -}}
|
{{- define "wasmcloud-operator.labels" -}}
|
||||||
helm.sh/chart: {{ include "wasmcloud-operator.chart" . }}
|
helm.sh/chart: {{ include "wasmcloud-operator.chart" . }}
|
||||||
{{ include "wasmcloud-operator.selectorLabels" . }}
|
{{ include "wasmcloud-operator.selectorLabels" . }}
|
||||||
|
app.kubernetes.io/component: operator
|
||||||
{{- if .Chart.AppVersion }}
|
{{- if .Chart.AppVersion }}
|
||||||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/part-of: wasmcloud-operator
|
||||||
|
{{- with .Values.additionalLabels }}
|
||||||
|
{{ . | toYaml }}
|
||||||
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
{{/*
|
{{/*
|
||||||
|
|
|
@ -12,6 +12,9 @@ imagePullSecrets: []
|
||||||
nameOverride: ""
|
nameOverride: ""
|
||||||
fullnameOverride: ""
|
fullnameOverride: ""
|
||||||
|
|
||||||
|
additionalLabels: {}
|
||||||
|
# app: wasmcloud-operator
|
||||||
|
|
||||||
serviceAccount:
|
serviceAccount:
|
||||||
# Specifies whether a service account should be created
|
# Specifies whether a service account should be created
|
||||||
create: true
|
create: true
|
||||||
|
|
|
@ -1,11 +1,16 @@
|
||||||
[package]
|
[package]
|
||||||
name = "wasmcloud-operator-types"
|
name = "wasmcloud-operator-types"
|
||||||
version = "0.1.8"
|
version = "0.1.9"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
|
[package.metadata.cargo-machete]
|
||||||
|
# NOTE: This exists because kube-derive needs it, and for reasons I don't
|
||||||
|
# fully understand, it's not coming through kube-derive's own depedendencies.
|
||||||
|
ignored = ["serde_json"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
k8s-openapi = { workspace = true }
|
k8s-openapi = { workspace = true }
|
||||||
kube = { workspace = true, features = ["derive"] }
|
kube = { workspace = true, features = ["derive"] }
|
||||||
schemars = { workspace = true }
|
schemars = { workspace = true }
|
||||||
serde = { workspace = true }
|
serde = { workspace = true }
|
||||||
serde_json = { workspace = true }
|
serde_json = { workspace = true }
|
|
@ -1,4 +1,4 @@
|
||||||
use k8s_openapi::api::core::v1::{PodSpec, ResourceRequirements, Volume};
|
use k8s_openapi::api::core::v1::{Container, PodSpec, ResourceRequirements, Volume};
|
||||||
use kube::CustomResource;
|
use kube::CustomResource;
|
||||||
use schemars::{gen::SchemaGenerator, schema::Schema, JsonSchema};
|
use schemars::{gen::SchemaGenerator, schema::Schema, JsonSchema};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
@ -104,9 +104,23 @@ pub struct KubernetesSchedulingOptions {
|
||||||
/// https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ for valid
|
/// https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ for valid
|
||||||
/// values to use here.
|
/// values to use here.
|
||||||
pub resources: Option<WasmCloudHostConfigResources>,
|
pub resources: Option<WasmCloudHostConfigResources>,
|
||||||
#[schemars(schema_with = "pod_schema")]
|
|
||||||
/// Any other pod template spec options to set for the underlying wasmCloud host pods.
|
/// Any other pod template spec options to set for the underlying wasmCloud host pods.
|
||||||
|
#[schemars(schema_with = "pod_schema")]
|
||||||
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||||
pub pod_template_additions: Option<PodSpec>,
|
pub pod_template_additions: Option<PodSpec>,
|
||||||
|
/// Allow for customization of either the wasmcloud or nats leaf container inside of the wasmCloud host pod.
|
||||||
|
pub container_template_additions: Option<ContainerTemplateAdditions>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct ContainerTemplateAdditions {
|
||||||
|
#[schemars(schema_with = "container_schema")]
|
||||||
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||||
|
pub nats: Option<Container>,
|
||||||
|
#[schemars(schema_with = "container_schema")]
|
||||||
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||||
|
pub wasmcloud: Option<Container>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
|
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
|
||||||
|
@ -165,6 +179,24 @@ fn pod_schema(_gen: &mut SchemaGenerator) -> Schema {
|
||||||
val.schema.into()
|
val.schema.into()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// This is a workaround for the fact that we can't override the Container schema to make name
|
||||||
|
/// an optional field. It generates the OpenAPI schema for the Container type the same way that
|
||||||
|
/// kube.rs does while dropping any required fields.
|
||||||
|
fn container_schema(_gen: &mut SchemaGenerator) -> Schema {
|
||||||
|
let gen = schemars::gen::SchemaSettings::openapi3()
|
||||||
|
.with(|s| {
|
||||||
|
s.inline_subschemas = true;
|
||||||
|
s.meta_schema = None;
|
||||||
|
})
|
||||||
|
.with_visitor(kube::core::schema::StructuralSchemaRewriter)
|
||||||
|
.into_generator();
|
||||||
|
let mut val = gen.into_root_schema_for::<Container>();
|
||||||
|
// Drop `name` as a required field as it will be filled in from container
|
||||||
|
// definition coming the controller that this configuration gets merged into.
|
||||||
|
val.schema.object.as_mut().unwrap().required = BTreeSet::new();
|
||||||
|
val.schema.into()
|
||||||
|
}
|
||||||
|
|
||||||
fn default_host_replicas() -> u32 {
|
fn default_host_replicas() -> u32 {
|
||||||
1
|
1
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ spec:
|
||||||
spec:
|
spec:
|
||||||
serviceAccountName: wasmcloud-operator
|
serviceAccountName: wasmcloud-operator
|
||||||
containers:
|
containers:
|
||||||
- image: ghcr.io/wasmcloud/wasmcloud-operator:0.3.2
|
- image: ghcr.io/wasmcloud/wasmcloud-operator:0.5.0
|
||||||
imagePullPolicy: Always
|
imagePullPolicy: Always
|
||||||
name: wasmcloud-operator
|
name: wasmcloud-operator
|
||||||
ports:
|
ports:
|
||||||
|
|
|
@ -19,9 +19,9 @@ spec:
|
||||||
image: ghcr.io/wasmcloud/components/http-hello-world-rust:0.1.0
|
image: ghcr.io/wasmcloud/components/http-hello-world-rust:0.1.0
|
||||||
traits:
|
traits:
|
||||||
# Govern the spread/scheduling of the component
|
# Govern the spread/scheduling of the component
|
||||||
- type: spreadscaler
|
- type: daemonscaler
|
||||||
properties:
|
properties:
|
||||||
replicas: 1
|
replicas: 100
|
||||||
|
|
||||||
# Add a capability provider that enables HTTP access
|
# Add a capability provider that enables HTTP access
|
||||||
- name: httpserver
|
- name: httpserver
|
||||||
|
@ -30,9 +30,11 @@ spec:
|
||||||
image: ghcr.io/wasmcloud/http-server:0.21.0
|
image: ghcr.io/wasmcloud/http-server:0.21.0
|
||||||
traits:
|
traits:
|
||||||
# Establish a unidirectional link from this http server provider (the "source")
|
# Establish a unidirectional link from this http server provider (the "source")
|
||||||
# to the `http-component` component (the "target") so the component can handle incoming HTTP requests,
|
# to the `http-component` component (the "target") so the component can handle incoming HTTP requests.
|
||||||
#
|
#
|
||||||
# The source (this provider) is configured such that the HTTP server listens on 127.0.0.1:8080
|
# The source (this provider) is configured such that the HTTP server listens on 0.0.0.0:8000.
|
||||||
|
# When running the application on Kubernetes with the wasmCloud operator, you can change the
|
||||||
|
# port but the address must be 0.0.0.0.
|
||||||
- type: link
|
- type: link
|
||||||
properties:
|
properties:
|
||||||
target: http-component
|
target: http-component
|
||||||
|
@ -42,7 +44,10 @@ spec:
|
||||||
source_config:
|
source_config:
|
||||||
- name: default-http
|
- name: default-http
|
||||||
properties:
|
properties:
|
||||||
address: 127.0.0.1:8080
|
address: 0.0.0.0:8000
|
||||||
|
# When running the application on Kubernetes with the wasmCloud operator,
|
||||||
|
# the operator automatically creates a Kubernetes service for applications that use
|
||||||
|
# the httpserver provider with a daemonscaler.
|
||||||
- type: daemonscaler
|
- type: daemonscaler
|
||||||
properties:
|
properties:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
|
|
@ -13,6 +13,7 @@ use k8s_openapi::api::core::v1::{
|
||||||
};
|
};
|
||||||
use k8s_openapi::api::rbac::v1::{PolicyRule, Role, RoleBinding, RoleRef, Subject};
|
use k8s_openapi::api::rbac::v1::{PolicyRule, Role, RoleBinding, RoleRef, Subject};
|
||||||
use k8s_openapi::apimachinery::pkg::apis::meta::v1::LabelSelector;
|
use k8s_openapi::apimachinery::pkg::apis::meta::v1::LabelSelector;
|
||||||
|
use k8s_openapi::DeepMerge;
|
||||||
use kube::{
|
use kube::{
|
||||||
api::{Api, ObjectMeta, Patch, PatchParams},
|
api::{Api, ObjectMeta, Patch, PatchParams},
|
||||||
client::Client as KubeClient,
|
client::Client as KubeClient,
|
||||||
|
@ -546,7 +547,7 @@ async fn pod_template(config: &WasmCloudHostConfig, ctx: Arc<Context>) -> Result
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
let containers = vec![
|
let mut containers = vec![
|
||||||
Container {
|
Container {
|
||||||
name: "nats-leaf".to_string(),
|
name: "nats-leaf".to_string(),
|
||||||
image: Some(leaf_image),
|
image: Some(leaf_image),
|
||||||
|
@ -586,6 +587,22 @@ async fn pod_template(config: &WasmCloudHostConfig, ctx: Arc<Context>) -> Result
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if let Some(cta) = &config
|
||||||
|
.spec
|
||||||
|
.scheduling_options
|
||||||
|
.as_ref()
|
||||||
|
.and_then(|so| so.container_template_additions.clone())
|
||||||
|
{
|
||||||
|
if let Some(mut nats_container) = cta.nats.clone() {
|
||||||
|
nats_container.merge_from(containers[0].clone());
|
||||||
|
containers[0] = nats_container;
|
||||||
|
}
|
||||||
|
if let Some(mut wasmcloud_container) = cta.wasmcloud.clone() {
|
||||||
|
wasmcloud_container.merge_from(containers[1].clone());
|
||||||
|
containers[1] = wasmcloud_container;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let service_account = config.name_any();
|
let service_account = config.name_any();
|
||||||
let mut template = PodTemplateSpec {
|
let mut template = PodTemplateSpec {
|
||||||
metadata: Some(ObjectMeta {
|
metadata: Some(ObjectMeta {
|
||||||
|
@ -830,35 +847,37 @@ async fn configure_hosts(config: &WasmCloudHostConfig, ctx: Arc<Context>) -> Res
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(scheduling_options) = &config.spec.scheduling_options {
|
if config
|
||||||
if scheduling_options.daemonset {
|
.spec
|
||||||
let mut spec = daemonset_spec(config, ctx.clone()).await?;
|
.scheduling_options
|
||||||
spec.template.spec.as_mut().unwrap().containers[1]
|
.as_ref()
|
||||||
.env
|
.is_some_and(|so| so.daemonset)
|
||||||
.as_mut()
|
{
|
||||||
.unwrap()
|
let mut spec = daemonset_spec(config, ctx.clone()).await?;
|
||||||
.append(&mut env_vars);
|
spec.template.spec.as_mut().unwrap().containers[1]
|
||||||
let ds = DaemonSet {
|
.env
|
||||||
metadata: ObjectMeta {
|
.as_mut()
|
||||||
name: Some(config.name_any()),
|
.unwrap()
|
||||||
namespace: Some(config.namespace().unwrap()),
|
.append(&mut env_vars);
|
||||||
owner_references: Some(vec![config.controller_owner_ref(&()).unwrap()]),
|
let ds = DaemonSet {
|
||||||
labels: Some(common_labels()),
|
metadata: ObjectMeta {
|
||||||
..Default::default()
|
name: Some(config.name_any()),
|
||||||
},
|
namespace: Some(config.namespace().unwrap()),
|
||||||
spec: Some(spec),
|
owner_references: Some(vec![config.controller_owner_ref(&()).unwrap()]),
|
||||||
|
labels: Some(common_labels()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
},
|
||||||
|
spec: Some(spec),
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
|
||||||
let api =
|
let api = Api::<DaemonSet>::namespaced(ctx.client.clone(), &config.namespace().unwrap());
|
||||||
Api::<DaemonSet>::namespaced(ctx.client.clone(), &config.namespace().unwrap());
|
api.patch(
|
||||||
api.patch(
|
&config.name_any(),
|
||||||
&config.name_any(),
|
&PatchParams::apply(CLUSTER_CONFIG_FINALIZER),
|
||||||
&PatchParams::apply(CLUSTER_CONFIG_FINALIZER),
|
&Patch::Apply(ds),
|
||||||
&Patch::Apply(ds),
|
)
|
||||||
)
|
.await?;
|
||||||
.await?;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
let mut spec = deployment_spec(config, ctx.clone()).await?;
|
let mut spec = deployment_spec(config, ctx.clone()).await?;
|
||||||
spec.template.spec.as_mut().unwrap().containers[1]
|
spec.template.spec.as_mut().unwrap().containers[1]
|
||||||
|
|
Loading…
Reference in New Issue