From 89e960202abf9b065c67bf96b99894564fdb7f37 Mon Sep 17 00:00:00 2001 From: Christopher Beitel Date: Wed, 23 Jan 2019 16:27:50 -0800 Subject: [PATCH] rm stale agents example (#487) --- agents/Dockerfile | 26 - agents/README.md | 66 - ...d521c05aa905df949868143b26445f5e4eda5.yaml | 39 - ...8d28127cb719410a9c40be214d3c76c2b4cb7.yaml | 18 - agents/app/app.yaml | 24 - agents/app/components/params.libsonnet | 56 - agents/app/components/render.jsonnet | 63 - agents/app/components/train.jsonnet | 110 - agents/app/environments/base.libsonnet | 4 - agents/app/lib/v1.7.0/k.libsonnet | 80 - agents/app/lib/v1.7.0/k8s.libsonnet | 19353 ------ agents/app/lib/v1.7.0/swagger.json | 56122 ---------------- agents/app/vendor/kubeflow/tf-job/README.md | 76 - agents/app/vendor/kubeflow/tf-job/parts.yaml | 35 - .../prototypes/tf-cnn-benchmarks.jsonnet | 104 - .../kubeflow/tf-job/prototypes/tf-job.jsonnet | 51 - .../vendor/kubeflow/tf-job/tf-job.libsonnet | 49 - agents/doc/builder.png | Bin 635278 -> 0 bytes agents/doc/demo.ipynb | 1085 - agents/doc/jhub-spawn.png | Bin 82986 -> 0 bytes agents/doc/render.mp4 | Bin 217431 -> 0 bytes agents/doc/render_preview.png | Bin 1356960 -> 0 bytes agents/doc/sa-create.png | Bin 90832 -> 0 bytes agents/doc/tboard_mean_score.png | Bin 483849 -> 0 bytes agents/requirements.txt | 5 - agents/trainer/__init__.py | 19 - agents/trainer/task.py | 320 - 27 files changed, 77705 deletions(-) delete mode 100644 agents/Dockerfile delete mode 100644 agents/README.md delete mode 100644 agents/app/.ksonnet/registries/incubator/422d521c05aa905df949868143b26445f5e4eda5.yaml delete mode 100644 agents/app/.ksonnet/registries/kubeflow/8b48d28127cb719410a9c40be214d3c76c2b4cb7.yaml delete mode 100644 agents/app/app.yaml delete mode 100644 agents/app/components/params.libsonnet delete mode 100644 agents/app/components/render.jsonnet delete mode 100644 agents/app/components/train.jsonnet delete mode 100644 agents/app/environments/base.libsonnet delete mode 100644 agents/app/lib/v1.7.0/k.libsonnet delete mode 100644 agents/app/lib/v1.7.0/k8s.libsonnet delete mode 100644 agents/app/lib/v1.7.0/swagger.json delete mode 100644 agents/app/vendor/kubeflow/tf-job/README.md delete mode 100644 agents/app/vendor/kubeflow/tf-job/parts.yaml delete mode 100644 agents/app/vendor/kubeflow/tf-job/prototypes/tf-cnn-benchmarks.jsonnet delete mode 100644 agents/app/vendor/kubeflow/tf-job/prototypes/tf-job.jsonnet delete mode 100644 agents/app/vendor/kubeflow/tf-job/tf-job.libsonnet delete mode 100644 agents/doc/builder.png delete mode 100644 agents/doc/demo.ipynb delete mode 100644 agents/doc/jhub-spawn.png delete mode 100644 agents/doc/render.mp4 delete mode 100644 agents/doc/render_preview.png delete mode 100644 agents/doc/sa-create.png delete mode 100644 agents/doc/tboard_mean_score.png delete mode 100644 agents/requirements.txt delete mode 100644 agents/trainer/__init__.py delete mode 100644 agents/trainer/task.py diff --git a/agents/Dockerfile b/agents/Dockerfile deleted file mode 100644 index 4b599592..00000000 --- a/agents/Dockerfile +++ /dev/null @@ -1,26 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -FROM tensorflow/tensorflow:1.4.1 - -# Needed for rendering and uploading renders -RUN apt-get update -RUN apt-get install -y libav-tools ffmpeg git - -ADD requirements.txt /app/ -RUN pip install -r /app/requirements.txt - -ADD trainer /app/trainer/ - -WORKDIR /app/ - -ENTRYPOINT ["python", "-m", "trainer.task"] diff --git a/agents/README.md b/agents/README.md deleted file mode 100644 index aa47a09b..00000000 --- a/agents/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# [WIP] Reinforcement Learning with [tensorflow/agents](https://github.com/tensorflow/agents) - -Here we provide a demonstration of training a reinforcement learning agent to perform a robotic grasping task using Kubeflow running on Google Kubernetes Engine. In this demonstration you will learn how to paramaeterize a training job, submit it to run on your cluster, monitor the job including launching a tensorboard instance, and finally producing renders of the agent performing the robotic grasping task. - -For clarity and fun you can check out what the product of this tutorial will look like by clicking through the render screenshot below to a short video of a trained agent performing a simulated robotic block grasping task: - -[![](doc/render_preview.png)](https://youtu.be/0X0w5XOtcHw) - -### Setup - -##### Training locally - -In order to run the example localy we'll need to install the necessary requirements in a local conda environment, which can be done as follows: - -```bash -$conda create -y -n dev python=2.7 -$source activate dev -$pip install -r requirements.txt -``` - -The trainer can be run as follows (in this case to display information on the available parameters): - -```bash -$python -m trainer.task --help -usage: task.py [-h] [--run_mode RUN_MODE] [--logdir LOGDIR] [--hparam_set_id HPARAM_SET_ID] - [--run_base_tag RUN_BASE_TAG] [--env_processes [ENV_PROCESSES]] [--noenv_processes] - [--num_gpus NUM_GPUS] [--save_checkpoint_secs SAVE_CHECKPOINT_SECS] - [--log_device_placement [LOG_DEVICE_PLACEMENT]] [--nolog_device_placement] - [--debug [DEBUG]] [--nodebug] [--render_secs RENDER_SECS] - [--render_out_dir RENDER_OUT_DIR] [--algorithm ALGORITHM] [--num_agents NUM_AGENTS] - [--eval_episodes EVAL_EPISODES] [--env ENV] [--max_length MAX_LENGTH] [--steps STEPS] - [--network NETWORK] [--init_mean_factor INIT_MEAN_FACTOR] [--init_std INIT_STD] - [--learning_rate LEARNING_RATE] [--optimizer OPTIMIZER] [--update_epochs UPDATE_EPOCHS] - [--update_every UPDATE_EVERY] [--discount DISCOUNT] [--kl_target KL_TARGET] - [--kl_cutoff_factor KL_CUTOFF_FACTOR] [--kl_cutoff_coef KL_CUTOFF_COEF] - [--kl_init_penalty KL_INIT_PENALTY] -... -``` - - -##### GCP and Kubeflow configuration - -This tutorial assumes you have deployed a Kubernetes cluster on your provider of choice and have completed the steps described in the [Kubeflow User Guide](https://github.com/kubeflow/kubeflow/blob/master/user_guide.md) to deploy the core, argo, and nfs components. - -##### Launching base image on JupyterHub - -This example is intended to be run inside of the `gcr.io/kubeflow/tensorflow-notebook-cpu` container running on JupyterHub which is in turn running on Kubeflow. You may provide the name of this container via the spawner options dialog. - -For general troubleshooting of the spawning of notebook containers on JupyterHub or anything else related to your Kubeflow deployment please refer to the [Kubeflow User Guide](https://github.com/kubeflow/kubeflow/blob/master/user_guide.md). - -There are two steps to perform from within the JupyterHub environment before the demonstration notebook can be used as intended. - -First, we need to obtain the kubeflow example code as follows: - -```bash -$cd /home/jovyan -$git clone https://github.com/kubeflow/examples kubeflow-examples -``` - -We will also need to authenticate our notebook environment to make calls to the underlying Kubernetes cluster. For example, if this is running on Google Container Engine the command would be as follows: - -```bash -$gcloud container clusters --project={PROJECT} --zone={ZONE} get-credentials {CLUSTER} -``` - -Well it looks like our initial setup is finished 🎉🎉 and it's time to start playing around with that shiny new demonstration notebook!! You'll find it in doc/demo.ipynb. diff --git a/agents/app/.ksonnet/registries/incubator/422d521c05aa905df949868143b26445f5e4eda5.yaml b/agents/app/.ksonnet/registries/incubator/422d521c05aa905df949868143b26445f5e4eda5.yaml deleted file mode 100644 index 0f0987d9..00000000 --- a/agents/app/.ksonnet/registries/incubator/422d521c05aa905df949868143b26445f5e4eda5.yaml +++ /dev/null @@ -1,39 +0,0 @@ -apiVersion: 0.1.0 -gitVersion: - commitSha: 422d521c05aa905df949868143b26445f5e4eda5 - refSpec: master -kind: ksonnet.io/registry -libraries: - apache: - path: apache - version: master - efk: - path: efk - version: master - mariadb: - path: mariadb - version: master - memcached: - path: memcached - version: master - mongodb: - path: mongodb - version: master - mysql: - path: mysql - version: master - nginx: - path: nginx - version: master - node: - path: node - version: master - postgres: - path: postgres - version: master - redis: - path: redis - version: master - tomcat: - path: tomcat - version: master diff --git a/agents/app/.ksonnet/registries/kubeflow/8b48d28127cb719410a9c40be214d3c76c2b4cb7.yaml b/agents/app/.ksonnet/registries/kubeflow/8b48d28127cb719410a9c40be214d3c76c2b4cb7.yaml deleted file mode 100644 index 93d0c792..00000000 --- a/agents/app/.ksonnet/registries/kubeflow/8b48d28127cb719410a9c40be214d3c76c2b4cb7.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: 0.1.0 -gitVersion: - commitSha: 8b48d28127cb719410a9c40be214d3c76c2b4cb7 - refSpec: master -kind: ksonnet.io/registry -libraries: - argo: - path: argo - version: master - core: - path: core - version: master - tf-job: - path: tf-job - version: master - tf-serving: - path: tf-serving - version: master diff --git a/agents/app/app.yaml b/agents/app/app.yaml deleted file mode 100644 index 59773f29..00000000 --- a/agents/app/app.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: 0.1.0 -kind: ksonnet.io/app -libraries: - tf-job: - gitVersion: - commitSha: 8b48d28127cb719410a9c40be214d3c76c2b4cb7 - refSpec: master - name: tf-job - registry: kubeflow -name: app -registries: - incubator: - gitVersion: - commitSha: 422d521c05aa905df949868143b26445f5e4eda5 - refSpec: master - protocol: github - uri: github.com/ksonnet/parts/tree/master/incubator - kubeflow: - gitVersion: - commitSha: 8b48d28127cb719410a9c40be214d3c76c2b4cb7 - refSpec: master - protocol: github - uri: github.com/kubeflow/kubeflow/tree/master/kubeflow -version: 0.0.1 diff --git a/agents/app/components/params.libsonnet b/agents/app/components/params.libsonnet deleted file mode 100644 index 8342b3b9..00000000 --- a/agents/app/components/params.libsonnet +++ /dev/null @@ -1,56 +0,0 @@ -{ - global: { - }, - components: { - "train": { - algorithm: "agents.ppo.PPOAlgorithm", - discount: 0.995, - dump_dependency_versions: "True", - env: "KukaBulletEnv-v0", - eval_episodes: 25, - generate_data: "True", - hparam_set_id: "pybullet_kuka_ff", - image: "gcr.io/kubeflow-rl/agents:0405-1658-39bf", - image_gpu: "null", - init_mean_factor: 0.1, - job_tag: "0206-1409-6174", - kl_cutoff_coef: 1000, - kl_cutoff_factor: 2, - kl_init_penalty: 1, - kl_target: 0.01, - learning_rate: 0.0001, - log_dir: "/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-545d", - max_length: 1000, - name: "kuka-0405-1707-545d", - namespace: "kubeflow", - network: "agents.scripts.networks.feed_forward_gaussian", - nfs_claim_name: "nfs-1", - num_agents: 30, - num_cpu: 30, - num_gpus: 0, - num_masters: 1, - num_ps: 1, - num_replicas: 1, - num_workers: 1, - optimizer: "tensorflow.train.AdamOptimizer", - render_secs: 600, - run_base_tag: "0e90193e", - run_mode: "train", - save_checkpoint_secs: 600, - save_checkpoints_secs: 600, - steps: 15000000, - sync_replicas: "False", - update_epochs: 25, - update_every: 60, - }, - "render": { - image: "gcr.io/kubeflow-rl/agents:0319-1806-6614", - log_dir: "/mnt/nfs-1/train_dirs/kubeflow-rl/studies/replicated-kuka-demo-1/kuka-0319-1735-222e", - name: "render-0319-2043-47e6", - namespace: "kubeflow", - nfs_claim_name: "nfs-1", - num_cpu: 4, - num_gpus: 0, - }, - }, -} diff --git a/agents/app/components/render.jsonnet b/agents/app/components/render.jsonnet deleted file mode 100644 index 368f151d..00000000 --- a/agents/app/components/render.jsonnet +++ /dev/null @@ -1,63 +0,0 @@ -local params = std.extVar("__ksonnet/params").components["render"]; -local k = import 'k.libsonnet'; -local deployment = k.extensions.v1beta1.deployment; -local container = deployment.mixin.spec.template.spec.containersType; -local podTemplate = k.extensions.v1beta1.podTemplate; - -local tfJob = import 'kubeflow/tf-job/tf-job.libsonnet'; - -local name = params.name; -local namespace = params.namespace; -local num_gpus = params.num_gpus; -local log_dir = params.log_dir; -local imageGpu = ""; -local image = params.image; -local numCpu = params.num_cpu; - -local args = [ - "--run_mode=render", - "--logdir=" + log_dir, - "--num_agents=1" -]; - -local workerSpec = if num_gpus > 0 then - tfJob.parts.tfJobReplica("MASTER", 1, args, imageGpu, num_gpus) - else - tfJob.parts.tfJobReplica("MASTER", 1, args, image); - -local nfsClaimName = params.nfs_claim_name; - -local replicas = std.map(function(s) - s + { - template+: { - spec+: { - containers: [ - s.template.spec.containers[0] + { - resources: { - limits: { - cpu: numCpu - }, - requests: { - cpu: numCpu - } - }, - volumeMounts:[{ - name: "nfs", - mountPath: "/mnt/" + nfsClaimName - }] - }, - ], - volumes: [{ - name: "nfs", - persistentVolumeClaim: { - claimName: nfsClaimName - } - }] - }, - }, - }, - std.prune([workerSpec])); - -local job = tfJob.parts.tfJob(name, namespace, replicas); - -std.prune(k.core.v1.list.new([job])) diff --git a/agents/app/components/train.jsonnet b/agents/app/components/train.jsonnet deleted file mode 100644 index 27137236..00000000 --- a/agents/app/components/train.jsonnet +++ /dev/null @@ -1,110 +0,0 @@ -local params = std.extVar("__ksonnet/params").components["train"]; -local k = import 'k.libsonnet'; -local deployment = k.extensions.v1beta1.deployment; -local container = deployment.mixin.spec.template.spec.containersType; -local podTemplate = k.extensions.v1beta1.podTemplate; - -local tfJob = import 'kubeflow/tf-job/tf-job.libsonnet'; - -local name = params.name; -local namespace = params.namespace; -local num_gpus = params.num_gpus; -local hparam_set_id = params.hparam_set_id; -local jobTag = params.job_tag; -local image = params.image; -local imageGpu = params.image_gpu; -local numCpu = params.num_cpu; -local dumpDependencyVersions = params.dump_dependency_versions; -local log_dir = params.log_dir; -local hparamSetID = params.hparam_set_id; -local runBaseTag = params.run_base_tag; -local syncReplicas = params.sync_replicas; -local algorithm = params.algorithm; -local numAgents = params.num_agents; -local evalEpisodes = params.eval_episodes; -local env = params.env; -local maxLength = params.max_length; -local steps = params.steps; -local network = params.network; -local initMeanFactor = params.init_mean_factor; -local learningRate = params.learning_rate; -local optimizer = params.optimizer; -local updateEpochs = params.update_epochs; -local updateEvery = params.update_every; -local discount = params.discount; -local klTarget = params.kl_target; -local klCutoffFactor = params.kl_cutoff_factor; -local klCutoffCoef = params.kl_cutoff_coef; -local klInitPenalty = params.kl_init_penalty; - -local renderSecs = params.render_secs; - -local args = [ - "--run_mode=train", - "--logdir=" + log_dir, - "--hparam_set_id=" + hparamSetID, - "--run_base_tag=" + runBaseTag, - "--sync_replicas=" + syncReplicas, - "--num_gpus=" + num_gpus, - "--algorithm=" + algorithm, - "--num_agents=" + numAgents, - "--eval_episodes=" + evalEpisodes, - "--env=" + env, - "--max_length=" + maxLength, - "--steps=" + steps, - "--network=" + network, - "--init_mean_factor=" + initMeanFactor, - "--learning_rate=" + learningRate, - "--optimizer=" + optimizer, - "--update_epochs=" + updateEpochs, - "--update_every=" + updateEvery, - "--discount=" + discount, - "--kl_target=" + klTarget, - "--kl_cutoff_factor=" + klCutoffFactor, - "--kl_cutoff_coef=" + klCutoffCoef, - "--kl_init_penalty=" + klInitPenalty, - "--dump_dependency_versions=" + dumpDependencyVersions, - "--render_secs=" + renderSecs, -]; - -local workerSpec = if num_gpus > 0 then - tfJob.parts.tfJobReplica("MASTER", 1, args, imageGpu, num_gpus) - else - tfJob.parts.tfJobReplica("MASTER", 1, args, image); - -local nfsClaimName = params.nfs_claim_name; - -local replicas = std.map(function(s) - s + { - template+: { - spec+: { - containers: [ - s.template.spec.containers[0] + { - resources: { - limits: { - cpu: numCpu - }, - requests: { - cpu: numCpu - } - }, - volumeMounts:[{ - name: "nfs", - mountPath: "/mnt/" + nfsClaimName - }] - }, - ], - volumes: [{ - name: "nfs", - persistentVolumeClaim: { - claimName: nfsClaimName - } - }] - }, - }, - }, - std.prune([workerSpec])); - -local job = tfJob.parts.tfJob(name, namespace, replicas); - -std.prune(k.core.v1.list.new([job])) diff --git a/agents/app/environments/base.libsonnet b/agents/app/environments/base.libsonnet deleted file mode 100644 index a129affb..00000000 --- a/agents/app/environments/base.libsonnet +++ /dev/null @@ -1,4 +0,0 @@ -local components = std.extVar("__ksonnet/components"); -components + { - // Insert user-specified overrides here. -} diff --git a/agents/app/lib/v1.7.0/k.libsonnet b/agents/app/lib/v1.7.0/k.libsonnet deleted file mode 100644 index 702cdf64..00000000 --- a/agents/app/lib/v1.7.0/k.libsonnet +++ /dev/null @@ -1,80 +0,0 @@ -local k8s = import "k8s.libsonnet"; - -local apps = k8s.apps; -local core = k8s.core; -local extensions = k8s.extensions; - -local hidden = { - mapContainers(f):: { - local podContainers = super.spec.template.spec.containers, - spec+: { - template+: { - spec+: { - // IMPORTANT: This overwrites the 'containers' field - // for this deployment. - containers: std.map(f, podContainers), - }, - }, - }, - }, - - mapContainersWithName(names, f) :: - local nameSet = - if std.type(names) == "array" - then std.set(names) - else std.set([names]); - local inNameSet(name) = std.length(std.setInter(nameSet, std.set([name]))) > 0; - self.mapContainers( - function(c) - if std.objectHas(c, "name") && inNameSet(c.name) - then f(c) - else c - ), -}; - -k8s + { - apps:: apps + { - v1beta1:: apps.v1beta1 + { - local v1beta1 = apps.v1beta1, - - daemonSet:: v1beta1.daemonSet + { - mapContainers(f):: hidden.mapContainers(f), - mapContainersWithName(names, f):: hidden.mapContainersWithName(names, f), - }, - - deployment:: v1beta1.deployment + { - mapContainers(f):: hidden.mapContainers(f), - mapContainersWithName(names, f):: hidden.mapContainersWithName(names, f), - }, - }, - }, - - core:: core + { - v1:: core.v1 + { - list:: { - new(items):: - {apiVersion: "v1"} + - {kind: "List"} + - self.items(items), - - items(items):: if std.type(items) == "array" then {items+: items} else {items+: [items]}, - }, - }, - }, - - extensions:: extensions + { - v1beta1:: extensions.v1beta1 + { - local v1beta1 = extensions.v1beta1, - - daemonSet:: v1beta1.daemonSet + { - mapContainers(f):: hidden.mapContainers(f), - mapContainersWithName(names, f):: hidden.mapContainersWithName(names, f), - }, - - deployment:: v1beta1.deployment + { - mapContainers(f):: hidden.mapContainers(f), - mapContainersWithName(names, f):: hidden.mapContainersWithName(names, f), - }, - }, - }, -} diff --git a/agents/app/lib/v1.7.0/k8s.libsonnet b/agents/app/lib/v1.7.0/k8s.libsonnet deleted file mode 100644 index 2b99e900..00000000 --- a/agents/app/lib/v1.7.0/k8s.libsonnet +++ /dev/null @@ -1,19353 +0,0 @@ -// AUTOGENERATED from the Kubernetes OpenAPI specification. DO NOT MODIFY. -// Kubernetes version: v1.7.0 -// SHA of ksonnet-lib HEAD: -// SHA of Kubernetes HEAD OpenAPI spec is generated from: - -{ - admissionregistration:: { - v1alpha1:: { - local apiVersion = {apiVersion: "admissionregistration.k8s.io/v1alpha1"}, - // ExternalAdmissionHookConfiguration describes the configuration of initializers. - externalAdmissionHookConfiguration:: { - local kind = {kind: "ExternalAdmissionHookConfiguration"}, - new():: apiVersion + kind, - // ExternalAdmissionHooks is a list of external admission webhooks and the affected resources and operations. - withExternalAdmissionHooks(externalAdmissionHooks):: self + if std.type(externalAdmissionHooks) == "array" then {externalAdmissionHooks: externalAdmissionHooks} else {externalAdmissionHooks: [externalAdmissionHooks]}, - // ExternalAdmissionHooks is a list of external admission webhooks and the affected resources and operations. - withExternalAdmissionHooksMixin(externalAdmissionHooks):: self + if std.type(externalAdmissionHooks) == "array" then {externalAdmissionHooks+: externalAdmissionHooks} else {externalAdmissionHooks+: [externalAdmissionHooks]}, - externalAdmissionHooksType:: hidden.admissionregistration.v1alpha1.externalAdmissionHook, - mixin:: { - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - }, - }, - // ExternalAdmissionHookConfigurationList is a list of ExternalAdmissionHookConfiguration. - externalAdmissionHookConfigurationList:: { - local kind = {kind: "ExternalAdmissionHookConfigurationList"}, - new():: apiVersion + kind, - // List of ExternalAdmissionHookConfiguration. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // List of ExternalAdmissionHookConfiguration. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.admissionregistration.v1alpha1.externalAdmissionHookConfiguration, - mixin:: { - // Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency - withResourceVersion(resourceVersion):: self + __metadataMixin({resourceVersion: resourceVersion}), - // SelfLink is a URL representing this object. Populated by the system. Read-only. - withSelfLink(selfLink):: self + __metadataMixin({selfLink: selfLink}), - }, - metadataType:: hidden.meta.v1.listMeta, - }, - }, - // InitializerConfiguration describes the configuration of initializers. - initializerConfiguration:: { - local kind = {kind: "InitializerConfiguration"}, - new():: apiVersion + kind, - // Initializers is a list of resources and their default initializers Order-sensitive. When merging multiple InitializerConfigurations, we sort the initializers from different InitializerConfigurations by the name of the InitializerConfigurations; the order of the initializers from the same InitializerConfiguration is preserved. - withInitializers(initializers):: self + if std.type(initializers) == "array" then {initializers: initializers} else {initializers: [initializers]}, - // Initializers is a list of resources and their default initializers Order-sensitive. When merging multiple InitializerConfigurations, we sort the initializers from different InitializerConfigurations by the name of the InitializerConfigurations; the order of the initializers from the same InitializerConfiguration is preserved. - withInitializersMixin(initializers):: self + if std.type(initializers) == "array" then {initializers+: initializers} else {initializers+: [initializers]}, - initializersType:: hidden.admissionregistration.v1alpha1.initializer, - mixin:: { - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - }, - }, - // InitializerConfigurationList is a list of InitializerConfiguration. - initializerConfigurationList:: { - local kind = {kind: "InitializerConfigurationList"}, - new():: apiVersion + kind, - // List of InitializerConfiguration. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // List of InitializerConfiguration. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.admissionregistration.v1alpha1.initializerConfiguration, - mixin:: { - // Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency - withResourceVersion(resourceVersion):: self + __metadataMixin({resourceVersion: resourceVersion}), - // SelfLink is a URL representing this object. Populated by the system. Read-only. - withSelfLink(selfLink):: self + __metadataMixin({selfLink: selfLink}), - }, - metadataType:: hidden.meta.v1.listMeta, - }, - }, - }, - }, - apps:: { - v1beta1:: { - local apiVersion = {apiVersion: "apps/v1beta1"}, - // ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers. - controllerRevision:: { - local kind = {kind: "ControllerRevision"}, - new():: apiVersion + kind, - // Revision indicates the revision of the state represented by Data. - withRevision(revision):: self + {revision: revision}, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - }, - }, - // ControllerRevisionList is a resource containing a list of ControllerRevision objects. - controllerRevisionList:: { - local kind = {kind: "ControllerRevisionList"}, - new():: apiVersion + kind, - // Items is the list of ControllerRevisions - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is the list of ControllerRevisions - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.apps.v1beta1.controllerRevision, - mixin:: { - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency - withResourceVersion(resourceVersion):: self + __metadataMixin({resourceVersion: resourceVersion}), - // SelfLink is a URL representing this object. Populated by the system. Read-only. - withSelfLink(selfLink):: self + __metadataMixin({selfLink: selfLink}), - }, - metadataType:: hidden.meta.v1.listMeta, - }, - }, - // Deployment enables declarative updates for Pods and ReplicaSets. - deployment:: { - local kind = {kind: "Deployment"}, - new(name, replicas, containers, podLabels={app: name}):: apiVersion + kind + self.mixin.metadata.withName(name) + self.mixin.spec.withReplicas(replicas) + self.mixin.spec.template.spec.withContainers(containers) + self.mixin.spec.template.metadata.withLabels(podLabels), - mixin:: { - // Standard object metadata. - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the Deployment. - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready) - withMinReadySeconds(minReadySeconds):: self + __specMixin({minReadySeconds: minReadySeconds}), - // Indicates that the deployment is paused. - withPaused(paused):: self + __specMixin({paused: paused}), - // The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Once autoRollback is implemented, the deployment controller will automatically rollback failed deployments. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s. - withProgressDeadlineSeconds(progressDeadlineSeconds):: self + __specMixin({progressDeadlineSeconds: progressDeadlineSeconds}), - // Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1. - withReplicas(replicas):: self + __specMixin({replicas: replicas}), - // The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 2. - withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({revisionHistoryLimit: revisionHistoryLimit}), - // The config this deployment is rolling back to. Will be cleared after rollback is done. - rollbackTo:: { - local __rollbackToMixin(rollbackTo) = __specMixin({rollbackTo+: rollbackTo}), - mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo), - // The revision to rollback to. If set to 0, rollback to the last revision. - withRevision(revision):: self + __rollbackToMixin({revision: revision}), - }, - rollbackToType:: hidden.apps.v1beta1.rollbackConfig, - // Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. - selector:: { - local __selectorMixin(selector) = __specMixin({selector+: selector}), - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - // The deployment strategy to use to replace existing pods with new ones. - strategy:: { - local __strategyMixin(strategy) = __specMixin({strategy+: strategy}), - mixinInstance(strategy):: __strategyMixin(strategy), - // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate. - rollingUpdate:: { - local __rollingUpdateMixin(rollingUpdate) = __strategyMixin({rollingUpdate+: rollingUpdate}), - mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate), - // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods. - withMaxSurge(maxSurge):: __rollingUpdateMixin({maxSurge: maxSurge}), - // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods. - withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}), - }, - rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateDeployment, - // Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate. - withType(type):: self + __strategyMixin({type: type}), - }, - strategyType:: hidden.apps.v1beta1.deploymentStrategy, - // Template describes the pods that will be created. - template:: { - local __templateMixin(template) = __specMixin({template+: template}), - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - }, - specType:: hidden.apps.v1beta1.deploymentSpec, - }, - }, - // DeploymentList is a list of Deployments. - deploymentList:: { - local kind = {kind: "DeploymentList"}, - new(items):: apiVersion + kind + self.withItems(items), - // Items is the list of Deployments. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is the list of Deployments. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.apps.v1beta1.deployment, - mixin:: { - }, - }, - // DeploymentRollback stores the information required to rollback a deployment. - deploymentRollback:: { - local kind = {kind: "DeploymentRollback"}, - new(name):: apiVersion + kind + self.withName(name), - // Required: This must match the Name of a deployment. - withName(name):: self + {name: name}, - // The annotations to be updated to a deployment - withUpdatedAnnotations(updatedAnnotations):: self + {updatedAnnotations: updatedAnnotations}, - // The annotations to be updated to a deployment - withUpdatedAnnotationsMixin(updatedAnnotations):: self + {updatedAnnotations+: updatedAnnotations}, - mixin:: { - // The config of this deployment rollback. - rollbackTo:: { - local __rollbackToMixin(rollbackTo) = {rollbackTo+: rollbackTo}, - mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo), - // The revision to rollback to. If set to 0, rollback to the last revision. - withRevision(revision):: self + __rollbackToMixin({revision: revision}), - }, - rollbackToType:: hidden.apps.v1beta1.rollbackConfig, - }, - }, - // Scale represents a scaling request for a resource. - scale:: { - local kind = {kind: "Scale"}, - new(replicas):: apiVersion + kind + self.mixin.spec.withReplicas(replicas), - mixin:: { - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // desired number of instances for the scaled object. - withReplicas(replicas):: self + __specMixin({replicas: replicas}), - }, - specType:: hidden.apps.v1beta1.scaleSpec, - }, - }, - // StatefulSet represents a set of pods with consistent identities. Identities are defined as: - // - Network: A single stable DNS and hostname. - // - Storage: As many VolumeClaims as requested. - // The StatefulSet guarantees that a given network identity will always map to the same storage identity. - statefulSet:: { - local kind = {kind: "StatefulSet"}, - new(name, replicas, containers, volumeClaims, podLabels={app: name}):: apiVersion + kind + self.mixin.metadata.withName(name) + self.mixin.spec.withReplicas(replicas) + self.mixin.spec.template.spec.withContainers(containers) + self.mixin.spec.withVolumeClaimTemplates(volumeClaims) + self.mixin.spec.template.metadata.withLabels(podLabels), - mixin:: { - // - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec defines the desired identities of pods in this set. - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once. - withPodManagementPolicy(podManagementPolicy):: self + __specMixin({podManagementPolicy: podManagementPolicy}), - // replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1. - withReplicas(replicas):: self + __specMixin({replicas: replicas}), - // revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10. - withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({revisionHistoryLimit: revisionHistoryLimit}), - // selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors - selector:: { - local __selectorMixin(selector) = __specMixin({selector+: selector}), - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - // serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where "pod-specific-string" is managed by the StatefulSet controller. - withServiceName(serviceName):: self + __specMixin({serviceName: serviceName}), - // template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. - template:: { - local __templateMixin(template) = __specMixin({template+: template}), - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - // updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template. - updateStrategy:: { - local __updateStrategyMixin(updateStrategy) = __specMixin({updateStrategy+: updateStrategy}), - mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy), - // RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType. - rollingUpdate:: { - local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({rollingUpdate+: rollingUpdate}), - mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate), - // Partition indicates the ordinal at which the StatefulSet should be partitioned. - withPartition(partition):: self + __rollingUpdateMixin({partition: partition}), - }, - rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateStatefulSetStrategy, - // Type indicates the type of the StatefulSetUpdateStrategy. - withType(type):: self + __updateStrategyMixin({type: type}), - }, - updateStrategyType:: hidden.apps.v1beta1.statefulSetUpdateStrategy, - // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name. - withVolumeClaimTemplates(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == "array" then __specMixin({volumeClaimTemplates: volumeClaimTemplates}) else __specMixin({volumeClaimTemplates: [volumeClaimTemplates]}), - // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name. - withVolumeClaimTemplatesMixin(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == "array" then __specMixin({volumeClaimTemplates+: volumeClaimTemplates}) else __specMixin({volumeClaimTemplates+: [volumeClaimTemplates]}), - volumeClaimTemplatesType:: hidden.core.v1.persistentVolumeClaim, - }, - specType:: hidden.apps.v1beta1.statefulSetSpec, - }, - }, - // StatefulSetList is a collection of StatefulSets. - statefulSetList:: { - local kind = {kind: "StatefulSetList"}, - new(items):: apiVersion + kind + self.withItems(items), - // - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.apps.v1beta1.statefulSet, - mixin:: { - }, - }, - }, - }, - authentication:: { - v1:: { - local apiVersion = {apiVersion: "authentication.k8s.io/v1"}, - // TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver. - tokenReview:: { - local kind = {kind: "TokenReview"}, - new(token):: apiVersion + kind + self.mixin.spec.withToken(token), - mixin:: { - // - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec holds information about the request being evaluated - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Token is the opaque bearer token. - withToken(token):: self + __specMixin({token: token}), - }, - specType:: hidden.authentication.v1.tokenReviewSpec, - }, - }, - }, - v1beta1:: { - local apiVersion = {apiVersion: "authentication.k8s.io/v1beta1"}, - // TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver. - tokenReview:: { - local kind = {kind: "TokenReview"}, - new(token):: apiVersion + kind + self.mixin.spec.withToken(token), - mixin:: { - // - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec holds information about the request being evaluated - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Token is the opaque bearer token. - withToken(token):: self + __specMixin({token: token}), - }, - specType:: hidden.authentication.v1beta1.tokenReviewSpec, - }, - }, - }, - }, - authorization:: { - v1:: { - local apiVersion = {apiVersion: "authorization.k8s.io/v1"}, - // LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking. - localSubjectAccessReview:: { - local kind = {kind: "LocalSubjectAccessReview"}, - new():: apiVersion + kind, - mixin:: { - // - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec holds information about the request being evaluated. spec.namespace must be equal to the namespace you made the request against. If empty, it is defaulted. - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here. - withExtra(extra):: self + __specMixin({extra: extra}), - // Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here. - withExtraMixin(extra):: self + __specMixin({extra+: extra}), - // Groups is the groups you're testing for. - withGroups(groups):: self + if std.type(groups) == "array" then __specMixin({groups: groups}) else __specMixin({groups: [groups]}), - // Groups is the groups you're testing for. - withGroupsMixin(groups):: self + if std.type(groups) == "array" then __specMixin({groups+: groups}) else __specMixin({groups+: [groups]}), - // NonResourceAttributes describes information for a non-resource access request - nonResourceAttributes:: { - local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({nonResourceAttributes+: nonResourceAttributes}), - mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes), - // Path is the URL path of the request - withPath(path):: self + __nonResourceAttributesMixin({path: path}), - // Verb is the standard HTTP verb - withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}), - }, - nonResourceAttributesType:: hidden.authorization.v1.nonResourceAttributes, - // ResourceAuthorizationAttributes describes information for a resource access request - resourceAttributes:: { - local __resourceAttributesMixin(resourceAttributes) = __specMixin({resourceAttributes+: resourceAttributes}), - mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes), - // Group is the API Group of the Resource. "*" means all. - withGroup(group):: self + __resourceAttributesMixin({group: group}), - // Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all. - withName(name):: self + __resourceAttributesMixin({name: name}), - // Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces "" (empty) is defaulted for LocalSubjectAccessReviews "" (empty) is empty for cluster-scoped resources "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview - withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}), - // Resource is one of the existing resource types. "*" means all. - withResource(resource):: self + __resourceAttributesMixin({resource: resource}), - // Subresource is one of the existing resource types. "" means none. - withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}), - // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all. - withVerb(verb):: self + __resourceAttributesMixin({verb: verb}), - // Version is the API Version of the Resource. "*" means all. - withVersion(version):: self + __resourceAttributesMixin({version: version}), - }, - resourceAttributesType:: hidden.authorization.v1.resourceAttributes, - // User is the user you're testing for. If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups - withUser(user):: self + __specMixin({user: user}), - }, - specType:: hidden.authorization.v1.subjectAccessReviewSpec, - }, - }, - // SelfSubjectAccessReview checks whether or the current user can perform an action. Not filling in a spec.namespace means "in all namespaces". Self is a special case, because users should always be able to check whether they can perform an action - selfSubjectAccessReview:: { - local kind = {kind: "SelfSubjectAccessReview"}, - new():: apiVersion + kind, - mixin:: { - // - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec holds information about the request being evaluated. user and groups must be empty - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // NonResourceAttributes describes information for a non-resource access request - nonResourceAttributes:: { - local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({nonResourceAttributes+: nonResourceAttributes}), - mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes), - // Path is the URL path of the request - withPath(path):: self + __nonResourceAttributesMixin({path: path}), - // Verb is the standard HTTP verb - withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}), - }, - nonResourceAttributesType:: hidden.authorization.v1.nonResourceAttributes, - // ResourceAuthorizationAttributes describes information for a resource access request - resourceAttributes:: { - local __resourceAttributesMixin(resourceAttributes) = __specMixin({resourceAttributes+: resourceAttributes}), - mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes), - // Group is the API Group of the Resource. "*" means all. - withGroup(group):: self + __resourceAttributesMixin({group: group}), - // Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all. - withName(name):: self + __resourceAttributesMixin({name: name}), - // Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces "" (empty) is defaulted for LocalSubjectAccessReviews "" (empty) is empty for cluster-scoped resources "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview - withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}), - // Resource is one of the existing resource types. "*" means all. - withResource(resource):: self + __resourceAttributesMixin({resource: resource}), - // Subresource is one of the existing resource types. "" means none. - withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}), - // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all. - withVerb(verb):: self + __resourceAttributesMixin({verb: verb}), - // Version is the API Version of the Resource. "*" means all. - withVersion(version):: self + __resourceAttributesMixin({version: version}), - }, - resourceAttributesType:: hidden.authorization.v1.resourceAttributes, - }, - specType:: hidden.authorization.v1.selfSubjectAccessReviewSpec, - }, - }, - // SubjectAccessReview checks whether or not a user or group can perform an action. - subjectAccessReview:: { - local kind = {kind: "SubjectAccessReview"}, - new():: apiVersion + kind, - mixin:: { - // - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec holds information about the request being evaluated - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here. - withExtra(extra):: self + __specMixin({extra: extra}), - // Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here. - withExtraMixin(extra):: self + __specMixin({extra+: extra}), - // Groups is the groups you're testing for. - withGroups(groups):: self + if std.type(groups) == "array" then __specMixin({groups: groups}) else __specMixin({groups: [groups]}), - // Groups is the groups you're testing for. - withGroupsMixin(groups):: self + if std.type(groups) == "array" then __specMixin({groups+: groups}) else __specMixin({groups+: [groups]}), - // NonResourceAttributes describes information for a non-resource access request - nonResourceAttributes:: { - local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({nonResourceAttributes+: nonResourceAttributes}), - mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes), - // Path is the URL path of the request - withPath(path):: self + __nonResourceAttributesMixin({path: path}), - // Verb is the standard HTTP verb - withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}), - }, - nonResourceAttributesType:: hidden.authorization.v1.nonResourceAttributes, - // ResourceAuthorizationAttributes describes information for a resource access request - resourceAttributes:: { - local __resourceAttributesMixin(resourceAttributes) = __specMixin({resourceAttributes+: resourceAttributes}), - mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes), - // Group is the API Group of the Resource. "*" means all. - withGroup(group):: self + __resourceAttributesMixin({group: group}), - // Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all. - withName(name):: self + __resourceAttributesMixin({name: name}), - // Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces "" (empty) is defaulted for LocalSubjectAccessReviews "" (empty) is empty for cluster-scoped resources "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview - withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}), - // Resource is one of the existing resource types. "*" means all. - withResource(resource):: self + __resourceAttributesMixin({resource: resource}), - // Subresource is one of the existing resource types. "" means none. - withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}), - // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all. - withVerb(verb):: self + __resourceAttributesMixin({verb: verb}), - // Version is the API Version of the Resource. "*" means all. - withVersion(version):: self + __resourceAttributesMixin({version: version}), - }, - resourceAttributesType:: hidden.authorization.v1.resourceAttributes, - // User is the user you're testing for. If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups - withUser(user):: self + __specMixin({user: user}), - }, - specType:: hidden.authorization.v1.subjectAccessReviewSpec, - }, - }, - }, - v1beta1:: { - local apiVersion = {apiVersion: "authorization.k8s.io/v1beta1"}, - // LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking. - localSubjectAccessReview:: { - local kind = {kind: "LocalSubjectAccessReview"}, - new():: apiVersion + kind, - mixin:: { - // - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec holds information about the request being evaluated. spec.namespace must be equal to the namespace you made the request against. If empty, it is defaulted. - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here. - withExtra(extra):: self + __specMixin({extra: extra}), - // Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here. - withExtraMixin(extra):: self + __specMixin({extra+: extra}), - // Groups is the groups you're testing for. - withGroup(group):: self + if std.type(group) == "array" then __specMixin({group: group}) else __specMixin({group: [group]}), - // Groups is the groups you're testing for. - withGroupMixin(group):: self + if std.type(group) == "array" then __specMixin({group+: group}) else __specMixin({group+: [group]}), - // NonResourceAttributes describes information for a non-resource access request - nonResourceAttributes:: { - local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({nonResourceAttributes+: nonResourceAttributes}), - mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes), - // Path is the URL path of the request - withPath(path):: self + __nonResourceAttributesMixin({path: path}), - // Verb is the standard HTTP verb - withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}), - }, - nonResourceAttributesType:: hidden.authorization.v1beta1.nonResourceAttributes, - // ResourceAuthorizationAttributes describes information for a resource access request - resourceAttributes:: { - local __resourceAttributesMixin(resourceAttributes) = __specMixin({resourceAttributes+: resourceAttributes}), - mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes), - // Group is the API Group of the Resource. "*" means all. - withGroup(group):: self + __resourceAttributesMixin({group: group}), - // Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all. - withName(name):: self + __resourceAttributesMixin({name: name}), - // Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces "" (empty) is defaulted for LocalSubjectAccessReviews "" (empty) is empty for cluster-scoped resources "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview - withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}), - // Resource is one of the existing resource types. "*" means all. - withResource(resource):: self + __resourceAttributesMixin({resource: resource}), - // Subresource is one of the existing resource types. "" means none. - withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}), - // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all. - withVerb(verb):: self + __resourceAttributesMixin({verb: verb}), - // Version is the API Version of the Resource. "*" means all. - withVersion(version):: self + __resourceAttributesMixin({version: version}), - }, - resourceAttributesType:: hidden.authorization.v1beta1.resourceAttributes, - // User is the user you're testing for. If you specify "User" but not "Group", then is it interpreted as "What if User were not a member of any groups - withUser(user):: self + __specMixin({user: user}), - }, - specType:: hidden.authorization.v1beta1.subjectAccessReviewSpec, - }, - }, - // SelfSubjectAccessReview checks whether or the current user can perform an action. Not filling in a spec.namespace means "in all namespaces". Self is a special case, because users should always be able to check whether they can perform an action - selfSubjectAccessReview:: { - local kind = {kind: "SelfSubjectAccessReview"}, - new():: apiVersion + kind, - mixin:: { - // - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec holds information about the request being evaluated. user and groups must be empty - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // NonResourceAttributes describes information for a non-resource access request - nonResourceAttributes:: { - local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({nonResourceAttributes+: nonResourceAttributes}), - mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes), - // Path is the URL path of the request - withPath(path):: self + __nonResourceAttributesMixin({path: path}), - // Verb is the standard HTTP verb - withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}), - }, - nonResourceAttributesType:: hidden.authorization.v1beta1.nonResourceAttributes, - // ResourceAuthorizationAttributes describes information for a resource access request - resourceAttributes:: { - local __resourceAttributesMixin(resourceAttributes) = __specMixin({resourceAttributes+: resourceAttributes}), - mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes), - // Group is the API Group of the Resource. "*" means all. - withGroup(group):: self + __resourceAttributesMixin({group: group}), - // Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all. - withName(name):: self + __resourceAttributesMixin({name: name}), - // Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces "" (empty) is defaulted for LocalSubjectAccessReviews "" (empty) is empty for cluster-scoped resources "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview - withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}), - // Resource is one of the existing resource types. "*" means all. - withResource(resource):: self + __resourceAttributesMixin({resource: resource}), - // Subresource is one of the existing resource types. "" means none. - withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}), - // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all. - withVerb(verb):: self + __resourceAttributesMixin({verb: verb}), - // Version is the API Version of the Resource. "*" means all. - withVersion(version):: self + __resourceAttributesMixin({version: version}), - }, - resourceAttributesType:: hidden.authorization.v1beta1.resourceAttributes, - }, - specType:: hidden.authorization.v1beta1.selfSubjectAccessReviewSpec, - }, - }, - // SubjectAccessReview checks whether or not a user or group can perform an action. - subjectAccessReview:: { - local kind = {kind: "SubjectAccessReview"}, - new():: apiVersion + kind, - mixin:: { - // - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec holds information about the request being evaluated - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here. - withExtra(extra):: self + __specMixin({extra: extra}), - // Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here. - withExtraMixin(extra):: self + __specMixin({extra+: extra}), - // Groups is the groups you're testing for. - withGroup(group):: self + if std.type(group) == "array" then __specMixin({group: group}) else __specMixin({group: [group]}), - // Groups is the groups you're testing for. - withGroupMixin(group):: self + if std.type(group) == "array" then __specMixin({group+: group}) else __specMixin({group+: [group]}), - // NonResourceAttributes describes information for a non-resource access request - nonResourceAttributes:: { - local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({nonResourceAttributes+: nonResourceAttributes}), - mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes), - // Path is the URL path of the request - withPath(path):: self + __nonResourceAttributesMixin({path: path}), - // Verb is the standard HTTP verb - withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}), - }, - nonResourceAttributesType:: hidden.authorization.v1beta1.nonResourceAttributes, - // ResourceAuthorizationAttributes describes information for a resource access request - resourceAttributes:: { - local __resourceAttributesMixin(resourceAttributes) = __specMixin({resourceAttributes+: resourceAttributes}), - mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes), - // Group is the API Group of the Resource. "*" means all. - withGroup(group):: self + __resourceAttributesMixin({group: group}), - // Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all. - withName(name):: self + __resourceAttributesMixin({name: name}), - // Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces "" (empty) is defaulted for LocalSubjectAccessReviews "" (empty) is empty for cluster-scoped resources "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview - withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}), - // Resource is one of the existing resource types. "*" means all. - withResource(resource):: self + __resourceAttributesMixin({resource: resource}), - // Subresource is one of the existing resource types. "" means none. - withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}), - // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all. - withVerb(verb):: self + __resourceAttributesMixin({verb: verb}), - // Version is the API Version of the Resource. "*" means all. - withVersion(version):: self + __resourceAttributesMixin({version: version}), - }, - resourceAttributesType:: hidden.authorization.v1beta1.resourceAttributes, - // User is the user you're testing for. If you specify "User" but not "Group", then is it interpreted as "What if User were not a member of any groups - withUser(user):: self + __specMixin({user: user}), - }, - specType:: hidden.authorization.v1beta1.subjectAccessReviewSpec, - }, - }, - }, - }, - autoscaling:: { - v1:: { - local apiVersion = {apiVersion: "autoscaling/v1"}, - // configuration of a horizontal pod autoscaler. - horizontalPodAutoscaler:: { - local kind = {kind: "HorizontalPodAutoscaler"}, - new():: apiVersion + kind, - mixin:: { - // Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // behaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas. - withMaxReplicas(maxReplicas):: self + __specMixin({maxReplicas: maxReplicas}), - // lower limit for the number of pods that can be set by the autoscaler, default 1. - withMinReplicas(minReplicas):: self + __specMixin({minReplicas: minReplicas}), - // reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption and will set the desired number of pods by using its Scale subresource. - scaleTargetRef:: { - local __scaleTargetRefMixin(scaleTargetRef) = __specMixin({scaleTargetRef+: scaleTargetRef}), - mixinInstance(scaleTargetRef):: __scaleTargetRefMixin(scaleTargetRef), - // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __scaleTargetRefMixin({name: name}), - }, - scaleTargetRefType:: hidden.autoscaling.v1.crossVersionObjectReference, - // target average CPU utilization (represented as a percentage of requested CPU) over all the pods; if not specified the default autoscaling policy will be used. - withTargetCpuUtilizationPercentage(targetCpuUtilizationPercentage):: self + __specMixin({targetCPUUtilizationPercentage: targetCpuUtilizationPercentage}), - }, - specType:: hidden.autoscaling.v1.horizontalPodAutoscalerSpec, - }, - }, - // list of horizontal pod autoscaler objects. - horizontalPodAutoscalerList:: { - local kind = {kind: "HorizontalPodAutoscalerList"}, - new(items):: apiVersion + kind + self.withItems(items), - // list of horizontal pod autoscaler objects. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // list of horizontal pod autoscaler objects. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.autoscaling.v1.horizontalPodAutoscaler, - mixin:: { - }, - }, - // Scale represents a scaling request for a resource. - scale:: { - local kind = {kind: "Scale"}, - new(replicas):: apiVersion + kind + self.mixin.spec.withReplicas(replicas), - mixin:: { - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // desired number of instances for the scaled object. - withReplicas(replicas):: self + __specMixin({replicas: replicas}), - }, - specType:: hidden.autoscaling.v1.scaleSpec, - }, - }, - }, - v2alpha1:: { - local apiVersion = {apiVersion: "autoscaling/v2alpha1"}, - // HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified. - horizontalPodAutoscaler:: { - local kind = {kind: "HorizontalPodAutoscaler"}, - new():: apiVersion + kind, - mixin:: { - // metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas. - withMaxReplicas(maxReplicas):: self + __specMixin({maxReplicas: maxReplicas}), - // metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. - withMetrics(metrics):: self + if std.type(metrics) == "array" then __specMixin({metrics: metrics}) else __specMixin({metrics: [metrics]}), - // metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. - withMetricsMixin(metrics):: self + if std.type(metrics) == "array" then __specMixin({metrics+: metrics}) else __specMixin({metrics+: [metrics]}), - metricsType:: hidden.autoscaling.v2alpha1.metricSpec, - // minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod. - withMinReplicas(minReplicas):: self + __specMixin({minReplicas: minReplicas}), - // scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count. - scaleTargetRef:: { - local __scaleTargetRefMixin(scaleTargetRef) = __specMixin({scaleTargetRef+: scaleTargetRef}), - mixinInstance(scaleTargetRef):: __scaleTargetRefMixin(scaleTargetRef), - // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __scaleTargetRefMixin({name: name}), - }, - scaleTargetRefType:: hidden.autoscaling.v2alpha1.crossVersionObjectReference, - }, - specType:: hidden.autoscaling.v2alpha1.horizontalPodAutoscalerSpec, - }, - }, - // HorizontalPodAutoscaler is a list of horizontal pod autoscaler objects. - horizontalPodAutoscalerList:: { - local kind = {kind: "HorizontalPodAutoscalerList"}, - new(items):: apiVersion + kind + self.withItems(items), - // items is the list of horizontal pod autoscaler objects. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // items is the list of horizontal pod autoscaler objects. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.autoscaling.v2alpha1.horizontalPodAutoscaler, - mixin:: { - }, - }, - }, - }, - batch:: { - v1:: { - local apiVersion = {apiVersion: "batch/v1"}, - // Job represents the configuration of a single job. - job:: { - local kind = {kind: "Job"}, - new():: apiVersion + kind, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // Specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ - withCompletions(completions):: self + __specMixin({completions: completions}), - // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://git.k8s.io/community/contributors/design-proposals/selector-generation.md - withManualSelector(manualSelector):: self + __specMixin({manualSelector: manualSelector}), - // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ - withParallelism(parallelism):: self + __specMixin({parallelism: parallelism}), - // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors - selector:: { - local __selectorMixin(selector) = __specMixin({selector+: selector}), - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ - template:: { - local __templateMixin(template) = __specMixin({template+: template}), - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - }, - specType:: hidden.batch.v1.jobSpec, - }, - }, - // JobList is a collection of jobs. - jobList:: { - local kind = {kind: "JobList"}, - new(items):: apiVersion + kind + self.withItems(items), - // items is the list of Jobs. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // items is the list of Jobs. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.batch.v1.job, - mixin:: { - }, - }, - }, - v2alpha1:: { - local apiVersion = {apiVersion: "batch/v2alpha1"}, - // CronJob represents the configuration of a single cron job. - cronJob:: { - local kind = {kind: "CronJob"}, - new():: apiVersion + kind, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Specifies how to treat concurrent executions of a Job. Defaults to Allow. - withConcurrencyPolicy(concurrencyPolicy):: self + __specMixin({concurrencyPolicy: concurrencyPolicy}), - // The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. - withFailedJobsHistoryLimit(failedJobsHistoryLimit):: self + __specMixin({failedJobsHistoryLimit: failedJobsHistoryLimit}), - // Specifies the job that will be created when executing a CronJob. - jobTemplate:: { - local __jobTemplateMixin(jobTemplate) = __specMixin({jobTemplate+: jobTemplate}), - mixinInstance(jobTemplate):: __jobTemplateMixin(jobTemplate), - // Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __jobTemplateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __jobTemplateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // Specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ - withCompletions(completions):: self + __specMixin({completions: completions}), - // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://git.k8s.io/community/contributors/design-proposals/selector-generation.md - withManualSelector(manualSelector):: self + __specMixin({manualSelector: manualSelector}), - // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ - withParallelism(parallelism):: self + __specMixin({parallelism: parallelism}), - // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors - selector:: { - local __selectorMixin(selector) = __specMixin({selector+: selector}), - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ - template:: { - local __templateMixin(template) = __specMixin({template+: template}), - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - }, - specType:: hidden.batch.v1.jobSpec, - }, - jobTemplateType:: hidden.batch.v2alpha1.jobTemplateSpec, - // The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron. - withSchedule(schedule):: self + __specMixin({schedule: schedule}), - // Optional deadline in seconds for starting the job if it misses scheduled time for any reason. Missed jobs executions will be counted as failed ones. - withStartingDeadlineSeconds(startingDeadlineSeconds):: self + __specMixin({startingDeadlineSeconds: startingDeadlineSeconds}), - // The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. - withSuccessfulJobsHistoryLimit(successfulJobsHistoryLimit):: self + __specMixin({successfulJobsHistoryLimit: successfulJobsHistoryLimit}), - // This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false. - withSuspend(suspend):: self + __specMixin({suspend: suspend}), - }, - specType:: hidden.batch.v2alpha1.cronJobSpec, - }, - }, - // CronJobList is a collection of cron jobs. - cronJobList:: { - local kind = {kind: "CronJobList"}, - new(items):: apiVersion + kind + self.withItems(items), - // items is the list of CronJobs. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // items is the list of CronJobs. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.batch.v2alpha1.cronJob, - mixin:: { - }, - }, - }, - }, - certificates:: { - v1beta1:: { - local apiVersion = {apiVersion: "certificates.k8s.io/v1beta1"}, - // Describes a certificate signing request - certificateSigningRequest:: { - local kind = {kind: "CertificateSigningRequest"}, - new():: apiVersion + kind, - mixin:: { - // - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // The certificate request itself and any additional information. - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Extra information about the requesting user. See user.Info interface for details. - withExtra(extra):: self + __specMixin({extra: extra}), - // Extra information about the requesting user. See user.Info interface for details. - withExtraMixin(extra):: self + __specMixin({extra+: extra}), - // Group information about the requesting user. See user.Info interface for details. - withGroups(groups):: self + if std.type(groups) == "array" then __specMixin({groups: groups}) else __specMixin({groups: [groups]}), - // Group information about the requesting user. See user.Info interface for details. - withGroupsMixin(groups):: self + if std.type(groups) == "array" then __specMixin({groups+: groups}) else __specMixin({groups+: [groups]}), - // Base64-encoded PKCS#10 CSR data - withRequest(request):: self + __specMixin({request: request}), - // UID information about the requesting user. See user.Info interface for details. - withUid(uid):: self + __specMixin({uid: uid}), - // allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3 - // https://tools.ietf.org/html/rfc5280#section-4.2.1.12 - withUsages(usages):: self + if std.type(usages) == "array" then __specMixin({usages: usages}) else __specMixin({usages: [usages]}), - // allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3 - // https://tools.ietf.org/html/rfc5280#section-4.2.1.12 - withUsagesMixin(usages):: self + if std.type(usages) == "array" then __specMixin({usages+: usages}) else __specMixin({usages+: [usages]}), - // Information about the requesting user. See user.Info interface for details. - withUsername(username):: self + __specMixin({username: username}), - }, - specType:: hidden.certificates.v1beta1.certificateSigningRequestSpec, - }, - }, - // - certificateSigningRequestList:: { - local kind = {kind: "CertificateSigningRequestList"}, - new(items):: apiVersion + kind + self.withItems(items), - // - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.certificates.v1beta1.certificateSigningRequest, - mixin:: { - }, - }, - }, - }, - core:: { - v1:: { - local apiVersion = {apiVersion: "v1"}, - // Binding ties one object to another; for example, a pod is bound to a node by a scheduler. Deprecated in 1.7, please use the bindings subresource of pods instead. - binding:: { - local kind = {kind: "Binding"}, - new():: apiVersion + kind, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // The target object that you want to bind to the standard object. - target:: { - local __targetMixin(target) = {target+: target}, - mixinInstance(target):: __targetMixin(target), - // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. - withFieldPath(fieldPath):: self + __targetMixin({fieldPath: fieldPath}), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __targetMixin({name: name}), - // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ - withNamespace(namespace):: self + __targetMixin({namespace: namespace}), - // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency - withResourceVersion(resourceVersion):: self + __targetMixin({resourceVersion: resourceVersion}), - // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids - withUid(uid):: self + __targetMixin({uid: uid}), - }, - targetType:: hidden.core.v1.objectReference, - }, - }, - // ComponentStatus (and ComponentStatusList) holds the cluster validation info. - componentStatus:: { - local kind = {kind: "ComponentStatus"}, - new():: apiVersion + kind, - // List of component conditions observed - withConditions(conditions):: self + if std.type(conditions) == "array" then {conditions: conditions} else {conditions: [conditions]}, - // List of component conditions observed - withConditionsMixin(conditions):: self + if std.type(conditions) == "array" then {conditions+: conditions} else {conditions+: [conditions]}, - conditionsType:: hidden.core.v1.componentCondition, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - }, - }, - // Status of all the conditions for the component as a list of ComponentStatus objects. - componentStatusList:: { - local kind = {kind: "ComponentStatusList"}, - new():: apiVersion + kind, - // List of ComponentStatus objects. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // List of ComponentStatus objects. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.componentStatus, - mixin:: { - }, - }, - // ConfigMap holds configuration data for pods to consume. - configMap:: { - local kind = {kind: "ConfigMap"}, - new(name, data):: apiVersion + kind + self.mixin.metadata.withName(name) + self.withData(data), - // Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'. - withData(data):: self + {data: data}, - // Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'. - withDataMixin(data):: self + {data+: data}, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - }, - }, - // ConfigMapList is a resource containing a list of ConfigMap objects. - configMapList:: { - local kind = {kind: "ConfigMapList"}, - new(items):: apiVersion + kind + self.withItems(items), - // Items is the list of ConfigMaps. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is the list of ConfigMaps. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.configMap, - mixin:: { - }, - }, - // Endpoints is a collection of endpoints that implement the actual service. Example: - // Name: "mysvc", - // Subsets: [ - // { - // Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], - // Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}] - // }, - // { - // Addresses: [{"ip": "10.10.3.3"}], - // Ports: [{"name": "a", "port": 93}, {"name": "b", "port": 76}] - // }, - // ] - endpoints:: { - local kind = {kind: "Endpoints"}, - new():: apiVersion + kind, - // The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service. - withSubsets(subsets):: self + if std.type(subsets) == "array" then {subsets: subsets} else {subsets: [subsets]}, - // The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service. - withSubsetsMixin(subsets):: self + if std.type(subsets) == "array" then {subsets+: subsets} else {subsets+: [subsets]}, - subsetsType:: hidden.core.v1.endpointSubset, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - }, - }, - // EndpointsList is a list of endpoints. - endpointsList:: { - local kind = {kind: "EndpointsList"}, - new(items):: apiVersion + kind + self.withItems(items), - // List of endpoints. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // List of endpoints. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.endpoints, - mixin:: { - }, - }, - // Event is a report of an event somewhere in the cluster. - event:: { - local kind = {kind: "Event"}, - new():: apiVersion + kind, - // The number of times this event has occurred. - withCount(count):: self + {count: count}, - // A human-readable description of the status of this operation. - withMessage(message):: self + {message: message}, - // This should be a short, machine understandable string that gives the reason for the transition into the object's current status. - withReason(reason):: self + {reason: reason}, - // Type of this event (Normal, Warning), new types could be added in the future - withType(type):: self + {type: type}, - mixin:: { - // The time at which the event was first recorded. (Time of server receipt is in TypeMeta.) - firstTimestamp:: { - local __firstTimestampMixin(firstTimestamp) = {firstTimestamp+: firstTimestamp}, - mixinInstance(firstTimestamp):: __firstTimestampMixin(firstTimestamp), - }, - firstTimestampType:: hidden.meta.v1.time, - // The object that this event is about. - involvedObject:: { - local __involvedObjectMixin(involvedObject) = {involvedObject+: involvedObject}, - mixinInstance(involvedObject):: __involvedObjectMixin(involvedObject), - // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. - withFieldPath(fieldPath):: self + __involvedObjectMixin({fieldPath: fieldPath}), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __involvedObjectMixin({name: name}), - // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ - withNamespace(namespace):: self + __involvedObjectMixin({namespace: namespace}), - // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency - withResourceVersion(resourceVersion):: self + __involvedObjectMixin({resourceVersion: resourceVersion}), - // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids - withUid(uid):: self + __involvedObjectMixin({uid: uid}), - }, - involvedObjectType:: hidden.core.v1.objectReference, - // The time at which the most recent occurrence of this event was recorded. - lastTimestamp:: { - local __lastTimestampMixin(lastTimestamp) = {lastTimestamp+: lastTimestamp}, - mixinInstance(lastTimestamp):: __lastTimestampMixin(lastTimestamp), - }, - lastTimestampType:: hidden.meta.v1.time, - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // The component reporting this event. Should be a short machine understandable string. - source:: { - local __sourceMixin(source) = {source+: source}, - mixinInstance(source):: __sourceMixin(source), - // Component from which the event is generated. - withComponent(component):: self + __sourceMixin({component: component}), - // Node name on which the event is generated. - withHost(host):: self + __sourceMixin({host: host}), - }, - sourceType:: hidden.core.v1.eventSource, - }, - }, - // EventList is a list of events. - eventList:: { - local kind = {kind: "EventList"}, - new(items):: apiVersion + kind + self.withItems(items), - // List of events - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // List of events - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.event, - mixin:: { - }, - }, - // LimitRange sets resource usage limits for each kind of resource in a Namespace. - limitRange:: { - local kind = {kind: "LimitRange"}, - new():: apiVersion + kind, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec defines the limits enforced. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Limits is the list of LimitRangeItem objects that are enforced. - withLimits(limits):: self + if std.type(limits) == "array" then __specMixin({limits: limits}) else __specMixin({limits: [limits]}), - // Limits is the list of LimitRangeItem objects that are enforced. - withLimitsMixin(limits):: self + if std.type(limits) == "array" then __specMixin({limits+: limits}) else __specMixin({limits+: [limits]}), - limitsType:: hidden.core.v1.limitRangeItem, - }, - specType:: hidden.core.v1.limitRangeSpec, - }, - }, - // LimitRangeList is a list of LimitRange items. - limitRangeList:: { - local kind = {kind: "LimitRangeList"}, - new(items):: apiVersion + kind + self.withItems(items), - // Items is a list of LimitRange objects. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_limit_range.md - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is a list of LimitRange objects. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_limit_range.md - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.limitRange, - mixin:: { - }, - }, - // Namespace provides a scope for Names. Use of multiple namespaces is optional. - namespace:: { - local kind = {kind: "Namespace"}, - new(name):: apiVersion + kind + self.mixin.metadata.withName(name), - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec defines the behavior of the Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#finalizers - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __specMixin({finalizers: finalizers}) else __specMixin({finalizers: [finalizers]}), - // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#finalizers - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __specMixin({finalizers+: finalizers}) else __specMixin({finalizers+: [finalizers]}), - }, - specType:: hidden.core.v1.namespaceSpec, - }, - }, - // NamespaceList is a list of Namespaces. - namespaceList:: { - local kind = {kind: "NamespaceList"}, - new(items):: apiVersion + kind + self.withItems(items), - // Items is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.namespace, - mixin:: { - }, - }, - // Node is a worker node in Kubernetes. Each node will have a unique identifier in the cache (i.e. in etcd). - node:: { - local kind = {kind: "Node"}, - new():: apiVersion + kind, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec defines the behavior of a node. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // External ID of the node assigned by some machine database (e.g. a cloud provider). Deprecated. - withExternalId(externalId):: self + __specMixin({externalID: externalId}), - // PodCIDR represents the pod IP range assigned to the node. - withPodCidr(podCidr):: self + __specMixin({podCIDR: podCidr}), - // ID of the node assigned by the cloud provider in the format: :// - withProviderId(providerId):: self + __specMixin({providerID: providerId}), - // If specified, the node's taints. - withTaints(taints):: self + if std.type(taints) == "array" then __specMixin({taints: taints}) else __specMixin({taints: [taints]}), - // If specified, the node's taints. - withTaintsMixin(taints):: self + if std.type(taints) == "array" then __specMixin({taints+: taints}) else __specMixin({taints+: [taints]}), - taintsType:: hidden.core.v1.taint, - // Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration - withUnschedulable(unschedulable):: self + __specMixin({unschedulable: unschedulable}), - }, - specType:: hidden.core.v1.nodeSpec, - }, - }, - // NodeList is the whole list of all Nodes which have been registered with master. - nodeList:: { - local kind = {kind: "NodeList"}, - new(items):: apiVersion + kind + self.withItems(items), - // List of nodes - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // List of nodes - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.node, - mixin:: { - }, - }, - // PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes - persistentVolume:: { - local kind = {kind: "PersistentVolume"}, - new():: apiVersion + kind, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes - withAccessModes(accessModes):: self + if std.type(accessModes) == "array" then __specMixin({accessModes: accessModes}) else __specMixin({accessModes: [accessModes]}), - // AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes - withAccessModesMixin(accessModes):: self + if std.type(accessModes) == "array" then __specMixin({accessModes+: accessModes}) else __specMixin({accessModes+: [accessModes]}), - // AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - awsElasticBlockStore:: { - local __awsElasticBlockStoreMixin(awsElasticBlockStore) = __specMixin({awsElasticBlockStore+: awsElasticBlockStore}), - mixinInstance(awsElasticBlockStore):: __awsElasticBlockStoreMixin(awsElasticBlockStore), - // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - withFsType(fsType):: self + __awsElasticBlockStoreMixin({fsType: fsType}), - // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). - withPartition(partition):: self + __awsElasticBlockStoreMixin({partition: partition}), - // Specify "true" to force and set the ReadOnly property in VolumeMounts to "true". If omitted, the default is "false". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - withReadOnly(readOnly):: self + __awsElasticBlockStoreMixin({readOnly: readOnly}), - // Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - withVolumeId(volumeId):: self + __awsElasticBlockStoreMixin({volumeID: volumeId}), - }, - awsElasticBlockStoreType:: hidden.core.v1.awsElasticBlockStoreVolumeSource, - // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. - azureDisk:: { - local __azureDiskMixin(azureDisk) = __specMixin({azureDisk+: azureDisk}), - mixinInstance(azureDisk):: __azureDiskMixin(azureDisk), - // Host Caching mode: None, Read Only, Read Write. - withCachingMode(cachingMode):: self + __azureDiskMixin({cachingMode: cachingMode}), - // The Name of the data disk in the blob storage - withDiskName(diskName):: self + __azureDiskMixin({diskName: diskName}), - // The URI the data disk in the blob storage - withDiskUri(diskUri):: self + __azureDiskMixin({diskURI: diskUri}), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __azureDiskMixin({fsType: fsType}), - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __azureDiskMixin({readOnly: readOnly}), - }, - azureDiskType:: hidden.core.v1.azureDiskVolumeSource, - // AzureFile represents an Azure File Service mount on the host and bind mount to the pod. - azureFile:: { - local __azureFileMixin(azureFile) = __specMixin({azureFile+: azureFile}), - mixinInstance(azureFile):: __azureFileMixin(azureFile), - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __azureFileMixin({readOnly: readOnly}), - // the name of secret that contains Azure Storage Account Name and Key - withSecretName(secretName):: self + __azureFileMixin({secretName: secretName}), - // Share Name - withShareName(shareName):: self + __azureFileMixin({shareName: shareName}), - }, - azureFileType:: hidden.core.v1.azureFileVolumeSource, - // A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity - withCapacity(capacity):: self + __specMixin({capacity: capacity}), - // A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity - withCapacityMixin(capacity):: self + __specMixin({capacity+: capacity}), - // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime - cephfs:: { - local __cephfsMixin(cephfs) = __specMixin({cephfs+: cephfs}), - mixinInstance(cephfs):: __cephfsMixin(cephfs), - // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withMonitors(monitors):: self + if std.type(monitors) == "array" then __cephfsMixin({monitors: monitors}) else __cephfsMixin({monitors: [monitors]}), - // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withMonitorsMixin(monitors):: self + if std.type(monitors) == "array" then __cephfsMixin({monitors+: monitors}) else __cephfsMixin({monitors+: [monitors]}), - // Optional: Used as the mounted root, rather than the full Ceph tree, default is / - withPath(path):: self + __cephfsMixin({path: path}), - // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withReadOnly(readOnly):: self + __cephfsMixin({readOnly: readOnly}), - // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withSecretFile(secretFile):: self + __cephfsMixin({secretFile: secretFile}), - // Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - secretRef:: { - local __secretRefMixin(secretRef) = __cephfsMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - // Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withUser(user):: self + __cephfsMixin({user: user}), - }, - cephfsType:: hidden.core.v1.cephFsVolumeSource, - // Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md - cinder:: { - local __cinderMixin(cinder) = __specMixin({cinder+: cinder}), - mixinInstance(cinder):: __cinderMixin(cinder), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md - withFsType(fsType):: self + __cinderMixin({fsType: fsType}), - // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md - withReadOnly(readOnly):: self + __cinderMixin({readOnly: readOnly}), - // volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md - withVolumeId(volumeId):: self + __cinderMixin({volumeID: volumeId}), - }, - cinderType:: hidden.core.v1.cinderVolumeSource, - // ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding - claimRef:: { - local __claimRefMixin(claimRef) = __specMixin({claimRef+: claimRef}), - mixinInstance(claimRef):: __claimRefMixin(claimRef), - // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. - withFieldPath(fieldPath):: self + __claimRefMixin({fieldPath: fieldPath}), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __claimRefMixin({name: name}), - // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ - withNamespace(namespace):: self + __claimRefMixin({namespace: namespace}), - // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency - withResourceVersion(resourceVersion):: self + __claimRefMixin({resourceVersion: resourceVersion}), - // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids - withUid(uid):: self + __claimRefMixin({uid: uid}), - }, - claimRefType:: hidden.core.v1.objectReference, - // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod. - fc:: { - local __fcMixin(fc) = __specMixin({fc+: fc}), - mixinInstance(fc):: __fcMixin(fc), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __fcMixin({fsType: fsType}), - // Required: FC target lun number - withLun(lun):: self + __fcMixin({lun: lun}), - // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __fcMixin({readOnly: readOnly}), - // Required: FC target worldwide names (WWNs) - withTargetWwns(targetWwns):: self + if std.type(targetWwns) == "array" then __fcMixin({targetWWNs: targetWwns}) else __fcMixin({targetWWNs: [targetWwns]}), - // Required: FC target worldwide names (WWNs) - withTargetWwnsMixin(targetWwns):: self + if std.type(targetWwns) == "array" then __fcMixin({targetWWNs+: targetWwns}) else __fcMixin({targetWWNs+: [targetWwns]}), - }, - fcType:: hidden.core.v1.fcVolumeSource, - // FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future. - flexVolume:: { - local __flexVolumeMixin(flexVolume) = __specMixin({flexVolume+: flexVolume}), - mixinInstance(flexVolume):: __flexVolumeMixin(flexVolume), - // Driver is the name of the driver to use for this volume. - withDriver(driver):: self + __flexVolumeMixin({driver: driver}), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script. - withFsType(fsType):: self + __flexVolumeMixin({fsType: fsType}), - // Optional: Extra command options if any. - withOptions(options):: self + __flexVolumeMixin({options: options}), - // Optional: Extra command options if any. - withOptionsMixin(options):: self + __flexVolumeMixin({options+: options}), - // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __flexVolumeMixin({readOnly: readOnly}), - // Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts. - secretRef:: { - local __secretRefMixin(secretRef) = __flexVolumeMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - }, - flexVolumeType:: hidden.core.v1.flexVolumeSource, - // Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running - flocker:: { - local __flockerMixin(flocker) = __specMixin({flocker+: flocker}), - mixinInstance(flocker):: __flockerMixin(flocker), - // Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated - withDatasetName(datasetName):: self + __flockerMixin({datasetName: datasetName}), - // UUID of the dataset. This is unique identifier of a Flocker dataset - withDatasetUuid(datasetUuid):: self + __flockerMixin({datasetUUID: datasetUuid}), - }, - flockerType:: hidden.core.v1.flockerVolumeSource, - // GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - gcePersistentDisk:: { - local __gcePersistentDiskMixin(gcePersistentDisk) = __specMixin({gcePersistentDisk+: gcePersistentDisk}), - mixinInstance(gcePersistentDisk):: __gcePersistentDiskMixin(gcePersistentDisk), - // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - withFsType(fsType):: self + __gcePersistentDiskMixin({fsType: fsType}), - // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - withPartition(partition):: self + __gcePersistentDiskMixin({partition: partition}), - // Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - withPdName(pdName):: self + __gcePersistentDiskMixin({pdName: pdName}), - // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - withReadOnly(readOnly):: self + __gcePersistentDiskMixin({readOnly: readOnly}), - }, - gcePersistentDiskType:: hidden.core.v1.gcePersistentDiskVolumeSource, - // Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md - glusterfs:: { - local __glusterfsMixin(glusterfs) = __specMixin({glusterfs+: glusterfs}), - mixinInstance(glusterfs):: __glusterfsMixin(glusterfs), - // EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod - withEndpoints(endpoints):: self + __glusterfsMixin({endpoints: endpoints}), - // Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod - withPath(path):: self + __glusterfsMixin({path: path}), - // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod - withReadOnly(readOnly):: self + __glusterfsMixin({readOnly: readOnly}), - }, - glusterfsType:: hidden.core.v1.glusterfsVolumeSource, - // HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath - hostPath:: { - local __hostPathMixin(hostPath) = __specMixin({hostPath+: hostPath}), - mixinInstance(hostPath):: __hostPathMixin(hostPath), - // Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath - withPath(path):: self + __hostPathMixin({path: path}), - }, - hostPathType:: hidden.core.v1.hostPathVolumeSource, - // ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. - iscsi:: { - local __iscsiMixin(iscsi) = __specMixin({iscsi+: iscsi}), - mixinInstance(iscsi):: __iscsiMixin(iscsi), - // whether support iSCSI Discovery CHAP authentication - withChapAuthDiscovery(chapAuthDiscovery):: self + __iscsiMixin({chapAuthDiscovery: chapAuthDiscovery}), - // whether support iSCSI Session CHAP authentication - withChapAuthSession(chapAuthSession):: self + __iscsiMixin({chapAuthSession: chapAuthSession}), - // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi - withFsType(fsType):: self + __iscsiMixin({fsType: fsType}), - // Target iSCSI Qualified Name. - withIqn(iqn):: self + __iscsiMixin({iqn: iqn}), - // Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport. - withIscsiInterface(iscsiInterface):: self + __iscsiMixin({iscsiInterface: iscsiInterface}), - // iSCSI target lun number. - withLun(lun):: self + __iscsiMixin({lun: lun}), - // iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260). - withPortals(portals):: self + if std.type(portals) == "array" then __iscsiMixin({portals: portals}) else __iscsiMixin({portals: [portals]}), - // iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260). - withPortalsMixin(portals):: self + if std.type(portals) == "array" then __iscsiMixin({portals+: portals}) else __iscsiMixin({portals+: [portals]}), - // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. - withReadOnly(readOnly):: self + __iscsiMixin({readOnly: readOnly}), - // CHAP secret for iSCSI target and initiator authentication - secretRef:: { - local __secretRefMixin(secretRef) = __iscsiMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - // iSCSI target portal. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260). - withTargetPortal(targetPortal):: self + __iscsiMixin({targetPortal: targetPortal}), - }, - iscsiType:: hidden.core.v1.iscsiVolumeSource, - // Local represents directly-attached storage with node affinity - localStorage:: { - local __localStorageMixin(localStorage) = __specMixin({"local"+: localStorage}), - mixinInstance(localStorage):: __localStorageMixin(localStorage), - // The full path to the volume on the node For alpha, this path must be a directory Once block as a source is supported, then this path can point to a block device - withPath(path):: self + __localStorageMixin({path: path}), - }, - localStorageType:: hidden.core.v1.localVolumeSource, - // NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - nfs:: { - local __nfsMixin(nfs) = __specMixin({nfs+: nfs}), - mixinInstance(nfs):: __nfsMixin(nfs), - // Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - withPath(path):: self + __nfsMixin({path: path}), - // ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - withReadOnly(readOnly):: self + __nfsMixin({readOnly: readOnly}), - // Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - withServer(server):: self + __nfsMixin({server: server}), - }, - nfsType:: hidden.core.v1.nfsVolumeSource, - // What happens to a persistent volume when released from its claim. Valid options are Retain (default) and Recycle. Recycling must be supported by the volume plugin underlying this persistent volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming - withPersistentVolumeReclaimPolicy(persistentVolumeReclaimPolicy):: self + __specMixin({persistentVolumeReclaimPolicy: persistentVolumeReclaimPolicy}), - // PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine - photonPersistentDisk:: { - local __photonPersistentDiskMixin(photonPersistentDisk) = __specMixin({photonPersistentDisk+: photonPersistentDisk}), - mixinInstance(photonPersistentDisk):: __photonPersistentDiskMixin(photonPersistentDisk), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __photonPersistentDiskMixin({fsType: fsType}), - // ID that identifies Photon Controller persistent disk - withPdId(pdId):: self + __photonPersistentDiskMixin({pdID: pdId}), - }, - photonPersistentDiskType:: hidden.core.v1.photonPersistentDiskVolumeSource, - // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine - portworxVolume:: { - local __portworxVolumeMixin(portworxVolume) = __specMixin({portworxVolume+: portworxVolume}), - mixinInstance(portworxVolume):: __portworxVolumeMixin(portworxVolume), - // FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __portworxVolumeMixin({fsType: fsType}), - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __portworxVolumeMixin({readOnly: readOnly}), - // VolumeID uniquely identifies a Portworx volume - withVolumeId(volumeId):: self + __portworxVolumeMixin({volumeID: volumeId}), - }, - portworxVolumeType:: hidden.core.v1.portworxVolumeSource, - // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime - quobyte:: { - local __quobyteMixin(quobyte) = __specMixin({quobyte+: quobyte}), - mixinInstance(quobyte):: __quobyteMixin(quobyte), - // Group to map volume access to Default is no group - withGroup(group):: self + __quobyteMixin({group: group}), - // ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false. - withReadOnly(readOnly):: self + __quobyteMixin({readOnly: readOnly}), - // Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes - withRegistry(registry):: self + __quobyteMixin({registry: registry}), - // User to map volume access to Defaults to serivceaccount user - withUser(user):: self + __quobyteMixin({user: user}), - // Volume is a string that references an already created Quobyte volume by name. - withVolume(volume):: self + __quobyteMixin({volume: volume}), - }, - quobyteType:: hidden.core.v1.quobyteVolumeSource, - // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md - rbd:: { - local __rbdMixin(rbd) = __specMixin({rbd+: rbd}), - mixinInstance(rbd):: __rbdMixin(rbd), - // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd - withFsType(fsType):: self + __rbdMixin({fsType: fsType}), - // The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withImage(image):: self + __rbdMixin({image: image}), - // Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withKeyring(keyring):: self + __rbdMixin({keyring: keyring}), - // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withMonitors(monitors):: self + if std.type(monitors) == "array" then __rbdMixin({monitors: monitors}) else __rbdMixin({monitors: [monitors]}), - // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withMonitorsMixin(monitors):: self + if std.type(monitors) == "array" then __rbdMixin({monitors+: monitors}) else __rbdMixin({monitors+: [monitors]}), - // The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withPool(pool):: self + __rbdMixin({pool: pool}), - // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withReadOnly(readOnly):: self + __rbdMixin({readOnly: readOnly}), - // SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - secretRef:: { - local __secretRefMixin(secretRef) = __rbdMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - // The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withUser(user):: self + __rbdMixin({user: user}), - }, - rbdType:: hidden.core.v1.rbdVolumeSource, - // ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes. - scaleIo:: { - local __scaleIoMixin(scaleIo) = __specMixin({scaleIO+: scaleIo}), - mixinInstance(scaleIo):: __scaleIoMixin(scaleIo), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __scaleIoMixin({fsType: fsType}), - // The host address of the ScaleIO API Gateway. - withGateway(gateway):: self + __scaleIoMixin({gateway: gateway}), - // The name of the Protection Domain for the configured storage (defaults to "default"). - withProtectionDomain(protectionDomain):: self + __scaleIoMixin({protectionDomain: protectionDomain}), - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __scaleIoMixin({readOnly: readOnly}), - // SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail. - secretRef:: { - local __secretRefMixin(secretRef) = __scaleIoMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - // Flag to enable/disable SSL communication with Gateway, default false - withSslEnabled(sslEnabled):: self + __scaleIoMixin({sslEnabled: sslEnabled}), - // Indicates whether the storage for a volume should be thick or thin (defaults to "thin"). - withStorageMode(storageMode):: self + __scaleIoMixin({storageMode: storageMode}), - // The Storage Pool associated with the protection domain (defaults to "default"). - withStoragePool(storagePool):: self + __scaleIoMixin({storagePool: storagePool}), - // The name of the storage system as configured in ScaleIO. - withSystem(system):: self + __scaleIoMixin({system: system}), - // The name of a volume already created in the ScaleIO system that is associated with this volume source. - withVolumeName(volumeName):: self + __scaleIoMixin({volumeName: volumeName}), - }, - scaleIoType:: hidden.core.v1.scaleIoVolumeSource, - // Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass. - withStorageClassName(storageClassName):: self + __specMixin({storageClassName: storageClassName}), - // StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md - storageos:: { - local __storageosMixin(storageos) = __specMixin({storageos+: storageos}), - mixinInstance(storageos):: __storageosMixin(storageos), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __storageosMixin({fsType: fsType}), - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __storageosMixin({readOnly: readOnly}), - // SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted. - secretRef:: { - local __secretRefMixin(secretRef) = __storageosMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. - withFieldPath(fieldPath):: self + __secretRefMixin({fieldPath: fieldPath}), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ - withNamespace(namespace):: self + __secretRefMixin({namespace: namespace}), - // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency - withResourceVersion(resourceVersion):: self + __secretRefMixin({resourceVersion: resourceVersion}), - // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids - withUid(uid):: self + __secretRefMixin({uid: uid}), - }, - secretRefType:: hidden.core.v1.objectReference, - // VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace. - withVolumeName(volumeName):: self + __storageosMixin({volumeName: volumeName}), - // VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to "default" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created. - withVolumeNamespace(volumeNamespace):: self + __storageosMixin({volumeNamespace: volumeNamespace}), - }, - storageosType:: hidden.core.v1.storageOSPersistentVolumeSource, - // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine - vsphereVolume:: { - local __vsphereVolumeMixin(vsphereVolume) = __specMixin({vsphereVolume+: vsphereVolume}), - mixinInstance(vsphereVolume):: __vsphereVolumeMixin(vsphereVolume), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __vsphereVolumeMixin({fsType: fsType}), - // Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName. - withStoragePolicyID(storagePolicyID):: self + __vsphereVolumeMixin({storagePolicyID: storagePolicyID}), - // Storage Policy Based Management (SPBM) profile name. - withStoragePolicyName(storagePolicyName):: self + __vsphereVolumeMixin({storagePolicyName: storagePolicyName}), - // Path that identifies vSphere volume vmdk - withVolumePath(volumePath):: self + __vsphereVolumeMixin({volumePath: volumePath}), - }, - vsphereVolumeType:: hidden.core.v1.vsphereVirtualDiskVolumeSource, - }, - specType:: hidden.core.v1.persistentVolumeSpec, - }, - }, - // PersistentVolumeClaim is a user's request for and claim to a persistent volume - persistentVolumeClaim:: { - local kind = {kind: "PersistentVolumeClaim"}, - new():: apiVersion + kind, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1 - withAccessModes(accessModes):: self + if std.type(accessModes) == "array" then __specMixin({accessModes: accessModes}) else __specMixin({accessModes: [accessModes]}), - // AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1 - withAccessModesMixin(accessModes):: self + if std.type(accessModes) == "array" then __specMixin({accessModes+: accessModes}) else __specMixin({accessModes+: [accessModes]}), - // Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources - resources:: { - local __resourcesMixin(resources) = __specMixin({resources+: resources}), - mixinInstance(resources):: __resourcesMixin(resources), - // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - withLimits(limits):: self + __resourcesMixin({limits: limits}), - // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - withLimitsMixin(limits):: self + __resourcesMixin({limits+: limits}), - // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - withRequests(requests):: self + __resourcesMixin({requests: requests}), - // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - withRequestsMixin(requests):: self + __resourcesMixin({requests+: requests}), - }, - resourcesType:: hidden.core.v1.resourceRequirements, - // A label query over volumes to consider for binding. - selector:: { - local __selectorMixin(selector) = __specMixin({selector+: selector}), - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - // Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1 - withStorageClassName(storageClassName):: self + __specMixin({storageClassName: storageClassName}), - // VolumeName is the binding reference to the PersistentVolume backing this claim. - withVolumeName(volumeName):: self + __specMixin({volumeName: volumeName}), - }, - specType:: hidden.core.v1.persistentVolumeClaimSpec, - }, - }, - // PersistentVolumeClaimList is a list of PersistentVolumeClaim items. - persistentVolumeClaimList:: { - local kind = {kind: "PersistentVolumeClaimList"}, - new(items):: apiVersion + kind + self.withItems(items), - // A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.persistentVolumeClaim, - mixin:: { - }, - }, - // PersistentVolumeList is a list of PersistentVolume items. - persistentVolumeList:: { - local kind = {kind: "PersistentVolumeList"}, - new(items):: apiVersion + kind + self.withItems(items), - // List of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // List of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.persistentVolume, - mixin:: { - }, - }, - // Pod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts. - pod:: { - local kind = {kind: "Pod"}, - new():: apiVersion + kind, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - }, - // PodList is a list of Pods. - podList:: { - local kind = {kind: "PodList"}, - new(items):: apiVersion + kind + self.withItems(items), - // List of pods. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // List of pods. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.pod, - mixin:: { - }, - }, - // PodTemplate describes a template for creating copies of a predefined pod. - podTemplate:: { - local kind = {kind: "PodTemplate"}, - new():: apiVersion + kind, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Template defines the pods that will be created from this pod template. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - template:: { - local __templateMixin(template) = {template+: template}, - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - }, - }, - // PodTemplateList is a list of PodTemplates. - podTemplateList:: { - local kind = {kind: "PodTemplateList"}, - new(items):: apiVersion + kind + self.withItems(items), - // List of pod templates - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // List of pod templates - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.podTemplate, - mixin:: { - }, - }, - // ReplicationController represents the configuration of a replication controller. - replicationController:: { - local kind = {kind: "ReplicationController"}, - new():: apiVersion + kind, - mixin:: { - // If the Labels of a ReplicationController are empty, they are defaulted to be the same as the Pod(s) that the replication controller manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec defines the specification of the desired behavior of the replication controller. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready) - withMinReadySeconds(minReadySeconds):: self + __specMixin({minReadySeconds: minReadySeconds}), - // Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller - withReplicas(replicas):: self + __specMixin({replicas: replicas}), - // Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors - withSelector(selector):: self + __specMixin({selector: selector}), - // Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors - withSelectorMixin(selector):: self + __specMixin({selector+: selector}), - // Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template - template:: { - local __templateMixin(template) = __specMixin({template+: template}), - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - }, - specType:: hidden.core.v1.replicationControllerSpec, - }, - }, - // ReplicationControllerList is a collection of replication controllers. - replicationControllerList:: { - local kind = {kind: "ReplicationControllerList"}, - new(items):: apiVersion + kind + self.withItems(items), - // List of replication controllers. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // List of replication controllers. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.replicationController, - mixin:: { - }, - }, - // ResourceQuota sets aggregate quota restrictions enforced per namespace - resourceQuota:: { - local kind = {kind: "ResourceQuota"}, - new():: apiVersion + kind, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec defines the desired quota. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Hard is the set of desired hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md - withHard(hard):: self + __specMixin({hard: hard}), - // Hard is the set of desired hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md - withHardMixin(hard):: self + __specMixin({hard+: hard}), - // A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects. - withScopes(scopes):: self + if std.type(scopes) == "array" then __specMixin({scopes: scopes}) else __specMixin({scopes: [scopes]}), - // A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects. - withScopesMixin(scopes):: self + if std.type(scopes) == "array" then __specMixin({scopes+: scopes}) else __specMixin({scopes+: [scopes]}), - }, - specType:: hidden.core.v1.resourceQuotaSpec, - }, - }, - // ResourceQuotaList is a list of ResourceQuota items. - resourceQuotaList:: { - local kind = {kind: "ResourceQuotaList"}, - new(items):: apiVersion + kind + self.withItems(items), - // Items is a list of ResourceQuota objects. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is a list of ResourceQuota objects. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.resourceQuota, - mixin:: { - }, - }, - // Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes. - secret:: { - local kind = {kind: "Secret"}, - new(name, data, type="Opaque"):: apiVersion + kind + self.mixin.metadata.withName(name) + self.withData(data) + self.withType(type), - fromString(name, stringData, type="Opaque"):: apiVersion + kind + self.mixin.metadata.withName(name) + self.withStringData(stringData) + self.withType(type), - // Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4 - withData(data):: self + {data: data}, - // Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4 - withDataMixin(data):: self + {data+: data}, - // stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API. - withStringData(stringData):: self + {stringData: stringData}, - // stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API. - withStringDataMixin(stringData):: self + {stringData+: stringData}, - // Used to facilitate programmatic handling of secret data. - withType(type):: self + {type: type}, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - }, - }, - // SecretList is a list of Secret. - secretList:: { - local kind = {kind: "SecretList"}, - new(items):: apiVersion + kind + self.withItems(items), - // Items is a list of secret objects. More info: https://kubernetes.io/docs/concepts/configuration/secret - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is a list of secret objects. More info: https://kubernetes.io/docs/concepts/configuration/secret - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.secret, - mixin:: { - }, - }, - // Service is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy. - service:: { - local kind = {kind: "Service"}, - new(name, selector, ports):: apiVersion + kind + self.mixin.metadata.withName(name) + self.mixin.spec.withSelector(selector) + self.mixin.spec.withPorts(ports), - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are "None", empty string (""), or a valid IP address. "None" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies - withClusterIp(clusterIp):: self + __specMixin({clusterIP: clusterIp}), - // externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system. - withExternalIps(externalIps):: self + if std.type(externalIps) == "array" then __specMixin({externalIPs: externalIps}) else __specMixin({externalIPs: [externalIps]}), - // externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system. - withExternalIpsMixin(externalIps):: self + if std.type(externalIps) == "array" then __specMixin({externalIPs+: externalIps}) else __specMixin({externalIPs+: [externalIps]}), - // externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid DNS name and requires Type to be ExternalName. - withExternalName(externalName):: self + __specMixin({externalName: externalName}), - // externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. "Local" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. "Cluster" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading. - withExternalTrafficPolicy(externalTrafficPolicy):: self + __specMixin({externalTrafficPolicy: externalTrafficPolicy}), - // healthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local. - withHealthCheckNodePort(healthCheckNodePort):: self + __specMixin({healthCheckNodePort: healthCheckNodePort}), - // Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature. - withLoadBalancerIp(loadBalancerIp):: self + __specMixin({loadBalancerIP: loadBalancerIp}), - // If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/ - withLoadBalancerSourceRanges(loadBalancerSourceRanges):: self + if std.type(loadBalancerSourceRanges) == "array" then __specMixin({loadBalancerSourceRanges: loadBalancerSourceRanges}) else __specMixin({loadBalancerSourceRanges: [loadBalancerSourceRanges]}), - // If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/ - withLoadBalancerSourceRangesMixin(loadBalancerSourceRanges):: self + if std.type(loadBalancerSourceRanges) == "array" then __specMixin({loadBalancerSourceRanges+: loadBalancerSourceRanges}) else __specMixin({loadBalancerSourceRanges+: [loadBalancerSourceRanges]}), - // The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies - withPorts(ports):: self + if std.type(ports) == "array" then __specMixin({ports: ports}) else __specMixin({ports: [ports]}), - // The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies - withPortsMixin(ports):: self + if std.type(ports) == "array" then __specMixin({ports+: ports}) else __specMixin({ports+: [ports]}), - portsType:: hidden.core.v1.servicePort, - // Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/ - withSelector(selector):: self + __specMixin({selector: selector}), - // Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/ - withSelectorMixin(selector):: self + __specMixin({selector+: selector}), - // Supports "ClientIP" and "None". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies - withSessionAffinity(sessionAffinity):: self + __specMixin({sessionAffinity: sessionAffinity}), - // type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. "ExternalName" maps to the specified externalName. "ClusterIP" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is "None", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. "NodePort" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. "LoadBalancer" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types - withType(type):: self + __specMixin({type: type}), - }, - specType:: hidden.core.v1.serviceSpec, - }, - }, - // ServiceAccount binds together: * a name, understood by users, and perhaps by peripheral systems, for an identity * a principal that can be authenticated and authorized * a set of secrets - serviceAccount:: { - local kind = {kind: "ServiceAccount"}, - new(name):: apiVersion + kind + self.mixin.metadata.withName(name), - // AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted. Can be overridden at the pod level. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + {automountServiceAccountToken: automountServiceAccountToken}, - // ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then {imagePullSecrets: imagePullSecrets} else {imagePullSecrets: [imagePullSecrets]}, - // ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then {imagePullSecrets+: imagePullSecrets} else {imagePullSecrets+: [imagePullSecrets]}, - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret - withSecrets(secrets):: self + if std.type(secrets) == "array" then {secrets: secrets} else {secrets: [secrets]}, - // Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret - withSecretsMixin(secrets):: self + if std.type(secrets) == "array" then {secrets+: secrets} else {secrets+: [secrets]}, - secretsType:: hidden.core.v1.objectReference, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - }, - }, - // ServiceAccountList is a list of ServiceAccount objects - serviceAccountList:: { - local kind = {kind: "ServiceAccountList"}, - new(items):: apiVersion + kind + self.withItems(items), - // List of ServiceAccounts. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // List of ServiceAccounts. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.serviceAccount, - mixin:: { - }, - }, - // ServiceList holds a list of services. - serviceList:: { - local kind = {kind: "ServiceList"}, - new(items):: apiVersion + kind + self.withItems(items), - // List of services - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // List of services - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.service, - mixin:: { - }, - }, - }, - }, - extensions:: { - v1beta1:: { - local apiVersion = {apiVersion: "extensions/v1beta1"}, - // DaemonSet represents the configuration of a daemon set. - daemonSet:: { - local kind = {kind: "DaemonSet"}, - new():: apiVersion + kind, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready). - withMinReadySeconds(minReadySeconds):: self + __specMixin({minReadySeconds: minReadySeconds}), - // The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10. - withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({revisionHistoryLimit: revisionHistoryLimit}), - // A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors - selector:: { - local __selectorMixin(selector) = __specMixin({selector+: selector}), - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - // An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template - template:: { - local __templateMixin(template) = __specMixin({template+: template}), - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - // An update strategy to replace existing DaemonSet pods with new pods. - updateStrategy:: { - local __updateStrategyMixin(updateStrategy) = __specMixin({updateStrategy+: updateStrategy}), - mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy), - // Rolling update config params. Present only if type = "RollingUpdate". - rollingUpdate:: { - local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({rollingUpdate+: rollingUpdate}), - mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate), - // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update. - withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}), - }, - rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDaemonSet, - // Type of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is OnDelete. - withType(type):: self + __updateStrategyMixin({type: type}), - }, - updateStrategyType:: hidden.extensions.v1beta1.daemonSetUpdateStrategy, - }, - specType:: hidden.extensions.v1beta1.daemonSetSpec, - }, - }, - // DaemonSetList is a collection of daemon sets. - daemonSetList:: { - local kind = {kind: "DaemonSetList"}, - new():: apiVersion + kind, - // A list of daemon sets. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // A list of daemon sets. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.extensions.v1beta1.daemonSet, - mixin:: { - }, - }, - // Deployment enables declarative updates for Pods and ReplicaSets. - deployment:: { - local kind = {kind: "Deployment"}, - new(name, replicas, containers, podLabels={app: name}):: apiVersion + kind + self.mixin.metadata.withName(name) + self.mixin.spec.withReplicas(replicas) + self.mixin.spec.template.spec.withContainers(containers) + self.mixin.spec.template.metadata.withLabels(podLabels), - mixin:: { - // Standard object metadata. - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the Deployment. - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready) - withMinReadySeconds(minReadySeconds):: self + __specMixin({minReadySeconds: minReadySeconds}), - // Indicates that the deployment is paused and will not be processed by the deployment controller. - withPaused(paused):: self + __specMixin({paused: paused}), - // The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Once autoRollback is implemented, the deployment controller will automatically rollback failed deployments. Note that progress will not be estimated during the time a deployment is paused. This is not set by default. - withProgressDeadlineSeconds(progressDeadlineSeconds):: self + __specMixin({progressDeadlineSeconds: progressDeadlineSeconds}), - // Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1. - withReplicas(replicas):: self + __specMixin({replicas: replicas}), - // The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. - withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({revisionHistoryLimit: revisionHistoryLimit}), - // The config this deployment is rolling back to. Will be cleared after rollback is done. - rollbackTo:: { - local __rollbackToMixin(rollbackTo) = __specMixin({rollbackTo+: rollbackTo}), - mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo), - // The revision to rollback to. If set to 0, rollback to the last revision. - withRevision(revision):: self + __rollbackToMixin({revision: revision}), - }, - rollbackToType:: hidden.extensions.v1beta1.rollbackConfig, - // Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. - selector:: { - local __selectorMixin(selector) = __specMixin({selector+: selector}), - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - // The deployment strategy to use to replace existing pods with new ones. - strategy:: { - local __strategyMixin(strategy) = __specMixin({strategy+: strategy}), - mixinInstance(strategy):: __strategyMixin(strategy), - // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate. - rollingUpdate:: { - local __rollingUpdateMixin(rollingUpdate) = __strategyMixin({rollingUpdate+: rollingUpdate}), - mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate), - // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods. - withMaxSurge(maxSurge):: __rollingUpdateMixin({maxSurge: maxSurge}), - // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods. - withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}), - }, - rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDeployment, - // Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate. - withType(type):: self + __strategyMixin({type: type}), - }, - strategyType:: hidden.extensions.v1beta1.deploymentStrategy, - // Template describes the pods that will be created. - template:: { - local __templateMixin(template) = __specMixin({template+: template}), - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - }, - specType:: hidden.extensions.v1beta1.deploymentSpec, - }, - }, - // DeploymentList is a list of Deployments. - deploymentList:: { - local kind = {kind: "DeploymentList"}, - new(items):: apiVersion + kind + self.withItems(items), - // Items is the list of Deployments. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is the list of Deployments. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.extensions.v1beta1.deployment, - mixin:: { - }, - }, - // DeploymentRollback stores the information required to rollback a deployment. - deploymentRollback:: { - local kind = {kind: "DeploymentRollback"}, - new(name):: apiVersion + kind + self.withName(name), - // Required: This must match the Name of a deployment. - withName(name):: self + {name: name}, - // The annotations to be updated to a deployment - withUpdatedAnnotations(updatedAnnotations):: self + {updatedAnnotations: updatedAnnotations}, - // The annotations to be updated to a deployment - withUpdatedAnnotationsMixin(updatedAnnotations):: self + {updatedAnnotations+: updatedAnnotations}, - mixin:: { - // The config of this deployment rollback. - rollbackTo:: { - local __rollbackToMixin(rollbackTo) = {rollbackTo+: rollbackTo}, - mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo), - // The revision to rollback to. If set to 0, rollback to the last revision. - withRevision(revision):: self + __rollbackToMixin({revision: revision}), - }, - rollbackToType:: hidden.extensions.v1beta1.rollbackConfig, - }, - }, - // Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc. - ingress:: { - local kind = {kind: "Ingress"}, - new():: apiVersion + kind, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default. - backend:: { - local __backendMixin(backend) = __specMixin({backend+: backend}), - mixinInstance(backend):: __backendMixin(backend), - // Specifies the name of the referenced service. - withServiceName(serviceName):: self + __backendMixin({serviceName: serviceName}), - // Specifies the port of the referenced service. - withServicePort(servicePort):: __backendMixin({servicePort: servicePort}), - }, - backendType:: hidden.extensions.v1beta1.ingressBackend, - // A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend. - withRules(rules):: self + if std.type(rules) == "array" then __specMixin({rules: rules}) else __specMixin({rules: [rules]}), - // A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend. - withRulesMixin(rules):: self + if std.type(rules) == "array" then __specMixin({rules+: rules}) else __specMixin({rules+: [rules]}), - rulesType:: hidden.extensions.v1beta1.ingressRule, - // TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI. - withTls(tls):: self + if std.type(tls) == "array" then __specMixin({tls: tls}) else __specMixin({tls: [tls]}), - // TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI. - withTlsMixin(tls):: self + if std.type(tls) == "array" then __specMixin({tls+: tls}) else __specMixin({tls+: [tls]}), - tlsType:: hidden.extensions.v1beta1.ingressTls, - }, - specType:: hidden.extensions.v1beta1.ingressSpec, - }, - }, - // IngressList is a collection of Ingress. - ingressList:: { - local kind = {kind: "IngressList"}, - new():: apiVersion + kind, - // Items is the list of Ingress. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is the list of Ingress. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.extensions.v1beta1.ingress, - mixin:: { - }, - }, - // NetworkPolicy describes what network traffic is allowed for a set of Pods - networkPolicy:: { - local kind = {kind: "NetworkPolicy"}, - new():: apiVersion + kind, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior for this NetworkPolicy. - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default). - withIngress(ingress):: self + if std.type(ingress) == "array" then __specMixin({ingress: ingress}) else __specMixin({ingress: [ingress]}), - // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default). - withIngressMixin(ingress):: self + if std.type(ingress) == "array" then __specMixin({ingress+: ingress}) else __specMixin({ingress+: [ingress]}), - ingressType:: hidden.extensions.v1beta1.networkPolicyIngressRule, - // Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace. - podSelector:: { - local __podSelectorMixin(podSelector) = __specMixin({podSelector+: podSelector}), - mixinInstance(podSelector):: __podSelectorMixin(podSelector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __podSelectorMixin({matchExpressions: matchExpressions}) else __podSelectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __podSelectorMixin({matchExpressions+: matchExpressions}) else __podSelectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __podSelectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({matchLabels+: matchLabels}), - }, - podSelectorType:: hidden.meta.v1.labelSelector, - }, - specType:: hidden.extensions.v1beta1.networkPolicySpec, - }, - }, - // Network Policy List is a list of NetworkPolicy objects. - networkPolicyList:: { - local kind = {kind: "NetworkPolicyList"}, - new():: apiVersion + kind, - // Items is a list of schema objects. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is a list of schema objects. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.extensions.v1beta1.networkPolicy, - mixin:: { - }, - }, - // Pod Security Policy governs the ability to make requests that affect the Security Context that will be applied to a pod and container. - podSecurityPolicy:: { - local kind = {kind: "PodSecurityPolicy"}, - new():: apiVersion + kind, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // spec defines the policy enforced. - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // AllowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both AllowedCapabilities and RequiredDropCapabilities. - withAllowedCapabilities(allowedCapabilities):: self + if std.type(allowedCapabilities) == "array" then __specMixin({allowedCapabilities: allowedCapabilities}) else __specMixin({allowedCapabilities: [allowedCapabilities]}), - // AllowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both AllowedCapabilities and RequiredDropCapabilities. - withAllowedCapabilitiesMixin(allowedCapabilities):: self + if std.type(allowedCapabilities) == "array" then __specMixin({allowedCapabilities+: allowedCapabilities}) else __specMixin({allowedCapabilities+: [allowedCapabilities]}), - // DefaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capabiility in both DefaultAddCapabilities and RequiredDropCapabilities. - withDefaultAddCapabilities(defaultAddCapabilities):: self + if std.type(defaultAddCapabilities) == "array" then __specMixin({defaultAddCapabilities: defaultAddCapabilities}) else __specMixin({defaultAddCapabilities: [defaultAddCapabilities]}), - // DefaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capabiility in both DefaultAddCapabilities and RequiredDropCapabilities. - withDefaultAddCapabilitiesMixin(defaultAddCapabilities):: self + if std.type(defaultAddCapabilities) == "array" then __specMixin({defaultAddCapabilities+: defaultAddCapabilities}) else __specMixin({defaultAddCapabilities+: [defaultAddCapabilities]}), - // FSGroup is the strategy that will dictate what fs group is used by the SecurityContext. - fsGroup:: { - local __fsGroupMixin(fsGroup) = __specMixin({fsGroup+: fsGroup}), - mixinInstance(fsGroup):: __fsGroupMixin(fsGroup), - // Ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. - withRanges(ranges):: self + if std.type(ranges) == "array" then __fsGroupMixin({ranges: ranges}) else __fsGroupMixin({ranges: [ranges]}), - // Ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. - withRangesMixin(ranges):: self + if std.type(ranges) == "array" then __fsGroupMixin({ranges+: ranges}) else __fsGroupMixin({ranges+: [ranges]}), - rangesType:: hidden.extensions.v1beta1.idRange, - // Rule is the strategy that will dictate what FSGroup is used in the SecurityContext. - withRule(rule):: self + __fsGroupMixin({rule: rule}), - }, - fsGroupType:: hidden.extensions.v1beta1.fsGroupStrategyOptions, - // hostIPC determines if the policy allows the use of HostIPC in the pod spec. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // hostNetwork determines if the policy allows the use of HostNetwork in the pod spec. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // hostPID determines if the policy allows the use of HostPID in the pod spec. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // hostPorts determines which host port ranges are allowed to be exposed. - withHostPorts(hostPorts):: self + if std.type(hostPorts) == "array" then __specMixin({hostPorts: hostPorts}) else __specMixin({hostPorts: [hostPorts]}), - // hostPorts determines which host port ranges are allowed to be exposed. - withHostPortsMixin(hostPorts):: self + if std.type(hostPorts) == "array" then __specMixin({hostPorts+: hostPorts}) else __specMixin({hostPorts+: [hostPorts]}), - hostPortsType:: hidden.extensions.v1beta1.hostPortRange, - // privileged determines if a pod can request to be run as privileged. - withPrivileged(privileged):: self + __specMixin({privileged: privileged}), - // ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to. - withReadOnlyRootFilesystem(readOnlyRootFilesystem):: self + __specMixin({readOnlyRootFilesystem: readOnlyRootFilesystem}), - // RequiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added. - withRequiredDropCapabilities(requiredDropCapabilities):: self + if std.type(requiredDropCapabilities) == "array" then __specMixin({requiredDropCapabilities: requiredDropCapabilities}) else __specMixin({requiredDropCapabilities: [requiredDropCapabilities]}), - // RequiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added. - withRequiredDropCapabilitiesMixin(requiredDropCapabilities):: self + if std.type(requiredDropCapabilities) == "array" then __specMixin({requiredDropCapabilities+: requiredDropCapabilities}) else __specMixin({requiredDropCapabilities+: [requiredDropCapabilities]}), - // runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set. - runAsUser:: { - local __runAsUserMixin(runAsUser) = __specMixin({runAsUser+: runAsUser}), - mixinInstance(runAsUser):: __runAsUserMixin(runAsUser), - // Ranges are the allowed ranges of uids that may be used. - withRanges(ranges):: self + if std.type(ranges) == "array" then __runAsUserMixin({ranges: ranges}) else __runAsUserMixin({ranges: [ranges]}), - // Ranges are the allowed ranges of uids that may be used. - withRangesMixin(ranges):: self + if std.type(ranges) == "array" then __runAsUserMixin({ranges+: ranges}) else __runAsUserMixin({ranges+: [ranges]}), - rangesType:: hidden.extensions.v1beta1.idRange, - // Rule is the strategy that will dictate the allowable RunAsUser values that may be set. - withRule(rule):: self + __runAsUserMixin({rule: rule}), - }, - runAsUserType:: hidden.extensions.v1beta1.runAsUserStrategyOptions, - // seLinux is the strategy that will dictate the allowable labels that may be set. - seLinux:: { - local __seLinuxMixin(seLinux) = __specMixin({seLinux+: seLinux}), - mixinInstance(seLinux):: __seLinuxMixin(seLinux), - // type is the strategy that will dictate the allowable labels that may be set. - withRule(rule):: self + __seLinuxMixin({rule: rule}), - // seLinuxOptions required to run as; required for MustRunAs More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __seLinuxMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - }, - seLinuxType:: hidden.extensions.v1beta1.seLinuxStrategyOptions, - // SupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext. - supplementalGroups:: { - local __supplementalGroupsMixin(supplementalGroups) = __specMixin({supplementalGroups+: supplementalGroups}), - mixinInstance(supplementalGroups):: __supplementalGroupsMixin(supplementalGroups), - // Ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. - withRanges(ranges):: self + if std.type(ranges) == "array" then __supplementalGroupsMixin({ranges: ranges}) else __supplementalGroupsMixin({ranges: [ranges]}), - // Ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. - withRangesMixin(ranges):: self + if std.type(ranges) == "array" then __supplementalGroupsMixin({ranges+: ranges}) else __supplementalGroupsMixin({ranges+: [ranges]}), - rangesType:: hidden.extensions.v1beta1.idRange, - // Rule is the strategy that will dictate what supplemental groups is used in the SecurityContext. - withRule(rule):: self + __supplementalGroupsMixin({rule: rule}), - }, - supplementalGroupsType:: hidden.extensions.v1beta1.supplementalGroupsStrategyOptions, - // volumes is a white list of allowed volume plugins. Empty indicates that all plugins may be used. - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // volumes is a white list of allowed volume plugins. Empty indicates that all plugins may be used. - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - }, - specType:: hidden.extensions.v1beta1.podSecurityPolicySpec, - }, - }, - // Pod Security Policy List is a list of PodSecurityPolicy objects. - podSecurityPolicyList:: { - local kind = {kind: "PodSecurityPolicyList"}, - new():: apiVersion + kind, - // Items is a list of schema objects. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is a list of schema objects. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.extensions.v1beta1.podSecurityPolicy, - mixin:: { - }, - }, - // ReplicaSet represents the configuration of a ReplicaSet. - replicaSet:: { - local kind = {kind: "ReplicaSet"}, - new():: apiVersion + kind, - mixin:: { - // If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready) - withMinReadySeconds(minReadySeconds):: self + __specMixin({minReadySeconds: minReadySeconds}), - // Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller - withReplicas(replicas):: self + __specMixin({replicas: replicas}), - // Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors - selector:: { - local __selectorMixin(selector) = __specMixin({selector+: selector}), - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - // Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template - template:: { - local __templateMixin(template) = __specMixin({template+: template}), - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - }, - specType:: hidden.extensions.v1beta1.replicaSetSpec, - }, - }, - // ReplicaSetList is a collection of ReplicaSets. - replicaSetList:: { - local kind = {kind: "ReplicaSetList"}, - new():: apiVersion + kind, - // List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.extensions.v1beta1.replicaSet, - mixin:: { - }, - }, - // represents a scaling request for a resource. - scale:: { - local kind = {kind: "Scale"}, - new(replicas):: apiVersion + kind + self.mixin.spec.withReplicas(replicas), - mixin:: { - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // desired number of instances for the scaled object. - withReplicas(replicas):: self + __specMixin({replicas: replicas}), - }, - specType:: hidden.extensions.v1beta1.scaleSpec, - }, - }, - // A ThirdPartyResource is a generic representation of a resource, it is used by add-ons and plugins to add new resource types to the API. It consists of one or more Versions of the api. - thirdPartyResource:: { - local kind = {kind: "ThirdPartyResource"}, - new():: apiVersion + kind, - // Description is the description of this object. - withDescription(description):: self + {description: description}, - // Versions are versions for this third party object - withVersions(versions):: self + if std.type(versions) == "array" then {versions: versions} else {versions: [versions]}, - // Versions are versions for this third party object - withVersionsMixin(versions):: self + if std.type(versions) == "array" then {versions+: versions} else {versions+: [versions]}, - versionsType:: hidden.extensions.v1beta1.apiVersion, - mixin:: { - // Standard object metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - }, - }, - // ThirdPartyResourceList is a list of ThirdPartyResources. - thirdPartyResourceList:: { - local kind = {kind: "ThirdPartyResourceList"}, - new():: apiVersion + kind, - // Items is the list of ThirdPartyResources. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is the list of ThirdPartyResources. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.extensions.v1beta1.thirdPartyResource, - mixin:: { - }, - }, - }, - }, - networking:: { - v1:: { - local apiVersion = {apiVersion: "networking.k8s.io/v1"}, - // NetworkPolicy describes what network traffic is allowed for a set of Pods - networkPolicy:: { - local kind = {kind: "NetworkPolicy"}, - new():: apiVersion + kind, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior for this NetworkPolicy. - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default) - withIngress(ingress):: self + if std.type(ingress) == "array" then __specMixin({ingress: ingress}) else __specMixin({ingress: [ingress]}), - // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default) - withIngressMixin(ingress):: self + if std.type(ingress) == "array" then __specMixin({ingress+: ingress}) else __specMixin({ingress+: [ingress]}), - ingressType:: hidden.networking.v1.networkPolicyIngressRule, - // Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace. - podSelector:: { - local __podSelectorMixin(podSelector) = __specMixin({podSelector+: podSelector}), - mixinInstance(podSelector):: __podSelectorMixin(podSelector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __podSelectorMixin({matchExpressions: matchExpressions}) else __podSelectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __podSelectorMixin({matchExpressions+: matchExpressions}) else __podSelectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __podSelectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({matchLabels+: matchLabels}), - }, - podSelectorType:: hidden.meta.v1.labelSelector, - }, - specType:: hidden.networking.v1.networkPolicySpec, - }, - }, - // NetworkPolicyList is a list of NetworkPolicy objects. - networkPolicyList:: { - local kind = {kind: "NetworkPolicyList"}, - new():: apiVersion + kind, - // Items is a list of schema objects. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is a list of schema objects. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.networking.v1.networkPolicy, - mixin:: { - // Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency - withResourceVersion(resourceVersion):: self + __metadataMixin({resourceVersion: resourceVersion}), - // SelfLink is a URL representing this object. Populated by the system. Read-only. - withSelfLink(selfLink):: self + __metadataMixin({selfLink: selfLink}), - }, - metadataType:: hidden.meta.v1.listMeta, - }, - }, - }, - }, - policy:: { - v1beta1:: { - local apiVersion = {apiVersion: "policy/v1beta1"}, - // Eviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod. A request to cause such an eviction is created by POSTing to .../pods//evictions. - eviction:: { - local kind = {kind: "Eviction"}, - new():: apiVersion + kind, - mixin:: { - // DeleteOptions may be provided - deleteOptions:: { - local __deleteOptionsMixin(deleteOptions) = {deleteOptions+: deleteOptions}, - mixinInstance(deleteOptions):: __deleteOptionsMixin(deleteOptions), - // The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately. - withGracePeriodSeconds(gracePeriodSeconds):: self + __deleteOptionsMixin({gracePeriodSeconds: gracePeriodSeconds}), - // Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both. - withOrphanDependents(orphanDependents):: self + __deleteOptionsMixin({orphanDependents: orphanDependents}), - // Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned. - preconditions:: { - local __preconditionsMixin(preconditions) = __deleteOptionsMixin({preconditions+: preconditions}), - mixinInstance(preconditions):: __preconditionsMixin(preconditions), - // Specifies the target UID. - withUid(uid):: self + __preconditionsMixin({uid: uid}), - }, - preconditionsType:: hidden.meta.v1.preconditions, - // Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. - withPropagationPolicy(propagationPolicy):: self + __deleteOptionsMixin({propagationPolicy: propagationPolicy}), - }, - deleteOptionsType:: hidden.meta.v1.deleteOptions, - // ObjectMeta describes the pod that is being evicted. - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - }, - }, - // PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods - podDisruptionBudget:: { - local kind = {kind: "PodDisruptionBudget"}, - new():: apiVersion + kind, - mixin:: { - // - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the PodDisruptionBudget. - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // An eviction is allowed if at most "maxUnavailable" pods selected by "selector" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with "minAvailable". - withMaxUnavailable(maxUnavailable):: __specMixin({maxUnavailable: maxUnavailable}), - // An eviction is allowed if at least "minAvailable" pods selected by "selector" will still be available after the eviction, i.e. even in the absence of the evicted pod. So for example you can prevent all voluntary evictions by specifying "100%". - withMinAvailable(minAvailable):: __specMixin({minAvailable: minAvailable}), - // Label query over pods whose evictions are managed by the disruption budget. - selector:: { - local __selectorMixin(selector) = __specMixin({selector+: selector}), - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - }, - specType:: hidden.policy.v1beta1.podDisruptionBudgetSpec, - }, - }, - // PodDisruptionBudgetList is a collection of PodDisruptionBudgets. - podDisruptionBudgetList:: { - local kind = {kind: "PodDisruptionBudgetList"}, - new():: apiVersion + kind, - // - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.policy.v1beta1.podDisruptionBudget, - mixin:: { - }, - }, - }, - }, - rbac:: { - v1alpha1:: { - local apiVersion = {apiVersion: "rbac.authorization.k8s.io/v1alpha1"}, - // ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding. - clusterRole:: { - local kind = {kind: "ClusterRole"}, - new():: apiVersion + kind, - // Rules holds all the PolicyRules for this ClusterRole - withRules(rules):: self + if std.type(rules) == "array" then {rules: rules} else {rules: [rules]}, - // Rules holds all the PolicyRules for this ClusterRole - withRulesMixin(rules):: self + if std.type(rules) == "array" then {rules+: rules} else {rules+: [rules]}, - rulesType:: hidden.rbac.v1alpha1.policyRule, - mixin:: { - // Standard object's metadata. - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - }, - }, - // ClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject. - clusterRoleBinding:: { - local kind = {kind: "ClusterRoleBinding"}, - new():: apiVersion + kind, - // Subjects holds references to the objects the role applies to. - withSubjects(subjects):: self + if std.type(subjects) == "array" then {subjects: subjects} else {subjects: [subjects]}, - // Subjects holds references to the objects the role applies to. - withSubjectsMixin(subjects):: self + if std.type(subjects) == "array" then {subjects+: subjects} else {subjects+: [subjects]}, - subjectsType:: hidden.rbac.v1alpha1.subject, - mixin:: { - // Standard object's metadata. - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error. - roleRef:: { - local __roleRefMixin(roleRef) = {roleRef+: roleRef}, - mixinInstance(roleRef):: __roleRefMixin(roleRef), - // APIGroup is the group for the resource being referenced - withApiGroup(apiGroup):: self + __roleRefMixin({apiGroup: apiGroup}), - // Name is the name of resource being referenced - withName(name):: self + __roleRefMixin({name: name}), - }, - roleRefType:: hidden.rbac.v1alpha1.roleRef, - }, - }, - // ClusterRoleBindingList is a collection of ClusterRoleBindings - clusterRoleBindingList:: { - local kind = {kind: "ClusterRoleBindingList"}, - new():: apiVersion + kind, - // Items is a list of ClusterRoleBindings - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is a list of ClusterRoleBindings - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.rbac.v1alpha1.clusterRoleBinding, - mixin:: { - }, - }, - // ClusterRoleList is a collection of ClusterRoles - clusterRoleList:: { - local kind = {kind: "ClusterRoleList"}, - new():: apiVersion + kind, - // Items is a list of ClusterRoles - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is a list of ClusterRoles - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.rbac.v1alpha1.clusterRole, - mixin:: { - }, - }, - // Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding. - role:: { - local kind = {kind: "Role"}, - new():: apiVersion + kind, - // Rules holds all the PolicyRules for this Role - withRules(rules):: self + if std.type(rules) == "array" then {rules: rules} else {rules: [rules]}, - // Rules holds all the PolicyRules for this Role - withRulesMixin(rules):: self + if std.type(rules) == "array" then {rules+: rules} else {rules+: [rules]}, - rulesType:: hidden.rbac.v1alpha1.policyRule, - mixin:: { - // Standard object's metadata. - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - }, - }, - // RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace. - roleBinding:: { - local kind = {kind: "RoleBinding"}, - new():: apiVersion + kind, - // Subjects holds references to the objects the role applies to. - withSubjects(subjects):: self + if std.type(subjects) == "array" then {subjects: subjects} else {subjects: [subjects]}, - // Subjects holds references to the objects the role applies to. - withSubjectsMixin(subjects):: self + if std.type(subjects) == "array" then {subjects+: subjects} else {subjects+: [subjects]}, - subjectsType:: hidden.rbac.v1alpha1.subject, - mixin:: { - // Standard object's metadata. - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error. - roleRef:: { - local __roleRefMixin(roleRef) = {roleRef+: roleRef}, - mixinInstance(roleRef):: __roleRefMixin(roleRef), - // APIGroup is the group for the resource being referenced - withApiGroup(apiGroup):: self + __roleRefMixin({apiGroup: apiGroup}), - // Name is the name of resource being referenced - withName(name):: self + __roleRefMixin({name: name}), - }, - roleRefType:: hidden.rbac.v1alpha1.roleRef, - }, - }, - // RoleBindingList is a collection of RoleBindings - roleBindingList:: { - local kind = {kind: "RoleBindingList"}, - new():: apiVersion + kind, - // Items is a list of RoleBindings - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is a list of RoleBindings - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.rbac.v1alpha1.roleBinding, - mixin:: { - }, - }, - // RoleList is a collection of Roles - roleList:: { - local kind = {kind: "RoleList"}, - new():: apiVersion + kind, - // Items is a list of Roles - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is a list of Roles - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.rbac.v1alpha1.role, - mixin:: { - }, - }, - }, - v1beta1:: { - local apiVersion = {apiVersion: "rbac.authorization.k8s.io/v1beta1"}, - // ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding. - clusterRole:: { - local kind = {kind: "ClusterRole"}, - new():: apiVersion + kind, - // Rules holds all the PolicyRules for this ClusterRole - withRules(rules):: self + if std.type(rules) == "array" then {rules: rules} else {rules: [rules]}, - // Rules holds all the PolicyRules for this ClusterRole - withRulesMixin(rules):: self + if std.type(rules) == "array" then {rules+: rules} else {rules+: [rules]}, - rulesType:: hidden.rbac.v1beta1.policyRule, - mixin:: { - // Standard object's metadata. - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - }, - }, - // ClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject. - clusterRoleBinding:: { - local kind = {kind: "ClusterRoleBinding"}, - new():: apiVersion + kind, - // Subjects holds references to the objects the role applies to. - withSubjects(subjects):: self + if std.type(subjects) == "array" then {subjects: subjects} else {subjects: [subjects]}, - // Subjects holds references to the objects the role applies to. - withSubjectsMixin(subjects):: self + if std.type(subjects) == "array" then {subjects+: subjects} else {subjects+: [subjects]}, - subjectsType:: hidden.rbac.v1beta1.subject, - mixin:: { - // Standard object's metadata. - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error. - roleRef:: { - local __roleRefMixin(roleRef) = {roleRef+: roleRef}, - mixinInstance(roleRef):: __roleRefMixin(roleRef), - // APIGroup is the group for the resource being referenced - withApiGroup(apiGroup):: self + __roleRefMixin({apiGroup: apiGroup}), - // Name is the name of resource being referenced - withName(name):: self + __roleRefMixin({name: name}), - }, - roleRefType:: hidden.rbac.v1beta1.roleRef, - }, - }, - // ClusterRoleBindingList is a collection of ClusterRoleBindings - clusterRoleBindingList:: { - local kind = {kind: "ClusterRoleBindingList"}, - new():: apiVersion + kind, - // Items is a list of ClusterRoleBindings - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is a list of ClusterRoleBindings - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.rbac.v1beta1.clusterRoleBinding, - mixin:: { - }, - }, - // ClusterRoleList is a collection of ClusterRoles - clusterRoleList:: { - local kind = {kind: "ClusterRoleList"}, - new():: apiVersion + kind, - // Items is a list of ClusterRoles - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is a list of ClusterRoles - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.rbac.v1beta1.clusterRole, - mixin:: { - }, - }, - // Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding. - role:: { - local kind = {kind: "Role"}, - new():: apiVersion + kind, - // Rules holds all the PolicyRules for this Role - withRules(rules):: self + if std.type(rules) == "array" then {rules: rules} else {rules: [rules]}, - // Rules holds all the PolicyRules for this Role - withRulesMixin(rules):: self + if std.type(rules) == "array" then {rules+: rules} else {rules+: [rules]}, - rulesType:: hidden.rbac.v1beta1.policyRule, - mixin:: { - // Standard object's metadata. - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - }, - }, - // RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace. - roleBinding:: { - local kind = {kind: "RoleBinding"}, - new():: apiVersion + kind, - // Subjects holds references to the objects the role applies to. - withSubjects(subjects):: self + if std.type(subjects) == "array" then {subjects: subjects} else {subjects: [subjects]}, - // Subjects holds references to the objects the role applies to. - withSubjectsMixin(subjects):: self + if std.type(subjects) == "array" then {subjects+: subjects} else {subjects+: [subjects]}, - subjectsType:: hidden.rbac.v1beta1.subject, - mixin:: { - // Standard object's metadata. - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error. - roleRef:: { - local __roleRefMixin(roleRef) = {roleRef+: roleRef}, - mixinInstance(roleRef):: __roleRefMixin(roleRef), - // APIGroup is the group for the resource being referenced - withApiGroup(apiGroup):: self + __roleRefMixin({apiGroup: apiGroup}), - // Name is the name of resource being referenced - withName(name):: self + __roleRefMixin({name: name}), - }, - roleRefType:: hidden.rbac.v1beta1.roleRef, - }, - }, - // RoleBindingList is a collection of RoleBindings - roleBindingList:: { - local kind = {kind: "RoleBindingList"}, - new():: apiVersion + kind, - // Items is a list of RoleBindings - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is a list of RoleBindings - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.rbac.v1beta1.roleBinding, - mixin:: { - }, - }, - // RoleList is a collection of Roles - roleList:: { - local kind = {kind: "RoleList"}, - new():: apiVersion + kind, - // Items is a list of Roles - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is a list of Roles - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.rbac.v1beta1.role, - mixin:: { - }, - }, - }, - }, - settings:: { - v1alpha1:: { - local apiVersion = {apiVersion: "settings.k8s.io/v1alpha1"}, - // PodPreset is a policy resource that defines additional runtime requirements for a Pod. - podPreset:: { - local kind = {kind: "PodPreset"}, - new():: apiVersion + kind, - mixin:: { - // - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Env defines the collection of EnvVar to inject into containers. - withEnv(env):: self + if std.type(env) == "array" then __specMixin({env: env}) else __specMixin({env: [env]}), - // Env defines the collection of EnvVar to inject into containers. - withEnvMixin(env):: self + if std.type(env) == "array" then __specMixin({env+: env}) else __specMixin({env+: [env]}), - // EnvFrom defines the collection of EnvFromSource to inject into containers. - withEnvFrom(envFrom):: self + if std.type(envFrom) == "array" then __specMixin({envFrom: envFrom}) else __specMixin({envFrom: [envFrom]}), - // EnvFrom defines the collection of EnvFromSource to inject into containers. - withEnvFromMixin(envFrom):: self + if std.type(envFrom) == "array" then __specMixin({envFrom+: envFrom}) else __specMixin({envFrom+: [envFrom]}), - envFromType:: hidden.core.v1.envFromSource, - envType:: hidden.core.v1.envVar, - // Selector is a label query over a set of resources, in this case pods. Required. - selector:: { - local __selectorMixin(selector) = __specMixin({selector+: selector}), - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - // VolumeMounts defines the collection of VolumeMount to inject into containers. - withVolumeMounts(volumeMounts):: self + if std.type(volumeMounts) == "array" then __specMixin({volumeMounts: volumeMounts}) else __specMixin({volumeMounts: [volumeMounts]}), - // VolumeMounts defines the collection of VolumeMount to inject into containers. - withVolumeMountsMixin(volumeMounts):: self + if std.type(volumeMounts) == "array" then __specMixin({volumeMounts+: volumeMounts}) else __specMixin({volumeMounts+: [volumeMounts]}), - volumeMountsType:: hidden.core.v1.volumeMount, - // Volumes defines the collection of Volume to inject into the pod. - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // Volumes defines the collection of Volume to inject into the pod. - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.settings.v1alpha1.podPresetSpec, - }, - }, - // PodPresetList is a list of PodPreset objects. - podPresetList:: { - local kind = {kind: "PodPresetList"}, - new():: apiVersion + kind, - // Items is a list of schema objects. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is a list of schema objects. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.settings.v1alpha1.podPreset, - mixin:: { - }, - }, - }, - }, - storage:: { - v1:: { - local apiVersion = {apiVersion: "storage.k8s.io/v1"}, - // StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned. - // - // StorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name. - storageClass:: { - local kind = {kind: "StorageClass"}, - new():: apiVersion + kind, - // Parameters holds the parameters for the provisioner that should create volumes of this storage class. - withParameters(parameters):: self + {parameters: parameters}, - // Parameters holds the parameters for the provisioner that should create volumes of this storage class. - withParametersMixin(parameters):: self + {parameters+: parameters}, - // Provisioner indicates the type of the provisioner. - withProvisioner(provisioner):: self + {provisioner: provisioner}, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - }, - }, - // StorageClassList is a collection of storage classes. - storageClassList:: { - local kind = {kind: "StorageClassList"}, - new():: apiVersion + kind, - // Items is the list of StorageClasses - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is the list of StorageClasses - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.storage.v1.storageClass, - mixin:: { - }, - }, - }, - v1beta1:: { - local apiVersion = {apiVersion: "storage.k8s.io/v1beta1"}, - // StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned. - // - // StorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name. - storageClass:: { - local kind = {kind: "StorageClass"}, - new():: apiVersion + kind, - // Parameters holds the parameters for the provisioner that should create volumes of this storage class. - withParameters(parameters):: self + {parameters: parameters}, - // Parameters holds the parameters for the provisioner that should create volumes of this storage class. - withParametersMixin(parameters):: self + {parameters+: parameters}, - // Provisioner indicates the type of the provisioner. - withProvisioner(provisioner):: self + {provisioner: provisioner}, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - }, - }, - // StorageClassList is a collection of storage classes. - storageClassList:: { - local kind = {kind: "StorageClassList"}, - new():: apiVersion + kind, - // Items is the list of StorageClasses - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is the list of StorageClasses - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.storage.v1beta1.storageClass, - mixin:: { - }, - }, - }, - }, - local hidden = { - admissionregistration:: { - v1alpha1:: { - local apiVersion = {apiVersion: "admissionregistration/v1alpha1"}, - // AdmissionHookClientConfig contains the information to make a TLS connection with the webhook - admissionHookClientConfig:: { - new():: {}, - // CABundle is a PEM encoded CA bundle which will be used to validate webhook's server certificate. Required - withCaBundle(caBundle):: self + {caBundle: caBundle}, - mixin:: { - // Service is a reference to the service for this webhook. If there is only one port open for the service, that port will be used. If there are multiple ports open, port 443 will be used if it is open, otherwise it is an error. Required - service:: { - local __serviceMixin(service) = {service+: service}, - mixinInstance(service):: __serviceMixin(service), - // Name is the name of the service Required - withName(name):: self + __serviceMixin({name: name}), - // Namespace is the namespace of the service Required - withNamespace(namespace):: self + __serviceMixin({namespace: namespace}), - }, - serviceType:: hidden.admissionregistration.v1alpha1.serviceReference, - }, - }, - // ExternalAdmissionHook describes an external admission webhook and the resources and operations it applies to. - externalAdmissionHook:: { - new():: {}, - // FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Ignore. - withFailurePolicy(failurePolicy):: self + {failurePolicy: failurePolicy}, - // The name of the external admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where "imagepolicy" is the name of the webhook, and kubernetes.io is the name of the organization. Required. - withName(name):: self + {name: name}, - // Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. - withRules(rules):: self + if std.type(rules) == "array" then {rules: rules} else {rules: [rules]}, - // Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. - withRulesMixin(rules):: self + if std.type(rules) == "array" then {rules+: rules} else {rules+: [rules]}, - rulesType:: hidden.admissionregistration.v1alpha1.ruleWithOperations, - mixin:: { - // ClientConfig defines how to communicate with the hook. Required - clientConfig:: { - local __clientConfigMixin(clientConfig) = {clientConfig+: clientConfig}, - mixinInstance(clientConfig):: __clientConfigMixin(clientConfig), - // CABundle is a PEM encoded CA bundle which will be used to validate webhook's server certificate. Required - withCaBundle(caBundle):: self + __clientConfigMixin({caBundle: caBundle}), - // Service is a reference to the service for this webhook. If there is only one port open for the service, that port will be used. If there are multiple ports open, port 443 will be used if it is open, otherwise it is an error. Required - service:: { - local __serviceMixin(service) = __clientConfigMixin({service+: service}), - mixinInstance(service):: __serviceMixin(service), - // Name is the name of the service Required - withName(name):: self + __serviceMixin({name: name}), - // Namespace is the namespace of the service Required - withNamespace(namespace):: self + __serviceMixin({namespace: namespace}), - }, - serviceType:: hidden.admissionregistration.v1alpha1.serviceReference, - }, - clientConfigType:: hidden.admissionregistration.v1alpha1.admissionHookClientConfig, - }, - }, - // Initializer describes the name and the failure policy of an initializer, and what resources it applies to. - initializer:: { - new():: {}, - // FailurePolicy defines what happens if the responsible initializer controller fails to takes action. Allowed values are Ignore, or Fail. If "Ignore" is set, initializer is removed from the initializers list of an object if the timeout is reached; If "Fail" is set, admissionregistration returns timeout error if the timeout is reached. - withFailurePolicy(failurePolicy):: self + {failurePolicy: failurePolicy}, - // Name is the identifier of the initializer. It will be added to the object that needs to be initialized. Name should be fully qualified, e.g., alwayspullimages.kubernetes.io, where "alwayspullimages" is the name of the webhook, and kubernetes.io is the name of the organization. Required - withName(name):: self + {name: name}, - // Rules describes what resources/subresources the initializer cares about. The initializer cares about an operation if it matches _any_ Rule. Rule.Resources must not include subresources. - withRules(rules):: self + if std.type(rules) == "array" then {rules: rules} else {rules: [rules]}, - // Rules describes what resources/subresources the initializer cares about. The initializer cares about an operation if it matches _any_ Rule. Rule.Resources must not include subresources. - withRulesMixin(rules):: self + if std.type(rules) == "array" then {rules+: rules} else {rules+: [rules]}, - rulesType:: hidden.admissionregistration.v1alpha1.rule, - mixin:: { - }, - }, - // Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended to make sure that all the tuple expansions are valid. - rule:: { - new():: {}, - // APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required. - withApiGroups(apiGroups):: self + if std.type(apiGroups) == "array" then {apiGroups: apiGroups} else {apiGroups: [apiGroups]}, - // APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required. - withApiGroupsMixin(apiGroups):: self + if std.type(apiGroups) == "array" then {apiGroups+: apiGroups} else {apiGroups+: [apiGroups]}, - // APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required. - withApiVersions(apiVersions):: self + if std.type(apiVersions) == "array" then {apiVersions: apiVersions} else {apiVersions: [apiVersions]}, - // APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required. - withApiVersionsMixin(apiVersions):: self + if std.type(apiVersions) == "array" then {apiVersions+: apiVersions} else {apiVersions+: [apiVersions]}, - // Resources is a list of resources this rule applies to. - // - // For example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources. - // - // If wildcard is present, the validation rule will ensure resources do not overlap with each other. - // - // Depending on the enclosing object, subresources might not be allowed. Required. - withResources(resources):: self + if std.type(resources) == "array" then {resources: resources} else {resources: [resources]}, - // Resources is a list of resources this rule applies to. - // - // For example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources. - // - // If wildcard is present, the validation rule will ensure resources do not overlap with each other. - // - // Depending on the enclosing object, subresources might not be allowed. Required. - withResourcesMixin(resources):: self + if std.type(resources) == "array" then {resources+: resources} else {resources+: [resources]}, - mixin:: { - }, - }, - // RuleWithOperations is a tuple of Operations and Resources. It is recommended to make sure that all the tuple expansions are valid. - ruleWithOperations:: { - new():: {}, - // APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required. - withApiGroups(apiGroups):: self + if std.type(apiGroups) == "array" then {apiGroups: apiGroups} else {apiGroups: [apiGroups]}, - // APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required. - withApiGroupsMixin(apiGroups):: self + if std.type(apiGroups) == "array" then {apiGroups+: apiGroups} else {apiGroups+: [apiGroups]}, - // APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required. - withApiVersions(apiVersions):: self + if std.type(apiVersions) == "array" then {apiVersions: apiVersions} else {apiVersions: [apiVersions]}, - // APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required. - withApiVersionsMixin(apiVersions):: self + if std.type(apiVersions) == "array" then {apiVersions+: apiVersions} else {apiVersions+: [apiVersions]}, - // Operations is the operations the admission hook cares about - CREATE, UPDATE, or * for all operations. If '*' is present, the length of the slice must be one. Required. - withOperations(operations):: self + if std.type(operations) == "array" then {operations: operations} else {operations: [operations]}, - // Operations is the operations the admission hook cares about - CREATE, UPDATE, or * for all operations. If '*' is present, the length of the slice must be one. Required. - withOperationsMixin(operations):: self + if std.type(operations) == "array" then {operations+: operations} else {operations+: [operations]}, - // Resources is a list of resources this rule applies to. - // - // For example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources. - // - // If wildcard is present, the validation rule will ensure resources do not overlap with each other. - // - // Depending on the enclosing object, subresources might not be allowed. Required. - withResources(resources):: self + if std.type(resources) == "array" then {resources: resources} else {resources: [resources]}, - // Resources is a list of resources this rule applies to. - // - // For example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources. - // - // If wildcard is present, the validation rule will ensure resources do not overlap with each other. - // - // Depending on the enclosing object, subresources might not be allowed. Required. - withResourcesMixin(resources):: self + if std.type(resources) == "array" then {resources+: resources} else {resources+: [resources]}, - mixin:: { - }, - }, - // ServiceReference holds a reference to Service.legacy.k8s.io - serviceReference:: { - new():: {}, - // Name is the name of the service Required - withName(name):: self + {name: name}, - // Namespace is the namespace of the service Required - withNamespace(namespace):: self + {namespace: namespace}, - mixin:: { - }, - }, - }, - }, - apiregistration:: { - v1beta1:: { - local apiVersion = {apiVersion: "apiregistration/v1beta1"}, - // APIService represents a server for a particular GroupVersion. Name must be "version.group". - aPIService:: { - new():: {}, - mixin:: { - // - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Spec contains information for locating and communicating with a server - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate. - withCaBundle(caBundle):: self + __specMixin({caBundle: caBundle}), - // Group is the API group name this server hosts - withGroup(group):: self + __specMixin({group: group}), - // GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is prefered by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s - withGroupPriorityMinimum(groupPriorityMinimum):: self + __specMixin({groupPriorityMinimum: groupPriorityMinimum}), - // InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged. You should use the CABundle instead. - withInsecureSkipTLSVerify(insecureSkipTLSVerify):: self + __specMixin({insecureSkipTLSVerify: insecureSkipTLSVerify}), - // Service is a reference to the service for this API server. It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled. - service:: { - local __serviceMixin(service) = __specMixin({service+: service}), - mixinInstance(service):: __serviceMixin(service), - // Name is the name of the service - withName(name):: self + __serviceMixin({name: name}), - // Namespace is the namespace of the service - withNamespace(namespace):: self + __serviceMixin({namespace: namespace}), - }, - serviceType:: hidden.apiregistration.v1beta1.serviceReference, - // Version is the API version this server hosts. For example, "v1" - withVersion(version):: self + __specMixin({version: version}), - // VersionPriority controls the ordering of this API version inside of its group. Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) Since it's inside of a group, the number can be small, probably in the 10s. - withVersionPriority(versionPriority):: self + __specMixin({versionPriority: versionPriority}), - }, - specType:: hidden.apiregistration.v1beta1.aPIServiceSpec, - // Status contains derived information about an API server - status:: { - local __statusMixin(status) = {status+: status}, - mixinInstance(status):: __statusMixin(status), - // Current service state of apiService. - withConditions(conditions):: self + if std.type(conditions) == "array" then __statusMixin({conditions: conditions}) else __statusMixin({conditions: [conditions]}), - // Current service state of apiService. - withConditionsMixin(conditions):: self + if std.type(conditions) == "array" then __statusMixin({conditions+: conditions}) else __statusMixin({conditions+: [conditions]}), - conditionsType:: hidden.apiregistration.v1beta1.aPIServiceCondition, - }, - statusType:: hidden.apiregistration.v1beta1.aPIServiceStatus, - }, - }, - // - aPIServiceCondition:: { - new():: {}, - // Human-readable message indicating details about last transition. - withMessage(message):: self + {message: message}, - // Unique, one-word, CamelCase reason for the condition's last transition. - withReason(reason):: self + {reason: reason}, - // Status is the status of the condition. Can be True, False, Unknown. - withStatus(status):: self + {status: status}, - // Type is the type of the condition. - withType(type):: self + {type: type}, - mixin:: { - // Last time the condition transitioned from one status to another. - lastTransitionTime:: { - local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime}, - mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime), - }, - lastTransitionTimeType:: hidden.meta.v1.time, - }, - }, - // APIServiceList is a list of APIService objects. - aPIServiceList:: { - new():: {}, - // - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.apiregistration.v1beta1.aPIService, - mixin:: { - // - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency - withResourceVersion(resourceVersion):: self + __metadataMixin({resourceVersion: resourceVersion}), - // SelfLink is a URL representing this object. Populated by the system. Read-only. - withSelfLink(selfLink):: self + __metadataMixin({selfLink: selfLink}), - }, - metadataType:: hidden.meta.v1.listMeta, - }, - }, - // APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification. - aPIServiceSpec:: { - new():: {}, - // CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate. - withCaBundle(caBundle):: self + {caBundle: caBundle}, - // Group is the API group name this server hosts - withGroup(group):: self + {group: group}, - // GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is prefered by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s - withGroupPriorityMinimum(groupPriorityMinimum):: self + {groupPriorityMinimum: groupPriorityMinimum}, - // InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged. You should use the CABundle instead. - withInsecureSkipTLSVerify(insecureSkipTLSVerify):: self + {insecureSkipTLSVerify: insecureSkipTLSVerify}, - // Version is the API version this server hosts. For example, "v1" - withVersion(version):: self + {version: version}, - // VersionPriority controls the ordering of this API version inside of its group. Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) Since it's inside of a group, the number can be small, probably in the 10s. - withVersionPriority(versionPriority):: self + {versionPriority: versionPriority}, - mixin:: { - // Service is a reference to the service for this API server. It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled. - service:: { - local __serviceMixin(service) = {service+: service}, - mixinInstance(service):: __serviceMixin(service), - // Name is the name of the service - withName(name):: self + __serviceMixin({name: name}), - // Namespace is the namespace of the service - withNamespace(namespace):: self + __serviceMixin({namespace: namespace}), - }, - serviceType:: hidden.apiregistration.v1beta1.serviceReference, - }, - }, - // APIServiceStatus contains derived information about an API server - aPIServiceStatus:: { - new():: {}, - // Current service state of apiService. - withConditions(conditions):: self + if std.type(conditions) == "array" then {conditions: conditions} else {conditions: [conditions]}, - // Current service state of apiService. - withConditionsMixin(conditions):: self + if std.type(conditions) == "array" then {conditions+: conditions} else {conditions+: [conditions]}, - conditionsType:: hidden.apiregistration.v1beta1.aPIServiceCondition, - mixin:: { - }, - }, - // ServiceReference holds a reference to Service.legacy.k8s.io - serviceReference:: { - new():: {}, - // Name is the name of the service - withName(name):: self + {name: name}, - // Namespace is the namespace of the service - withNamespace(namespace):: self + {namespace: namespace}, - mixin:: { - }, - }, - }, - }, - apps:: { - v1beta1:: { - local apiVersion = {apiVersion: "apps/v1beta1"}, - // DeploymentCondition describes the state of a deployment at a certain point. - deploymentCondition:: { - new():: {}, - // A human readable message indicating details about the transition. - withMessage(message):: self + {message: message}, - // The reason for the condition's last transition. - withReason(reason):: self + {reason: reason}, - // Type of deployment condition. - withType(type):: self + {type: type}, - mixin:: { - // Last time the condition transitioned from one status to another. - lastTransitionTime:: { - local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime}, - mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime), - }, - lastTransitionTimeType:: hidden.meta.v1.time, - // The last time this condition was updated. - lastUpdateTime:: { - local __lastUpdateTimeMixin(lastUpdateTime) = {lastUpdateTime+: lastUpdateTime}, - mixinInstance(lastUpdateTime):: __lastUpdateTimeMixin(lastUpdateTime), - }, - lastUpdateTimeType:: hidden.meta.v1.time, - }, - }, - // DeploymentSpec is the specification of the desired behavior of the Deployment. - deploymentSpec:: { - new():: {}, - // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready) - withMinReadySeconds(minReadySeconds):: self + {minReadySeconds: minReadySeconds}, - // Indicates that the deployment is paused. - withPaused(paused):: self + {paused: paused}, - // The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Once autoRollback is implemented, the deployment controller will automatically rollback failed deployments. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s. - withProgressDeadlineSeconds(progressDeadlineSeconds):: self + {progressDeadlineSeconds: progressDeadlineSeconds}, - // Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1. - withReplicas(replicas):: self + {replicas: replicas}, - // The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 2. - withRevisionHistoryLimit(revisionHistoryLimit):: self + {revisionHistoryLimit: revisionHistoryLimit}, - mixin:: { - // The config this deployment is rolling back to. Will be cleared after rollback is done. - rollbackTo:: { - local __rollbackToMixin(rollbackTo) = {rollbackTo+: rollbackTo}, - mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo), - // The revision to rollback to. If set to 0, rollback to the last revision. - withRevision(revision):: self + __rollbackToMixin({revision: revision}), - }, - rollbackToType:: hidden.apps.v1beta1.rollbackConfig, - // Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. - selector:: { - local __selectorMixin(selector) = {selector+: selector}, - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - // The deployment strategy to use to replace existing pods with new ones. - strategy:: { - local __strategyMixin(strategy) = {strategy+: strategy}, - mixinInstance(strategy):: __strategyMixin(strategy), - // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate. - rollingUpdate:: { - local __rollingUpdateMixin(rollingUpdate) = __strategyMixin({rollingUpdate+: rollingUpdate}), - mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate), - // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods. - withMaxSurge(maxSurge):: __rollingUpdateMixin({maxSurge: maxSurge}), - // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods. - withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}), - }, - rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateDeployment, - // Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate. - withType(type):: self + __strategyMixin({type: type}), - }, - strategyType:: hidden.apps.v1beta1.deploymentStrategy, - // Template describes the pods that will be created. - template:: { - local __templateMixin(template) = {template+: template}, - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - }, - }, - // DeploymentStatus is the most recently observed status of the Deployment. - deploymentStatus:: { - new():: {}, - // Total number of available pods (ready for at least minReadySeconds) targeted by this deployment. - withAvailableReplicas(availableReplicas):: self + {availableReplicas: availableReplicas}, - // Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet. - withCollisionCount(collisionCount):: self + {collisionCount: collisionCount}, - // Represents the latest available observations of a deployment's current state. - withConditions(conditions):: self + if std.type(conditions) == "array" then {conditions: conditions} else {conditions: [conditions]}, - // Represents the latest available observations of a deployment's current state. - withConditionsMixin(conditions):: self + if std.type(conditions) == "array" then {conditions+: conditions} else {conditions+: [conditions]}, - conditionsType:: hidden.apps.v1beta1.deploymentCondition, - // The generation observed by the deployment controller. - withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration}, - // Total number of ready pods targeted by this deployment. - withReadyReplicas(readyReplicas):: self + {readyReplicas: readyReplicas}, - // Total number of non-terminated pods targeted by this deployment (their labels match the selector). - withReplicas(replicas):: self + {replicas: replicas}, - // Total number of unavailable pods targeted by this deployment. - withUnavailableReplicas(unavailableReplicas):: self + {unavailableReplicas: unavailableReplicas}, - // Total number of non-terminated pods targeted by this deployment that have the desired template spec. - withUpdatedReplicas(updatedReplicas):: self + {updatedReplicas: updatedReplicas}, - mixin:: { - }, - }, - // DeploymentStrategy describes how to replace existing pods with new ones. - deploymentStrategy:: { - new():: {}, - // Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate. - withType(type):: self + {type: type}, - mixin:: { - // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate. - rollingUpdate:: { - local __rollingUpdateMixin(rollingUpdate) = {rollingUpdate+: rollingUpdate}, - mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate), - // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods. - withMaxSurge(maxSurge):: __rollingUpdateMixin({maxSurge: maxSurge}), - // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods. - withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}), - }, - rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateDeployment, - }, - }, - // - rollbackConfig:: { - new():: {}, - // The revision to rollback to. If set to 0, rollback to the last revision. - withRevision(revision):: self + {revision: revision}, - mixin:: { - }, - }, - // Spec to control the desired behavior of rolling update. - rollingUpdateDeployment:: { - new():: {}, - // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods. - withMaxSurge(maxSurge):: {maxSurge: maxSurge}, - // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods. - withMaxUnavailable(maxUnavailable):: {maxUnavailable: maxUnavailable}, - mixin:: { - }, - }, - // RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType. - rollingUpdateStatefulSetStrategy:: { - new():: {}, - // Partition indicates the ordinal at which the StatefulSet should be partitioned. - withPartition(partition):: self + {partition: partition}, - mixin:: { - }, - }, - // ScaleSpec describes the attributes of a scale subresource - scaleSpec:: { - new():: {}, - // desired number of instances for the scaled object. - withReplicas(replicas):: self + {replicas: replicas}, - mixin:: { - }, - }, - // ScaleStatus represents the current status of a scale subresource. - scaleStatus:: { - new():: {}, - // actual number of observed instances of the scaled object. - withReplicas(replicas):: self + {replicas: replicas}, - // label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors - withSelector(selector):: self + {selector: selector}, - // label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors - withSelectorMixin(selector):: self + {selector+: selector}, - // label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors - withTargetSelector(targetSelector):: self + {targetSelector: targetSelector}, - mixin:: { - }, - }, - // A StatefulSetSpec is the specification of a StatefulSet. - statefulSetSpec:: { - new():: {}, - // podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once. - withPodManagementPolicy(podManagementPolicy):: self + {podManagementPolicy: podManagementPolicy}, - // replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1. - withReplicas(replicas):: self + {replicas: replicas}, - // revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10. - withRevisionHistoryLimit(revisionHistoryLimit):: self + {revisionHistoryLimit: revisionHistoryLimit}, - // serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where "pod-specific-string" is managed by the StatefulSet controller. - withServiceName(serviceName):: self + {serviceName: serviceName}, - // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name. - withVolumeClaimTemplates(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == "array" then {volumeClaimTemplates: volumeClaimTemplates} else {volumeClaimTemplates: [volumeClaimTemplates]}, - // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name. - withVolumeClaimTemplatesMixin(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == "array" then {volumeClaimTemplates+: volumeClaimTemplates} else {volumeClaimTemplates+: [volumeClaimTemplates]}, - volumeClaimTemplatesType:: hidden.core.v1.persistentVolumeClaim, - mixin:: { - // selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors - selector:: { - local __selectorMixin(selector) = {selector+: selector}, - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - // template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet. - template:: { - local __templateMixin(template) = {template+: template}, - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - // updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template. - updateStrategy:: { - local __updateStrategyMixin(updateStrategy) = {updateStrategy+: updateStrategy}, - mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy), - // RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType. - rollingUpdate:: { - local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({rollingUpdate+: rollingUpdate}), - mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate), - // Partition indicates the ordinal at which the StatefulSet should be partitioned. - withPartition(partition):: self + __rollingUpdateMixin({partition: partition}), - }, - rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateStatefulSetStrategy, - // Type indicates the type of the StatefulSetUpdateStrategy. - withType(type):: self + __updateStrategyMixin({type: type}), - }, - updateStrategyType:: hidden.apps.v1beta1.statefulSetUpdateStrategy, - }, - }, - // StatefulSetStatus represents the current state of a StatefulSet. - statefulSetStatus:: { - new():: {}, - // currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision. - withCurrentReplicas(currentReplicas):: self + {currentReplicas: currentReplicas}, - // currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas). - withCurrentRevision(currentRevision):: self + {currentRevision: currentRevision}, - // observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server. - withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration}, - // readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition. - withReadyReplicas(readyReplicas):: self + {readyReplicas: readyReplicas}, - // replicas is the number of Pods created by the StatefulSet controller. - withReplicas(replicas):: self + {replicas: replicas}, - // updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas) - withUpdateRevision(updateRevision):: self + {updateRevision: updateRevision}, - // updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision. - withUpdatedReplicas(updatedReplicas):: self + {updatedReplicas: updatedReplicas}, - mixin:: { - }, - }, - // StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy. - statefulSetUpdateStrategy:: { - new():: {}, - // Type indicates the type of the StatefulSetUpdateStrategy. - withType(type):: self + {type: type}, - mixin:: { - // RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType. - rollingUpdate:: { - local __rollingUpdateMixin(rollingUpdate) = {rollingUpdate+: rollingUpdate}, - mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate), - // Partition indicates the ordinal at which the StatefulSet should be partitioned. - withPartition(partition):: self + __rollingUpdateMixin({partition: partition}), - }, - rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateStatefulSetStrategy, - }, - }, - }, - }, - authentication:: { - v1:: { - local apiVersion = {apiVersion: "authentication/v1"}, - // TokenReviewSpec is a description of the token authentication request. - tokenReviewSpec:: { - new():: {}, - // Token is the opaque bearer token. - withToken(token):: self + {token: token}, - mixin:: { - }, - }, - // TokenReviewStatus is the result of the token authentication request. - tokenReviewStatus:: { - new():: {}, - // Authenticated indicates that the token was associated with a known user. - withAuthenticated(authenticated):: self + {authenticated: authenticated}, - mixin:: { - // User is the UserInfo associated with the provided token. - user:: { - local __userMixin(user) = {user+: user}, - mixinInstance(user):: __userMixin(user), - // Any additional information provided by the authenticator. - withExtra(extra):: self + __userMixin({extra: extra}), - // Any additional information provided by the authenticator. - withExtraMixin(extra):: self + __userMixin({extra+: extra}), - // The names of groups this user is a part of. - withGroups(groups):: self + if std.type(groups) == "array" then __userMixin({groups: groups}) else __userMixin({groups: [groups]}), - // The names of groups this user is a part of. - withGroupsMixin(groups):: self + if std.type(groups) == "array" then __userMixin({groups+: groups}) else __userMixin({groups+: [groups]}), - // A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs. - withUid(uid):: self + __userMixin({uid: uid}), - // The name that uniquely identifies this user among all active users. - withUsername(username):: self + __userMixin({username: username}), - }, - userType:: hidden.authentication.v1.userInfo, - }, - }, - // UserInfo holds the information about the user needed to implement the user.Info interface. - userInfo:: { - new():: {}, - // Any additional information provided by the authenticator. - withExtra(extra):: self + {extra: extra}, - // Any additional information provided by the authenticator. - withExtraMixin(extra):: self + {extra+: extra}, - // The names of groups this user is a part of. - withGroups(groups):: self + if std.type(groups) == "array" then {groups: groups} else {groups: [groups]}, - // The names of groups this user is a part of. - withGroupsMixin(groups):: self + if std.type(groups) == "array" then {groups+: groups} else {groups+: [groups]}, - // A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs. - withUid(uid):: self + {uid: uid}, - // The name that uniquely identifies this user among all active users. - withUsername(username):: self + {username: username}, - mixin:: { - }, - }, - }, - v1beta1:: { - local apiVersion = {apiVersion: "authentication/v1beta1"}, - // TokenReviewSpec is a description of the token authentication request. - tokenReviewSpec:: { - new():: {}, - // Token is the opaque bearer token. - withToken(token):: self + {token: token}, - mixin:: { - }, - }, - // TokenReviewStatus is the result of the token authentication request. - tokenReviewStatus:: { - new():: {}, - // Authenticated indicates that the token was associated with a known user. - withAuthenticated(authenticated):: self + {authenticated: authenticated}, - mixin:: { - // User is the UserInfo associated with the provided token. - user:: { - local __userMixin(user) = {user+: user}, - mixinInstance(user):: __userMixin(user), - // Any additional information provided by the authenticator. - withExtra(extra):: self + __userMixin({extra: extra}), - // Any additional information provided by the authenticator. - withExtraMixin(extra):: self + __userMixin({extra+: extra}), - // The names of groups this user is a part of. - withGroups(groups):: self + if std.type(groups) == "array" then __userMixin({groups: groups}) else __userMixin({groups: [groups]}), - // The names of groups this user is a part of. - withGroupsMixin(groups):: self + if std.type(groups) == "array" then __userMixin({groups+: groups}) else __userMixin({groups+: [groups]}), - // A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs. - withUid(uid):: self + __userMixin({uid: uid}), - // The name that uniquely identifies this user among all active users. - withUsername(username):: self + __userMixin({username: username}), - }, - userType:: hidden.authentication.v1beta1.userInfo, - }, - }, - // UserInfo holds the information about the user needed to implement the user.Info interface. - userInfo:: { - new():: {}, - // Any additional information provided by the authenticator. - withExtra(extra):: self + {extra: extra}, - // Any additional information provided by the authenticator. - withExtraMixin(extra):: self + {extra+: extra}, - // The names of groups this user is a part of. - withGroups(groups):: self + if std.type(groups) == "array" then {groups: groups} else {groups: [groups]}, - // The names of groups this user is a part of. - withGroupsMixin(groups):: self + if std.type(groups) == "array" then {groups+: groups} else {groups+: [groups]}, - // A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs. - withUid(uid):: self + {uid: uid}, - // The name that uniquely identifies this user among all active users. - withUsername(username):: self + {username: username}, - mixin:: { - }, - }, - }, - }, - authorization:: { - v1:: { - local apiVersion = {apiVersion: "authorization/v1"}, - // NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface - nonResourceAttributes:: { - new():: {}, - // Path is the URL path of the request - withPath(path):: self + {path: path}, - // Verb is the standard HTTP verb - withVerb(verb):: self + {verb: verb}, - mixin:: { - }, - }, - // ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface - resourceAttributes:: { - new():: {}, - // Group is the API Group of the Resource. "*" means all. - withGroup(group):: self + {group: group}, - // Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all. - withName(name):: self + {name: name}, - // Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces "" (empty) is defaulted for LocalSubjectAccessReviews "" (empty) is empty for cluster-scoped resources "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview - withNamespace(namespace):: self + {namespace: namespace}, - // Resource is one of the existing resource types. "*" means all. - withResource(resource):: self + {resource: resource}, - // Subresource is one of the existing resource types. "" means none. - withSubresource(subresource):: self + {subresource: subresource}, - // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all. - withVerb(verb):: self + {verb: verb}, - // Version is the API Version of the Resource. "*" means all. - withVersion(version):: self + {version: version}, - mixin:: { - }, - }, - // SelfSubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set - selfSubjectAccessReviewSpec:: { - new():: {}, - mixin:: { - // NonResourceAttributes describes information for a non-resource access request - nonResourceAttributes:: { - local __nonResourceAttributesMixin(nonResourceAttributes) = {nonResourceAttributes+: nonResourceAttributes}, - mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes), - // Path is the URL path of the request - withPath(path):: self + __nonResourceAttributesMixin({path: path}), - // Verb is the standard HTTP verb - withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}), - }, - nonResourceAttributesType:: hidden.authorization.v1.nonResourceAttributes, - // ResourceAuthorizationAttributes describes information for a resource access request - resourceAttributes:: { - local __resourceAttributesMixin(resourceAttributes) = {resourceAttributes+: resourceAttributes}, - mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes), - // Group is the API Group of the Resource. "*" means all. - withGroup(group):: self + __resourceAttributesMixin({group: group}), - // Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all. - withName(name):: self + __resourceAttributesMixin({name: name}), - // Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces "" (empty) is defaulted for LocalSubjectAccessReviews "" (empty) is empty for cluster-scoped resources "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview - withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}), - // Resource is one of the existing resource types. "*" means all. - withResource(resource):: self + __resourceAttributesMixin({resource: resource}), - // Subresource is one of the existing resource types. "" means none. - withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}), - // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all. - withVerb(verb):: self + __resourceAttributesMixin({verb: verb}), - // Version is the API Version of the Resource. "*" means all. - withVersion(version):: self + __resourceAttributesMixin({version: version}), - }, - resourceAttributesType:: hidden.authorization.v1.resourceAttributes, - }, - }, - // SubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set - subjectAccessReviewSpec:: { - new():: {}, - // Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here. - withExtra(extra):: self + {extra: extra}, - // Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here. - withExtraMixin(extra):: self + {extra+: extra}, - // Groups is the groups you're testing for. - withGroups(groups):: self + if std.type(groups) == "array" then {groups: groups} else {groups: [groups]}, - // Groups is the groups you're testing for. - withGroupsMixin(groups):: self + if std.type(groups) == "array" then {groups+: groups} else {groups+: [groups]}, - // User is the user you're testing for. If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups - withUser(user):: self + {user: user}, - mixin:: { - // NonResourceAttributes describes information for a non-resource access request - nonResourceAttributes:: { - local __nonResourceAttributesMixin(nonResourceAttributes) = {nonResourceAttributes+: nonResourceAttributes}, - mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes), - // Path is the URL path of the request - withPath(path):: self + __nonResourceAttributesMixin({path: path}), - // Verb is the standard HTTP verb - withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}), - }, - nonResourceAttributesType:: hidden.authorization.v1.nonResourceAttributes, - // ResourceAuthorizationAttributes describes information for a resource access request - resourceAttributes:: { - local __resourceAttributesMixin(resourceAttributes) = {resourceAttributes+: resourceAttributes}, - mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes), - // Group is the API Group of the Resource. "*" means all. - withGroup(group):: self + __resourceAttributesMixin({group: group}), - // Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all. - withName(name):: self + __resourceAttributesMixin({name: name}), - // Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces "" (empty) is defaulted for LocalSubjectAccessReviews "" (empty) is empty for cluster-scoped resources "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview - withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}), - // Resource is one of the existing resource types. "*" means all. - withResource(resource):: self + __resourceAttributesMixin({resource: resource}), - // Subresource is one of the existing resource types. "" means none. - withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}), - // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all. - withVerb(verb):: self + __resourceAttributesMixin({verb: verb}), - // Version is the API Version of the Resource. "*" means all. - withVersion(version):: self + __resourceAttributesMixin({version: version}), - }, - resourceAttributesType:: hidden.authorization.v1.resourceAttributes, - }, - }, - // SubjectAccessReviewStatus - subjectAccessReviewStatus:: { - new():: {}, - // Allowed is required. True if the action would be allowed, false otherwise. - withAllowed(allowed):: self + {allowed: allowed}, - // EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request. - withEvaluationError(evaluationError):: self + {evaluationError: evaluationError}, - // Reason is optional. It indicates why a request was allowed or denied. - withReason(reason):: self + {reason: reason}, - mixin:: { - }, - }, - }, - v1beta1:: { - local apiVersion = {apiVersion: "authorization/v1beta1"}, - // NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface - nonResourceAttributes:: { - new():: {}, - // Path is the URL path of the request - withPath(path):: self + {path: path}, - // Verb is the standard HTTP verb - withVerb(verb):: self + {verb: verb}, - mixin:: { - }, - }, - // ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface - resourceAttributes:: { - new():: {}, - // Group is the API Group of the Resource. "*" means all. - withGroup(group):: self + {group: group}, - // Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all. - withName(name):: self + {name: name}, - // Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces "" (empty) is defaulted for LocalSubjectAccessReviews "" (empty) is empty for cluster-scoped resources "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview - withNamespace(namespace):: self + {namespace: namespace}, - // Resource is one of the existing resource types. "*" means all. - withResource(resource):: self + {resource: resource}, - // Subresource is one of the existing resource types. "" means none. - withSubresource(subresource):: self + {subresource: subresource}, - // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all. - withVerb(verb):: self + {verb: verb}, - // Version is the API Version of the Resource. "*" means all. - withVersion(version):: self + {version: version}, - mixin:: { - }, - }, - // SelfSubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set - selfSubjectAccessReviewSpec:: { - new():: {}, - mixin:: { - // NonResourceAttributes describes information for a non-resource access request - nonResourceAttributes:: { - local __nonResourceAttributesMixin(nonResourceAttributes) = {nonResourceAttributes+: nonResourceAttributes}, - mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes), - // Path is the URL path of the request - withPath(path):: self + __nonResourceAttributesMixin({path: path}), - // Verb is the standard HTTP verb - withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}), - }, - nonResourceAttributesType:: hidden.authorization.v1beta1.nonResourceAttributes, - // ResourceAuthorizationAttributes describes information for a resource access request - resourceAttributes:: { - local __resourceAttributesMixin(resourceAttributes) = {resourceAttributes+: resourceAttributes}, - mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes), - // Group is the API Group of the Resource. "*" means all. - withGroup(group):: self + __resourceAttributesMixin({group: group}), - // Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all. - withName(name):: self + __resourceAttributesMixin({name: name}), - // Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces "" (empty) is defaulted for LocalSubjectAccessReviews "" (empty) is empty for cluster-scoped resources "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview - withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}), - // Resource is one of the existing resource types. "*" means all. - withResource(resource):: self + __resourceAttributesMixin({resource: resource}), - // Subresource is one of the existing resource types. "" means none. - withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}), - // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all. - withVerb(verb):: self + __resourceAttributesMixin({verb: verb}), - // Version is the API Version of the Resource. "*" means all. - withVersion(version):: self + __resourceAttributesMixin({version: version}), - }, - resourceAttributesType:: hidden.authorization.v1beta1.resourceAttributes, - }, - }, - // SubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set - subjectAccessReviewSpec:: { - new():: {}, - // Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here. - withExtra(extra):: self + {extra: extra}, - // Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here. - withExtraMixin(extra):: self + {extra+: extra}, - // Groups is the groups you're testing for. - withGroup(group):: self + if std.type(group) == "array" then {group: group} else {group: [group]}, - // Groups is the groups you're testing for. - withGroupMixin(group):: self + if std.type(group) == "array" then {group+: group} else {group+: [group]}, - // User is the user you're testing for. If you specify "User" but not "Group", then is it interpreted as "What if User were not a member of any groups - withUser(user):: self + {user: user}, - mixin:: { - // NonResourceAttributes describes information for a non-resource access request - nonResourceAttributes:: { - local __nonResourceAttributesMixin(nonResourceAttributes) = {nonResourceAttributes+: nonResourceAttributes}, - mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes), - // Path is the URL path of the request - withPath(path):: self + __nonResourceAttributesMixin({path: path}), - // Verb is the standard HTTP verb - withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}), - }, - nonResourceAttributesType:: hidden.authorization.v1beta1.nonResourceAttributes, - // ResourceAuthorizationAttributes describes information for a resource access request - resourceAttributes:: { - local __resourceAttributesMixin(resourceAttributes) = {resourceAttributes+: resourceAttributes}, - mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes), - // Group is the API Group of the Resource. "*" means all. - withGroup(group):: self + __resourceAttributesMixin({group: group}), - // Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all. - withName(name):: self + __resourceAttributesMixin({name: name}), - // Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces "" (empty) is defaulted for LocalSubjectAccessReviews "" (empty) is empty for cluster-scoped resources "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview - withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}), - // Resource is one of the existing resource types. "*" means all. - withResource(resource):: self + __resourceAttributesMixin({resource: resource}), - // Subresource is one of the existing resource types. "" means none. - withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}), - // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all. - withVerb(verb):: self + __resourceAttributesMixin({verb: verb}), - // Version is the API Version of the Resource. "*" means all. - withVersion(version):: self + __resourceAttributesMixin({version: version}), - }, - resourceAttributesType:: hidden.authorization.v1beta1.resourceAttributes, - }, - }, - // SubjectAccessReviewStatus - subjectAccessReviewStatus:: { - new():: {}, - // Allowed is required. True if the action would be allowed, false otherwise. - withAllowed(allowed):: self + {allowed: allowed}, - // EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request. - withEvaluationError(evaluationError):: self + {evaluationError: evaluationError}, - // Reason is optional. It indicates why a request was allowed or denied. - withReason(reason):: self + {reason: reason}, - mixin:: { - }, - }, - }, - }, - autoscaling:: { - v1:: { - local apiVersion = {apiVersion: "autoscaling/v1"}, - // CrossVersionObjectReference contains enough information to let you identify the referred resource. - crossVersionObjectReference:: { - new():: {}, - // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + {name: name}, - mixin:: { - }, - }, - // specification of a horizontal pod autoscaler. - horizontalPodAutoscalerSpec:: { - new():: {}, - // upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas. - withMaxReplicas(maxReplicas):: self + {maxReplicas: maxReplicas}, - // lower limit for the number of pods that can be set by the autoscaler, default 1. - withMinReplicas(minReplicas):: self + {minReplicas: minReplicas}, - // target average CPU utilization (represented as a percentage of requested CPU) over all the pods; if not specified the default autoscaling policy will be used. - withTargetCpuUtilizationPercentage(targetCpuUtilizationPercentage):: self + {targetCPUUtilizationPercentage: targetCpuUtilizationPercentage}, - mixin:: { - // reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption and will set the desired number of pods by using its Scale subresource. - scaleTargetRef:: { - local __scaleTargetRefMixin(scaleTargetRef) = {scaleTargetRef+: scaleTargetRef}, - mixinInstance(scaleTargetRef):: __scaleTargetRefMixin(scaleTargetRef), - // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __scaleTargetRefMixin({name: name}), - }, - scaleTargetRefType:: hidden.autoscaling.v1.crossVersionObjectReference, - }, - }, - // current status of a horizontal pod autoscaler - horizontalPodAutoscalerStatus:: { - new():: {}, - // current average CPU utilization over all pods, represented as a percentage of requested CPU, e.g. 70 means that an average pod is using now 70% of its requested CPU. - withCurrentCpuUtilizationPercentage(currentCpuUtilizationPercentage):: self + {currentCPUUtilizationPercentage: currentCpuUtilizationPercentage}, - // current number of replicas of pods managed by this autoscaler. - withCurrentReplicas(currentReplicas):: self + {currentReplicas: currentReplicas}, - // desired number of replicas of pods managed by this autoscaler. - withDesiredReplicas(desiredReplicas):: self + {desiredReplicas: desiredReplicas}, - // most recent generation observed by this autoscaler. - withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration}, - mixin:: { - // last time the HorizontalPodAutoscaler scaled the number of pods; used by the autoscaler to control how often the number of pods is changed. - lastScaleTime:: { - local __lastScaleTimeMixin(lastScaleTime) = {lastScaleTime+: lastScaleTime}, - mixinInstance(lastScaleTime):: __lastScaleTimeMixin(lastScaleTime), - }, - lastScaleTimeType:: hidden.meta.v1.time, - }, - }, - // ScaleSpec describes the attributes of a scale subresource. - scaleSpec:: { - new():: {}, - // desired number of instances for the scaled object. - withReplicas(replicas):: self + {replicas: replicas}, - mixin:: { - }, - }, - // ScaleStatus represents the current status of a scale subresource. - scaleStatus:: { - new():: {}, - // actual number of observed instances of the scaled object. - withReplicas(replicas):: self + {replicas: replicas}, - // label query over pods that should match the replicas count. This is same as the label selector but in the string format to avoid introspection by clients. The string will be in the same format as the query-param syntax. More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors - withSelector(selector):: self + {selector: selector}, - mixin:: { - }, - }, - }, - v2alpha1:: { - local apiVersion = {apiVersion: "autoscaling/v2alpha1"}, - // CrossVersionObjectReference contains enough information to let you identify the referred resource. - crossVersionObjectReference:: { - new():: {}, - // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + {name: name}, - mixin:: { - }, - }, - // HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point. - horizontalPodAutoscalerCondition:: { - new():: {}, - // message is a human-readable explanation containing details about the transition - withMessage(message):: self + {message: message}, - // reason is the reason for the condition's last transition. - withReason(reason):: self + {reason: reason}, - // status is the status of the condition (True, False, Unknown) - withStatus(status):: self + {status: status}, - // type describes the current condition - withType(type):: self + {type: type}, - mixin:: { - // lastTransitionTime is the last time the condition transitioned from one status to another - lastTransitionTime:: { - local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime}, - mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime), - }, - lastTransitionTimeType:: hidden.meta.v1.time, - }, - }, - // HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler. - horizontalPodAutoscalerSpec:: { - new():: {}, - // maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas. - withMaxReplicas(maxReplicas):: self + {maxReplicas: maxReplicas}, - // metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. - withMetrics(metrics):: self + if std.type(metrics) == "array" then {metrics: metrics} else {metrics: [metrics]}, - // metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. - withMetricsMixin(metrics):: self + if std.type(metrics) == "array" then {metrics+: metrics} else {metrics+: [metrics]}, - metricsType:: hidden.autoscaling.v2alpha1.metricSpec, - // minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod. - withMinReplicas(minReplicas):: self + {minReplicas: minReplicas}, - mixin:: { - // scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count. - scaleTargetRef:: { - local __scaleTargetRefMixin(scaleTargetRef) = {scaleTargetRef+: scaleTargetRef}, - mixinInstance(scaleTargetRef):: __scaleTargetRefMixin(scaleTargetRef), - // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __scaleTargetRefMixin({name: name}), - }, - scaleTargetRefType:: hidden.autoscaling.v2alpha1.crossVersionObjectReference, - }, - }, - // HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler. - horizontalPodAutoscalerStatus:: { - new():: {}, - // conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met. - withConditions(conditions):: self + if std.type(conditions) == "array" then {conditions: conditions} else {conditions: [conditions]}, - // conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met. - withConditionsMixin(conditions):: self + if std.type(conditions) == "array" then {conditions+: conditions} else {conditions+: [conditions]}, - conditionsType:: hidden.autoscaling.v2alpha1.horizontalPodAutoscalerCondition, - // currentMetrics is the last read state of the metrics used by this autoscaler. - withCurrentMetrics(currentMetrics):: self + if std.type(currentMetrics) == "array" then {currentMetrics: currentMetrics} else {currentMetrics: [currentMetrics]}, - // currentMetrics is the last read state of the metrics used by this autoscaler. - withCurrentMetricsMixin(currentMetrics):: self + if std.type(currentMetrics) == "array" then {currentMetrics+: currentMetrics} else {currentMetrics+: [currentMetrics]}, - currentMetricsType:: hidden.autoscaling.v2alpha1.metricStatus, - // currentReplicas is current number of replicas of pods managed by this autoscaler, as last seen by the autoscaler. - withCurrentReplicas(currentReplicas):: self + {currentReplicas: currentReplicas}, - // desiredReplicas is the desired number of replicas of pods managed by this autoscaler, as last calculated by the autoscaler. - withDesiredReplicas(desiredReplicas):: self + {desiredReplicas: desiredReplicas}, - // observedGeneration is the most recent generation observed by this autoscaler. - withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration}, - mixin:: { - // lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, used by the autoscaler to control how often the number of pods is changed. - lastScaleTime:: { - local __lastScaleTimeMixin(lastScaleTime) = {lastScaleTime+: lastScaleTime}, - mixinInstance(lastScaleTime):: __lastScaleTimeMixin(lastScaleTime), - }, - lastScaleTimeType:: hidden.meta.v1.time, - }, - }, - // MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once). - metricSpec:: { - new():: {}, - // type is the type of metric source. It should match one of the fields below. - withType(type):: self + {type: type}, - mixin:: { - // object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object). - object:: { - local __objectMixin(object) = {object+: object}, - mixinInstance(object):: __objectMixin(object), - // metricName is the name of the metric in question. - withMetricName(metricName):: self + __objectMixin({metricName: metricName}), - // target is the described Kubernetes object. - target:: { - local __targetMixin(target) = __objectMixin({target+: target}), - mixinInstance(target):: __targetMixin(target), - // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __targetMixin({name: name}), - }, - targetType:: hidden.autoscaling.v2alpha1.crossVersionObjectReference, - // targetValue is the target value of the metric (as a quantity). - targetValue:: { - local __targetValueMixin(targetValue) = __objectMixin({targetValue+: targetValue}), - mixinInstance(targetValue):: __targetValueMixin(targetValue), - }, - targetValueType:: hidden.core.resource.quantity, - }, - objectType:: hidden.autoscaling.v2alpha1.objectMetricSource, - // pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value. - pods:: { - local __podsMixin(pods) = {pods+: pods}, - mixinInstance(pods):: __podsMixin(pods), - // metricName is the name of the metric in question - withMetricName(metricName):: self + __podsMixin({metricName: metricName}), - // targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity) - targetAverageValue:: { - local __targetAverageValueMixin(targetAverageValue) = __podsMixin({targetAverageValue+: targetAverageValue}), - mixinInstance(targetAverageValue):: __targetAverageValueMixin(targetAverageValue), - }, - targetAverageValueType:: hidden.core.resource.quantity, - }, - podsType:: hidden.autoscaling.v2alpha1.podsMetricSource, - // resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source. - resource:: { - local __resourceMixin(resource) = {resource+: resource}, - mixinInstance(resource):: __resourceMixin(resource), - // name is the name of the resource in question. - withName(name):: self + __resourceMixin({name: name}), - // targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. - withTargetAverageUtilization(targetAverageUtilization):: self + __resourceMixin({targetAverageUtilization: targetAverageUtilization}), - // targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the "pods" metric source type. - targetAverageValue:: { - local __targetAverageValueMixin(targetAverageValue) = __resourceMixin({targetAverageValue+: targetAverageValue}), - mixinInstance(targetAverageValue):: __targetAverageValueMixin(targetAverageValue), - }, - targetAverageValueType:: hidden.core.resource.quantity, - }, - resourceType:: hidden.autoscaling.v2alpha1.resourceMetricSource, - }, - }, - // MetricStatus describes the last-read state of a single metric. - metricStatus:: { - new():: {}, - // type is the type of metric source. It will match one of the fields below. - withType(type):: self + {type: type}, - mixin:: { - // object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object). - object:: { - local __objectMixin(object) = {object+: object}, - mixinInstance(object):: __objectMixin(object), - // currentValue is the current value of the metric (as a quantity). - currentValue:: { - local __currentValueMixin(currentValue) = __objectMixin({currentValue+: currentValue}), - mixinInstance(currentValue):: __currentValueMixin(currentValue), - }, - currentValueType:: hidden.core.resource.quantity, - // metricName is the name of the metric in question. - withMetricName(metricName):: self + __objectMixin({metricName: metricName}), - // target is the described Kubernetes object. - target:: { - local __targetMixin(target) = __objectMixin({target+: target}), - mixinInstance(target):: __targetMixin(target), - // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __targetMixin({name: name}), - }, - targetType:: hidden.autoscaling.v2alpha1.crossVersionObjectReference, - }, - objectType:: hidden.autoscaling.v2alpha1.objectMetricStatus, - // pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value. - pods:: { - local __podsMixin(pods) = {pods+: pods}, - mixinInstance(pods):: __podsMixin(pods), - // currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity) - currentAverageValue:: { - local __currentAverageValueMixin(currentAverageValue) = __podsMixin({currentAverageValue+: currentAverageValue}), - mixinInstance(currentAverageValue):: __currentAverageValueMixin(currentAverageValue), - }, - currentAverageValueType:: hidden.core.resource.quantity, - // metricName is the name of the metric in question - withMetricName(metricName):: self + __podsMixin({metricName: metricName}), - }, - podsType:: hidden.autoscaling.v2alpha1.podsMetricStatus, - // resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source. - resource:: { - local __resourceMixin(resource) = {resource+: resource}, - mixinInstance(resource):: __resourceMixin(resource), - // currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. It will only be present if `targetAverageValue` was set in the corresponding metric specification. - withCurrentAverageUtilization(currentAverageUtilization):: self + __resourceMixin({currentAverageUtilization: currentAverageUtilization}), - // currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the "pods" metric source type. It will always be set, regardless of the corresponding metric specification. - currentAverageValue:: { - local __currentAverageValueMixin(currentAverageValue) = __resourceMixin({currentAverageValue+: currentAverageValue}), - mixinInstance(currentAverageValue):: __currentAverageValueMixin(currentAverageValue), - }, - currentAverageValueType:: hidden.core.resource.quantity, - // name is the name of the resource in question. - withName(name):: self + __resourceMixin({name: name}), - }, - resourceType:: hidden.autoscaling.v2alpha1.resourceMetricStatus, - }, - }, - // ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object). - objectMetricSource:: { - new():: {}, - // metricName is the name of the metric in question. - withMetricName(metricName):: self + {metricName: metricName}, - mixin:: { - // target is the described Kubernetes object. - target:: { - local __targetMixin(target) = {target+: target}, - mixinInstance(target):: __targetMixin(target), - // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __targetMixin({name: name}), - }, - targetType:: hidden.autoscaling.v2alpha1.crossVersionObjectReference, - // targetValue is the target value of the metric (as a quantity). - targetValue:: { - local __targetValueMixin(targetValue) = {targetValue+: targetValue}, - mixinInstance(targetValue):: __targetValueMixin(targetValue), - }, - targetValueType:: hidden.core.resource.quantity, - }, - }, - // ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object). - objectMetricStatus:: { - new():: {}, - // metricName is the name of the metric in question. - withMetricName(metricName):: self + {metricName: metricName}, - mixin:: { - // currentValue is the current value of the metric (as a quantity). - currentValue:: { - local __currentValueMixin(currentValue) = {currentValue+: currentValue}, - mixinInstance(currentValue):: __currentValueMixin(currentValue), - }, - currentValueType:: hidden.core.resource.quantity, - // target is the described Kubernetes object. - target:: { - local __targetMixin(target) = {target+: target}, - mixinInstance(target):: __targetMixin(target), - // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __targetMixin({name: name}), - }, - targetType:: hidden.autoscaling.v2alpha1.crossVersionObjectReference, - }, - }, - // PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value. - podsMetricSource:: { - new():: {}, - // metricName is the name of the metric in question - withMetricName(metricName):: self + {metricName: metricName}, - mixin:: { - // targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity) - targetAverageValue:: { - local __targetAverageValueMixin(targetAverageValue) = {targetAverageValue+: targetAverageValue}, - mixinInstance(targetAverageValue):: __targetAverageValueMixin(targetAverageValue), - }, - targetAverageValueType:: hidden.core.resource.quantity, - }, - }, - // PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second). - podsMetricStatus:: { - new():: {}, - // metricName is the name of the metric in question - withMetricName(metricName):: self + {metricName: metricName}, - mixin:: { - // currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity) - currentAverageValue:: { - local __currentAverageValueMixin(currentAverageValue) = {currentAverageValue+: currentAverageValue}, - mixinInstance(currentAverageValue):: __currentAverageValueMixin(currentAverageValue), - }, - currentAverageValueType:: hidden.core.resource.quantity, - }, - }, - // ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source. Only one "target" type should be set. - resourceMetricSource:: { - new():: {}, - // name is the name of the resource in question. - withName(name):: self + {name: name}, - // targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. - withTargetAverageUtilization(targetAverageUtilization):: self + {targetAverageUtilization: targetAverageUtilization}, - mixin:: { - // targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the "pods" metric source type. - targetAverageValue:: { - local __targetAverageValueMixin(targetAverageValue) = {targetAverageValue+: targetAverageValue}, - mixinInstance(targetAverageValue):: __targetAverageValueMixin(targetAverageValue), - }, - targetAverageValueType:: hidden.core.resource.quantity, - }, - }, - // ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the "pods" source. - resourceMetricStatus:: { - new():: {}, - // currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. It will only be present if `targetAverageValue` was set in the corresponding metric specification. - withCurrentAverageUtilization(currentAverageUtilization):: self + {currentAverageUtilization: currentAverageUtilization}, - // name is the name of the resource in question. - withName(name):: self + {name: name}, - mixin:: { - // currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the "pods" metric source type. It will always be set, regardless of the corresponding metric specification. - currentAverageValue:: { - local __currentAverageValueMixin(currentAverageValue) = {currentAverageValue+: currentAverageValue}, - mixinInstance(currentAverageValue):: __currentAverageValueMixin(currentAverageValue), - }, - currentAverageValueType:: hidden.core.resource.quantity, - }, - }, - }, - }, - batch:: { - v1:: { - local apiVersion = {apiVersion: "batch/v1"}, - // JobCondition describes current state of a job. - jobCondition:: { - new():: {}, - // Human readable message indicating details about last transition. - withMessage(message):: self + {message: message}, - // (brief) reason for the condition's last transition. - withReason(reason):: self + {reason: reason}, - // Type of job condition, Complete or Failed. - withType(type):: self + {type: type}, - mixin:: { - // Last time the condition was checked. - lastProbeTime:: { - local __lastProbeTimeMixin(lastProbeTime) = {lastProbeTime+: lastProbeTime}, - mixinInstance(lastProbeTime):: __lastProbeTimeMixin(lastProbeTime), - }, - lastProbeTimeType:: hidden.meta.v1.time, - // Last time the condition transit from one status to another. - lastTransitionTime:: { - local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime}, - mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime), - }, - lastTransitionTimeType:: hidden.meta.v1.time, - }, - }, - // JobSpec describes how the job execution will look like. - jobSpec:: { - new():: {}, - // Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + {activeDeadlineSeconds: activeDeadlineSeconds}, - // Specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ - withCompletions(completions):: self + {completions: completions}, - // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://git.k8s.io/community/contributors/design-proposals/selector-generation.md - withManualSelector(manualSelector):: self + {manualSelector: manualSelector}, - // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ - withParallelism(parallelism):: self + {parallelism: parallelism}, - mixin:: { - // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors - selector:: { - local __selectorMixin(selector) = {selector+: selector}, - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ - template:: { - local __templateMixin(template) = {template+: template}, - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - }, - }, - // JobStatus represents the current state of a Job. - jobStatus:: { - new():: {}, - // The number of actively running pods. - withActive(active):: self + {active: active}, - // The latest available observations of an object's current state. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ - withConditions(conditions):: self + if std.type(conditions) == "array" then {conditions: conditions} else {conditions: [conditions]}, - // The latest available observations of an object's current state. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ - withConditionsMixin(conditions):: self + if std.type(conditions) == "array" then {conditions+: conditions} else {conditions+: [conditions]}, - conditionsType:: hidden.batch.v1.jobCondition, - // The number of pods which reached phase Failed. - withFailed(failed):: self + {failed: failed}, - // The number of pods which reached phase Succeeded. - withSucceeded(succeeded):: self + {succeeded: succeeded}, - mixin:: { - // Represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC. - completionTime:: { - local __completionTimeMixin(completionTime) = {completionTime+: completionTime}, - mixinInstance(completionTime):: __completionTimeMixin(completionTime), - }, - completionTimeType:: hidden.meta.v1.time, - // Represents time when the job was acknowledged by the job controller. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC. - startTime:: { - local __startTimeMixin(startTime) = {startTime+: startTime}, - mixinInstance(startTime):: __startTimeMixin(startTime), - }, - startTimeType:: hidden.meta.v1.time, - }, - }, - }, - v2alpha1:: { - local apiVersion = {apiVersion: "batch/v2alpha1"}, - // CronJobSpec describes how the job execution will look like and when it will actually run. - cronJobSpec:: { - new():: {}, - // Specifies how to treat concurrent executions of a Job. Defaults to Allow. - withConcurrencyPolicy(concurrencyPolicy):: self + {concurrencyPolicy: concurrencyPolicy}, - // The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. - withFailedJobsHistoryLimit(failedJobsHistoryLimit):: self + {failedJobsHistoryLimit: failedJobsHistoryLimit}, - // The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron. - withSchedule(schedule):: self + {schedule: schedule}, - // Optional deadline in seconds for starting the job if it misses scheduled time for any reason. Missed jobs executions will be counted as failed ones. - withStartingDeadlineSeconds(startingDeadlineSeconds):: self + {startingDeadlineSeconds: startingDeadlineSeconds}, - // The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. - withSuccessfulJobsHistoryLimit(successfulJobsHistoryLimit):: self + {successfulJobsHistoryLimit: successfulJobsHistoryLimit}, - // This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false. - withSuspend(suspend):: self + {suspend: suspend}, - mixin:: { - // Specifies the job that will be created when executing a CronJob. - jobTemplate:: { - local __jobTemplateMixin(jobTemplate) = {jobTemplate+: jobTemplate}, - mixinInstance(jobTemplate):: __jobTemplateMixin(jobTemplate), - // Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __jobTemplateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __jobTemplateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // Specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ - withCompletions(completions):: self + __specMixin({completions: completions}), - // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://git.k8s.io/community/contributors/design-proposals/selector-generation.md - withManualSelector(manualSelector):: self + __specMixin({manualSelector: manualSelector}), - // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ - withParallelism(parallelism):: self + __specMixin({parallelism: parallelism}), - // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors - selector:: { - local __selectorMixin(selector) = __specMixin({selector+: selector}), - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ - template:: { - local __templateMixin(template) = __specMixin({template+: template}), - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - }, - specType:: hidden.batch.v1.jobSpec, - }, - jobTemplateType:: hidden.batch.v2alpha1.jobTemplateSpec, - }, - }, - // CronJobStatus represents the current state of a cron job. - cronJobStatus:: { - new():: {}, - // A list of pointers to currently running jobs. - withActive(active):: self + if std.type(active) == "array" then {active: active} else {active: [active]}, - // A list of pointers to currently running jobs. - withActiveMixin(active):: self + if std.type(active) == "array" then {active+: active} else {active+: [active]}, - activeType:: hidden.core.v1.objectReference, - mixin:: { - // Information when was the last time the job was successfully scheduled. - lastScheduleTime:: { - local __lastScheduleTimeMixin(lastScheduleTime) = {lastScheduleTime+: lastScheduleTime}, - mixinInstance(lastScheduleTime):: __lastScheduleTimeMixin(lastScheduleTime), - }, - lastScheduleTimeType:: hidden.meta.v1.time, - }, - }, - // JobTemplateSpec describes the data a Job should have when created from a template - jobTemplateSpec:: { - new():: {}, - mixin:: { - // Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // Specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ - withCompletions(completions):: self + __specMixin({completions: completions}), - // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://git.k8s.io/community/contributors/design-proposals/selector-generation.md - withManualSelector(manualSelector):: self + __specMixin({manualSelector: manualSelector}), - // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ - withParallelism(parallelism):: self + __specMixin({parallelism: parallelism}), - // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors - selector:: { - local __selectorMixin(selector) = __specMixin({selector+: selector}), - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ - template:: { - local __templateMixin(template) = __specMixin({template+: template}), - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - }, - specType:: hidden.batch.v1.jobSpec, - }, - }, - }, - }, - certificates:: { - v1beta1:: { - local apiVersion = {apiVersion: "certificates/v1beta1"}, - // - certificateSigningRequestCondition:: { - new():: {}, - // human readable message with details about the request state - withMessage(message):: self + {message: message}, - // brief reason for the request state - withReason(reason):: self + {reason: reason}, - // request approval state, currently Approved or Denied. - withType(type):: self + {type: type}, - mixin:: { - // timestamp for the last update to this condition - lastUpdateTime:: { - local __lastUpdateTimeMixin(lastUpdateTime) = {lastUpdateTime+: lastUpdateTime}, - mixinInstance(lastUpdateTime):: __lastUpdateTimeMixin(lastUpdateTime), - }, - lastUpdateTimeType:: hidden.meta.v1.time, - }, - }, - // This information is immutable after the request is created. Only the Request and Usages fields can be set on creation, other fields are derived by Kubernetes and cannot be modified by users. - certificateSigningRequestSpec:: { - new():: {}, - // Extra information about the requesting user. See user.Info interface for details. - withExtra(extra):: self + {extra: extra}, - // Extra information about the requesting user. See user.Info interface for details. - withExtraMixin(extra):: self + {extra+: extra}, - // Group information about the requesting user. See user.Info interface for details. - withGroups(groups):: self + if std.type(groups) == "array" then {groups: groups} else {groups: [groups]}, - // Group information about the requesting user. See user.Info interface for details. - withGroupsMixin(groups):: self + if std.type(groups) == "array" then {groups+: groups} else {groups+: [groups]}, - // Base64-encoded PKCS#10 CSR data - withRequest(request):: self + {request: request}, - // UID information about the requesting user. See user.Info interface for details. - withUid(uid):: self + {uid: uid}, - // allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3 - // https://tools.ietf.org/html/rfc5280#section-4.2.1.12 - withUsages(usages):: self + if std.type(usages) == "array" then {usages: usages} else {usages: [usages]}, - // allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3 - // https://tools.ietf.org/html/rfc5280#section-4.2.1.12 - withUsagesMixin(usages):: self + if std.type(usages) == "array" then {usages+: usages} else {usages+: [usages]}, - // Information about the requesting user. See user.Info interface for details. - withUsername(username):: self + {username: username}, - mixin:: { - }, - }, - // - certificateSigningRequestStatus:: { - new():: {}, - // If request was approved, the controller will place the issued certificate here. - withCertificate(certificate):: self + {certificate: certificate}, - // Conditions applied to the request, such as approval or denial. - withConditions(conditions):: self + if std.type(conditions) == "array" then {conditions: conditions} else {conditions: [conditions]}, - // Conditions applied to the request, such as approval or denial. - withConditionsMixin(conditions):: self + if std.type(conditions) == "array" then {conditions+: conditions} else {conditions+: [conditions]}, - conditionsType:: hidden.certificates.v1beta1.certificateSigningRequestCondition, - mixin:: { - }, - }, - }, - }, - core:: { - intstr:: { - local apiVersion = {apiVersion: "intstr"}, - // - intOrString:: { - new():: {}, - mixin:: { - }, - }, - }, - resource:: { - local apiVersion = {apiVersion: "resource"}, - // - quantity:: { - new():: {}, - mixin:: { - }, - }, - }, - v1:: { - local apiVersion = {apiVersion: "v1"}, - // Represents a Persistent Disk resource in AWS. - // - // An AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling. - awsElasticBlockStoreVolumeSource:: { - new():: {}, - // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - withFsType(fsType):: self + {fsType: fsType}, - // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). - withPartition(partition):: self + {partition: partition}, - // Specify "true" to force and set the ReadOnly property in VolumeMounts to "true". If omitted, the default is "false". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - withReadOnly(readOnly):: self + {readOnly: readOnly}, - // Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - withVolumeId(volumeId):: self + {volumeID: volumeId}, - mixin:: { - }, - }, - // Affinity is a group of affinity scheduling rules. - affinity:: { - new():: {}, - mixin:: { - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = {nodeAffinity+: nodeAffinity}, - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = {podAffinity+: podAffinity}, - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = {podAntiAffinity+: podAntiAffinity}, - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - }, - // AttachedVolume describes a volume attached to a node - attachedVolume:: { - new():: {}, - // DevicePath represents the device path where the volume should be available - withDevicePath(devicePath):: self + {devicePath: devicePath}, - // Name of the attached volume - withName(name):: self + {name: name}, - mixin:: { - }, - }, - // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. - azureDiskVolumeSource:: { - new():: {}, - // Host Caching mode: None, Read Only, Read Write. - withCachingMode(cachingMode):: self + {cachingMode: cachingMode}, - // The Name of the data disk in the blob storage - withDiskName(diskName):: self + {diskName: diskName}, - // The URI the data disk in the blob storage - withDiskUri(diskUri):: self + {diskURI: diskUri}, - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + {fsType: fsType}, - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + {readOnly: readOnly}, - mixin:: { - }, - }, - // AzureFile represents an Azure File Service mount on the host and bind mount to the pod. - azureFileVolumeSource:: { - new():: {}, - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + {readOnly: readOnly}, - // the name of secret that contains Azure Storage Account Name and Key - withSecretName(secretName):: self + {secretName: secretName}, - // Share Name - withShareName(shareName):: self + {shareName: shareName}, - mixin:: { - }, - }, - // Adds and removes POSIX capabilities from running containers. - capabilities:: { - new():: {}, - // Added capabilities - withAdd(add):: self + if std.type(add) == "array" then {add: add} else {add: [add]}, - // Added capabilities - withAddMixin(add):: self + if std.type(add) == "array" then {add+: add} else {add+: [add]}, - // Removed capabilities - withDrop(drop):: self + if std.type(drop) == "array" then {drop: drop} else {drop: [drop]}, - // Removed capabilities - withDropMixin(drop):: self + if std.type(drop) == "array" then {drop+: drop} else {drop+: [drop]}, - mixin:: { - }, - }, - // Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling. - cephFsVolumeSource:: { - new():: {}, - // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withMonitors(monitors):: self + if std.type(monitors) == "array" then {monitors: monitors} else {monitors: [monitors]}, - // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withMonitorsMixin(monitors):: self + if std.type(monitors) == "array" then {monitors+: monitors} else {monitors+: [monitors]}, - // Optional: Used as the mounted root, rather than the full Ceph tree, default is / - withPath(path):: self + {path: path}, - // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withReadOnly(readOnly):: self + {readOnly: readOnly}, - // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withSecretFile(secretFile):: self + {secretFile: secretFile}, - // Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withUser(user):: self + {user: user}, - mixin:: { - // Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - secretRef:: { - local __secretRefMixin(secretRef) = {secretRef+: secretRef}, - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - }, - }, - // Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling. - cinderVolumeSource:: { - new():: {}, - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md - withFsType(fsType):: self + {fsType: fsType}, - // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md - withReadOnly(readOnly):: self + {readOnly: readOnly}, - // volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md - withVolumeId(volumeId):: self + {volumeID: volumeId}, - mixin:: { - }, - }, - // Information about the condition of a component. - componentCondition:: { - new():: {}, - // Message about the condition for a component. For example, information about a health check. - withMessage(message):: self + {message: message}, - // Type of condition for a component. Valid value: "Healthy" - withType(type):: self + {type: type}, - mixin:: { - }, - }, - // ConfigMapEnvSource selects a ConfigMap to populate the environment variables with. - // - // The contents of the target ConfigMap's Data field will represent the key-value pairs as environment variables. - configMapEnvSource:: { - new():: {}, - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + {name: name}, - // Specify whether the ConfigMap must be defined - withOptional(optional):: self + {optional: optional}, - mixin:: { - }, - }, - // Selects a key from a ConfigMap. - configMapKeySelector:: { - new():: {}, - // The key to select. - withKey(key):: self + {key: key}, - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + {name: name}, - // Specify whether the ConfigMap or it's key must be defined - withOptional(optional):: self + {optional: optional}, - mixin:: { - }, - }, - // Adapts a ConfigMap into a projected volume. - // - // The contents of the target ConfigMap's Data field will be presented in a projected volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. Note that this is identical to a configmap volume source without the default mode. - configMapProjection:: { - new():: {}, - // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.keyToPath, - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + {name: name}, - // Specify whether the ConfigMap or it's keys must be defined - withOptional(optional):: self + {optional: optional}, - mixin:: { - }, - }, - // Adapts a ConfigMap into a volume. - // - // The contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling. - configMapVolumeSource:: { - new():: {}, - // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set. - withDefaultMode(defaultMode):: self + {defaultMode: defaultMode}, - // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.keyToPath, - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + {name: name}, - // Specify whether the ConfigMap or it's keys must be defined - withOptional(optional):: self + {optional: optional}, - mixin:: { - }, - }, - // A single application container that you want to run within a pod. - container:: { - new(name, image):: {} + self.withName(name) + self.withImage(image), - // Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell - withArgs(args):: self + if std.type(args) == "array" then {args: args} else {args: [args]}, - // Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell - withArgsMixin(args):: self + if std.type(args) == "array" then {args+: args} else {args+: [args]}, - // Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell - withCommand(command):: self + if std.type(command) == "array" then {command: command} else {command: [command]}, - // Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell - withCommandMixin(command):: self + if std.type(command) == "array" then {command+: command} else {command+: [command]}, - // List of environment variables to set in the container. Cannot be updated. - withEnv(env):: self + if std.type(env) == "array" then {env: env} else {env: [env]}, - // List of environment variables to set in the container. Cannot be updated. - withEnvMixin(env):: self + if std.type(env) == "array" then {env+: env} else {env+: [env]}, - // List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated. - withEnvFrom(envFrom):: self + if std.type(envFrom) == "array" then {envFrom: envFrom} else {envFrom: [envFrom]}, - // List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated. - withEnvFromMixin(envFrom):: self + if std.type(envFrom) == "array" then {envFrom+: envFrom} else {envFrom+: [envFrom]}, - envFromType:: hidden.core.v1.envFromSource, - envType:: hidden.core.v1.envVar, - // Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images - withImage(image):: self + {image: image}, - // Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images - withImagePullPolicy(imagePullPolicy):: self + {imagePullPolicy: imagePullPolicy}, - // Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated. - withName(name):: self + {name: name}, - // List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default "0.0.0.0" address inside a container will be accessible from the network. Cannot be updated. - withPorts(ports):: self + if std.type(ports) == "array" then {ports: ports} else {ports: [ports]}, - // List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default "0.0.0.0" address inside a container will be accessible from the network. Cannot be updated. - withPortsMixin(ports):: self + if std.type(ports) == "array" then {ports+: ports} else {ports+: [ports]}, - portsType:: hidden.core.v1.containerPort, - // Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false. - withStdin(stdin):: self + {stdin: stdin}, - // Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false - withStdinOnce(stdinOnce):: self + {stdinOnce: stdinOnce}, - // Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated. - withTerminationMessagePath(terminationMessagePath):: self + {terminationMessagePath: terminationMessagePath}, - // Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated. - withTerminationMessagePolicy(terminationMessagePolicy):: self + {terminationMessagePolicy: terminationMessagePolicy}, - // Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false. - withTty(tty):: self + {tty: tty}, - // Pod volumes to mount into the container's filesystem. Cannot be updated. - withVolumeMounts(volumeMounts):: self + if std.type(volumeMounts) == "array" then {volumeMounts: volumeMounts} else {volumeMounts: [volumeMounts]}, - // Pod volumes to mount into the container's filesystem. Cannot be updated. - withVolumeMountsMixin(volumeMounts):: self + if std.type(volumeMounts) == "array" then {volumeMounts+: volumeMounts} else {volumeMounts+: [volumeMounts]}, - volumeMountsType:: hidden.core.v1.volumeMount, - // Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated. - withWorkingDir(workingDir):: self + {workingDir: workingDir}, - mixin:: { - // Actions that the management system should take in response to container lifecycle events. Cannot be updated. - lifecycle:: { - local __lifecycleMixin(lifecycle) = {lifecycle+: lifecycle}, - mixinInstance(lifecycle):: __lifecycleMixin(lifecycle), - // PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks - postStart:: { - local __postStartMixin(postStart) = __lifecycleMixin({postStart+: postStart}), - mixinInstance(postStart):: __postStartMixin(postStart), - // One and only one of the following should be specified. Exec specifies the action to take. - exec:: { - local __execMixin(exec) = __postStartMixin({exec+: exec}), - mixinInstance(exec):: __execMixin(exec), - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommand(command):: self + if std.type(command) == "array" then __execMixin({command: command}) else __execMixin({command: [command]}), - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommandMixin(command):: self + if std.type(command) == "array" then __execMixin({command+: command}) else __execMixin({command+: [command]}), - }, - execType:: hidden.core.v1.execAction, - // HTTPGet specifies the http request to perform. - httpGet:: { - local __httpGetMixin(httpGet) = __postStartMixin({httpGet+: httpGet}), - mixinInstance(httpGet):: __httpGetMixin(httpGet), - // Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. - withHost(host):: self + __httpGetMixin({host: host}), - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == "array" then __httpGetMixin({httpHeaders: httpHeaders}) else __httpGetMixin({httpHeaders: [httpHeaders]}), - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == "array" then __httpGetMixin({httpHeaders+: httpHeaders}) else __httpGetMixin({httpHeaders+: [httpHeaders]}), - httpHeadersType:: hidden.core.v1.httpHeader, - // Path to access on the HTTP server. - withPath(path):: self + __httpGetMixin({path: path}), - // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: __httpGetMixin({port: port}), - // Scheme to use for connecting to the host. Defaults to HTTP. - withScheme(scheme):: self + __httpGetMixin({scheme: scheme}), - }, - httpGetType:: hidden.core.v1.httpGetAction, - // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported - tcpSocket:: { - local __tcpSocketMixin(tcpSocket) = __postStartMixin({tcpSocket+: tcpSocket}), - mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket), - // Optional: Host name to connect to, defaults to the pod IP. - withHost(host):: self + __tcpSocketMixin({host: host}), - // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: __tcpSocketMixin({port: port}), - }, - tcpSocketType:: hidden.core.v1.tcpSocketAction, - }, - postStartType:: hidden.core.v1.handler, - // PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks - preStop:: { - local __preStopMixin(preStop) = __lifecycleMixin({preStop+: preStop}), - mixinInstance(preStop):: __preStopMixin(preStop), - // One and only one of the following should be specified. Exec specifies the action to take. - exec:: { - local __execMixin(exec) = __preStopMixin({exec+: exec}), - mixinInstance(exec):: __execMixin(exec), - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommand(command):: self + if std.type(command) == "array" then __execMixin({command: command}) else __execMixin({command: [command]}), - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommandMixin(command):: self + if std.type(command) == "array" then __execMixin({command+: command}) else __execMixin({command+: [command]}), - }, - execType:: hidden.core.v1.execAction, - // HTTPGet specifies the http request to perform. - httpGet:: { - local __httpGetMixin(httpGet) = __preStopMixin({httpGet+: httpGet}), - mixinInstance(httpGet):: __httpGetMixin(httpGet), - // Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. - withHost(host):: self + __httpGetMixin({host: host}), - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == "array" then __httpGetMixin({httpHeaders: httpHeaders}) else __httpGetMixin({httpHeaders: [httpHeaders]}), - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == "array" then __httpGetMixin({httpHeaders+: httpHeaders}) else __httpGetMixin({httpHeaders+: [httpHeaders]}), - httpHeadersType:: hidden.core.v1.httpHeader, - // Path to access on the HTTP server. - withPath(path):: self + __httpGetMixin({path: path}), - // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: __httpGetMixin({port: port}), - // Scheme to use for connecting to the host. Defaults to HTTP. - withScheme(scheme):: self + __httpGetMixin({scheme: scheme}), - }, - httpGetType:: hidden.core.v1.httpGetAction, - // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported - tcpSocket:: { - local __tcpSocketMixin(tcpSocket) = __preStopMixin({tcpSocket+: tcpSocket}), - mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket), - // Optional: Host name to connect to, defaults to the pod IP. - withHost(host):: self + __tcpSocketMixin({host: host}), - // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: __tcpSocketMixin({port: port}), - }, - tcpSocketType:: hidden.core.v1.tcpSocketAction, - }, - preStopType:: hidden.core.v1.handler, - }, - lifecycleType:: hidden.core.v1.lifecycle, - // Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - livenessProbe:: { - local __livenessProbeMixin(livenessProbe) = {livenessProbe+: livenessProbe}, - mixinInstance(livenessProbe):: __livenessProbeMixin(livenessProbe), - // One and only one of the following should be specified. Exec specifies the action to take. - exec:: { - local __execMixin(exec) = __livenessProbeMixin({exec+: exec}), - mixinInstance(exec):: __execMixin(exec), - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommand(command):: self + if std.type(command) == "array" then __execMixin({command: command}) else __execMixin({command: [command]}), - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommandMixin(command):: self + if std.type(command) == "array" then __execMixin({command+: command}) else __execMixin({command+: [command]}), - }, - execType:: hidden.core.v1.execAction, - // Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1. - withFailureThreshold(failureThreshold):: self + __livenessProbeMixin({failureThreshold: failureThreshold}), - // HTTPGet specifies the http request to perform. - httpGet:: { - local __httpGetMixin(httpGet) = __livenessProbeMixin({httpGet+: httpGet}), - mixinInstance(httpGet):: __httpGetMixin(httpGet), - // Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. - withHost(host):: self + __httpGetMixin({host: host}), - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == "array" then __httpGetMixin({httpHeaders: httpHeaders}) else __httpGetMixin({httpHeaders: [httpHeaders]}), - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == "array" then __httpGetMixin({httpHeaders+: httpHeaders}) else __httpGetMixin({httpHeaders+: [httpHeaders]}), - httpHeadersType:: hidden.core.v1.httpHeader, - // Path to access on the HTTP server. - withPath(path):: self + __httpGetMixin({path: path}), - // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: __httpGetMixin({port: port}), - // Scheme to use for connecting to the host. Defaults to HTTP. - withScheme(scheme):: self + __httpGetMixin({scheme: scheme}), - }, - httpGetType:: hidden.core.v1.httpGetAction, - // Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - withInitialDelaySeconds(initialDelaySeconds):: self + __livenessProbeMixin({initialDelaySeconds: initialDelaySeconds}), - // How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. - withPeriodSeconds(periodSeconds):: self + __livenessProbeMixin({periodSeconds: periodSeconds}), - // Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1. - withSuccessThreshold(successThreshold):: self + __livenessProbeMixin({successThreshold: successThreshold}), - // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported - tcpSocket:: { - local __tcpSocketMixin(tcpSocket) = __livenessProbeMixin({tcpSocket+: tcpSocket}), - mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket), - // Optional: Host name to connect to, defaults to the pod IP. - withHost(host):: self + __tcpSocketMixin({host: host}), - // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: __tcpSocketMixin({port: port}), - }, - tcpSocketType:: hidden.core.v1.tcpSocketAction, - // Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - withTimeoutSeconds(timeoutSeconds):: self + __livenessProbeMixin({timeoutSeconds: timeoutSeconds}), - }, - livenessProbeType:: hidden.core.v1.probe, - // Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - readinessProbe:: { - local __readinessProbeMixin(readinessProbe) = {readinessProbe+: readinessProbe}, - mixinInstance(readinessProbe):: __readinessProbeMixin(readinessProbe), - // One and only one of the following should be specified. Exec specifies the action to take. - exec:: { - local __execMixin(exec) = __readinessProbeMixin({exec+: exec}), - mixinInstance(exec):: __execMixin(exec), - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommand(command):: self + if std.type(command) == "array" then __execMixin({command: command}) else __execMixin({command: [command]}), - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommandMixin(command):: self + if std.type(command) == "array" then __execMixin({command+: command}) else __execMixin({command+: [command]}), - }, - execType:: hidden.core.v1.execAction, - // Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1. - withFailureThreshold(failureThreshold):: self + __readinessProbeMixin({failureThreshold: failureThreshold}), - // HTTPGet specifies the http request to perform. - httpGet:: { - local __httpGetMixin(httpGet) = __readinessProbeMixin({httpGet+: httpGet}), - mixinInstance(httpGet):: __httpGetMixin(httpGet), - // Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. - withHost(host):: self + __httpGetMixin({host: host}), - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == "array" then __httpGetMixin({httpHeaders: httpHeaders}) else __httpGetMixin({httpHeaders: [httpHeaders]}), - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == "array" then __httpGetMixin({httpHeaders+: httpHeaders}) else __httpGetMixin({httpHeaders+: [httpHeaders]}), - httpHeadersType:: hidden.core.v1.httpHeader, - // Path to access on the HTTP server. - withPath(path):: self + __httpGetMixin({path: path}), - // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: __httpGetMixin({port: port}), - // Scheme to use for connecting to the host. Defaults to HTTP. - withScheme(scheme):: self + __httpGetMixin({scheme: scheme}), - }, - httpGetType:: hidden.core.v1.httpGetAction, - // Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - withInitialDelaySeconds(initialDelaySeconds):: self + __readinessProbeMixin({initialDelaySeconds: initialDelaySeconds}), - // How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. - withPeriodSeconds(periodSeconds):: self + __readinessProbeMixin({periodSeconds: periodSeconds}), - // Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1. - withSuccessThreshold(successThreshold):: self + __readinessProbeMixin({successThreshold: successThreshold}), - // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported - tcpSocket:: { - local __tcpSocketMixin(tcpSocket) = __readinessProbeMixin({tcpSocket+: tcpSocket}), - mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket), - // Optional: Host name to connect to, defaults to the pod IP. - withHost(host):: self + __tcpSocketMixin({host: host}), - // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: __tcpSocketMixin({port: port}), - }, - tcpSocketType:: hidden.core.v1.tcpSocketAction, - // Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - withTimeoutSeconds(timeoutSeconds):: self + __readinessProbeMixin({timeoutSeconds: timeoutSeconds}), - }, - readinessProbeType:: hidden.core.v1.probe, - // Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources - resources:: { - local __resourcesMixin(resources) = {resources+: resources}, - mixinInstance(resources):: __resourcesMixin(resources), - // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - withLimits(limits):: self + __resourcesMixin({limits: limits}), - // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - withLimitsMixin(limits):: self + __resourcesMixin({limits+: limits}), - // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - withRequests(requests):: self + __resourcesMixin({requests: requests}), - // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - withRequestsMixin(requests):: self + __resourcesMixin({requests+: requests}), - }, - resourcesType:: hidden.core.v1.resourceRequirements, - // Security options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md - securityContext:: { - local __securityContextMixin(securityContext) = {securityContext+: securityContext}, - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime. - capabilities:: { - local __capabilitiesMixin(capabilities) = __securityContextMixin({capabilities+: capabilities}), - mixinInstance(capabilities):: __capabilitiesMixin(capabilities), - // Added capabilities - withAdd(add):: self + if std.type(add) == "array" then __capabilitiesMixin({add: add}) else __capabilitiesMixin({add: [add]}), - // Added capabilities - withAddMixin(add):: self + if std.type(add) == "array" then __capabilitiesMixin({add+: add}) else __capabilitiesMixin({add+: [add]}), - // Removed capabilities - withDrop(drop):: self + if std.type(drop) == "array" then __capabilitiesMixin({drop: drop}) else __capabilitiesMixin({drop: [drop]}), - // Removed capabilities - withDropMixin(drop):: self + if std.type(drop) == "array" then __capabilitiesMixin({drop+: drop}) else __capabilitiesMixin({drop+: [drop]}), - }, - capabilitiesType:: hidden.core.v1.capabilities, - // Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false. - withPrivileged(privileged):: self + __securityContextMixin({privileged: privileged}), - // Whether this container has a read-only root filesystem. Default is false. - withReadOnlyRootFilesystem(readOnlyRootFilesystem):: self + __securityContextMixin({readOnlyRootFilesystem: readOnlyRootFilesystem}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - }, - securityContextType:: hidden.core.v1.securityContext, - }, - }, - // Describe a container image - containerImage:: { - new():: {}, - // Names by which this image is known. e.g. ["gcr.io/google_containers/hyperkube:v1.0.7", "dockerhub.io/google_containers/hyperkube:v1.0.7"] - withNames(names):: self + if std.type(names) == "array" then {names: names} else {names: [names]}, - // Names by which this image is known. e.g. ["gcr.io/google_containers/hyperkube:v1.0.7", "dockerhub.io/google_containers/hyperkube:v1.0.7"] - withNamesMixin(names):: self + if std.type(names) == "array" then {names+: names} else {names+: [names]}, - // The size of the image in bytes. - withSizeBytes(sizeBytes):: self + {sizeBytes: sizeBytes}, - mixin:: { - }, - }, - // ContainerPort represents a network port in a single container. - containerPort:: { - new(containerPort):: {} + self.withContainerPort(containerPort), - newNamed(name, containerPort):: {} + self.withName(name) + self.withContainerPort(containerPort), - // Number of port to expose on the pod's IP address. This must be a valid port number, 0 < x < 65536. - withContainerPort(containerPort):: self + {containerPort: containerPort}, - // What host IP to bind the external port to. - withHostIp(hostIp):: self + {hostIP: hostIp}, - // Number of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this. - withHostPort(hostPort):: self + {hostPort: hostPort}, - // If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services. - withName(name):: self + {name: name}, - // Protocol for port. Must be UDP or TCP. Defaults to "TCP". - withProtocol(protocol):: self + {protocol: protocol}, - mixin:: { - }, - }, - // ContainerState holds a possible state of container. Only one of its members may be specified. If none of them is specified, the default one is ContainerStateWaiting. - containerState:: { - new():: {}, - mixin:: { - // Details about a running container - running:: { - local __runningMixin(running) = {running+: running}, - mixinInstance(running):: __runningMixin(running), - // Time at which the container was last (re-)started - startedAt:: { - local __startedAtMixin(startedAt) = __runningMixin({startedAt+: startedAt}), - mixinInstance(startedAt):: __startedAtMixin(startedAt), - }, - startedAtType:: hidden.meta.v1.time, - }, - runningType:: hidden.core.v1.containerStateRunning, - // Details about a terminated container - terminated:: { - local __terminatedMixin(terminated) = {terminated+: terminated}, - mixinInstance(terminated):: __terminatedMixin(terminated), - // Container's ID in the format 'docker://' - withContainerId(containerId):: self + __terminatedMixin({containerID: containerId}), - // Exit status from the last termination of the container - withExitCode(exitCode):: self + __terminatedMixin({exitCode: exitCode}), - // Time at which the container last terminated - finishedAt:: { - local __finishedAtMixin(finishedAt) = __terminatedMixin({finishedAt+: finishedAt}), - mixinInstance(finishedAt):: __finishedAtMixin(finishedAt), - }, - finishedAtType:: hidden.meta.v1.time, - // Message regarding the last termination of the container - withMessage(message):: self + __terminatedMixin({message: message}), - // (brief) reason from the last termination of the container - withReason(reason):: self + __terminatedMixin({reason: reason}), - // Signal from the last termination of the container - withSignal(signal):: self + __terminatedMixin({signal: signal}), - // Time at which previous execution of the container started - startedAt:: { - local __startedAtMixin(startedAt) = __terminatedMixin({startedAt+: startedAt}), - mixinInstance(startedAt):: __startedAtMixin(startedAt), - }, - startedAtType:: hidden.meta.v1.time, - }, - terminatedType:: hidden.core.v1.containerStateTerminated, - // Details about a waiting container - waiting:: { - local __waitingMixin(waiting) = {waiting+: waiting}, - mixinInstance(waiting):: __waitingMixin(waiting), - // Message regarding why the container is not yet running. - withMessage(message):: self + __waitingMixin({message: message}), - // (brief) reason the container is not yet running. - withReason(reason):: self + __waitingMixin({reason: reason}), - }, - waitingType:: hidden.core.v1.containerStateWaiting, - }, - }, - // ContainerStateRunning is a running state of a container. - containerStateRunning:: { - new():: {}, - mixin:: { - // Time at which the container was last (re-)started - startedAt:: { - local __startedAtMixin(startedAt) = {startedAt+: startedAt}, - mixinInstance(startedAt):: __startedAtMixin(startedAt), - }, - startedAtType:: hidden.meta.v1.time, - }, - }, - // ContainerStateTerminated is a terminated state of a container. - containerStateTerminated:: { - new():: {}, - // Container's ID in the format 'docker://' - withContainerId(containerId):: self + {containerID: containerId}, - // Exit status from the last termination of the container - withExitCode(exitCode):: self + {exitCode: exitCode}, - // Message regarding the last termination of the container - withMessage(message):: self + {message: message}, - // (brief) reason from the last termination of the container - withReason(reason):: self + {reason: reason}, - // Signal from the last termination of the container - withSignal(signal):: self + {signal: signal}, - mixin:: { - // Time at which the container last terminated - finishedAt:: { - local __finishedAtMixin(finishedAt) = {finishedAt+: finishedAt}, - mixinInstance(finishedAt):: __finishedAtMixin(finishedAt), - }, - finishedAtType:: hidden.meta.v1.time, - // Time at which previous execution of the container started - startedAt:: { - local __startedAtMixin(startedAt) = {startedAt+: startedAt}, - mixinInstance(startedAt):: __startedAtMixin(startedAt), - }, - startedAtType:: hidden.meta.v1.time, - }, - }, - // ContainerStateWaiting is a waiting state of a container. - containerStateWaiting:: { - new():: {}, - // Message regarding why the container is not yet running. - withMessage(message):: self + {message: message}, - // (brief) reason the container is not yet running. - withReason(reason):: self + {reason: reason}, - mixin:: { - }, - }, - // ContainerStatus contains details for the current status of this container. - containerStatus:: { - new():: {}, - // Container's ID in the format 'docker://'. - withContainerId(containerId):: self + {containerID: containerId}, - // The image the container is running. More info: https://kubernetes.io/docs/concepts/containers/images - withImage(image):: self + {image: image}, - // ImageID of the container's image. - withImageId(imageId):: self + {imageID: imageId}, - // This must be a DNS_LABEL. Each container in a pod must have a unique name. Cannot be updated. - withName(name):: self + {name: name}, - // Specifies whether the container has passed its readiness probe. - withReady(ready):: self + {ready: ready}, - // The number of times the container has been restarted, currently based on the number of dead containers that have not yet been removed. Note that this is calculated from dead containers. But those containers are subject to garbage collection. This value will get capped at 5 by GC. - withRestartCount(restartCount):: self + {restartCount: restartCount}, - mixin:: { - // Details about the container's last termination condition. - lastState:: { - local __lastStateMixin(lastState) = {lastState+: lastState}, - mixinInstance(lastState):: __lastStateMixin(lastState), - // Details about a running container - running:: { - local __runningMixin(running) = __lastStateMixin({running+: running}), - mixinInstance(running):: __runningMixin(running), - // Time at which the container was last (re-)started - startedAt:: { - local __startedAtMixin(startedAt) = __runningMixin({startedAt+: startedAt}), - mixinInstance(startedAt):: __startedAtMixin(startedAt), - }, - startedAtType:: hidden.meta.v1.time, - }, - runningType:: hidden.core.v1.containerStateRunning, - // Details about a terminated container - terminated:: { - local __terminatedMixin(terminated) = __lastStateMixin({terminated+: terminated}), - mixinInstance(terminated):: __terminatedMixin(terminated), - // Container's ID in the format 'docker://' - withContainerId(containerId):: self + __terminatedMixin({containerID: containerId}), - // Exit status from the last termination of the container - withExitCode(exitCode):: self + __terminatedMixin({exitCode: exitCode}), - // Time at which the container last terminated - finishedAt:: { - local __finishedAtMixin(finishedAt) = __terminatedMixin({finishedAt+: finishedAt}), - mixinInstance(finishedAt):: __finishedAtMixin(finishedAt), - }, - finishedAtType:: hidden.meta.v1.time, - // Message regarding the last termination of the container - withMessage(message):: self + __terminatedMixin({message: message}), - // (brief) reason from the last termination of the container - withReason(reason):: self + __terminatedMixin({reason: reason}), - // Signal from the last termination of the container - withSignal(signal):: self + __terminatedMixin({signal: signal}), - // Time at which previous execution of the container started - startedAt:: { - local __startedAtMixin(startedAt) = __terminatedMixin({startedAt+: startedAt}), - mixinInstance(startedAt):: __startedAtMixin(startedAt), - }, - startedAtType:: hidden.meta.v1.time, - }, - terminatedType:: hidden.core.v1.containerStateTerminated, - // Details about a waiting container - waiting:: { - local __waitingMixin(waiting) = __lastStateMixin({waiting+: waiting}), - mixinInstance(waiting):: __waitingMixin(waiting), - // Message regarding why the container is not yet running. - withMessage(message):: self + __waitingMixin({message: message}), - // (brief) reason the container is not yet running. - withReason(reason):: self + __waitingMixin({reason: reason}), - }, - waitingType:: hidden.core.v1.containerStateWaiting, - }, - lastStateType:: hidden.core.v1.containerState, - // Details about the container's current condition. - state:: { - local __stateMixin(state) = {state+: state}, - mixinInstance(state):: __stateMixin(state), - // Details about a running container - running:: { - local __runningMixin(running) = __stateMixin({running+: running}), - mixinInstance(running):: __runningMixin(running), - // Time at which the container was last (re-)started - startedAt:: { - local __startedAtMixin(startedAt) = __runningMixin({startedAt+: startedAt}), - mixinInstance(startedAt):: __startedAtMixin(startedAt), - }, - startedAtType:: hidden.meta.v1.time, - }, - runningType:: hidden.core.v1.containerStateRunning, - // Details about a terminated container - terminated:: { - local __terminatedMixin(terminated) = __stateMixin({terminated+: terminated}), - mixinInstance(terminated):: __terminatedMixin(terminated), - // Container's ID in the format 'docker://' - withContainerId(containerId):: self + __terminatedMixin({containerID: containerId}), - // Exit status from the last termination of the container - withExitCode(exitCode):: self + __terminatedMixin({exitCode: exitCode}), - // Time at which the container last terminated - finishedAt:: { - local __finishedAtMixin(finishedAt) = __terminatedMixin({finishedAt+: finishedAt}), - mixinInstance(finishedAt):: __finishedAtMixin(finishedAt), - }, - finishedAtType:: hidden.meta.v1.time, - // Message regarding the last termination of the container - withMessage(message):: self + __terminatedMixin({message: message}), - // (brief) reason from the last termination of the container - withReason(reason):: self + __terminatedMixin({reason: reason}), - // Signal from the last termination of the container - withSignal(signal):: self + __terminatedMixin({signal: signal}), - // Time at which previous execution of the container started - startedAt:: { - local __startedAtMixin(startedAt) = __terminatedMixin({startedAt+: startedAt}), - mixinInstance(startedAt):: __startedAtMixin(startedAt), - }, - startedAtType:: hidden.meta.v1.time, - }, - terminatedType:: hidden.core.v1.containerStateTerminated, - // Details about a waiting container - waiting:: { - local __waitingMixin(waiting) = __stateMixin({waiting+: waiting}), - mixinInstance(waiting):: __waitingMixin(waiting), - // Message regarding why the container is not yet running. - withMessage(message):: self + __waitingMixin({message: message}), - // (brief) reason the container is not yet running. - withReason(reason):: self + __waitingMixin({reason: reason}), - }, - waitingType:: hidden.core.v1.containerStateWaiting, - }, - stateType:: hidden.core.v1.containerState, - }, - }, - // DaemonEndpoint contains information about a single Daemon endpoint. - daemonEndpoint:: { - new():: {}, - // Port number of the given endpoint. - withPort(port):: self + {Port: port}, - mixin:: { - }, - }, - // Represents downward API info for projecting into a projected volume. Note that this is identical to a downwardAPI volume source without the default mode. - downwardApiProjection:: { - new():: {}, - // Items is a list of DownwardAPIVolume file - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is a list of DownwardAPIVolume file - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.downwardApiVolumeFile, - mixin:: { - }, - }, - // DownwardAPIVolumeFile represents information to create the file containing the pod field - downwardApiVolumeFile:: { - new():: {}, - // Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set. - withMode(mode):: self + {mode: mode}, - // Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..' - withPath(path):: self + {path: path}, - mixin:: { - // Required: Selects a field of the pod: only annotations, labels, name and namespace are supported. - fieldRef:: { - local __fieldRefMixin(fieldRef) = {fieldRef+: fieldRef}, - mixinInstance(fieldRef):: __fieldRefMixin(fieldRef), - // Path of the field to select in the specified API version. - withFieldPath(fieldPath):: self + __fieldRefMixin({fieldPath: fieldPath}), - }, - fieldRefType:: hidden.core.v1.objectFieldSelector, - // Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. - resourceFieldRef:: { - local __resourceFieldRefMixin(resourceFieldRef) = {resourceFieldRef+: resourceFieldRef}, - mixinInstance(resourceFieldRef):: __resourceFieldRefMixin(resourceFieldRef), - // Container name: required for volumes, optional for env vars - withContainerName(containerName):: self + __resourceFieldRefMixin({containerName: containerName}), - // Specifies the output format of the exposed resources, defaults to "1" - divisor:: { - local __divisorMixin(divisor) = __resourceFieldRefMixin({divisor+: divisor}), - mixinInstance(divisor):: __divisorMixin(divisor), - }, - divisorType:: hidden.core.resource.quantity, - // Required: resource to select - withResource(resource):: self + __resourceFieldRefMixin({resource: resource}), - }, - resourceFieldRefType:: hidden.core.v1.resourceFieldSelector, - }, - }, - // DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling. - downwardApiVolumeSource:: { - new():: {}, - // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set. - withDefaultMode(defaultMode):: self + {defaultMode: defaultMode}, - // Items is a list of downward API volume file - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // Items is a list of downward API volume file - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.downwardApiVolumeFile, - mixin:: { - }, - }, - // Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling. - emptyDirVolumeSource:: { - new():: {}, - // What type of storage medium should back this directory. The default is "" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir - withMedium(medium):: self + {medium: medium}, - mixin:: { - // Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir - sizeLimit:: { - local __sizeLimitMixin(sizeLimit) = {sizeLimit+: sizeLimit}, - mixinInstance(sizeLimit):: __sizeLimitMixin(sizeLimit), - }, - sizeLimitType:: hidden.core.resource.quantity, - }, - }, - // EndpointAddress is a tuple that describes single IP address. - endpointAddress:: { - new():: {}, - // The Hostname of this endpoint - withHostname(hostname):: self + {hostname: hostname}, - // The IP of this endpoint. May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24). IPv6 is also accepted but not fully supported on all platforms. Also, certain kubernetes components, like kube-proxy, are not IPv6 ready. - withIp(ip):: self + {ip: ip}, - // Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node. - withNodeName(nodeName):: self + {nodeName: nodeName}, - mixin:: { - // Reference to object providing the endpoint. - targetRef:: { - local __targetRefMixin(targetRef) = {targetRef+: targetRef}, - mixinInstance(targetRef):: __targetRefMixin(targetRef), - // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. - withFieldPath(fieldPath):: self + __targetRefMixin({fieldPath: fieldPath}), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __targetRefMixin({name: name}), - // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ - withNamespace(namespace):: self + __targetRefMixin({namespace: namespace}), - // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency - withResourceVersion(resourceVersion):: self + __targetRefMixin({resourceVersion: resourceVersion}), - // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids - withUid(uid):: self + __targetRefMixin({uid: uid}), - }, - targetRefType:: hidden.core.v1.objectReference, - }, - }, - // EndpointPort is a tuple that describes a single port. - endpointPort:: { - new():: {}, - // The name of this port (corresponds to ServicePort.Name). Must be a DNS_LABEL. Optional only if one port is defined. - withName(name):: self + {name: name}, - // The port number of the endpoint. - withPort(port):: self + {port: port}, - // The IP protocol for this port. Must be UDP or TCP. Default is TCP. - withProtocol(protocol):: self + {protocol: protocol}, - mixin:: { - }, - }, - // EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given: - // { - // Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], - // Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}] - // } - // The resulting set of endpoints can be viewed as: - // a: [ 10.10.1.1:8675, 10.10.2.2:8675 ], - // b: [ 10.10.1.1:309, 10.10.2.2:309 ] - endpointSubset:: { - new():: {}, - // IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize. - withAddresses(addresses):: self + if std.type(addresses) == "array" then {addresses: addresses} else {addresses: [addresses]}, - // IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize. - withAddressesMixin(addresses):: self + if std.type(addresses) == "array" then {addresses+: addresses} else {addresses+: [addresses]}, - addressesType:: hidden.core.v1.endpointAddress, - // IP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check. - withNotReadyAddresses(notReadyAddresses):: self + if std.type(notReadyAddresses) == "array" then {notReadyAddresses: notReadyAddresses} else {notReadyAddresses: [notReadyAddresses]}, - // IP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check. - withNotReadyAddressesMixin(notReadyAddresses):: self + if std.type(notReadyAddresses) == "array" then {notReadyAddresses+: notReadyAddresses} else {notReadyAddresses+: [notReadyAddresses]}, - notReadyAddressesType:: hidden.core.v1.endpointAddress, - // Port numbers available on the related IP addresses. - withPorts(ports):: self + if std.type(ports) == "array" then {ports: ports} else {ports: [ports]}, - // Port numbers available on the related IP addresses. - withPortsMixin(ports):: self + if std.type(ports) == "array" then {ports+: ports} else {ports+: [ports]}, - portsType:: hidden.core.v1.endpointPort, - mixin:: { - }, - }, - // EnvFromSource represents the source of a set of ConfigMaps - envFromSource:: { - new():: {}, - // An optional identifer to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. - withPrefix(prefix):: self + {prefix: prefix}, - mixin:: { - // The ConfigMap to select from - configMapRef:: { - local __configMapRefMixin(configMapRef) = {configMapRef+: configMapRef}, - mixinInstance(configMapRef):: __configMapRefMixin(configMapRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __configMapRefMixin({name: name}), - // Specify whether the ConfigMap must be defined - withOptional(optional):: self + __configMapRefMixin({optional: optional}), - }, - configMapRefType:: hidden.core.v1.configMapEnvSource, - // The Secret to select from - secretRef:: { - local __secretRefMixin(secretRef) = {secretRef+: secretRef}, - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - // Specify whether the Secret must be defined - withOptional(optional):: self + __secretRefMixin({optional: optional}), - }, - secretRefType:: hidden.core.v1.secretEnvSource, - }, - }, - // EnvVar represents an environment variable present in a Container. - envVar:: { - new(name, value):: {} + self.withName(name) + self.withValue(value), - fromSecretRef(name, secretRefName, secretRefKey):: {} + self.withName(name) + self.mixin.valueFrom.secretKeyRef.withName(secretRefName) + self.mixin.valueFrom.secretKeyRef.withKey(secretRefKey), - fromFieldPath(name, fieldPath):: {} + self.withName(name) + self.mixin.valueFrom.fieldRef.withFieldPath(fieldPath), - // Name of the environment variable. Must be a C_IDENTIFIER. - withName(name):: self + {name: name}, - // Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to "". - withValue(value):: self + {value: value}, - mixin:: { - // Source for the environment variable's value. Cannot be used if value is not empty. - valueFrom:: { - local __valueFromMixin(valueFrom) = {valueFrom+: valueFrom}, - mixinInstance(valueFrom):: __valueFromMixin(valueFrom), - // Selects a key of a ConfigMap. - configMapKeyRef:: { - local __configMapKeyRefMixin(configMapKeyRef) = __valueFromMixin({configMapKeyRef+: configMapKeyRef}), - mixinInstance(configMapKeyRef):: __configMapKeyRefMixin(configMapKeyRef), - // The key to select. - withKey(key):: self + __configMapKeyRefMixin({key: key}), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __configMapKeyRefMixin({name: name}), - // Specify whether the ConfigMap or it's key must be defined - withOptional(optional):: self + __configMapKeyRefMixin({optional: optional}), - }, - configMapKeyRefType:: hidden.core.v1.configMapKeySelector, - // Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP. - fieldRef:: { - local __fieldRefMixin(fieldRef) = __valueFromMixin({fieldRef+: fieldRef}), - mixinInstance(fieldRef):: __fieldRefMixin(fieldRef), - // Path of the field to select in the specified API version. - withFieldPath(fieldPath):: self + __fieldRefMixin({fieldPath: fieldPath}), - }, - fieldRefType:: hidden.core.v1.objectFieldSelector, - // Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. - resourceFieldRef:: { - local __resourceFieldRefMixin(resourceFieldRef) = __valueFromMixin({resourceFieldRef+: resourceFieldRef}), - mixinInstance(resourceFieldRef):: __resourceFieldRefMixin(resourceFieldRef), - // Container name: required for volumes, optional for env vars - withContainerName(containerName):: self + __resourceFieldRefMixin({containerName: containerName}), - // Specifies the output format of the exposed resources, defaults to "1" - divisor:: { - local __divisorMixin(divisor) = __resourceFieldRefMixin({divisor+: divisor}), - mixinInstance(divisor):: __divisorMixin(divisor), - }, - divisorType:: hidden.core.resource.quantity, - // Required: resource to select - withResource(resource):: self + __resourceFieldRefMixin({resource: resource}), - }, - resourceFieldRefType:: hidden.core.v1.resourceFieldSelector, - // Selects a key of a secret in the pod's namespace - secretKeyRef:: { - local __secretKeyRefMixin(secretKeyRef) = __valueFromMixin({secretKeyRef+: secretKeyRef}), - mixinInstance(secretKeyRef):: __secretKeyRefMixin(secretKeyRef), - // The key of the secret to select from. Must be a valid secret key. - withKey(key):: self + __secretKeyRefMixin({key: key}), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretKeyRefMixin({name: name}), - // Specify whether the Secret or it's key must be defined - withOptional(optional):: self + __secretKeyRefMixin({optional: optional}), - }, - secretKeyRefType:: hidden.core.v1.secretKeySelector, - }, - valueFromType:: hidden.core.v1.envVarSource, - }, - }, - // EnvVarSource represents a source for the value of an EnvVar. - envVarSource:: { - new():: {}, - mixin:: { - // Selects a key of a ConfigMap. - configMapKeyRef:: { - local __configMapKeyRefMixin(configMapKeyRef) = {configMapKeyRef+: configMapKeyRef}, - mixinInstance(configMapKeyRef):: __configMapKeyRefMixin(configMapKeyRef), - // The key to select. - withKey(key):: self + __configMapKeyRefMixin({key: key}), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __configMapKeyRefMixin({name: name}), - // Specify whether the ConfigMap or it's key must be defined - withOptional(optional):: self + __configMapKeyRefMixin({optional: optional}), - }, - configMapKeyRefType:: hidden.core.v1.configMapKeySelector, - // Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP. - fieldRef:: { - local __fieldRefMixin(fieldRef) = {fieldRef+: fieldRef}, - mixinInstance(fieldRef):: __fieldRefMixin(fieldRef), - // Path of the field to select in the specified API version. - withFieldPath(fieldPath):: self + __fieldRefMixin({fieldPath: fieldPath}), - }, - fieldRefType:: hidden.core.v1.objectFieldSelector, - // Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. - resourceFieldRef:: { - local __resourceFieldRefMixin(resourceFieldRef) = {resourceFieldRef+: resourceFieldRef}, - mixinInstance(resourceFieldRef):: __resourceFieldRefMixin(resourceFieldRef), - // Container name: required for volumes, optional for env vars - withContainerName(containerName):: self + __resourceFieldRefMixin({containerName: containerName}), - // Specifies the output format of the exposed resources, defaults to "1" - divisor:: { - local __divisorMixin(divisor) = __resourceFieldRefMixin({divisor+: divisor}), - mixinInstance(divisor):: __divisorMixin(divisor), - }, - divisorType:: hidden.core.resource.quantity, - // Required: resource to select - withResource(resource):: self + __resourceFieldRefMixin({resource: resource}), - }, - resourceFieldRefType:: hidden.core.v1.resourceFieldSelector, - // Selects a key of a secret in the pod's namespace - secretKeyRef:: { - local __secretKeyRefMixin(secretKeyRef) = {secretKeyRef+: secretKeyRef}, - mixinInstance(secretKeyRef):: __secretKeyRefMixin(secretKeyRef), - // The key of the secret to select from. Must be a valid secret key. - withKey(key):: self + __secretKeyRefMixin({key: key}), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretKeyRefMixin({name: name}), - // Specify whether the Secret or it's key must be defined - withOptional(optional):: self + __secretKeyRefMixin({optional: optional}), - }, - secretKeyRefType:: hidden.core.v1.secretKeySelector, - }, - }, - // EventSource contains information for an event. - eventSource:: { - new():: {}, - // Component from which the event is generated. - withComponent(component):: self + {component: component}, - // Node name on which the event is generated. - withHost(host):: self + {host: host}, - mixin:: { - }, - }, - // ExecAction describes a "run in container" action. - execAction:: { - new():: {}, - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommand(command):: self + if std.type(command) == "array" then {command: command} else {command: [command]}, - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommandMixin(command):: self + if std.type(command) == "array" then {command+: command} else {command+: [command]}, - mixin:: { - }, - }, - // Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling. - fcVolumeSource:: { - new():: {}, - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + {fsType: fsType}, - // Required: FC target lun number - withLun(lun):: self + {lun: lun}, - // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + {readOnly: readOnly}, - // Required: FC target worldwide names (WWNs) - withTargetWwns(targetWwns):: self + if std.type(targetWwns) == "array" then {targetWWNs: targetWwns} else {targetWWNs: [targetWwns]}, - // Required: FC target worldwide names (WWNs) - withTargetWwnsMixin(targetWwns):: self + if std.type(targetWwns) == "array" then {targetWWNs+: targetWwns} else {targetWWNs+: [targetWwns]}, - mixin:: { - }, - }, - // FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future. - flexVolumeSource:: { - new():: {}, - // Driver is the name of the driver to use for this volume. - withDriver(driver):: self + {driver: driver}, - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script. - withFsType(fsType):: self + {fsType: fsType}, - // Optional: Extra command options if any. - withOptions(options):: self + {options: options}, - // Optional: Extra command options if any. - withOptionsMixin(options):: self + {options+: options}, - // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + {readOnly: readOnly}, - mixin:: { - // Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts. - secretRef:: { - local __secretRefMixin(secretRef) = {secretRef+: secretRef}, - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - }, - }, - // Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling. - flockerVolumeSource:: { - new():: {}, - // Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated - withDatasetName(datasetName):: self + {datasetName: datasetName}, - // UUID of the dataset. This is unique identifier of a Flocker dataset - withDatasetUuid(datasetUuid):: self + {datasetUUID: datasetUuid}, - mixin:: { - }, - }, - // Represents a Persistent Disk resource in Google Compute Engine. - // - // A GCE PD must exist before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once or read-only many times. GCE PDs support ownership management and SELinux relabeling. - gcePersistentDiskVolumeSource:: { - new():: {}, - // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - withFsType(fsType):: self + {fsType: fsType}, - // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - withPartition(partition):: self + {partition: partition}, - // Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - withPdName(pdName):: self + {pdName: pdName}, - // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - withReadOnly(readOnly):: self + {readOnly: readOnly}, - mixin:: { - }, - }, - // Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling. - gitRepoVolumeSource:: { - new():: {}, - // Target directory name. Must not contain or start with '..'. If '.' is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name. - withDirectory(directory):: self + {directory: directory}, - // Repository URL - withRepository(repository):: self + {repository: repository}, - // Commit hash for the specified revision. - withRevision(revision):: self + {revision: revision}, - mixin:: { - }, - }, - // Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling. - glusterfsVolumeSource:: { - new():: {}, - // EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod - withEndpoints(endpoints):: self + {endpoints: endpoints}, - // Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod - withPath(path):: self + {path: path}, - // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod - withReadOnly(readOnly):: self + {readOnly: readOnly}, - mixin:: { - }, - }, - // HTTPGetAction describes an action based on HTTP Get requests. - httpGetAction:: { - new():: {}, - // Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. - withHost(host):: self + {host: host}, - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == "array" then {httpHeaders: httpHeaders} else {httpHeaders: [httpHeaders]}, - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == "array" then {httpHeaders+: httpHeaders} else {httpHeaders+: [httpHeaders]}, - httpHeadersType:: hidden.core.v1.httpHeader, - // Path to access on the HTTP server. - withPath(path):: self + {path: path}, - // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: {port: port}, - // Scheme to use for connecting to the host. Defaults to HTTP. - withScheme(scheme):: self + {scheme: scheme}, - mixin:: { - }, - }, - // HTTPHeader describes a custom header to be used in HTTP probes - httpHeader:: { - new():: {}, - // The header field name - withName(name):: self + {name: name}, - // The header field value - withValue(value):: self + {value: value}, - mixin:: { - }, - }, - // Handler defines a specific action that should be taken - handler:: { - new():: {}, - mixin:: { - // One and only one of the following should be specified. Exec specifies the action to take. - exec:: { - local __execMixin(exec) = {exec+: exec}, - mixinInstance(exec):: __execMixin(exec), - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommand(command):: self + if std.type(command) == "array" then __execMixin({command: command}) else __execMixin({command: [command]}), - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommandMixin(command):: self + if std.type(command) == "array" then __execMixin({command+: command}) else __execMixin({command+: [command]}), - }, - execType:: hidden.core.v1.execAction, - // HTTPGet specifies the http request to perform. - httpGet:: { - local __httpGetMixin(httpGet) = {httpGet+: httpGet}, - mixinInstance(httpGet):: __httpGetMixin(httpGet), - // Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. - withHost(host):: self + __httpGetMixin({host: host}), - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == "array" then __httpGetMixin({httpHeaders: httpHeaders}) else __httpGetMixin({httpHeaders: [httpHeaders]}), - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == "array" then __httpGetMixin({httpHeaders+: httpHeaders}) else __httpGetMixin({httpHeaders+: [httpHeaders]}), - httpHeadersType:: hidden.core.v1.httpHeader, - // Path to access on the HTTP server. - withPath(path):: self + __httpGetMixin({path: path}), - // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: __httpGetMixin({port: port}), - // Scheme to use for connecting to the host. Defaults to HTTP. - withScheme(scheme):: self + __httpGetMixin({scheme: scheme}), - }, - httpGetType:: hidden.core.v1.httpGetAction, - // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported - tcpSocket:: { - local __tcpSocketMixin(tcpSocket) = {tcpSocket+: tcpSocket}, - mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket), - // Optional: Host name to connect to, defaults to the pod IP. - withHost(host):: self + __tcpSocketMixin({host: host}), - // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: __tcpSocketMixin({port: port}), - }, - tcpSocketType:: hidden.core.v1.tcpSocketAction, - }, - }, - // HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file. - hostAlias:: { - new():: {}, - // Hostnames for the above IP address. - withHostnames(hostnames):: self + if std.type(hostnames) == "array" then {hostnames: hostnames} else {hostnames: [hostnames]}, - // Hostnames for the above IP address. - withHostnamesMixin(hostnames):: self + if std.type(hostnames) == "array" then {hostnames+: hostnames} else {hostnames+: [hostnames]}, - // IP address of the host file entry. - withIp(ip):: self + {ip: ip}, - mixin:: { - }, - }, - // Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling. - hostPathVolumeSource:: { - new():: {}, - // Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath - withPath(path):: self + {path: path}, - mixin:: { - }, - }, - // Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling. - iscsiVolumeSource:: { - new():: {}, - // whether support iSCSI Discovery CHAP authentication - withChapAuthDiscovery(chapAuthDiscovery):: self + {chapAuthDiscovery: chapAuthDiscovery}, - // whether support iSCSI Session CHAP authentication - withChapAuthSession(chapAuthSession):: self + {chapAuthSession: chapAuthSession}, - // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi - withFsType(fsType):: self + {fsType: fsType}, - // Target iSCSI Qualified Name. - withIqn(iqn):: self + {iqn: iqn}, - // Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport. - withIscsiInterface(iscsiInterface):: self + {iscsiInterface: iscsiInterface}, - // iSCSI target lun number. - withLun(lun):: self + {lun: lun}, - // iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260). - withPortals(portals):: self + if std.type(portals) == "array" then {portals: portals} else {portals: [portals]}, - // iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260). - withPortalsMixin(portals):: self + if std.type(portals) == "array" then {portals+: portals} else {portals+: [portals]}, - // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. - withReadOnly(readOnly):: self + {readOnly: readOnly}, - // iSCSI target portal. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260). - withTargetPortal(targetPortal):: self + {targetPortal: targetPortal}, - mixin:: { - // CHAP secret for iSCSI target and initiator authentication - secretRef:: { - local __secretRefMixin(secretRef) = {secretRef+: secretRef}, - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - }, - }, - // Maps a string key to a path within a volume. - keyToPath:: { - new(key, path):: {} + self.withKey(key) + self.withPath(path), - // The key to project. - withKey(key):: self + {key: key}, - // Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set. - withMode(mode):: self + {mode: mode}, - // The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'. - withPath(path):: self + {path: path}, - mixin:: { - }, - }, - // Lifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted. - lifecycle:: { - new():: {}, - mixin:: { - // PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks - postStart:: { - local __postStartMixin(postStart) = {postStart+: postStart}, - mixinInstance(postStart):: __postStartMixin(postStart), - // One and only one of the following should be specified. Exec specifies the action to take. - exec:: { - local __execMixin(exec) = __postStartMixin({exec+: exec}), - mixinInstance(exec):: __execMixin(exec), - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommand(command):: self + if std.type(command) == "array" then __execMixin({command: command}) else __execMixin({command: [command]}), - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommandMixin(command):: self + if std.type(command) == "array" then __execMixin({command+: command}) else __execMixin({command+: [command]}), - }, - execType:: hidden.core.v1.execAction, - // HTTPGet specifies the http request to perform. - httpGet:: { - local __httpGetMixin(httpGet) = __postStartMixin({httpGet+: httpGet}), - mixinInstance(httpGet):: __httpGetMixin(httpGet), - // Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. - withHost(host):: self + __httpGetMixin({host: host}), - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == "array" then __httpGetMixin({httpHeaders: httpHeaders}) else __httpGetMixin({httpHeaders: [httpHeaders]}), - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == "array" then __httpGetMixin({httpHeaders+: httpHeaders}) else __httpGetMixin({httpHeaders+: [httpHeaders]}), - httpHeadersType:: hidden.core.v1.httpHeader, - // Path to access on the HTTP server. - withPath(path):: self + __httpGetMixin({path: path}), - // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: __httpGetMixin({port: port}), - // Scheme to use for connecting to the host. Defaults to HTTP. - withScheme(scheme):: self + __httpGetMixin({scheme: scheme}), - }, - httpGetType:: hidden.core.v1.httpGetAction, - // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported - tcpSocket:: { - local __tcpSocketMixin(tcpSocket) = __postStartMixin({tcpSocket+: tcpSocket}), - mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket), - // Optional: Host name to connect to, defaults to the pod IP. - withHost(host):: self + __tcpSocketMixin({host: host}), - // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: __tcpSocketMixin({port: port}), - }, - tcpSocketType:: hidden.core.v1.tcpSocketAction, - }, - postStartType:: hidden.core.v1.handler, - // PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks - preStop:: { - local __preStopMixin(preStop) = {preStop+: preStop}, - mixinInstance(preStop):: __preStopMixin(preStop), - // One and only one of the following should be specified. Exec specifies the action to take. - exec:: { - local __execMixin(exec) = __preStopMixin({exec+: exec}), - mixinInstance(exec):: __execMixin(exec), - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommand(command):: self + if std.type(command) == "array" then __execMixin({command: command}) else __execMixin({command: [command]}), - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommandMixin(command):: self + if std.type(command) == "array" then __execMixin({command+: command}) else __execMixin({command+: [command]}), - }, - execType:: hidden.core.v1.execAction, - // HTTPGet specifies the http request to perform. - httpGet:: { - local __httpGetMixin(httpGet) = __preStopMixin({httpGet+: httpGet}), - mixinInstance(httpGet):: __httpGetMixin(httpGet), - // Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. - withHost(host):: self + __httpGetMixin({host: host}), - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == "array" then __httpGetMixin({httpHeaders: httpHeaders}) else __httpGetMixin({httpHeaders: [httpHeaders]}), - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == "array" then __httpGetMixin({httpHeaders+: httpHeaders}) else __httpGetMixin({httpHeaders+: [httpHeaders]}), - httpHeadersType:: hidden.core.v1.httpHeader, - // Path to access on the HTTP server. - withPath(path):: self + __httpGetMixin({path: path}), - // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: __httpGetMixin({port: port}), - // Scheme to use for connecting to the host. Defaults to HTTP. - withScheme(scheme):: self + __httpGetMixin({scheme: scheme}), - }, - httpGetType:: hidden.core.v1.httpGetAction, - // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported - tcpSocket:: { - local __tcpSocketMixin(tcpSocket) = __preStopMixin({tcpSocket+: tcpSocket}), - mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket), - // Optional: Host name to connect to, defaults to the pod IP. - withHost(host):: self + __tcpSocketMixin({host: host}), - // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: __tcpSocketMixin({port: port}), - }, - tcpSocketType:: hidden.core.v1.tcpSocketAction, - }, - preStopType:: hidden.core.v1.handler, - }, - }, - // LimitRangeItem defines a min/max usage limit for any resource that matches on kind. - limitRangeItem:: { - new():: {}, - // Default resource requirement limit value by resource name if resource limit is omitted. - withDefault(default):: self + {default: default}, - // Default resource requirement limit value by resource name if resource limit is omitted. - withDefaultMixin(default):: self + {default+: default}, - // DefaultRequest is the default resource requirement request value by resource name if resource request is omitted. - withDefaultRequest(defaultRequest):: self + {defaultRequest: defaultRequest}, - // DefaultRequest is the default resource requirement request value by resource name if resource request is omitted. - withDefaultRequestMixin(defaultRequest):: self + {defaultRequest+: defaultRequest}, - // Max usage constraints on this kind by resource name. - withMax(max):: self + {max: max}, - // Max usage constraints on this kind by resource name. - withMaxMixin(max):: self + {max+: max}, - // MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource. - withMaxLimitRequestRatio(maxLimitRequestRatio):: self + {maxLimitRequestRatio: maxLimitRequestRatio}, - // MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource. - withMaxLimitRequestRatioMixin(maxLimitRequestRatio):: self + {maxLimitRequestRatio+: maxLimitRequestRatio}, - // Min usage constraints on this kind by resource name. - withMin(min):: self + {min: min}, - // Min usage constraints on this kind by resource name. - withMinMixin(min):: self + {min+: min}, - // Type of resource that this limit applies to. - withType(type):: self + {type: type}, - mixin:: { - }, - }, - // LimitRangeSpec defines a min/max usage limit for resources that match on kind. - limitRangeSpec:: { - new():: {}, - // Limits is the list of LimitRangeItem objects that are enforced. - withLimits(limits):: self + if std.type(limits) == "array" then {limits: limits} else {limits: [limits]}, - // Limits is the list of LimitRangeItem objects that are enforced. - withLimitsMixin(limits):: self + if std.type(limits) == "array" then {limits+: limits} else {limits+: [limits]}, - limitsType:: hidden.core.v1.limitRangeItem, - mixin:: { - }, - }, - // LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point. - loadBalancerIngress:: { - new():: {}, - // Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers) - withHostname(hostname):: self + {hostname: hostname}, - // IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers) - withIp(ip):: self + {ip: ip}, - mixin:: { - }, - }, - // LoadBalancerStatus represents the status of a load-balancer. - loadBalancerStatus:: { - new():: {}, - // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points. - withIngress(ingress):: self + if std.type(ingress) == "array" then {ingress: ingress} else {ingress: [ingress]}, - // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points. - withIngressMixin(ingress):: self + if std.type(ingress) == "array" then {ingress+: ingress} else {ingress+: [ingress]}, - ingressType:: hidden.core.v1.loadBalancerIngress, - mixin:: { - }, - }, - // LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace. - localObjectReference:: { - new():: {}, - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + {name: name}, - mixin:: { - }, - }, - // Local represents directly-attached storage with node affinity - localVolumeSource:: { - new():: {}, - // The full path to the volume on the node For alpha, this path must be a directory Once block as a source is supported, then this path can point to a block device - withPath(path):: self + {path: path}, - mixin:: { - }, - }, - // Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling. - nfsVolumeSource:: { - new():: {}, - // Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - withPath(path):: self + {path: path}, - // ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - withReadOnly(readOnly):: self + {readOnly: readOnly}, - // Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - withServer(server):: self + {server: server}, - mixin:: { - }, - }, - // NamespaceSpec describes the attributes on a Namespace. - namespaceSpec:: { - new():: {}, - // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#finalizers - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then {finalizers: finalizers} else {finalizers: [finalizers]}, - // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#finalizers - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then {finalizers+: finalizers} else {finalizers+: [finalizers]}, - mixin:: { - }, - }, - // NamespaceStatus is information about the current status of a Namespace. - namespaceStatus:: { - new():: {}, - // Phase is the current lifecycle phase of the namespace. More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#phases - withPhase(phase):: self + {phase: phase}, - mixin:: { - }, - }, - // NodeAddress contains information for the node's address. - nodeAddress:: { - new():: {}, - // The node address. - withAddress(address):: self + {address: address}, - // Node address type, one of Hostname, ExternalIP or InternalIP. - withType(type):: self + {type: type}, - mixin:: { - }, - }, - // Node affinity is a group of node affinity scheduling rules. - nodeAffinity:: { - new():: {}, - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then {preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution} else {preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}, - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then {preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution} else {preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}, - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - mixin:: { - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = {requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}, - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - }, - // NodeCondition contains condition information for a node. - nodeCondition:: { - new():: {}, - // Human readable message indicating details about last transition. - withMessage(message):: self + {message: message}, - // (brief) reason for the condition's last transition. - withReason(reason):: self + {reason: reason}, - // Type of node condition. - withType(type):: self + {type: type}, - mixin:: { - // Last time we got an update on a given condition. - lastHeartbeatTime:: { - local __lastHeartbeatTimeMixin(lastHeartbeatTime) = {lastHeartbeatTime+: lastHeartbeatTime}, - mixinInstance(lastHeartbeatTime):: __lastHeartbeatTimeMixin(lastHeartbeatTime), - }, - lastHeartbeatTimeType:: hidden.meta.v1.time, - // Last time the condition transit from one status to another. - lastTransitionTime:: { - local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime}, - mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime), - }, - lastTransitionTimeType:: hidden.meta.v1.time, - }, - }, - // NodeDaemonEndpoints lists ports opened by daemons running on the Node. - nodeDaemonEndpoints:: { - new():: {}, - mixin:: { - // Endpoint on which Kubelet is listening. - kubeletEndpoint:: { - local __kubeletEndpointMixin(kubeletEndpoint) = {kubeletEndpoint+: kubeletEndpoint}, - mixinInstance(kubeletEndpoint):: __kubeletEndpointMixin(kubeletEndpoint), - // Port number of the given endpoint. - withPort(port):: self + __kubeletEndpointMixin({Port: port}), - }, - kubeletEndpointType:: hidden.core.v1.daemonEndpoint, - }, - }, - // A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms. - nodeSelector:: { - new():: {}, - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then {nodeSelectorTerms: nodeSelectorTerms} else {nodeSelectorTerms: [nodeSelectorTerms]}, - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then {nodeSelectorTerms+: nodeSelectorTerms} else {nodeSelectorTerms+: [nodeSelectorTerms]}, - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - mixin:: { - }, - }, - // A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values. - nodeSelectorRequirement:: { - new():: {}, - // The label key that the selector applies to. - withKey(key):: self + {key: key}, - // Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. - withOperator(operator):: self + {operator: operator}, - // An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. - withValues(values):: self + if std.type(values) == "array" then {values: values} else {values: [values]}, - // An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. - withValuesMixin(values):: self + if std.type(values) == "array" then {values+: values} else {values+: [values]}, - mixin:: { - }, - }, - // A null or empty node selector term matches no objects. - nodeSelectorTerm:: { - new():: {}, - // Required. A list of node selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then {matchExpressions: matchExpressions} else {matchExpressions: [matchExpressions]}, - // Required. A list of node selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then {matchExpressions+: matchExpressions} else {matchExpressions+: [matchExpressions]}, - matchExpressionsType:: hidden.core.v1.nodeSelectorRequirement, - mixin:: { - }, - }, - // NodeSpec describes the attributes that a node is created with. - nodeSpec:: { - new():: {}, - // External ID of the node assigned by some machine database (e.g. a cloud provider). Deprecated. - withExternalId(externalId):: self + {externalID: externalId}, - // PodCIDR represents the pod IP range assigned to the node. - withPodCidr(podCidr):: self + {podCIDR: podCidr}, - // ID of the node assigned by the cloud provider in the format: :// - withProviderId(providerId):: self + {providerID: providerId}, - // If specified, the node's taints. - withTaints(taints):: self + if std.type(taints) == "array" then {taints: taints} else {taints: [taints]}, - // If specified, the node's taints. - withTaintsMixin(taints):: self + if std.type(taints) == "array" then {taints+: taints} else {taints+: [taints]}, - taintsType:: hidden.core.v1.taint, - // Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration - withUnschedulable(unschedulable):: self + {unschedulable: unschedulable}, - mixin:: { - }, - }, - // NodeStatus is information about the current status of a node. - nodeStatus:: { - new():: {}, - // List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses - withAddresses(addresses):: self + if std.type(addresses) == "array" then {addresses: addresses} else {addresses: [addresses]}, - // List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses - withAddressesMixin(addresses):: self + if std.type(addresses) == "array" then {addresses+: addresses} else {addresses+: [addresses]}, - addressesType:: hidden.core.v1.nodeAddress, - // Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity. - withAllocatable(allocatable):: self + {allocatable: allocatable}, - // Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity. - withAllocatableMixin(allocatable):: self + {allocatable+: allocatable}, - // Capacity represents the total resources of a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity - withCapacity(capacity):: self + {capacity: capacity}, - // Capacity represents the total resources of a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity - withCapacityMixin(capacity):: self + {capacity+: capacity}, - // Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition - withConditions(conditions):: self + if std.type(conditions) == "array" then {conditions: conditions} else {conditions: [conditions]}, - // Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition - withConditionsMixin(conditions):: self + if std.type(conditions) == "array" then {conditions+: conditions} else {conditions+: [conditions]}, - conditionsType:: hidden.core.v1.nodeCondition, - // List of container images on this node - withImages(images):: self + if std.type(images) == "array" then {images: images} else {images: [images]}, - // List of container images on this node - withImagesMixin(images):: self + if std.type(images) == "array" then {images+: images} else {images+: [images]}, - imagesType:: hidden.core.v1.containerImage, - // NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated. - withPhase(phase):: self + {phase: phase}, - // List of volumes that are attached to the node. - withVolumesAttached(volumesAttached):: self + if std.type(volumesAttached) == "array" then {volumesAttached: volumesAttached} else {volumesAttached: [volumesAttached]}, - // List of volumes that are attached to the node. - withVolumesAttachedMixin(volumesAttached):: self + if std.type(volumesAttached) == "array" then {volumesAttached+: volumesAttached} else {volumesAttached+: [volumesAttached]}, - volumesAttachedType:: hidden.core.v1.attachedVolume, - // List of attachable volumes in use (mounted) by the node. - withVolumesInUse(volumesInUse):: self + if std.type(volumesInUse) == "array" then {volumesInUse: volumesInUse} else {volumesInUse: [volumesInUse]}, - // List of attachable volumes in use (mounted) by the node. - withVolumesInUseMixin(volumesInUse):: self + if std.type(volumesInUse) == "array" then {volumesInUse+: volumesInUse} else {volumesInUse+: [volumesInUse]}, - mixin:: { - // Endpoints of daemons running on the Node. - daemonEndpoints:: { - local __daemonEndpointsMixin(daemonEndpoints) = {daemonEndpoints+: daemonEndpoints}, - mixinInstance(daemonEndpoints):: __daemonEndpointsMixin(daemonEndpoints), - // Endpoint on which Kubelet is listening. - kubeletEndpoint:: { - local __kubeletEndpointMixin(kubeletEndpoint) = __daemonEndpointsMixin({kubeletEndpoint+: kubeletEndpoint}), - mixinInstance(kubeletEndpoint):: __kubeletEndpointMixin(kubeletEndpoint), - // Port number of the given endpoint. - withPort(port):: self + __kubeletEndpointMixin({Port: port}), - }, - kubeletEndpointType:: hidden.core.v1.daemonEndpoint, - }, - daemonEndpointsType:: hidden.core.v1.nodeDaemonEndpoints, - // Set of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info - nodeInfo:: { - local __nodeInfoMixin(nodeInfo) = {nodeInfo+: nodeInfo}, - mixinInstance(nodeInfo):: __nodeInfoMixin(nodeInfo), - // The Architecture reported by the node - withArchitecture(architecture):: self + __nodeInfoMixin({architecture: architecture}), - // Boot ID reported by the node. - withBootId(bootId):: self + __nodeInfoMixin({bootID: bootId}), - // ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0). - withContainerRuntimeVersion(containerRuntimeVersion):: self + __nodeInfoMixin({containerRuntimeVersion: containerRuntimeVersion}), - // Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64). - withKernelVersion(kernelVersion):: self + __nodeInfoMixin({kernelVersion: kernelVersion}), - // KubeProxy Version reported by the node. - withKubeProxyVersion(kubeProxyVersion):: self + __nodeInfoMixin({kubeProxyVersion: kubeProxyVersion}), - // Kubelet Version reported by the node. - withKubeletVersion(kubeletVersion):: self + __nodeInfoMixin({kubeletVersion: kubeletVersion}), - // MachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html - withMachineId(machineId):: self + __nodeInfoMixin({machineID: machineId}), - // The Operating System reported by the node - withOperatingSystem(operatingSystem):: self + __nodeInfoMixin({operatingSystem: operatingSystem}), - // OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)). - withOsImage(osImage):: self + __nodeInfoMixin({osImage: osImage}), - // SystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html - withSystemUuid(systemUuid):: self + __nodeInfoMixin({systemUUID: systemUuid}), - }, - nodeInfoType:: hidden.core.v1.nodeSystemInfo, - }, - }, - // NodeSystemInfo is a set of ids/uuids to uniquely identify the node. - nodeSystemInfo:: { - new():: {}, - // The Architecture reported by the node - withArchitecture(architecture):: self + {architecture: architecture}, - // Boot ID reported by the node. - withBootId(bootId):: self + {bootID: bootId}, - // ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0). - withContainerRuntimeVersion(containerRuntimeVersion):: self + {containerRuntimeVersion: containerRuntimeVersion}, - // Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64). - withKernelVersion(kernelVersion):: self + {kernelVersion: kernelVersion}, - // KubeProxy Version reported by the node. - withKubeProxyVersion(kubeProxyVersion):: self + {kubeProxyVersion: kubeProxyVersion}, - // Kubelet Version reported by the node. - withKubeletVersion(kubeletVersion):: self + {kubeletVersion: kubeletVersion}, - // MachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html - withMachineId(machineId):: self + {machineID: machineId}, - // The Operating System reported by the node - withOperatingSystem(operatingSystem):: self + {operatingSystem: operatingSystem}, - // OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)). - withOsImage(osImage):: self + {osImage: osImage}, - // SystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html - withSystemUuid(systemUuid):: self + {systemUUID: systemUuid}, - mixin:: { - }, - }, - // ObjectFieldSelector selects an APIVersioned field of an object. - objectFieldSelector:: { - new():: {}, - // Path of the field to select in the specified API version. - withFieldPath(fieldPath):: self + {fieldPath: fieldPath}, - mixin:: { - }, - }, - // ObjectReference contains enough information to let you inspect or modify the referred object. - objectReference:: { - new():: {}, - // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. - withFieldPath(fieldPath):: self + {fieldPath: fieldPath}, - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + {name: name}, - // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ - withNamespace(namespace):: self + {namespace: namespace}, - // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency - withResourceVersion(resourceVersion):: self + {resourceVersion: resourceVersion}, - // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids - withUid(uid):: self + {uid: uid}, - mixin:: { - }, - }, - // PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes - persistentVolumeClaimSpec:: { - new():: {}, - // AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1 - withAccessModes(accessModes):: self + if std.type(accessModes) == "array" then {accessModes: accessModes} else {accessModes: [accessModes]}, - // AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1 - withAccessModesMixin(accessModes):: self + if std.type(accessModes) == "array" then {accessModes+: accessModes} else {accessModes+: [accessModes]}, - // Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1 - withStorageClassName(storageClassName):: self + {storageClassName: storageClassName}, - // VolumeName is the binding reference to the PersistentVolume backing this claim. - withVolumeName(volumeName):: self + {volumeName: volumeName}, - mixin:: { - // Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources - resources:: { - local __resourcesMixin(resources) = {resources+: resources}, - mixinInstance(resources):: __resourcesMixin(resources), - // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - withLimits(limits):: self + __resourcesMixin({limits: limits}), - // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - withLimitsMixin(limits):: self + __resourcesMixin({limits+: limits}), - // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - withRequests(requests):: self + __resourcesMixin({requests: requests}), - // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - withRequestsMixin(requests):: self + __resourcesMixin({requests+: requests}), - }, - resourcesType:: hidden.core.v1.resourceRequirements, - // A label query over volumes to consider for binding. - selector:: { - local __selectorMixin(selector) = {selector+: selector}, - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - }, - }, - // PersistentVolumeClaimStatus is the current status of a persistent volume claim. - persistentVolumeClaimStatus:: { - new():: {}, - // AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1 - withAccessModes(accessModes):: self + if std.type(accessModes) == "array" then {accessModes: accessModes} else {accessModes: [accessModes]}, - // AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1 - withAccessModesMixin(accessModes):: self + if std.type(accessModes) == "array" then {accessModes+: accessModes} else {accessModes+: [accessModes]}, - // Represents the actual resources of the underlying volume. - withCapacity(capacity):: self + {capacity: capacity}, - // Represents the actual resources of the underlying volume. - withCapacityMixin(capacity):: self + {capacity+: capacity}, - // Phase represents the current phase of PersistentVolumeClaim. - withPhase(phase):: self + {phase: phase}, - mixin:: { - }, - }, - // PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system). - persistentVolumeClaimVolumeSource:: { - new():: {}, - // ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims - withClaimName(claimName):: self + {claimName: claimName}, - // Will force the ReadOnly setting in VolumeMounts. Default false. - withReadOnly(readOnly):: self + {readOnly: readOnly}, - mixin:: { - }, - }, - // PersistentVolumeSpec is the specification of a persistent volume. - persistentVolumeSpec:: { - new():: {}, - // AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes - withAccessModes(accessModes):: self + if std.type(accessModes) == "array" then {accessModes: accessModes} else {accessModes: [accessModes]}, - // AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes - withAccessModesMixin(accessModes):: self + if std.type(accessModes) == "array" then {accessModes+: accessModes} else {accessModes+: [accessModes]}, - // A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity - withCapacity(capacity):: self + {capacity: capacity}, - // A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity - withCapacityMixin(capacity):: self + {capacity+: capacity}, - // What happens to a persistent volume when released from its claim. Valid options are Retain (default) and Recycle. Recycling must be supported by the volume plugin underlying this persistent volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming - withPersistentVolumeReclaimPolicy(persistentVolumeReclaimPolicy):: self + {persistentVolumeReclaimPolicy: persistentVolumeReclaimPolicy}, - // Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass. - withStorageClassName(storageClassName):: self + {storageClassName: storageClassName}, - mixin:: { - // AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - awsElasticBlockStore:: { - local __awsElasticBlockStoreMixin(awsElasticBlockStore) = {awsElasticBlockStore+: awsElasticBlockStore}, - mixinInstance(awsElasticBlockStore):: __awsElasticBlockStoreMixin(awsElasticBlockStore), - // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - withFsType(fsType):: self + __awsElasticBlockStoreMixin({fsType: fsType}), - // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). - withPartition(partition):: self + __awsElasticBlockStoreMixin({partition: partition}), - // Specify "true" to force and set the ReadOnly property in VolumeMounts to "true". If omitted, the default is "false". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - withReadOnly(readOnly):: self + __awsElasticBlockStoreMixin({readOnly: readOnly}), - // Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - withVolumeId(volumeId):: self + __awsElasticBlockStoreMixin({volumeID: volumeId}), - }, - awsElasticBlockStoreType:: hidden.core.v1.awsElasticBlockStoreVolumeSource, - // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. - azureDisk:: { - local __azureDiskMixin(azureDisk) = {azureDisk+: azureDisk}, - mixinInstance(azureDisk):: __azureDiskMixin(azureDisk), - // Host Caching mode: None, Read Only, Read Write. - withCachingMode(cachingMode):: self + __azureDiskMixin({cachingMode: cachingMode}), - // The Name of the data disk in the blob storage - withDiskName(diskName):: self + __azureDiskMixin({diskName: diskName}), - // The URI the data disk in the blob storage - withDiskUri(diskUri):: self + __azureDiskMixin({diskURI: diskUri}), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __azureDiskMixin({fsType: fsType}), - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __azureDiskMixin({readOnly: readOnly}), - }, - azureDiskType:: hidden.core.v1.azureDiskVolumeSource, - // AzureFile represents an Azure File Service mount on the host and bind mount to the pod. - azureFile:: { - local __azureFileMixin(azureFile) = {azureFile+: azureFile}, - mixinInstance(azureFile):: __azureFileMixin(azureFile), - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __azureFileMixin({readOnly: readOnly}), - // the name of secret that contains Azure Storage Account Name and Key - withSecretName(secretName):: self + __azureFileMixin({secretName: secretName}), - // Share Name - withShareName(shareName):: self + __azureFileMixin({shareName: shareName}), - }, - azureFileType:: hidden.core.v1.azureFileVolumeSource, - // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime - cephfs:: { - local __cephfsMixin(cephfs) = {cephfs+: cephfs}, - mixinInstance(cephfs):: __cephfsMixin(cephfs), - // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withMonitors(monitors):: self + if std.type(monitors) == "array" then __cephfsMixin({monitors: monitors}) else __cephfsMixin({monitors: [monitors]}), - // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withMonitorsMixin(monitors):: self + if std.type(monitors) == "array" then __cephfsMixin({monitors+: monitors}) else __cephfsMixin({monitors+: [monitors]}), - // Optional: Used as the mounted root, rather than the full Ceph tree, default is / - withPath(path):: self + __cephfsMixin({path: path}), - // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withReadOnly(readOnly):: self + __cephfsMixin({readOnly: readOnly}), - // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withSecretFile(secretFile):: self + __cephfsMixin({secretFile: secretFile}), - // Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - secretRef:: { - local __secretRefMixin(secretRef) = __cephfsMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - // Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withUser(user):: self + __cephfsMixin({user: user}), - }, - cephfsType:: hidden.core.v1.cephFsVolumeSource, - // Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md - cinder:: { - local __cinderMixin(cinder) = {cinder+: cinder}, - mixinInstance(cinder):: __cinderMixin(cinder), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md - withFsType(fsType):: self + __cinderMixin({fsType: fsType}), - // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md - withReadOnly(readOnly):: self + __cinderMixin({readOnly: readOnly}), - // volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md - withVolumeId(volumeId):: self + __cinderMixin({volumeID: volumeId}), - }, - cinderType:: hidden.core.v1.cinderVolumeSource, - // ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding - claimRef:: { - local __claimRefMixin(claimRef) = {claimRef+: claimRef}, - mixinInstance(claimRef):: __claimRefMixin(claimRef), - // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. - withFieldPath(fieldPath):: self + __claimRefMixin({fieldPath: fieldPath}), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __claimRefMixin({name: name}), - // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ - withNamespace(namespace):: self + __claimRefMixin({namespace: namespace}), - // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency - withResourceVersion(resourceVersion):: self + __claimRefMixin({resourceVersion: resourceVersion}), - // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids - withUid(uid):: self + __claimRefMixin({uid: uid}), - }, - claimRefType:: hidden.core.v1.objectReference, - // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod. - fc:: { - local __fcMixin(fc) = {fc+: fc}, - mixinInstance(fc):: __fcMixin(fc), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __fcMixin({fsType: fsType}), - // Required: FC target lun number - withLun(lun):: self + __fcMixin({lun: lun}), - // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __fcMixin({readOnly: readOnly}), - // Required: FC target worldwide names (WWNs) - withTargetWwns(targetWwns):: self + if std.type(targetWwns) == "array" then __fcMixin({targetWWNs: targetWwns}) else __fcMixin({targetWWNs: [targetWwns]}), - // Required: FC target worldwide names (WWNs) - withTargetWwnsMixin(targetWwns):: self + if std.type(targetWwns) == "array" then __fcMixin({targetWWNs+: targetWwns}) else __fcMixin({targetWWNs+: [targetWwns]}), - }, - fcType:: hidden.core.v1.fcVolumeSource, - // FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future. - flexVolume:: { - local __flexVolumeMixin(flexVolume) = {flexVolume+: flexVolume}, - mixinInstance(flexVolume):: __flexVolumeMixin(flexVolume), - // Driver is the name of the driver to use for this volume. - withDriver(driver):: self + __flexVolumeMixin({driver: driver}), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script. - withFsType(fsType):: self + __flexVolumeMixin({fsType: fsType}), - // Optional: Extra command options if any. - withOptions(options):: self + __flexVolumeMixin({options: options}), - // Optional: Extra command options if any. - withOptionsMixin(options):: self + __flexVolumeMixin({options+: options}), - // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __flexVolumeMixin({readOnly: readOnly}), - // Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts. - secretRef:: { - local __secretRefMixin(secretRef) = __flexVolumeMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - }, - flexVolumeType:: hidden.core.v1.flexVolumeSource, - // Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running - flocker:: { - local __flockerMixin(flocker) = {flocker+: flocker}, - mixinInstance(flocker):: __flockerMixin(flocker), - // Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated - withDatasetName(datasetName):: self + __flockerMixin({datasetName: datasetName}), - // UUID of the dataset. This is unique identifier of a Flocker dataset - withDatasetUuid(datasetUuid):: self + __flockerMixin({datasetUUID: datasetUuid}), - }, - flockerType:: hidden.core.v1.flockerVolumeSource, - // GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - gcePersistentDisk:: { - local __gcePersistentDiskMixin(gcePersistentDisk) = {gcePersistentDisk+: gcePersistentDisk}, - mixinInstance(gcePersistentDisk):: __gcePersistentDiskMixin(gcePersistentDisk), - // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - withFsType(fsType):: self + __gcePersistentDiskMixin({fsType: fsType}), - // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - withPartition(partition):: self + __gcePersistentDiskMixin({partition: partition}), - // Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - withPdName(pdName):: self + __gcePersistentDiskMixin({pdName: pdName}), - // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - withReadOnly(readOnly):: self + __gcePersistentDiskMixin({readOnly: readOnly}), - }, - gcePersistentDiskType:: hidden.core.v1.gcePersistentDiskVolumeSource, - // Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md - glusterfs:: { - local __glusterfsMixin(glusterfs) = {glusterfs+: glusterfs}, - mixinInstance(glusterfs):: __glusterfsMixin(glusterfs), - // EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod - withEndpoints(endpoints):: self + __glusterfsMixin({endpoints: endpoints}), - // Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod - withPath(path):: self + __glusterfsMixin({path: path}), - // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod - withReadOnly(readOnly):: self + __glusterfsMixin({readOnly: readOnly}), - }, - glusterfsType:: hidden.core.v1.glusterfsVolumeSource, - // HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath - hostPath:: { - local __hostPathMixin(hostPath) = {hostPath+: hostPath}, - mixinInstance(hostPath):: __hostPathMixin(hostPath), - // Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath - withPath(path):: self + __hostPathMixin({path: path}), - }, - hostPathType:: hidden.core.v1.hostPathVolumeSource, - // ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. - iscsi:: { - local __iscsiMixin(iscsi) = {iscsi+: iscsi}, - mixinInstance(iscsi):: __iscsiMixin(iscsi), - // whether support iSCSI Discovery CHAP authentication - withChapAuthDiscovery(chapAuthDiscovery):: self + __iscsiMixin({chapAuthDiscovery: chapAuthDiscovery}), - // whether support iSCSI Session CHAP authentication - withChapAuthSession(chapAuthSession):: self + __iscsiMixin({chapAuthSession: chapAuthSession}), - // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi - withFsType(fsType):: self + __iscsiMixin({fsType: fsType}), - // Target iSCSI Qualified Name. - withIqn(iqn):: self + __iscsiMixin({iqn: iqn}), - // Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport. - withIscsiInterface(iscsiInterface):: self + __iscsiMixin({iscsiInterface: iscsiInterface}), - // iSCSI target lun number. - withLun(lun):: self + __iscsiMixin({lun: lun}), - // iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260). - withPortals(portals):: self + if std.type(portals) == "array" then __iscsiMixin({portals: portals}) else __iscsiMixin({portals: [portals]}), - // iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260). - withPortalsMixin(portals):: self + if std.type(portals) == "array" then __iscsiMixin({portals+: portals}) else __iscsiMixin({portals+: [portals]}), - // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. - withReadOnly(readOnly):: self + __iscsiMixin({readOnly: readOnly}), - // CHAP secret for iSCSI target and initiator authentication - secretRef:: { - local __secretRefMixin(secretRef) = __iscsiMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - // iSCSI target portal. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260). - withTargetPortal(targetPortal):: self + __iscsiMixin({targetPortal: targetPortal}), - }, - iscsiType:: hidden.core.v1.iscsiVolumeSource, - // Local represents directly-attached storage with node affinity - localStorage:: { - local __localStorageMixin(localStorage) = {"local"+: localStorage}, - mixinInstance(localStorage):: __localStorageMixin(localStorage), - // The full path to the volume on the node For alpha, this path must be a directory Once block as a source is supported, then this path can point to a block device - withPath(path):: self + __localStorageMixin({path: path}), - }, - localStorageType:: hidden.core.v1.localVolumeSource, - // NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - nfs:: { - local __nfsMixin(nfs) = {nfs+: nfs}, - mixinInstance(nfs):: __nfsMixin(nfs), - // Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - withPath(path):: self + __nfsMixin({path: path}), - // ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - withReadOnly(readOnly):: self + __nfsMixin({readOnly: readOnly}), - // Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - withServer(server):: self + __nfsMixin({server: server}), - }, - nfsType:: hidden.core.v1.nfsVolumeSource, - // PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine - photonPersistentDisk:: { - local __photonPersistentDiskMixin(photonPersistentDisk) = {photonPersistentDisk+: photonPersistentDisk}, - mixinInstance(photonPersistentDisk):: __photonPersistentDiskMixin(photonPersistentDisk), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __photonPersistentDiskMixin({fsType: fsType}), - // ID that identifies Photon Controller persistent disk - withPdId(pdId):: self + __photonPersistentDiskMixin({pdID: pdId}), - }, - photonPersistentDiskType:: hidden.core.v1.photonPersistentDiskVolumeSource, - // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine - portworxVolume:: { - local __portworxVolumeMixin(portworxVolume) = {portworxVolume+: portworxVolume}, - mixinInstance(portworxVolume):: __portworxVolumeMixin(portworxVolume), - // FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __portworxVolumeMixin({fsType: fsType}), - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __portworxVolumeMixin({readOnly: readOnly}), - // VolumeID uniquely identifies a Portworx volume - withVolumeId(volumeId):: self + __portworxVolumeMixin({volumeID: volumeId}), - }, - portworxVolumeType:: hidden.core.v1.portworxVolumeSource, - // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime - quobyte:: { - local __quobyteMixin(quobyte) = {quobyte+: quobyte}, - mixinInstance(quobyte):: __quobyteMixin(quobyte), - // Group to map volume access to Default is no group - withGroup(group):: self + __quobyteMixin({group: group}), - // ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false. - withReadOnly(readOnly):: self + __quobyteMixin({readOnly: readOnly}), - // Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes - withRegistry(registry):: self + __quobyteMixin({registry: registry}), - // User to map volume access to Defaults to serivceaccount user - withUser(user):: self + __quobyteMixin({user: user}), - // Volume is a string that references an already created Quobyte volume by name. - withVolume(volume):: self + __quobyteMixin({volume: volume}), - }, - quobyteType:: hidden.core.v1.quobyteVolumeSource, - // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md - rbd:: { - local __rbdMixin(rbd) = {rbd+: rbd}, - mixinInstance(rbd):: __rbdMixin(rbd), - // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd - withFsType(fsType):: self + __rbdMixin({fsType: fsType}), - // The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withImage(image):: self + __rbdMixin({image: image}), - // Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withKeyring(keyring):: self + __rbdMixin({keyring: keyring}), - // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withMonitors(monitors):: self + if std.type(monitors) == "array" then __rbdMixin({monitors: monitors}) else __rbdMixin({monitors: [monitors]}), - // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withMonitorsMixin(monitors):: self + if std.type(monitors) == "array" then __rbdMixin({monitors+: monitors}) else __rbdMixin({monitors+: [monitors]}), - // The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withPool(pool):: self + __rbdMixin({pool: pool}), - // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withReadOnly(readOnly):: self + __rbdMixin({readOnly: readOnly}), - // SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - secretRef:: { - local __secretRefMixin(secretRef) = __rbdMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - // The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withUser(user):: self + __rbdMixin({user: user}), - }, - rbdType:: hidden.core.v1.rbdVolumeSource, - // ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes. - scaleIo:: { - local __scaleIoMixin(scaleIo) = {scaleIO+: scaleIo}, - mixinInstance(scaleIo):: __scaleIoMixin(scaleIo), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __scaleIoMixin({fsType: fsType}), - // The host address of the ScaleIO API Gateway. - withGateway(gateway):: self + __scaleIoMixin({gateway: gateway}), - // The name of the Protection Domain for the configured storage (defaults to "default"). - withProtectionDomain(protectionDomain):: self + __scaleIoMixin({protectionDomain: protectionDomain}), - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __scaleIoMixin({readOnly: readOnly}), - // SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail. - secretRef:: { - local __secretRefMixin(secretRef) = __scaleIoMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - // Flag to enable/disable SSL communication with Gateway, default false - withSslEnabled(sslEnabled):: self + __scaleIoMixin({sslEnabled: sslEnabled}), - // Indicates whether the storage for a volume should be thick or thin (defaults to "thin"). - withStorageMode(storageMode):: self + __scaleIoMixin({storageMode: storageMode}), - // The Storage Pool associated with the protection domain (defaults to "default"). - withStoragePool(storagePool):: self + __scaleIoMixin({storagePool: storagePool}), - // The name of the storage system as configured in ScaleIO. - withSystem(system):: self + __scaleIoMixin({system: system}), - // The name of a volume already created in the ScaleIO system that is associated with this volume source. - withVolumeName(volumeName):: self + __scaleIoMixin({volumeName: volumeName}), - }, - scaleIoType:: hidden.core.v1.scaleIoVolumeSource, - // StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md - storageos:: { - local __storageosMixin(storageos) = {storageos+: storageos}, - mixinInstance(storageos):: __storageosMixin(storageos), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __storageosMixin({fsType: fsType}), - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __storageosMixin({readOnly: readOnly}), - // SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted. - secretRef:: { - local __secretRefMixin(secretRef) = __storageosMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. - withFieldPath(fieldPath):: self + __secretRefMixin({fieldPath: fieldPath}), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ - withNamespace(namespace):: self + __secretRefMixin({namespace: namespace}), - // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency - withResourceVersion(resourceVersion):: self + __secretRefMixin({resourceVersion: resourceVersion}), - // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids - withUid(uid):: self + __secretRefMixin({uid: uid}), - }, - secretRefType:: hidden.core.v1.objectReference, - // VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace. - withVolumeName(volumeName):: self + __storageosMixin({volumeName: volumeName}), - // VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to "default" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created. - withVolumeNamespace(volumeNamespace):: self + __storageosMixin({volumeNamespace: volumeNamespace}), - }, - storageosType:: hidden.core.v1.storageOSPersistentVolumeSource, - // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine - vsphereVolume:: { - local __vsphereVolumeMixin(vsphereVolume) = {vsphereVolume+: vsphereVolume}, - mixinInstance(vsphereVolume):: __vsphereVolumeMixin(vsphereVolume), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __vsphereVolumeMixin({fsType: fsType}), - // Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName. - withStoragePolicyID(storagePolicyID):: self + __vsphereVolumeMixin({storagePolicyID: storagePolicyID}), - // Storage Policy Based Management (SPBM) profile name. - withStoragePolicyName(storagePolicyName):: self + __vsphereVolumeMixin({storagePolicyName: storagePolicyName}), - // Path that identifies vSphere volume vmdk - withVolumePath(volumePath):: self + __vsphereVolumeMixin({volumePath: volumePath}), - }, - vsphereVolumeType:: hidden.core.v1.vsphereVirtualDiskVolumeSource, - }, - }, - // PersistentVolumeStatus is the current status of a persistent volume. - persistentVolumeStatus:: { - new():: {}, - // A human-readable message indicating details about why the volume is in this state. - withMessage(message):: self + {message: message}, - // Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase - withPhase(phase):: self + {phase: phase}, - // Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI. - withReason(reason):: self + {reason: reason}, - mixin:: { - }, - }, - // Represents a Photon Controller persistent disk resource. - photonPersistentDiskVolumeSource:: { - new():: {}, - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + {fsType: fsType}, - // ID that identifies Photon Controller persistent disk - withPdId(pdId):: self + {pdID: pdId}, - mixin:: { - }, - }, - // Pod affinity is a group of inter pod affinity scheduling rules. - podAffinity:: { - new():: {}, - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then {preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution} else {preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}, - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then {preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution} else {preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}, - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then {requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution} else {requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then {requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution} else {requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - mixin:: { - }, - }, - // Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key tches that of any node on which a pod of the set of pods is running - podAffinityTerm:: { - new():: {}, - // namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means "this pod's namespace" - withNamespaces(namespaces):: self + if std.type(namespaces) == "array" then {namespaces: namespaces} else {namespaces: [namespaces]}, - // namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means "this pod's namespace" - withNamespacesMixin(namespaces):: self + if std.type(namespaces) == "array" then {namespaces+: namespaces} else {namespaces+: [namespaces]}, - // This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. For PreferredDuringScheduling pod anti-affinity, empty topologyKey is interpreted as "all topologies" ("all topologies" here means all the topologyKeys indicated by scheduler command-line argument --failure-domains); for affinity and for RequiredDuringScheduling pod anti-affinity, empty topologyKey is not allowed. - withTopologyKey(topologyKey):: self + {topologyKey: topologyKey}, - mixin:: { - // A label query over a set of resources, in this case pods. - labelSelector:: { - local __labelSelectorMixin(labelSelector) = {labelSelector+: labelSelector}, - mixinInstance(labelSelector):: __labelSelectorMixin(labelSelector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __labelSelectorMixin({matchExpressions: matchExpressions}) else __labelSelectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __labelSelectorMixin({matchExpressions+: matchExpressions}) else __labelSelectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __labelSelectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __labelSelectorMixin({matchLabels+: matchLabels}), - }, - labelSelectorType:: hidden.meta.v1.labelSelector, - }, - }, - // Pod anti affinity is a group of inter pod anti affinity scheduling rules. - podAntiAffinity:: { - new():: {}, - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then {preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution} else {preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}, - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then {preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution} else {preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}, - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then {requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution} else {requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then {requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution} else {requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - mixin:: { - }, - }, - // PodCondition contains details for the current condition of this pod. - podCondition:: { - new():: {}, - // Human-readable message indicating details about last transition. - withMessage(message):: self + {message: message}, - // Unique, one-word, CamelCase reason for the condition's last transition. - withReason(reason):: self + {reason: reason}, - // Type is the type of the condition. Currently only Ready. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions - withType(type):: self + {type: type}, - mixin:: { - // Last time we probed the condition. - lastProbeTime:: { - local __lastProbeTimeMixin(lastProbeTime) = {lastProbeTime+: lastProbeTime}, - mixinInstance(lastProbeTime):: __lastProbeTimeMixin(lastProbeTime), - }, - lastProbeTimeType:: hidden.meta.v1.time, - // Last time the condition transitioned from one status to another. - lastTransitionTime:: { - local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime}, - mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime), - }, - lastTransitionTimeType:: hidden.meta.v1.time, - }, - }, - // PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext. - podSecurityContext:: { - new():: {}, - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + {fsGroup: fsGroup}, - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + {runAsNonRoot: runAsNonRoot}, - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + {runAsUser: runAsUser}, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then {supplementalGroups: supplementalGroups} else {supplementalGroups: [supplementalGroups]}, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then {supplementalGroups+: supplementalGroups} else {supplementalGroups+: [supplementalGroups]}, - mixin:: { - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = {seLinuxOptions+: seLinuxOptions}, - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - }, - }, - // PodSpec is a description of a pod. - podSpec:: { - new():: {}, - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + {activeDeadlineSeconds: activeDeadlineSeconds}, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + {automountServiceAccountToken: automountServiceAccountToken}, - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then {containers: containers} else {containers: [containers]}, - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then {containers+: containers} else {containers+: [containers]}, - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + {dnsPolicy: dnsPolicy}, - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then {hostAliases: hostAliases} else {hostAliases: [hostAliases]}, - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then {hostAliases+: hostAliases} else {hostAliases+: [hostAliases]}, - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + {hostIPC: hostIpc}, - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + {hostNetwork: hostNetwork}, - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + {hostPID: hostPid}, - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + {hostname: hostname}, - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then {imagePullSecrets: imagePullSecrets} else {imagePullSecrets: [imagePullSecrets]}, - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then {imagePullSecrets+: imagePullSecrets} else {imagePullSecrets+: [imagePullSecrets]}, - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then {initContainers: initContainers} else {initContainers: [initContainers]}, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then {initContainers+: initContainers} else {initContainers+: [initContainers]}, - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + {nodeName: nodeName}, - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + {nodeSelector: nodeSelector}, - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + {nodeSelector+: nodeSelector}, - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + {restartPolicy: restartPolicy}, - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + {schedulerName: schedulerName}, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + {serviceAccount: serviceAccount}, - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + {serviceAccountName: serviceAccountName}, - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + {subdomain: subdomain}, - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + {terminationGracePeriodSeconds: terminationGracePeriodSeconds}, - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then {tolerations: tolerations} else {tolerations: [tolerations]}, - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then {tolerations+: tolerations} else {tolerations+: [tolerations]}, - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then {volumes: volumes} else {volumes: [volumes]}, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then {volumes+: volumes} else {volumes+: [volumes]}, - volumesType:: hidden.core.v1.volume, - mixin:: { - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = {affinity+: affinity}, - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = {securityContext+: securityContext}, - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - }, - }, - // PodStatus represents information about the status of a pod. Status may trail the actual state of a system. - podStatus:: { - new():: {}, - // Current service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions - withConditions(conditions):: self + if std.type(conditions) == "array" then {conditions: conditions} else {conditions: [conditions]}, - // Current service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions - withConditionsMixin(conditions):: self + if std.type(conditions) == "array" then {conditions+: conditions} else {conditions+: [conditions]}, - conditionsType:: hidden.core.v1.podCondition, - // The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status - withContainerStatuses(containerStatuses):: self + if std.type(containerStatuses) == "array" then {containerStatuses: containerStatuses} else {containerStatuses: [containerStatuses]}, - // The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status - withContainerStatusesMixin(containerStatuses):: self + if std.type(containerStatuses) == "array" then {containerStatuses+: containerStatuses} else {containerStatuses+: [containerStatuses]}, - containerStatusesType:: hidden.core.v1.containerStatus, - // IP address of the host to which the pod is assigned. Empty if not yet scheduled. - withHostIp(hostIp):: self + {hostIP: hostIp}, - // The list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status - withInitContainerStatuses(initContainerStatuses):: self + if std.type(initContainerStatuses) == "array" then {initContainerStatuses: initContainerStatuses} else {initContainerStatuses: [initContainerStatuses]}, - // The list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status - withInitContainerStatusesMixin(initContainerStatuses):: self + if std.type(initContainerStatuses) == "array" then {initContainerStatuses+: initContainerStatuses} else {initContainerStatuses+: [initContainerStatuses]}, - initContainerStatusesType:: hidden.core.v1.containerStatus, - // A human readable message indicating details about why the pod is in this condition. - withMessage(message):: self + {message: message}, - // Current condition of the pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase - withPhase(phase):: self + {phase: phase}, - // IP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated. - withPodIp(podIp):: self + {podIP: podIp}, - // The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://github.com/kubernetes/kubernetes/blob/master/docs/design/resource-qos.md - withQosClass(qosClass):: self + {qosClass: qosClass}, - // A brief CamelCase message indicating details about why the pod is in this state. e.g. 'OutOfDisk' - withReason(reason):: self + {reason: reason}, - mixin:: { - // RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod. - startTime:: { - local __startTimeMixin(startTime) = {startTime+: startTime}, - mixinInstance(startTime):: __startTimeMixin(startTime), - }, - startTimeType:: hidden.meta.v1.time, - }, - }, - // PodTemplateSpec describes the data a pod should have when created from a template - podTemplateSpec:: { - new():: {}, - mixin:: { - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = {metadata+: metadata}, - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = {spec+: spec}, - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - }, - // PortworxVolumeSource represents a Portworx volume resource. - portworxVolumeSource:: { - new():: {}, - // FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + {fsType: fsType}, - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + {readOnly: readOnly}, - // VolumeID uniquely identifies a Portworx volume - withVolumeId(volumeId):: self + {volumeID: volumeId}, - mixin:: { - }, - }, - // An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op). - preferredSchedulingTerm:: { - new():: {}, - // Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100. - withWeight(weight):: self + {weight: weight}, - mixin:: { - // A node selector term, associated with the corresponding weight. - preference:: { - local __preferenceMixin(preference) = {preference+: preference}, - mixinInstance(preference):: __preferenceMixin(preference), - // Required. A list of node selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __preferenceMixin({matchExpressions: matchExpressions}) else __preferenceMixin({matchExpressions: [matchExpressions]}), - // Required. A list of node selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __preferenceMixin({matchExpressions+: matchExpressions}) else __preferenceMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.core.v1.nodeSelectorRequirement, - }, - preferenceType:: hidden.core.v1.nodeSelectorTerm, - }, - }, - // Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic. - probe:: { - new():: {}, - // Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1. - withFailureThreshold(failureThreshold):: self + {failureThreshold: failureThreshold}, - // Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - withInitialDelaySeconds(initialDelaySeconds):: self + {initialDelaySeconds: initialDelaySeconds}, - // How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. - withPeriodSeconds(periodSeconds):: self + {periodSeconds: periodSeconds}, - // Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1. - withSuccessThreshold(successThreshold):: self + {successThreshold: successThreshold}, - // Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - withTimeoutSeconds(timeoutSeconds):: self + {timeoutSeconds: timeoutSeconds}, - mixin:: { - // One and only one of the following should be specified. Exec specifies the action to take. - exec:: { - local __execMixin(exec) = {exec+: exec}, - mixinInstance(exec):: __execMixin(exec), - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommand(command):: self + if std.type(command) == "array" then __execMixin({command: command}) else __execMixin({command: [command]}), - // Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - withCommandMixin(command):: self + if std.type(command) == "array" then __execMixin({command+: command}) else __execMixin({command+: [command]}), - }, - execType:: hidden.core.v1.execAction, - // HTTPGet specifies the http request to perform. - httpGet:: { - local __httpGetMixin(httpGet) = {httpGet+: httpGet}, - mixinInstance(httpGet):: __httpGetMixin(httpGet), - // Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. - withHost(host):: self + __httpGetMixin({host: host}), - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == "array" then __httpGetMixin({httpHeaders: httpHeaders}) else __httpGetMixin({httpHeaders: [httpHeaders]}), - // Custom headers to set in the request. HTTP allows repeated headers. - withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == "array" then __httpGetMixin({httpHeaders+: httpHeaders}) else __httpGetMixin({httpHeaders+: [httpHeaders]}), - httpHeadersType:: hidden.core.v1.httpHeader, - // Path to access on the HTTP server. - withPath(path):: self + __httpGetMixin({path: path}), - // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: __httpGetMixin({port: port}), - // Scheme to use for connecting to the host. Defaults to HTTP. - withScheme(scheme):: self + __httpGetMixin({scheme: scheme}), - }, - httpGetType:: hidden.core.v1.httpGetAction, - // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported - tcpSocket:: { - local __tcpSocketMixin(tcpSocket) = {tcpSocket+: tcpSocket}, - mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket), - // Optional: Host name to connect to, defaults to the pod IP. - withHost(host):: self + __tcpSocketMixin({host: host}), - // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: __tcpSocketMixin({port: port}), - }, - tcpSocketType:: hidden.core.v1.tcpSocketAction, - }, - }, - // Represents a projected volume source - projectedVolumeSource:: { - new():: {}, - // Mode bits to use on created files by default. Must be a value between 0 and 0777. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set. - withDefaultMode(defaultMode):: self + {defaultMode: defaultMode}, - // list of volume projections - withSources(sources):: self + if std.type(sources) == "array" then {sources: sources} else {sources: [sources]}, - // list of volume projections - withSourcesMixin(sources):: self + if std.type(sources) == "array" then {sources+: sources} else {sources+: [sources]}, - sourcesType:: hidden.core.v1.volumeProjection, - mixin:: { - }, - }, - // Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling. - quobyteVolumeSource:: { - new():: {}, - // Group to map volume access to Default is no group - withGroup(group):: self + {group: group}, - // ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false. - withReadOnly(readOnly):: self + {readOnly: readOnly}, - // Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes - withRegistry(registry):: self + {registry: registry}, - // User to map volume access to Defaults to serivceaccount user - withUser(user):: self + {user: user}, - // Volume is a string that references an already created Quobyte volume by name. - withVolume(volume):: self + {volume: volume}, - mixin:: { - }, - }, - // Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling. - rbdVolumeSource:: { - new():: {}, - // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd - withFsType(fsType):: self + {fsType: fsType}, - // The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withImage(image):: self + {image: image}, - // Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withKeyring(keyring):: self + {keyring: keyring}, - // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withMonitors(monitors):: self + if std.type(monitors) == "array" then {monitors: monitors} else {monitors: [monitors]}, - // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withMonitorsMixin(monitors):: self + if std.type(monitors) == "array" then {monitors+: monitors} else {monitors+: [monitors]}, - // The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withPool(pool):: self + {pool: pool}, - // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withReadOnly(readOnly):: self + {readOnly: readOnly}, - // The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withUser(user):: self + {user: user}, - mixin:: { - // SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - secretRef:: { - local __secretRefMixin(secretRef) = {secretRef+: secretRef}, - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - }, - }, - // ReplicationControllerCondition describes the state of a replication controller at a certain point. - replicationControllerCondition:: { - new():: {}, - // A human readable message indicating details about the transition. - withMessage(message):: self + {message: message}, - // The reason for the condition's last transition. - withReason(reason):: self + {reason: reason}, - // Type of replication controller condition. - withType(type):: self + {type: type}, - mixin:: { - // The last time the condition transitioned from one status to another. - lastTransitionTime:: { - local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime}, - mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime), - }, - lastTransitionTimeType:: hidden.meta.v1.time, - }, - }, - // ReplicationControllerSpec is the specification of a replication controller. - replicationControllerSpec:: { - new():: {}, - // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready) - withMinReadySeconds(minReadySeconds):: self + {minReadySeconds: minReadySeconds}, - // Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller - withReplicas(replicas):: self + {replicas: replicas}, - // Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors - withSelector(selector):: self + {selector: selector}, - // Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors - withSelectorMixin(selector):: self + {selector+: selector}, - mixin:: { - // Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template - template:: { - local __templateMixin(template) = {template+: template}, - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - }, - }, - // ReplicationControllerStatus represents the current status of a replication controller. - replicationControllerStatus:: { - new():: {}, - // The number of available replicas (ready for at least minReadySeconds) for this replication controller. - withAvailableReplicas(availableReplicas):: self + {availableReplicas: availableReplicas}, - // Represents the latest available observations of a replication controller's current state. - withConditions(conditions):: self + if std.type(conditions) == "array" then {conditions: conditions} else {conditions: [conditions]}, - // Represents the latest available observations of a replication controller's current state. - withConditionsMixin(conditions):: self + if std.type(conditions) == "array" then {conditions+: conditions} else {conditions+: [conditions]}, - conditionsType:: hidden.core.v1.replicationControllerCondition, - // The number of pods that have labels matching the labels of the pod template of the replication controller. - withFullyLabeledReplicas(fullyLabeledReplicas):: self + {fullyLabeledReplicas: fullyLabeledReplicas}, - // ObservedGeneration reflects the generation of the most recently observed replication controller. - withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration}, - // The number of ready replicas for this replication controller. - withReadyReplicas(readyReplicas):: self + {readyReplicas: readyReplicas}, - // Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller - withReplicas(replicas):: self + {replicas: replicas}, - mixin:: { - }, - }, - // ResourceFieldSelector represents container resources (cpu, memory) and their output format - resourceFieldSelector:: { - new():: {}, - // Container name: required for volumes, optional for env vars - withContainerName(containerName):: self + {containerName: containerName}, - // Required: resource to select - withResource(resource):: self + {resource: resource}, - mixin:: { - // Specifies the output format of the exposed resources, defaults to "1" - divisor:: { - local __divisorMixin(divisor) = {divisor+: divisor}, - mixinInstance(divisor):: __divisorMixin(divisor), - }, - divisorType:: hidden.core.resource.quantity, - }, - }, - // ResourceQuotaSpec defines the desired hard limits to enforce for Quota. - resourceQuotaSpec:: { - new():: {}, - // Hard is the set of desired hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md - withHard(hard):: self + {hard: hard}, - // Hard is the set of desired hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md - withHardMixin(hard):: self + {hard+: hard}, - // A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects. - withScopes(scopes):: self + if std.type(scopes) == "array" then {scopes: scopes} else {scopes: [scopes]}, - // A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects. - withScopesMixin(scopes):: self + if std.type(scopes) == "array" then {scopes+: scopes} else {scopes+: [scopes]}, - mixin:: { - }, - }, - // ResourceQuotaStatus defines the enforced hard limits and observed use. - resourceQuotaStatus:: { - new():: {}, - // Hard is the set of enforced hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md - withHard(hard):: self + {hard: hard}, - // Hard is the set of enforced hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md - withHardMixin(hard):: self + {hard+: hard}, - // Used is the current observed total usage of the resource in the namespace. - withUsed(used):: self + {used: used}, - // Used is the current observed total usage of the resource in the namespace. - withUsedMixin(used):: self + {used+: used}, - mixin:: { - }, - }, - // ResourceRequirements describes the compute resource requirements. - resourceRequirements:: { - new():: {}, - // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - withLimits(limits):: self + {limits: limits}, - // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - withLimitsMixin(limits):: self + {limits+: limits}, - // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - withRequests(requests):: self + {requests: requests}, - // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - withRequestsMixin(requests):: self + {requests+: requests}, - mixin:: { - }, - }, - // SELinuxOptions are the labels to be applied to the container - seLinuxOptions:: { - new():: {}, - // Level is SELinux level label that applies to the container. - withLevel(level):: self + {level: level}, - // Role is a SELinux role label that applies to the container. - withRole(role):: self + {role: role}, - // Type is a SELinux type label that applies to the container. - withType(type):: self + {type: type}, - // User is a SELinux user label that applies to the container. - withUser(user):: self + {user: user}, - mixin:: { - }, - }, - // ScaleIOVolumeSource represents a persistent ScaleIO volume - scaleIoVolumeSource:: { - new():: {}, - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + {fsType: fsType}, - // The host address of the ScaleIO API Gateway. - withGateway(gateway):: self + {gateway: gateway}, - // The name of the Protection Domain for the configured storage (defaults to "default"). - withProtectionDomain(protectionDomain):: self + {protectionDomain: protectionDomain}, - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + {readOnly: readOnly}, - // Flag to enable/disable SSL communication with Gateway, default false - withSslEnabled(sslEnabled):: self + {sslEnabled: sslEnabled}, - // Indicates whether the storage for a volume should be thick or thin (defaults to "thin"). - withStorageMode(storageMode):: self + {storageMode: storageMode}, - // The Storage Pool associated with the protection domain (defaults to "default"). - withStoragePool(storagePool):: self + {storagePool: storagePool}, - // The name of the storage system as configured in ScaleIO. - withSystem(system):: self + {system: system}, - // The name of a volume already created in the ScaleIO system that is associated with this volume source. - withVolumeName(volumeName):: self + {volumeName: volumeName}, - mixin:: { - // SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail. - secretRef:: { - local __secretRefMixin(secretRef) = {secretRef+: secretRef}, - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - }, - }, - // SecretEnvSource selects a Secret to populate the environment variables with. - // - // The contents of the target Secret's Data field will represent the key-value pairs as environment variables. - secretEnvSource:: { - new():: {}, - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + {name: name}, - // Specify whether the Secret must be defined - withOptional(optional):: self + {optional: optional}, - mixin:: { - }, - }, - // SecretKeySelector selects a key of a Secret. - secretKeySelector:: { - new():: {}, - // The key of the secret to select from. Must be a valid secret key. - withKey(key):: self + {key: key}, - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + {name: name}, - // Specify whether the Secret or it's key must be defined - withOptional(optional):: self + {optional: optional}, - mixin:: { - }, - }, - // Adapts a secret into a projected volume. - // - // The contents of the target Secret's Data field will be presented in a projected volume as files using the keys in the Data field as the file names. Note that this is identical to a secret volume source without the default mode. - secretProjection:: { - new():: {}, - // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.keyToPath, - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + {name: name}, - // Specify whether the Secret or its key must be defined - withOptional(optional):: self + {optional: optional}, - mixin:: { - }, - }, - // Adapts a Secret into a volume. - // - // The contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling. - secretVolumeSource:: { - new():: {}, - // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set. - withDefaultMode(defaultMode):: self + {defaultMode: defaultMode}, - // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. - withItems(items):: self + if std.type(items) == "array" then {items: items} else {items: [items]}, - // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. - withItemsMixin(items):: self + if std.type(items) == "array" then {items+: items} else {items+: [items]}, - itemsType:: hidden.core.v1.keyToPath, - // Specify whether the Secret or it's keys must be defined - withOptional(optional):: self + {optional: optional}, - // Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret - withSecretName(secretName):: self + {secretName: secretName}, - mixin:: { - }, - }, - // SecurityContext holds security configuration that will be applied to a container. Some fields are present in both SecurityContext and PodSecurityContext. When both are set, the values in SecurityContext take precedence. - securityContext:: { - new():: {}, - // Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false. - withPrivileged(privileged):: self + {privileged: privileged}, - // Whether this container has a read-only root filesystem. Default is false. - withReadOnlyRootFilesystem(readOnlyRootFilesystem):: self + {readOnlyRootFilesystem: readOnlyRootFilesystem}, - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + {runAsNonRoot: runAsNonRoot}, - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsUser(runAsUser):: self + {runAsUser: runAsUser}, - mixin:: { - // The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime. - capabilities:: { - local __capabilitiesMixin(capabilities) = {capabilities+: capabilities}, - mixinInstance(capabilities):: __capabilitiesMixin(capabilities), - // Added capabilities - withAdd(add):: self + if std.type(add) == "array" then __capabilitiesMixin({add: add}) else __capabilitiesMixin({add: [add]}), - // Added capabilities - withAddMixin(add):: self + if std.type(add) == "array" then __capabilitiesMixin({add+: add}) else __capabilitiesMixin({add+: [add]}), - // Removed capabilities - withDrop(drop):: self + if std.type(drop) == "array" then __capabilitiesMixin({drop: drop}) else __capabilitiesMixin({drop: [drop]}), - // Removed capabilities - withDropMixin(drop):: self + if std.type(drop) == "array" then __capabilitiesMixin({drop+: drop}) else __capabilitiesMixin({drop+: [drop]}), - }, - capabilitiesType:: hidden.core.v1.capabilities, - // The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = {seLinuxOptions+: seLinuxOptions}, - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - }, - }, - // ServicePort contains information on service's port. - servicePort:: { - new(port, targetPort):: {} + self.withPort(port) + self.withTargetPort(targetPort), - newNamed(name, port, targetPort):: {} + self.withName(name) + self.withPort(port) + self.withTargetPort(targetPort), - // The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. This maps to the 'Name' field in EndpointPort objects. Optional if only one ServicePort is defined on this service. - withName(name):: self + {name: name}, - // The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport - withNodePort(nodePort):: self + {nodePort: nodePort}, - // The port that will be exposed by this service. - withPort(port):: self + {port: port}, - // The IP protocol for this port. Supports "TCP" and "UDP". Default is TCP. - withProtocol(protocol):: self + {protocol: protocol}, - // Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service - withTargetPort(targetPort):: {targetPort: targetPort}, - mixin:: { - }, - }, - // ServiceSpec describes the attributes that a user creates on a service. - serviceSpec:: { - new():: {}, - // clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are "None", empty string (""), or a valid IP address. "None" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies - withClusterIp(clusterIp):: self + {clusterIP: clusterIp}, - // externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system. - withExternalIps(externalIps):: self + if std.type(externalIps) == "array" then {externalIPs: externalIps} else {externalIPs: [externalIps]}, - // externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system. - withExternalIpsMixin(externalIps):: self + if std.type(externalIps) == "array" then {externalIPs+: externalIps} else {externalIPs+: [externalIps]}, - // externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid DNS name and requires Type to be ExternalName. - withExternalName(externalName):: self + {externalName: externalName}, - // externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. "Local" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. "Cluster" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading. - withExternalTrafficPolicy(externalTrafficPolicy):: self + {externalTrafficPolicy: externalTrafficPolicy}, - // healthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local. - withHealthCheckNodePort(healthCheckNodePort):: self + {healthCheckNodePort: healthCheckNodePort}, - // Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature. - withLoadBalancerIp(loadBalancerIp):: self + {loadBalancerIP: loadBalancerIp}, - // If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/ - withLoadBalancerSourceRanges(loadBalancerSourceRanges):: self + if std.type(loadBalancerSourceRanges) == "array" then {loadBalancerSourceRanges: loadBalancerSourceRanges} else {loadBalancerSourceRanges: [loadBalancerSourceRanges]}, - // If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/ - withLoadBalancerSourceRangesMixin(loadBalancerSourceRanges):: self + if std.type(loadBalancerSourceRanges) == "array" then {loadBalancerSourceRanges+: loadBalancerSourceRanges} else {loadBalancerSourceRanges+: [loadBalancerSourceRanges]}, - // The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies - withPorts(ports):: self + if std.type(ports) == "array" then {ports: ports} else {ports: [ports]}, - // The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies - withPortsMixin(ports):: self + if std.type(ports) == "array" then {ports+: ports} else {ports+: [ports]}, - portsType:: hidden.core.v1.servicePort, - // Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/ - withSelector(selector):: self + {selector: selector}, - // Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/ - withSelectorMixin(selector):: self + {selector+: selector}, - // Supports "ClientIP" and "None". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies - withSessionAffinity(sessionAffinity):: self + {sessionAffinity: sessionAffinity}, - // type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. "ExternalName" maps to the specified externalName. "ClusterIP" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is "None", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. "NodePort" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. "LoadBalancer" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types - withType(type):: self + {type: type}, - mixin:: { - }, - }, - // ServiceStatus represents the current status of a service. - serviceStatus:: { - new():: {}, - mixin:: { - // LoadBalancer contains the current status of the load-balancer, if one is present. - loadBalancer:: { - local __loadBalancerMixin(loadBalancer) = {loadBalancer+: loadBalancer}, - mixinInstance(loadBalancer):: __loadBalancerMixin(loadBalancer), - // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points. - withIngress(ingress):: self + if std.type(ingress) == "array" then __loadBalancerMixin({ingress: ingress}) else __loadBalancerMixin({ingress: [ingress]}), - // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points. - withIngressMixin(ingress):: self + if std.type(ingress) == "array" then __loadBalancerMixin({ingress+: ingress}) else __loadBalancerMixin({ingress+: [ingress]}), - ingressType:: hidden.core.v1.loadBalancerIngress, - }, - loadBalancerType:: hidden.core.v1.loadBalancerStatus, - }, - }, - // Represents a StorageOS persistent volume resource. - storageOSPersistentVolumeSource:: { - new():: {}, - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + {fsType: fsType}, - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + {readOnly: readOnly}, - // VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace. - withVolumeName(volumeName):: self + {volumeName: volumeName}, - // VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to "default" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created. - withVolumeNamespace(volumeNamespace):: self + {volumeNamespace: volumeNamespace}, - mixin:: { - // SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted. - secretRef:: { - local __secretRefMixin(secretRef) = {secretRef+: secretRef}, - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. - withFieldPath(fieldPath):: self + __secretRefMixin({fieldPath: fieldPath}), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ - withNamespace(namespace):: self + __secretRefMixin({namespace: namespace}), - // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency - withResourceVersion(resourceVersion):: self + __secretRefMixin({resourceVersion: resourceVersion}), - // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids - withUid(uid):: self + __secretRefMixin({uid: uid}), - }, - secretRefType:: hidden.core.v1.objectReference, - }, - }, - // Represents a StorageOS persistent volume resource. - storageOSVolumeSource:: { - new():: {}, - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + {fsType: fsType}, - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + {readOnly: readOnly}, - // VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace. - withVolumeName(volumeName):: self + {volumeName: volumeName}, - // VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to "default" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created. - withVolumeNamespace(volumeNamespace):: self + {volumeNamespace: volumeNamespace}, - mixin:: { - // SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted. - secretRef:: { - local __secretRefMixin(secretRef) = {secretRef+: secretRef}, - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - }, - }, - // TCPSocketAction describes an action based on opening a socket - tcpSocketAction:: { - new():: {}, - // Optional: Host name to connect to, defaults to the pod IP. - withHost(host):: self + {host: host}, - // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. - withPort(port):: {port: port}, - mixin:: { - }, - }, - // The node this Taint is attached to has the effect "effect" on any pod that that does not tolerate the Taint. - taint:: { - new():: {}, - // Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute. - withEffect(effect):: self + {effect: effect}, - // Required. The taint key to be applied to a node. - withKey(key):: self + {key: key}, - // Required. The taint value corresponding to the taint key. - withValue(value):: self + {value: value}, - mixin:: { - // TimeAdded represents the time at which the taint was added. It is only written for NoExecute taints. - timeAdded:: { - local __timeAddedMixin(timeAdded) = {timeAdded+: timeAdded}, - mixinInstance(timeAdded):: __timeAddedMixin(timeAdded), - }, - timeAddedType:: hidden.meta.v1.time, - }, - }, - // The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . - toleration:: { - new():: {}, - // Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. - withEffect(effect):: self + {effect: effect}, - // Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys. - withKey(key):: self + {key: key}, - // Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category. - withOperator(operator):: self + {operator: operator}, - // TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system. - withTolerationSeconds(tolerationSeconds):: self + {tolerationSeconds: tolerationSeconds}, - // Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. - withValue(value):: self + {value: value}, - mixin:: { - }, - }, - // Volume represents a named volume in a pod that may be accessed by any container in the pod. - volume:: { - fromConfigMap(name, configMapName, configMapItems):: {} + self.withName(name) + self.mixin.configMap.withName(configMapName) + self.mixin.configMap.withItems(configMapItems), - fromEmptyDir(name, emptyDir={}):: {} + self.withName(name) + self.mixin.emptyDir.mixinInstance(emptyDir), - fromPersistentVolumeClaim(name, claimName):: {} + self.withName(name) + self.mixin.persistentVolumeClaim.withClaimName(claimName), - fromHostPath(name, hostPath):: {} + self.withName(name) + self.mixin.hostPath.withPath(hostPath), - fromSecret(name, secretName):: {} + self.withName(name) + self.mixin.secret.withSecretName(secretName), - // Volume's name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + {name: name}, - mixin:: { - // AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - awsElasticBlockStore:: { - local __awsElasticBlockStoreMixin(awsElasticBlockStore) = {awsElasticBlockStore+: awsElasticBlockStore}, - mixinInstance(awsElasticBlockStore):: __awsElasticBlockStoreMixin(awsElasticBlockStore), - // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - withFsType(fsType):: self + __awsElasticBlockStoreMixin({fsType: fsType}), - // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). - withPartition(partition):: self + __awsElasticBlockStoreMixin({partition: partition}), - // Specify "true" to force and set the ReadOnly property in VolumeMounts to "true". If omitted, the default is "false". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - withReadOnly(readOnly):: self + __awsElasticBlockStoreMixin({readOnly: readOnly}), - // Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - withVolumeId(volumeId):: self + __awsElasticBlockStoreMixin({volumeID: volumeId}), - }, - awsElasticBlockStoreType:: hidden.core.v1.awsElasticBlockStoreVolumeSource, - // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. - azureDisk:: { - local __azureDiskMixin(azureDisk) = {azureDisk+: azureDisk}, - mixinInstance(azureDisk):: __azureDiskMixin(azureDisk), - // Host Caching mode: None, Read Only, Read Write. - withCachingMode(cachingMode):: self + __azureDiskMixin({cachingMode: cachingMode}), - // The Name of the data disk in the blob storage - withDiskName(diskName):: self + __azureDiskMixin({diskName: diskName}), - // The URI the data disk in the blob storage - withDiskUri(diskUri):: self + __azureDiskMixin({diskURI: diskUri}), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __azureDiskMixin({fsType: fsType}), - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __azureDiskMixin({readOnly: readOnly}), - }, - azureDiskType:: hidden.core.v1.azureDiskVolumeSource, - // AzureFile represents an Azure File Service mount on the host and bind mount to the pod. - azureFile:: { - local __azureFileMixin(azureFile) = {azureFile+: azureFile}, - mixinInstance(azureFile):: __azureFileMixin(azureFile), - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __azureFileMixin({readOnly: readOnly}), - // the name of secret that contains Azure Storage Account Name and Key - withSecretName(secretName):: self + __azureFileMixin({secretName: secretName}), - // Share Name - withShareName(shareName):: self + __azureFileMixin({shareName: shareName}), - }, - azureFileType:: hidden.core.v1.azureFileVolumeSource, - // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime - cephfs:: { - local __cephfsMixin(cephfs) = {cephfs+: cephfs}, - mixinInstance(cephfs):: __cephfsMixin(cephfs), - // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withMonitors(monitors):: self + if std.type(monitors) == "array" then __cephfsMixin({monitors: monitors}) else __cephfsMixin({monitors: [monitors]}), - // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withMonitorsMixin(monitors):: self + if std.type(monitors) == "array" then __cephfsMixin({monitors+: monitors}) else __cephfsMixin({monitors+: [monitors]}), - // Optional: Used as the mounted root, rather than the full Ceph tree, default is / - withPath(path):: self + __cephfsMixin({path: path}), - // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withReadOnly(readOnly):: self + __cephfsMixin({readOnly: readOnly}), - // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withSecretFile(secretFile):: self + __cephfsMixin({secretFile: secretFile}), - // Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - secretRef:: { - local __secretRefMixin(secretRef) = __cephfsMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - // Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it - withUser(user):: self + __cephfsMixin({user: user}), - }, - cephfsType:: hidden.core.v1.cephFsVolumeSource, - // Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md - cinder:: { - local __cinderMixin(cinder) = {cinder+: cinder}, - mixinInstance(cinder):: __cinderMixin(cinder), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md - withFsType(fsType):: self + __cinderMixin({fsType: fsType}), - // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md - withReadOnly(readOnly):: self + __cinderMixin({readOnly: readOnly}), - // volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md - withVolumeId(volumeId):: self + __cinderMixin({volumeID: volumeId}), - }, - cinderType:: hidden.core.v1.cinderVolumeSource, - // ConfigMap represents a configMap that should populate this volume - configMap:: { - local __configMapMixin(configMap) = {configMap+: configMap}, - mixinInstance(configMap):: __configMapMixin(configMap), - // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set. - withDefaultMode(defaultMode):: self + __configMapMixin({defaultMode: defaultMode}), - // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. - withItems(items):: self + if std.type(items) == "array" then __configMapMixin({items: items}) else __configMapMixin({items: [items]}), - // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. - withItemsMixin(items):: self + if std.type(items) == "array" then __configMapMixin({items+: items}) else __configMapMixin({items+: [items]}), - itemsType:: hidden.core.v1.keyToPath, - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __configMapMixin({name: name}), - // Specify whether the ConfigMap or it's keys must be defined - withOptional(optional):: self + __configMapMixin({optional: optional}), - }, - configMapType:: hidden.core.v1.configMapVolumeSource, - // DownwardAPI represents downward API about the pod that should populate this volume - downwardApi:: { - local __downwardApiMixin(downwardApi) = {downwardAPI+: downwardApi}, - mixinInstance(downwardApi):: __downwardApiMixin(downwardApi), - // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set. - withDefaultMode(defaultMode):: self + __downwardApiMixin({defaultMode: defaultMode}), - // Items is a list of downward API volume file - withItems(items):: self + if std.type(items) == "array" then __downwardApiMixin({items: items}) else __downwardApiMixin({items: [items]}), - // Items is a list of downward API volume file - withItemsMixin(items):: self + if std.type(items) == "array" then __downwardApiMixin({items+: items}) else __downwardApiMixin({items+: [items]}), - itemsType:: hidden.core.v1.downwardApiVolumeFile, - }, - downwardApiType:: hidden.core.v1.downwardApiVolumeSource, - // EmptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir - emptyDir:: { - local __emptyDirMixin(emptyDir) = {emptyDir+: emptyDir}, - mixinInstance(emptyDir):: __emptyDirMixin(emptyDir), - // What type of storage medium should back this directory. The default is "" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir - withMedium(medium):: self + __emptyDirMixin({medium: medium}), - // Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir - sizeLimit:: { - local __sizeLimitMixin(sizeLimit) = __emptyDirMixin({sizeLimit+: sizeLimit}), - mixinInstance(sizeLimit):: __sizeLimitMixin(sizeLimit), - }, - sizeLimitType:: hidden.core.resource.quantity, - }, - emptyDirType:: hidden.core.v1.emptyDirVolumeSource, - // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod. - fc:: { - local __fcMixin(fc) = {fc+: fc}, - mixinInstance(fc):: __fcMixin(fc), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __fcMixin({fsType: fsType}), - // Required: FC target lun number - withLun(lun):: self + __fcMixin({lun: lun}), - // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __fcMixin({readOnly: readOnly}), - // Required: FC target worldwide names (WWNs) - withTargetWwns(targetWwns):: self + if std.type(targetWwns) == "array" then __fcMixin({targetWWNs: targetWwns}) else __fcMixin({targetWWNs: [targetWwns]}), - // Required: FC target worldwide names (WWNs) - withTargetWwnsMixin(targetWwns):: self + if std.type(targetWwns) == "array" then __fcMixin({targetWWNs+: targetWwns}) else __fcMixin({targetWWNs+: [targetWwns]}), - }, - fcType:: hidden.core.v1.fcVolumeSource, - // FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future. - flexVolume:: { - local __flexVolumeMixin(flexVolume) = {flexVolume+: flexVolume}, - mixinInstance(flexVolume):: __flexVolumeMixin(flexVolume), - // Driver is the name of the driver to use for this volume. - withDriver(driver):: self + __flexVolumeMixin({driver: driver}), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script. - withFsType(fsType):: self + __flexVolumeMixin({fsType: fsType}), - // Optional: Extra command options if any. - withOptions(options):: self + __flexVolumeMixin({options: options}), - // Optional: Extra command options if any. - withOptionsMixin(options):: self + __flexVolumeMixin({options+: options}), - // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __flexVolumeMixin({readOnly: readOnly}), - // Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts. - secretRef:: { - local __secretRefMixin(secretRef) = __flexVolumeMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - }, - flexVolumeType:: hidden.core.v1.flexVolumeSource, - // Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running - flocker:: { - local __flockerMixin(flocker) = {flocker+: flocker}, - mixinInstance(flocker):: __flockerMixin(flocker), - // Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated - withDatasetName(datasetName):: self + __flockerMixin({datasetName: datasetName}), - // UUID of the dataset. This is unique identifier of a Flocker dataset - withDatasetUuid(datasetUuid):: self + __flockerMixin({datasetUUID: datasetUuid}), - }, - flockerType:: hidden.core.v1.flockerVolumeSource, - // GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - gcePersistentDisk:: { - local __gcePersistentDiskMixin(gcePersistentDisk) = {gcePersistentDisk+: gcePersistentDisk}, - mixinInstance(gcePersistentDisk):: __gcePersistentDiskMixin(gcePersistentDisk), - // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - withFsType(fsType):: self + __gcePersistentDiskMixin({fsType: fsType}), - // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - withPartition(partition):: self + __gcePersistentDiskMixin({partition: partition}), - // Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - withPdName(pdName):: self + __gcePersistentDiskMixin({pdName: pdName}), - // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - withReadOnly(readOnly):: self + __gcePersistentDiskMixin({readOnly: readOnly}), - }, - gcePersistentDiskType:: hidden.core.v1.gcePersistentDiskVolumeSource, - // GitRepo represents a git repository at a particular revision. - gitRepo:: { - local __gitRepoMixin(gitRepo) = {gitRepo+: gitRepo}, - mixinInstance(gitRepo):: __gitRepoMixin(gitRepo), - // Target directory name. Must not contain or start with '..'. If '.' is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name. - withDirectory(directory):: self + __gitRepoMixin({directory: directory}), - // Repository URL - withRepository(repository):: self + __gitRepoMixin({repository: repository}), - // Commit hash for the specified revision. - withRevision(revision):: self + __gitRepoMixin({revision: revision}), - }, - gitRepoType:: hidden.core.v1.gitRepoVolumeSource, - // Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md - glusterfs:: { - local __glusterfsMixin(glusterfs) = {glusterfs+: glusterfs}, - mixinInstance(glusterfs):: __glusterfsMixin(glusterfs), - // EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod - withEndpoints(endpoints):: self + __glusterfsMixin({endpoints: endpoints}), - // Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod - withPath(path):: self + __glusterfsMixin({path: path}), - // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod - withReadOnly(readOnly):: self + __glusterfsMixin({readOnly: readOnly}), - }, - glusterfsType:: hidden.core.v1.glusterfsVolumeSource, - // HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath - hostPath:: { - local __hostPathMixin(hostPath) = {hostPath+: hostPath}, - mixinInstance(hostPath):: __hostPathMixin(hostPath), - // Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath - withPath(path):: self + __hostPathMixin({path: path}), - }, - hostPathType:: hidden.core.v1.hostPathVolumeSource, - // ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md - iscsi:: { - local __iscsiMixin(iscsi) = {iscsi+: iscsi}, - mixinInstance(iscsi):: __iscsiMixin(iscsi), - // whether support iSCSI Discovery CHAP authentication - withChapAuthDiscovery(chapAuthDiscovery):: self + __iscsiMixin({chapAuthDiscovery: chapAuthDiscovery}), - // whether support iSCSI Session CHAP authentication - withChapAuthSession(chapAuthSession):: self + __iscsiMixin({chapAuthSession: chapAuthSession}), - // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi - withFsType(fsType):: self + __iscsiMixin({fsType: fsType}), - // Target iSCSI Qualified Name. - withIqn(iqn):: self + __iscsiMixin({iqn: iqn}), - // Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport. - withIscsiInterface(iscsiInterface):: self + __iscsiMixin({iscsiInterface: iscsiInterface}), - // iSCSI target lun number. - withLun(lun):: self + __iscsiMixin({lun: lun}), - // iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260). - withPortals(portals):: self + if std.type(portals) == "array" then __iscsiMixin({portals: portals}) else __iscsiMixin({portals: [portals]}), - // iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260). - withPortalsMixin(portals):: self + if std.type(portals) == "array" then __iscsiMixin({portals+: portals}) else __iscsiMixin({portals+: [portals]}), - // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. - withReadOnly(readOnly):: self + __iscsiMixin({readOnly: readOnly}), - // CHAP secret for iSCSI target and initiator authentication - secretRef:: { - local __secretRefMixin(secretRef) = __iscsiMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - // iSCSI target portal. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260). - withTargetPortal(targetPortal):: self + __iscsiMixin({targetPortal: targetPortal}), - }, - iscsiType:: hidden.core.v1.iscsiVolumeSource, - // NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - nfs:: { - local __nfsMixin(nfs) = {nfs+: nfs}, - mixinInstance(nfs):: __nfsMixin(nfs), - // Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - withPath(path):: self + __nfsMixin({path: path}), - // ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - withReadOnly(readOnly):: self + __nfsMixin({readOnly: readOnly}), - // Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs - withServer(server):: self + __nfsMixin({server: server}), - }, - nfsType:: hidden.core.v1.nfsVolumeSource, - // PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims - persistentVolumeClaim:: { - local __persistentVolumeClaimMixin(persistentVolumeClaim) = {persistentVolumeClaim+: persistentVolumeClaim}, - mixinInstance(persistentVolumeClaim):: __persistentVolumeClaimMixin(persistentVolumeClaim), - // ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims - withClaimName(claimName):: self + __persistentVolumeClaimMixin({claimName: claimName}), - // Will force the ReadOnly setting in VolumeMounts. Default false. - withReadOnly(readOnly):: self + __persistentVolumeClaimMixin({readOnly: readOnly}), - }, - persistentVolumeClaimType:: hidden.core.v1.persistentVolumeClaimVolumeSource, - // PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine - photonPersistentDisk:: { - local __photonPersistentDiskMixin(photonPersistentDisk) = {photonPersistentDisk+: photonPersistentDisk}, - mixinInstance(photonPersistentDisk):: __photonPersistentDiskMixin(photonPersistentDisk), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __photonPersistentDiskMixin({fsType: fsType}), - // ID that identifies Photon Controller persistent disk - withPdId(pdId):: self + __photonPersistentDiskMixin({pdID: pdId}), - }, - photonPersistentDiskType:: hidden.core.v1.photonPersistentDiskVolumeSource, - // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine - portworxVolume:: { - local __portworxVolumeMixin(portworxVolume) = {portworxVolume+: portworxVolume}, - mixinInstance(portworxVolume):: __portworxVolumeMixin(portworxVolume), - // FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __portworxVolumeMixin({fsType: fsType}), - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __portworxVolumeMixin({readOnly: readOnly}), - // VolumeID uniquely identifies a Portworx volume - withVolumeId(volumeId):: self + __portworxVolumeMixin({volumeID: volumeId}), - }, - portworxVolumeType:: hidden.core.v1.portworxVolumeSource, - // Items for all in one resources secrets, configmaps, and downward API - projected:: { - local __projectedMixin(projected) = {projected+: projected}, - mixinInstance(projected):: __projectedMixin(projected), - // Mode bits to use on created files by default. Must be a value between 0 and 0777. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set. - withDefaultMode(defaultMode):: self + __projectedMixin({defaultMode: defaultMode}), - // list of volume projections - withSources(sources):: self + if std.type(sources) == "array" then __projectedMixin({sources: sources}) else __projectedMixin({sources: [sources]}), - // list of volume projections - withSourcesMixin(sources):: self + if std.type(sources) == "array" then __projectedMixin({sources+: sources}) else __projectedMixin({sources+: [sources]}), - sourcesType:: hidden.core.v1.volumeProjection, - }, - projectedType:: hidden.core.v1.projectedVolumeSource, - // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime - quobyte:: { - local __quobyteMixin(quobyte) = {quobyte+: quobyte}, - mixinInstance(quobyte):: __quobyteMixin(quobyte), - // Group to map volume access to Default is no group - withGroup(group):: self + __quobyteMixin({group: group}), - // ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false. - withReadOnly(readOnly):: self + __quobyteMixin({readOnly: readOnly}), - // Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes - withRegistry(registry):: self + __quobyteMixin({registry: registry}), - // User to map volume access to Defaults to serivceaccount user - withUser(user):: self + __quobyteMixin({user: user}), - // Volume is a string that references an already created Quobyte volume by name. - withVolume(volume):: self + __quobyteMixin({volume: volume}), - }, - quobyteType:: hidden.core.v1.quobyteVolumeSource, - // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md - rbd:: { - local __rbdMixin(rbd) = {rbd+: rbd}, - mixinInstance(rbd):: __rbdMixin(rbd), - // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd - withFsType(fsType):: self + __rbdMixin({fsType: fsType}), - // The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withImage(image):: self + __rbdMixin({image: image}), - // Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withKeyring(keyring):: self + __rbdMixin({keyring: keyring}), - // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withMonitors(monitors):: self + if std.type(monitors) == "array" then __rbdMixin({monitors: monitors}) else __rbdMixin({monitors: [monitors]}), - // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withMonitorsMixin(monitors):: self + if std.type(monitors) == "array" then __rbdMixin({monitors+: monitors}) else __rbdMixin({monitors+: [monitors]}), - // The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withPool(pool):: self + __rbdMixin({pool: pool}), - // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withReadOnly(readOnly):: self + __rbdMixin({readOnly: readOnly}), - // SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - secretRef:: { - local __secretRefMixin(secretRef) = __rbdMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - // The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it - withUser(user):: self + __rbdMixin({user: user}), - }, - rbdType:: hidden.core.v1.rbdVolumeSource, - // ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes. - scaleIo:: { - local __scaleIoMixin(scaleIo) = {scaleIO+: scaleIo}, - mixinInstance(scaleIo):: __scaleIoMixin(scaleIo), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __scaleIoMixin({fsType: fsType}), - // The host address of the ScaleIO API Gateway. - withGateway(gateway):: self + __scaleIoMixin({gateway: gateway}), - // The name of the Protection Domain for the configured storage (defaults to "default"). - withProtectionDomain(protectionDomain):: self + __scaleIoMixin({protectionDomain: protectionDomain}), - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __scaleIoMixin({readOnly: readOnly}), - // SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail. - secretRef:: { - local __secretRefMixin(secretRef) = __scaleIoMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - // Flag to enable/disable SSL communication with Gateway, default false - withSslEnabled(sslEnabled):: self + __scaleIoMixin({sslEnabled: sslEnabled}), - // Indicates whether the storage for a volume should be thick or thin (defaults to "thin"). - withStorageMode(storageMode):: self + __scaleIoMixin({storageMode: storageMode}), - // The Storage Pool associated with the protection domain (defaults to "default"). - withStoragePool(storagePool):: self + __scaleIoMixin({storagePool: storagePool}), - // The name of the storage system as configured in ScaleIO. - withSystem(system):: self + __scaleIoMixin({system: system}), - // The name of a volume already created in the ScaleIO system that is associated with this volume source. - withVolumeName(volumeName):: self + __scaleIoMixin({volumeName: volumeName}), - }, - scaleIoType:: hidden.core.v1.scaleIoVolumeSource, - // Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret - secret:: { - local __secretMixin(secret) = {secret+: secret}, - mixinInstance(secret):: __secretMixin(secret), - // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set. - withDefaultMode(defaultMode):: self + __secretMixin({defaultMode: defaultMode}), - // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. - withItems(items):: self + if std.type(items) == "array" then __secretMixin({items: items}) else __secretMixin({items: [items]}), - // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. - withItemsMixin(items):: self + if std.type(items) == "array" then __secretMixin({items+: items}) else __secretMixin({items+: [items]}), - itemsType:: hidden.core.v1.keyToPath, - // Specify whether the Secret or it's keys must be defined - withOptional(optional):: self + __secretMixin({optional: optional}), - // Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret - withSecretName(secretName):: self + __secretMixin({secretName: secretName}), - }, - secretType:: hidden.core.v1.secretVolumeSource, - // StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes. - storageos:: { - local __storageosMixin(storageos) = {storageos+: storageos}, - mixinInstance(storageos):: __storageosMixin(storageos), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __storageosMixin({fsType: fsType}), - // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. - withReadOnly(readOnly):: self + __storageosMixin({readOnly: readOnly}), - // SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted. - secretRef:: { - local __secretRefMixin(secretRef) = __storageosMixin({secretRef+: secretRef}), - mixinInstance(secretRef):: __secretRefMixin(secretRef), - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretRefMixin({name: name}), - }, - secretRefType:: hidden.core.v1.localObjectReference, - // VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace. - withVolumeName(volumeName):: self + __storageosMixin({volumeName: volumeName}), - // VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to "default" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created. - withVolumeNamespace(volumeNamespace):: self + __storageosMixin({volumeNamespace: volumeNamespace}), - }, - storageosType:: hidden.core.v1.storageOSVolumeSource, - // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine - vsphereVolume:: { - local __vsphereVolumeMixin(vsphereVolume) = {vsphereVolume+: vsphereVolume}, - mixinInstance(vsphereVolume):: __vsphereVolumeMixin(vsphereVolume), - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + __vsphereVolumeMixin({fsType: fsType}), - // Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName. - withStoragePolicyID(storagePolicyID):: self + __vsphereVolumeMixin({storagePolicyID: storagePolicyID}), - // Storage Policy Based Management (SPBM) profile name. - withStoragePolicyName(storagePolicyName):: self + __vsphereVolumeMixin({storagePolicyName: storagePolicyName}), - // Path that identifies vSphere volume vmdk - withVolumePath(volumePath):: self + __vsphereVolumeMixin({volumePath: volumePath}), - }, - vsphereVolumeType:: hidden.core.v1.vsphereVirtualDiskVolumeSource, - }, - }, - // VolumeMount describes a mounting of a Volume within a container. - volumeMount:: { - new(name, mountPath, readOnly=false):: {} + self.withName(name) + self.withMountPath(mountPath) + self.withReadOnly(readOnly), - // Path within the container at which the volume should be mounted. Must not contain ':'. - withMountPath(mountPath):: self + {mountPath: mountPath}, - // This must match the Name of a Volume. - withName(name):: self + {name: name}, - // Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false. - withReadOnly(readOnly):: self + {readOnly: readOnly}, - // Path within the volume from which the container's volume should be mounted. Defaults to "" (volume's root). - withSubPath(subPath):: self + {subPath: subPath}, - mixin:: { - }, - }, - // Projection that may be projected along with other supported volume types - volumeProjection:: { - new():: {}, - mixin:: { - // information about the configMap data to project - configMap:: { - local __configMapMixin(configMap) = {configMap+: configMap}, - mixinInstance(configMap):: __configMapMixin(configMap), - // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. - withItems(items):: self + if std.type(items) == "array" then __configMapMixin({items: items}) else __configMapMixin({items: [items]}), - // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. - withItemsMixin(items):: self + if std.type(items) == "array" then __configMapMixin({items+: items}) else __configMapMixin({items+: [items]}), - itemsType:: hidden.core.v1.keyToPath, - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __configMapMixin({name: name}), - // Specify whether the ConfigMap or it's keys must be defined - withOptional(optional):: self + __configMapMixin({optional: optional}), - }, - configMapType:: hidden.core.v1.configMapProjection, - // information about the downwardAPI data to project - downwardApi:: { - local __downwardApiMixin(downwardApi) = {downwardAPI+: downwardApi}, - mixinInstance(downwardApi):: __downwardApiMixin(downwardApi), - // Items is a list of DownwardAPIVolume file - withItems(items):: self + if std.type(items) == "array" then __downwardApiMixin({items: items}) else __downwardApiMixin({items: [items]}), - // Items is a list of DownwardAPIVolume file - withItemsMixin(items):: self + if std.type(items) == "array" then __downwardApiMixin({items+: items}) else __downwardApiMixin({items+: [items]}), - itemsType:: hidden.core.v1.downwardApiVolumeFile, - }, - downwardApiType:: hidden.core.v1.downwardApiProjection, - // information about the secret data to project - secret:: { - local __secretMixin(secret) = {secret+: secret}, - mixinInstance(secret):: __secretMixin(secret), - // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. - withItems(items):: self + if std.type(items) == "array" then __secretMixin({items: items}) else __secretMixin({items: [items]}), - // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. - withItemsMixin(items):: self + if std.type(items) == "array" then __secretMixin({items+: items}) else __secretMixin({items+: [items]}), - itemsType:: hidden.core.v1.keyToPath, - // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - withName(name):: self + __secretMixin({name: name}), - // Specify whether the Secret or its key must be defined - withOptional(optional):: self + __secretMixin({optional: optional}), - }, - secretType:: hidden.core.v1.secretProjection, - }, - }, - // Represents a vSphere volume resource. - vsphereVirtualDiskVolumeSource:: { - new():: {}, - // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - withFsType(fsType):: self + {fsType: fsType}, - // Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName. - withStoragePolicyID(storagePolicyID):: self + {storagePolicyID: storagePolicyID}, - // Storage Policy Based Management (SPBM) profile name. - withStoragePolicyName(storagePolicyName):: self + {storagePolicyName: storagePolicyName}, - // Path that identifies vSphere volume vmdk - withVolumePath(volumePath):: self + {volumePath: volumePath}, - mixin:: { - }, - }, - // The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s) - weightedPodAffinityTerm:: { - new():: {}, - // weight associated with matching the corresponding podAffinityTerm, in the range 1-100. - withWeight(weight):: self + {weight: weight}, - mixin:: { - // Required. A pod affinity term, associated with the corresponding weight. - podAffinityTerm:: { - local __podAffinityTermMixin(podAffinityTerm) = {podAffinityTerm+: podAffinityTerm}, - mixinInstance(podAffinityTerm):: __podAffinityTermMixin(podAffinityTerm), - // A label query over a set of resources, in this case pods. - labelSelector:: { - local __labelSelectorMixin(labelSelector) = __podAffinityTermMixin({labelSelector+: labelSelector}), - mixinInstance(labelSelector):: __labelSelectorMixin(labelSelector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __labelSelectorMixin({matchExpressions: matchExpressions}) else __labelSelectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __labelSelectorMixin({matchExpressions+: matchExpressions}) else __labelSelectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __labelSelectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __labelSelectorMixin({matchLabels+: matchLabels}), - }, - labelSelectorType:: hidden.meta.v1.labelSelector, - // namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means "this pod's namespace" - withNamespaces(namespaces):: self + if std.type(namespaces) == "array" then __podAffinityTermMixin({namespaces: namespaces}) else __podAffinityTermMixin({namespaces: [namespaces]}), - // namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means "this pod's namespace" - withNamespacesMixin(namespaces):: self + if std.type(namespaces) == "array" then __podAffinityTermMixin({namespaces+: namespaces}) else __podAffinityTermMixin({namespaces+: [namespaces]}), - // This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. For PreferredDuringScheduling pod anti-affinity, empty topologyKey is interpreted as "all topologies" ("all topologies" here means all the topologyKeys indicated by scheduler command-line argument --failure-domains); for affinity and for RequiredDuringScheduling pod anti-affinity, empty topologyKey is not allowed. - withTopologyKey(topologyKey):: self + __podAffinityTermMixin({topologyKey: topologyKey}), - }, - podAffinityTermType:: hidden.core.v1.podAffinityTerm, - }, - }, - }, - }, - extensions:: { - v1beta1:: { - local apiVersion = {apiVersion: "extensions/v1beta1"}, - // An APIVersion represents a single concrete version of an object model. - apiVersion:: { - new():: {}, - // Name of this version (e.g. 'v1'). - withName(name):: self + {name: name}, - mixin:: { - }, - }, - // DaemonSetSpec is the specification of a daemon set. - daemonSetSpec:: { - new():: {}, - // The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready). - withMinReadySeconds(minReadySeconds):: self + {minReadySeconds: minReadySeconds}, - // The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10. - withRevisionHistoryLimit(revisionHistoryLimit):: self + {revisionHistoryLimit: revisionHistoryLimit}, - mixin:: { - // A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors - selector:: { - local __selectorMixin(selector) = {selector+: selector}, - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - // An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template - template:: { - local __templateMixin(template) = {template+: template}, - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - // An update strategy to replace existing DaemonSet pods with new pods. - updateStrategy:: { - local __updateStrategyMixin(updateStrategy) = {updateStrategy+: updateStrategy}, - mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy), - // Rolling update config params. Present only if type = "RollingUpdate". - rollingUpdate:: { - local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({rollingUpdate+: rollingUpdate}), - mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate), - // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update. - withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}), - }, - rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDaemonSet, - // Type of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is OnDelete. - withType(type):: self + __updateStrategyMixin({type: type}), - }, - updateStrategyType:: hidden.extensions.v1beta1.daemonSetUpdateStrategy, - }, - }, - // DaemonSetStatus represents the current status of a daemon set. - daemonSetStatus:: { - new():: {}, - // Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision. - withCollisionCount(collisionCount):: self + {collisionCount: collisionCount}, - // The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/ - withCurrentNumberScheduled(currentNumberScheduled):: self + {currentNumberScheduled: currentNumberScheduled}, - // The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/ - withDesiredNumberScheduled(desiredNumberScheduled):: self + {desiredNumberScheduled: desiredNumberScheduled}, - // The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds) - withNumberAvailable(numberAvailable):: self + {numberAvailable: numberAvailable}, - // The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/ - withNumberMisscheduled(numberMisscheduled):: self + {numberMisscheduled: numberMisscheduled}, - // The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready. - withNumberReady(numberReady):: self + {numberReady: numberReady}, - // The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds) - withNumberUnavailable(numberUnavailable):: self + {numberUnavailable: numberUnavailable}, - // The most recent generation observed by the daemon set controller. - withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration}, - // The total number of nodes that are running updated daemon pod - withUpdatedNumberScheduled(updatedNumberScheduled):: self + {updatedNumberScheduled: updatedNumberScheduled}, - mixin:: { - }, - }, - // - daemonSetUpdateStrategy:: { - new():: {}, - // Type of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is OnDelete. - withType(type):: self + {type: type}, - mixin:: { - // Rolling update config params. Present only if type = "RollingUpdate". - rollingUpdate:: { - local __rollingUpdateMixin(rollingUpdate) = {rollingUpdate+: rollingUpdate}, - mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate), - // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update. - withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}), - }, - rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDaemonSet, - }, - }, - // DeploymentCondition describes the state of a deployment at a certain point. - deploymentCondition:: { - new():: {}, - // A human readable message indicating details about the transition. - withMessage(message):: self + {message: message}, - // The reason for the condition's last transition. - withReason(reason):: self + {reason: reason}, - // Type of deployment condition. - withType(type):: self + {type: type}, - mixin:: { - // Last time the condition transitioned from one status to another. - lastTransitionTime:: { - local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime}, - mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime), - }, - lastTransitionTimeType:: hidden.meta.v1.time, - // The last time this condition was updated. - lastUpdateTime:: { - local __lastUpdateTimeMixin(lastUpdateTime) = {lastUpdateTime+: lastUpdateTime}, - mixinInstance(lastUpdateTime):: __lastUpdateTimeMixin(lastUpdateTime), - }, - lastUpdateTimeType:: hidden.meta.v1.time, - }, - }, - // DeploymentSpec is the specification of the desired behavior of the Deployment. - deploymentSpec:: { - new():: {}, - // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready) - withMinReadySeconds(minReadySeconds):: self + {minReadySeconds: minReadySeconds}, - // Indicates that the deployment is paused and will not be processed by the deployment controller. - withPaused(paused):: self + {paused: paused}, - // The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Once autoRollback is implemented, the deployment controller will automatically rollback failed deployments. Note that progress will not be estimated during the time a deployment is paused. This is not set by default. - withProgressDeadlineSeconds(progressDeadlineSeconds):: self + {progressDeadlineSeconds: progressDeadlineSeconds}, - // Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1. - withReplicas(replicas):: self + {replicas: replicas}, - // The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. - withRevisionHistoryLimit(revisionHistoryLimit):: self + {revisionHistoryLimit: revisionHistoryLimit}, - mixin:: { - // The config this deployment is rolling back to. Will be cleared after rollback is done. - rollbackTo:: { - local __rollbackToMixin(rollbackTo) = {rollbackTo+: rollbackTo}, - mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo), - // The revision to rollback to. If set to 0, rollback to the last revision. - withRevision(revision):: self + __rollbackToMixin({revision: revision}), - }, - rollbackToType:: hidden.extensions.v1beta1.rollbackConfig, - // Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. - selector:: { - local __selectorMixin(selector) = {selector+: selector}, - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - // The deployment strategy to use to replace existing pods with new ones. - strategy:: { - local __strategyMixin(strategy) = {strategy+: strategy}, - mixinInstance(strategy):: __strategyMixin(strategy), - // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate. - rollingUpdate:: { - local __rollingUpdateMixin(rollingUpdate) = __strategyMixin({rollingUpdate+: rollingUpdate}), - mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate), - // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods. - withMaxSurge(maxSurge):: __rollingUpdateMixin({maxSurge: maxSurge}), - // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods. - withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}), - }, - rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDeployment, - // Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate. - withType(type):: self + __strategyMixin({type: type}), - }, - strategyType:: hidden.extensions.v1beta1.deploymentStrategy, - // Template describes the pods that will be created. - template:: { - local __templateMixin(template) = {template+: template}, - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - }, - }, - // DeploymentStatus is the most recently observed status of the Deployment. - deploymentStatus:: { - new():: {}, - // Total number of available pods (ready for at least minReadySeconds) targeted by this deployment. - withAvailableReplicas(availableReplicas):: self + {availableReplicas: availableReplicas}, - // Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet. - withCollisionCount(collisionCount):: self + {collisionCount: collisionCount}, - // Represents the latest available observations of a deployment's current state. - withConditions(conditions):: self + if std.type(conditions) == "array" then {conditions: conditions} else {conditions: [conditions]}, - // Represents the latest available observations of a deployment's current state. - withConditionsMixin(conditions):: self + if std.type(conditions) == "array" then {conditions+: conditions} else {conditions+: [conditions]}, - conditionsType:: hidden.extensions.v1beta1.deploymentCondition, - // The generation observed by the deployment controller. - withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration}, - // Total number of ready pods targeted by this deployment. - withReadyReplicas(readyReplicas):: self + {readyReplicas: readyReplicas}, - // Total number of non-terminated pods targeted by this deployment (their labels match the selector). - withReplicas(replicas):: self + {replicas: replicas}, - // Total number of unavailable pods targeted by this deployment. - withUnavailableReplicas(unavailableReplicas):: self + {unavailableReplicas: unavailableReplicas}, - // Total number of non-terminated pods targeted by this deployment that have the desired template spec. - withUpdatedReplicas(updatedReplicas):: self + {updatedReplicas: updatedReplicas}, - mixin:: { - }, - }, - // DeploymentStrategy describes how to replace existing pods with new ones. - deploymentStrategy:: { - new():: {}, - // Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate. - withType(type):: self + {type: type}, - mixin:: { - // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate. - rollingUpdate:: { - local __rollingUpdateMixin(rollingUpdate) = {rollingUpdate+: rollingUpdate}, - mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate), - // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods. - withMaxSurge(maxSurge):: __rollingUpdateMixin({maxSurge: maxSurge}), - // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods. - withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}), - }, - rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDeployment, - }, - }, - // FSGroupStrategyOptions defines the strategy type and options used to create the strategy. - fsGroupStrategyOptions:: { - new():: {}, - // Ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. - withRanges(ranges):: self + if std.type(ranges) == "array" then {ranges: ranges} else {ranges: [ranges]}, - // Ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. - withRangesMixin(ranges):: self + if std.type(ranges) == "array" then {ranges+: ranges} else {ranges+: [ranges]}, - rangesType:: hidden.extensions.v1beta1.idRange, - // Rule is the strategy that will dictate what FSGroup is used in the SecurityContext. - withRule(rule):: self + {rule: rule}, - mixin:: { - }, - }, - // HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend. - httpIngressPath:: { - new():: {}, - // Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional "path" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend. - withPath(path):: self + {path: path}, - mixin:: { - // Backend defines the referenced service endpoint to which the traffic will be forwarded to. - backend:: { - local __backendMixin(backend) = {backend+: backend}, - mixinInstance(backend):: __backendMixin(backend), - // Specifies the name of the referenced service. - withServiceName(serviceName):: self + __backendMixin({serviceName: serviceName}), - // Specifies the port of the referenced service. - withServicePort(servicePort):: __backendMixin({servicePort: servicePort}), - }, - backendType:: hidden.extensions.v1beta1.ingressBackend, - }, - }, - // HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http:///? -> backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'. - httpIngressRuleValue:: { - new():: {}, - // A collection of paths that map requests to backends. - withPaths(paths):: self + if std.type(paths) == "array" then {paths: paths} else {paths: [paths]}, - // A collection of paths that map requests to backends. - withPathsMixin(paths):: self + if std.type(paths) == "array" then {paths+: paths} else {paths+: [paths]}, - pathsType:: hidden.extensions.v1beta1.httpIngressPath, - mixin:: { - }, - }, - // Host Port Range defines a range of host ports that will be enabled by a policy for pods to use. It requires both the start and end to be defined. - hostPortRange:: { - new():: {}, - // max is the end of the range, inclusive. - withMax(max):: self + {max: max}, - // min is the start of the range, inclusive. - withMin(min):: self + {min: min}, - mixin:: { - }, - }, - // ID Range provides a min/max of an allowed range of IDs. - idRange:: { - new():: {}, - // Max is the end of the range, inclusive. - withMax(max):: self + {max: max}, - // Min is the start of the range, inclusive. - withMin(min):: self + {min: min}, - mixin:: { - }, - }, - // IngressBackend describes all endpoints for a given service and port. - ingressBackend:: { - new():: {}, - // Specifies the name of the referenced service. - withServiceName(serviceName):: self + {serviceName: serviceName}, - // Specifies the port of the referenced service. - withServicePort(servicePort):: {servicePort: servicePort}, - mixin:: { - }, - }, - // IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue. - ingressRule:: { - new():: {}, - // Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the "host" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the - // IP in the Spec of the parent Ingress. - // 2. The `:` delimiter is not respected because ports are not allowed. - // Currently the port of an Ingress is implicitly :80 for http and - // :443 for https. - // Both these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue. - withHost(host):: self + {host: host}, - mixin:: { - // - http:: { - local __httpMixin(http) = {http+: http}, - mixinInstance(http):: __httpMixin(http), - // A collection of paths that map requests to backends. - withPaths(paths):: self + if std.type(paths) == "array" then __httpMixin({paths: paths}) else __httpMixin({paths: [paths]}), - // A collection of paths that map requests to backends. - withPathsMixin(paths):: self + if std.type(paths) == "array" then __httpMixin({paths+: paths}) else __httpMixin({paths+: [paths]}), - pathsType:: hidden.extensions.v1beta1.httpIngressPath, - }, - httpType:: hidden.extensions.v1beta1.httpIngressRuleValue, - }, - }, - // IngressSpec describes the Ingress the user wishes to exist. - ingressSpec:: { - new():: {}, - // A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend. - withRules(rules):: self + if std.type(rules) == "array" then {rules: rules} else {rules: [rules]}, - // A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend. - withRulesMixin(rules):: self + if std.type(rules) == "array" then {rules+: rules} else {rules+: [rules]}, - rulesType:: hidden.extensions.v1beta1.ingressRule, - // TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI. - withTls(tls):: self + if std.type(tls) == "array" then {tls: tls} else {tls: [tls]}, - // TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI. - withTlsMixin(tls):: self + if std.type(tls) == "array" then {tls+: tls} else {tls+: [tls]}, - tlsType:: hidden.extensions.v1beta1.ingressTls, - mixin:: { - // A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default. - backend:: { - local __backendMixin(backend) = {backend+: backend}, - mixinInstance(backend):: __backendMixin(backend), - // Specifies the name of the referenced service. - withServiceName(serviceName):: self + __backendMixin({serviceName: serviceName}), - // Specifies the port of the referenced service. - withServicePort(servicePort):: __backendMixin({servicePort: servicePort}), - }, - backendType:: hidden.extensions.v1beta1.ingressBackend, - }, - }, - // IngressStatus describe the current state of the Ingress. - ingressStatus:: { - new():: {}, - mixin:: { - // LoadBalancer contains the current status of the load-balancer. - loadBalancer:: { - local __loadBalancerMixin(loadBalancer) = {loadBalancer+: loadBalancer}, - mixinInstance(loadBalancer):: __loadBalancerMixin(loadBalancer), - // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points. - withIngress(ingress):: self + if std.type(ingress) == "array" then __loadBalancerMixin({ingress: ingress}) else __loadBalancerMixin({ingress: [ingress]}), - // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points. - withIngressMixin(ingress):: self + if std.type(ingress) == "array" then __loadBalancerMixin({ingress+: ingress}) else __loadBalancerMixin({ingress+: [ingress]}), - ingressType:: hidden.core.v1.loadBalancerIngress, - }, - loadBalancerType:: hidden.core.v1.loadBalancerStatus, - }, - }, - // IngressTLS describes the transport layer security associated with an Ingress. - ingressTls:: { - new():: {}, - // Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified. - withHosts(hosts):: self + if std.type(hosts) == "array" then {hosts: hosts} else {hosts: [hosts]}, - // Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified. - withHostsMixin(hosts):: self + if std.type(hosts) == "array" then {hosts+: hosts} else {hosts+: [hosts]}, - // SecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the "Host" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing. - withSecretName(secretName):: self + {secretName: secretName}, - mixin:: { - }, - }, - // This NetworkPolicyIngressRule matches traffic if and only if the traffic matches both ports AND from. - networkPolicyIngressRule:: { - new():: {}, - // List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list. - withFrom(from):: self + if std.type(from) == "array" then {from: from} else {from: [from]}, - // List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list. - withFromMixin(from):: self + if std.type(from) == "array" then {from+: from} else {from+: [from]}, - fromType:: hidden.extensions.v1beta1.networkPolicyPeer, - // List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list. - withPorts(ports):: self + if std.type(ports) == "array" then {ports: ports} else {ports: [ports]}, - // List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list. - withPortsMixin(ports):: self + if std.type(ports) == "array" then {ports+: ports} else {ports+: [ports]}, - portsType:: hidden.extensions.v1beta1.networkPolicyPort, - mixin:: { - }, - }, - // - networkPolicyPeer:: { - new():: {}, - mixin:: { - // Selects Namespaces using cluster scoped-labels. This matches all pods in all namespaces selected by this label selector. This field follows standard label selector semantics. If present but empty, this selector selects all namespaces. - namespaceSelector:: { - local __namespaceSelectorMixin(namespaceSelector) = {namespaceSelector+: namespaceSelector}, - mixinInstance(namespaceSelector):: __namespaceSelectorMixin(namespaceSelector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __namespaceSelectorMixin({matchExpressions: matchExpressions}) else __namespaceSelectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __namespaceSelectorMixin({matchExpressions+: matchExpressions}) else __namespaceSelectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __namespaceSelectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __namespaceSelectorMixin({matchLabels+: matchLabels}), - }, - namespaceSelectorType:: hidden.meta.v1.labelSelector, - // This is a label selector which selects Pods in this namespace. This field follows standard label selector semantics. If present but empty, this selector selects all pods in this namespace. - podSelector:: { - local __podSelectorMixin(podSelector) = {podSelector+: podSelector}, - mixinInstance(podSelector):: __podSelectorMixin(podSelector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __podSelectorMixin({matchExpressions: matchExpressions}) else __podSelectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __podSelectorMixin({matchExpressions+: matchExpressions}) else __podSelectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __podSelectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({matchLabels+: matchLabels}), - }, - podSelectorType:: hidden.meta.v1.labelSelector, - }, - }, - // - networkPolicyPort:: { - new():: {}, - // If specified, the port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched. - withPort(port):: {port: port}, - // Optional. The protocol (TCP or UDP) which traffic must match. If not specified, this field defaults to TCP. - withProtocol(protocol):: self + {protocol: protocol}, - mixin:: { - }, - }, - // - networkPolicySpec:: { - new():: {}, - // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default). - withIngress(ingress):: self + if std.type(ingress) == "array" then {ingress: ingress} else {ingress: [ingress]}, - // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default). - withIngressMixin(ingress):: self + if std.type(ingress) == "array" then {ingress+: ingress} else {ingress+: [ingress]}, - ingressType:: hidden.extensions.v1beta1.networkPolicyIngressRule, - mixin:: { - // Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace. - podSelector:: { - local __podSelectorMixin(podSelector) = {podSelector+: podSelector}, - mixinInstance(podSelector):: __podSelectorMixin(podSelector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __podSelectorMixin({matchExpressions: matchExpressions}) else __podSelectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __podSelectorMixin({matchExpressions+: matchExpressions}) else __podSelectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __podSelectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({matchLabels+: matchLabels}), - }, - podSelectorType:: hidden.meta.v1.labelSelector, - }, - }, - // Pod Security Policy Spec defines the policy enforced. - podSecurityPolicySpec:: { - new():: {}, - // AllowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both AllowedCapabilities and RequiredDropCapabilities. - withAllowedCapabilities(allowedCapabilities):: self + if std.type(allowedCapabilities) == "array" then {allowedCapabilities: allowedCapabilities} else {allowedCapabilities: [allowedCapabilities]}, - // AllowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both AllowedCapabilities and RequiredDropCapabilities. - withAllowedCapabilitiesMixin(allowedCapabilities):: self + if std.type(allowedCapabilities) == "array" then {allowedCapabilities+: allowedCapabilities} else {allowedCapabilities+: [allowedCapabilities]}, - // DefaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capabiility in both DefaultAddCapabilities and RequiredDropCapabilities. - withDefaultAddCapabilities(defaultAddCapabilities):: self + if std.type(defaultAddCapabilities) == "array" then {defaultAddCapabilities: defaultAddCapabilities} else {defaultAddCapabilities: [defaultAddCapabilities]}, - // DefaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capabiility in both DefaultAddCapabilities and RequiredDropCapabilities. - withDefaultAddCapabilitiesMixin(defaultAddCapabilities):: self + if std.type(defaultAddCapabilities) == "array" then {defaultAddCapabilities+: defaultAddCapabilities} else {defaultAddCapabilities+: [defaultAddCapabilities]}, - // hostIPC determines if the policy allows the use of HostIPC in the pod spec. - withHostIpc(hostIpc):: self + {hostIPC: hostIpc}, - // hostNetwork determines if the policy allows the use of HostNetwork in the pod spec. - withHostNetwork(hostNetwork):: self + {hostNetwork: hostNetwork}, - // hostPID determines if the policy allows the use of HostPID in the pod spec. - withHostPid(hostPid):: self + {hostPID: hostPid}, - // hostPorts determines which host port ranges are allowed to be exposed. - withHostPorts(hostPorts):: self + if std.type(hostPorts) == "array" then {hostPorts: hostPorts} else {hostPorts: [hostPorts]}, - // hostPorts determines which host port ranges are allowed to be exposed. - withHostPortsMixin(hostPorts):: self + if std.type(hostPorts) == "array" then {hostPorts+: hostPorts} else {hostPorts+: [hostPorts]}, - hostPortsType:: hidden.extensions.v1beta1.hostPortRange, - // privileged determines if a pod can request to be run as privileged. - withPrivileged(privileged):: self + {privileged: privileged}, - // ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to. - withReadOnlyRootFilesystem(readOnlyRootFilesystem):: self + {readOnlyRootFilesystem: readOnlyRootFilesystem}, - // RequiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added. - withRequiredDropCapabilities(requiredDropCapabilities):: self + if std.type(requiredDropCapabilities) == "array" then {requiredDropCapabilities: requiredDropCapabilities} else {requiredDropCapabilities: [requiredDropCapabilities]}, - // RequiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added. - withRequiredDropCapabilitiesMixin(requiredDropCapabilities):: self + if std.type(requiredDropCapabilities) == "array" then {requiredDropCapabilities+: requiredDropCapabilities} else {requiredDropCapabilities+: [requiredDropCapabilities]}, - // volumes is a white list of allowed volume plugins. Empty indicates that all plugins may be used. - withVolumes(volumes):: self + if std.type(volumes) == "array" then {volumes: volumes} else {volumes: [volumes]}, - // volumes is a white list of allowed volume plugins. Empty indicates that all plugins may be used. - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then {volumes+: volumes} else {volumes+: [volumes]}, - mixin:: { - // FSGroup is the strategy that will dictate what fs group is used by the SecurityContext. - fsGroup:: { - local __fsGroupMixin(fsGroup) = {fsGroup+: fsGroup}, - mixinInstance(fsGroup):: __fsGroupMixin(fsGroup), - // Ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. - withRanges(ranges):: self + if std.type(ranges) == "array" then __fsGroupMixin({ranges: ranges}) else __fsGroupMixin({ranges: [ranges]}), - // Ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. - withRangesMixin(ranges):: self + if std.type(ranges) == "array" then __fsGroupMixin({ranges+: ranges}) else __fsGroupMixin({ranges+: [ranges]}), - rangesType:: hidden.extensions.v1beta1.idRange, - // Rule is the strategy that will dictate what FSGroup is used in the SecurityContext. - withRule(rule):: self + __fsGroupMixin({rule: rule}), - }, - fsGroupType:: hidden.extensions.v1beta1.fsGroupStrategyOptions, - // runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set. - runAsUser:: { - local __runAsUserMixin(runAsUser) = {runAsUser+: runAsUser}, - mixinInstance(runAsUser):: __runAsUserMixin(runAsUser), - // Ranges are the allowed ranges of uids that may be used. - withRanges(ranges):: self + if std.type(ranges) == "array" then __runAsUserMixin({ranges: ranges}) else __runAsUserMixin({ranges: [ranges]}), - // Ranges are the allowed ranges of uids that may be used. - withRangesMixin(ranges):: self + if std.type(ranges) == "array" then __runAsUserMixin({ranges+: ranges}) else __runAsUserMixin({ranges+: [ranges]}), - rangesType:: hidden.extensions.v1beta1.idRange, - // Rule is the strategy that will dictate the allowable RunAsUser values that may be set. - withRule(rule):: self + __runAsUserMixin({rule: rule}), - }, - runAsUserType:: hidden.extensions.v1beta1.runAsUserStrategyOptions, - // seLinux is the strategy that will dictate the allowable labels that may be set. - seLinux:: { - local __seLinuxMixin(seLinux) = {seLinux+: seLinux}, - mixinInstance(seLinux):: __seLinuxMixin(seLinux), - // type is the strategy that will dictate the allowable labels that may be set. - withRule(rule):: self + __seLinuxMixin({rule: rule}), - // seLinuxOptions required to run as; required for MustRunAs More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __seLinuxMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - }, - seLinuxType:: hidden.extensions.v1beta1.seLinuxStrategyOptions, - // SupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext. - supplementalGroups:: { - local __supplementalGroupsMixin(supplementalGroups) = {supplementalGroups+: supplementalGroups}, - mixinInstance(supplementalGroups):: __supplementalGroupsMixin(supplementalGroups), - // Ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. - withRanges(ranges):: self + if std.type(ranges) == "array" then __supplementalGroupsMixin({ranges: ranges}) else __supplementalGroupsMixin({ranges: [ranges]}), - // Ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. - withRangesMixin(ranges):: self + if std.type(ranges) == "array" then __supplementalGroupsMixin({ranges+: ranges}) else __supplementalGroupsMixin({ranges+: [ranges]}), - rangesType:: hidden.extensions.v1beta1.idRange, - // Rule is the strategy that will dictate what supplemental groups is used in the SecurityContext. - withRule(rule):: self + __supplementalGroupsMixin({rule: rule}), - }, - supplementalGroupsType:: hidden.extensions.v1beta1.supplementalGroupsStrategyOptions, - }, - }, - // ReplicaSetCondition describes the state of a replica set at a certain point. - replicaSetCondition:: { - new():: {}, - // A human readable message indicating details about the transition. - withMessage(message):: self + {message: message}, - // The reason for the condition's last transition. - withReason(reason):: self + {reason: reason}, - // Type of replica set condition. - withType(type):: self + {type: type}, - mixin:: { - // The last time the condition transitioned from one status to another. - lastTransitionTime:: { - local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime}, - mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime), - }, - lastTransitionTimeType:: hidden.meta.v1.time, - }, - }, - // ReplicaSetSpec is the specification of a ReplicaSet. - replicaSetSpec:: { - new():: {}, - // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready) - withMinReadySeconds(minReadySeconds):: self + {minReadySeconds: minReadySeconds}, - // Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller - withReplicas(replicas):: self + {replicas: replicas}, - mixin:: { - // Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors - selector:: { - local __selectorMixin(selector) = {selector+: selector}, - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - // Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template - template:: { - local __templateMixin(template) = {template+: template}, - mixinInstance(template):: __templateMixin(template), - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - metadata:: { - local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}), - mixinInstance(metadata):: __metadataMixin(metadata), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}), - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}), - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}), - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}), - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}), - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}), - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}), - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + __metadataMixin({labels: labels}), - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}), - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + __metadataMixin({name: name}), - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + __metadataMixin({namespace: namespace}), - }, - metadataType:: hidden.meta.v1.objectMeta, - // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - spec:: { - local __specMixin(spec) = __templateMixin({spec+: spec}), - mixinInstance(spec):: __specMixin(spec), - // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. - withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}), - // If specified, the pod's scheduling constraints - affinity:: { - local __affinityMixin(affinity) = __specMixin({affinity+: affinity}), - mixinInstance(affinity):: __affinityMixin(affinity), - // Describes node affinity scheduling rules for the pod. - nodeAffinity:: { - local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}), - mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm, - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - requiredDuringSchedulingIgnoredDuringExecution:: { - local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}), - mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}), - // Required. A list of node selector terms. The terms are ORed. - withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == "array" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}), - nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm, - }, - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector, - }, - nodeAffinityType:: hidden.core.v1.nodeAffinity, - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - podAffinity:: { - local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}), - mixinInstance(podAffinity):: __podAffinityMixin(podAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAffinityType:: hidden.core.v1.podAffinity, - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - podAntiAffinity:: { - local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}), - mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}), - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}), - preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm, - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}), - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == "array" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}), - requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm, - }, - podAntiAffinityType:: hidden.core.v1.podAntiAffinity, - }, - affinityType:: hidden.core.v1.affinity, - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainers(containers):: self + if std.type(containers) == "array" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}), - // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. - withContainersMixin(containers):: self + if std.type(containers) == "array" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}), - containersType:: hidden.core.v1.container, - // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliases(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}), - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. - withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == "array" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}), - hostAliasesType:: hidden.core.v1.hostAlias, - // Use the host's ipc namespace. Optional: Default to false. - withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}), - // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. - withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}), - // Use the host's pid namespace. Optional: Default to false. - withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}), - // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. - withHostname(hostname):: self + __specMixin({hostname: hostname}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}), - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod - withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == "array" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}), - imagePullSecretsType:: hidden.core.v1.localObjectReference, - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainers(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}), - // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ - withInitContainersMixin(initContainers):: self + if std.type(initContainers) == "array" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}), - initContainersType:: hidden.core.v1.container, - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. - withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}), - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}), - // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}), - // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. - withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}), - // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. - securityContext:: { - local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}), - mixinInstance(securityContext):: __securityContextMixin(securityContext), - // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: - // - // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}), - // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}), - // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}), - // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}), - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}), - // A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. - withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == "array" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}), - }, - securityContextType:: hidden.core.v1.podSecurityContext, - // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. - withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}), - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}), - // If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. - withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}), - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. - withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}), - // If specified, the pod's tolerations. - withTolerations(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}), - // If specified, the pod's tolerations. - withTolerationsMixin(tolerations):: self + if std.type(tolerations) == "array" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}), - tolerationsType:: hidden.core.v1.toleration, - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumes(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}), - // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}), - volumesType:: hidden.core.v1.volume, - }, - specType:: hidden.core.v1.podSpec, - }, - templateType:: hidden.core.v1.podTemplateSpec, - }, - }, - // ReplicaSetStatus represents the current status of a ReplicaSet. - replicaSetStatus:: { - new():: {}, - // The number of available replicas (ready for at least minReadySeconds) for this replica set. - withAvailableReplicas(availableReplicas):: self + {availableReplicas: availableReplicas}, - // Represents the latest available observations of a replica set's current state. - withConditions(conditions):: self + if std.type(conditions) == "array" then {conditions: conditions} else {conditions: [conditions]}, - // Represents the latest available observations of a replica set's current state. - withConditionsMixin(conditions):: self + if std.type(conditions) == "array" then {conditions+: conditions} else {conditions+: [conditions]}, - conditionsType:: hidden.extensions.v1beta1.replicaSetCondition, - // The number of pods that have labels matching the labels of the pod template of the replicaset. - withFullyLabeledReplicas(fullyLabeledReplicas):: self + {fullyLabeledReplicas: fullyLabeledReplicas}, - // ObservedGeneration reflects the generation of the most recently observed ReplicaSet. - withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration}, - // The number of ready replicas for this replica set. - withReadyReplicas(readyReplicas):: self + {readyReplicas: readyReplicas}, - // Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller - withReplicas(replicas):: self + {replicas: replicas}, - mixin:: { - }, - }, - // - rollbackConfig:: { - new():: {}, - // The revision to rollback to. If set to 0, rollback to the last revision. - withRevision(revision):: self + {revision: revision}, - mixin:: { - }, - }, - // Spec to control the desired behavior of daemon set rolling update. - rollingUpdateDaemonSet:: { - new():: {}, - // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update. - withMaxUnavailable(maxUnavailable):: {maxUnavailable: maxUnavailable}, - mixin:: { - }, - }, - // Spec to control the desired behavior of rolling update. - rollingUpdateDeployment:: { - new():: {}, - // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods. - withMaxSurge(maxSurge):: {maxSurge: maxSurge}, - // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods. - withMaxUnavailable(maxUnavailable):: {maxUnavailable: maxUnavailable}, - mixin:: { - }, - }, - // Run A sUser Strategy Options defines the strategy type and any options used to create the strategy. - runAsUserStrategyOptions:: { - new():: {}, - // Ranges are the allowed ranges of uids that may be used. - withRanges(ranges):: self + if std.type(ranges) == "array" then {ranges: ranges} else {ranges: [ranges]}, - // Ranges are the allowed ranges of uids that may be used. - withRangesMixin(ranges):: self + if std.type(ranges) == "array" then {ranges+: ranges} else {ranges+: [ranges]}, - rangesType:: hidden.extensions.v1beta1.idRange, - // Rule is the strategy that will dictate the allowable RunAsUser values that may be set. - withRule(rule):: self + {rule: rule}, - mixin:: { - }, - }, - // SELinux Strategy Options defines the strategy type and any options used to create the strategy. - seLinuxStrategyOptions:: { - new():: {}, - // type is the strategy that will dictate the allowable labels that may be set. - withRule(rule):: self + {rule: rule}, - mixin:: { - // seLinuxOptions required to run as; required for MustRunAs More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md - seLinuxOptions:: { - local __seLinuxOptionsMixin(seLinuxOptions) = {seLinuxOptions+: seLinuxOptions}, - mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions), - // Level is SELinux level label that applies to the container. - withLevel(level):: self + __seLinuxOptionsMixin({level: level}), - // Role is a SELinux role label that applies to the container. - withRole(role):: self + __seLinuxOptionsMixin({role: role}), - // Type is a SELinux type label that applies to the container. - withType(type):: self + __seLinuxOptionsMixin({type: type}), - // User is a SELinux user label that applies to the container. - withUser(user):: self + __seLinuxOptionsMixin({user: user}), - }, - seLinuxOptionsType:: hidden.core.v1.seLinuxOptions, - }, - }, - // describes the attributes of a scale subresource - scaleSpec:: { - new():: {}, - // desired number of instances for the scaled object. - withReplicas(replicas):: self + {replicas: replicas}, - mixin:: { - }, - }, - // represents the current status of a scale subresource. - scaleStatus:: { - new():: {}, - // actual number of observed instances of the scaled object. - withReplicas(replicas):: self + {replicas: replicas}, - // label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors - withSelector(selector):: self + {selector: selector}, - // label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors - withSelectorMixin(selector):: self + {selector+: selector}, - // label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors - withTargetSelector(targetSelector):: self + {targetSelector: targetSelector}, - mixin:: { - }, - }, - // SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy. - supplementalGroupsStrategyOptions:: { - new():: {}, - // Ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. - withRanges(ranges):: self + if std.type(ranges) == "array" then {ranges: ranges} else {ranges: [ranges]}, - // Ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. - withRangesMixin(ranges):: self + if std.type(ranges) == "array" then {ranges+: ranges} else {ranges+: [ranges]}, - rangesType:: hidden.extensions.v1beta1.idRange, - // Rule is the strategy that will dictate what supplemental groups is used in the SecurityContext. - withRule(rule):: self + {rule: rule}, - mixin:: { - }, - }, - }, - }, - meta:: { - v1:: { - local apiVersion = {apiVersion: "meta/v1"}, - // APIGroup contains the name, the supported versions, and the preferred version of a group. - apiGroup:: { - new():: {}, - // name is the name of the group. - withName(name):: self + {name: name}, - // a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP. - withServerAddressByClientCidrs(serverAddressByClientCidrs):: self + if std.type(serverAddressByClientCidrs) == "array" then {serverAddressByClientCIDRs: serverAddressByClientCidrs} else {serverAddressByClientCIDRs: [serverAddressByClientCidrs]}, - // a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP. - withServerAddressByClientCidrsMixin(serverAddressByClientCidrs):: self + if std.type(serverAddressByClientCidrs) == "array" then {serverAddressByClientCIDRs+: serverAddressByClientCidrs} else {serverAddressByClientCIDRs+: [serverAddressByClientCidrs]}, - serverAddressByClientCidrsType:: hidden.meta.v1.serverAddressByClientCidr, - // versions are the versions supported in this group. - withVersions(versions):: self + if std.type(versions) == "array" then {versions: versions} else {versions: [versions]}, - // versions are the versions supported in this group. - withVersionsMixin(versions):: self + if std.type(versions) == "array" then {versions+: versions} else {versions+: [versions]}, - versionsType:: hidden.meta.v1.groupVersionForDiscovery, - mixin:: { - // preferredVersion is the version preferred by the API server, which probably is the storage version. - preferredVersion:: { - local __preferredVersionMixin(preferredVersion) = {preferredVersion+: preferredVersion}, - mixinInstance(preferredVersion):: __preferredVersionMixin(preferredVersion), - // groupVersion specifies the API group and version in the form "group/version" - withGroupVersion(groupVersion):: self + __preferredVersionMixin({groupVersion: groupVersion}), - // version specifies the version in the form of "version". This is to save the clients the trouble of splitting the GroupVersion. - withVersion(version):: self + __preferredVersionMixin({version: version}), - }, - preferredVersionType:: hidden.meta.v1.groupVersionForDiscovery, - }, - }, - // APIGroupList is a list of APIGroup, to allow clients to discover the API at /apis. - apiGroupList:: { - new():: {}, - // groups is a list of APIGroup. - withGroups(groups):: self + if std.type(groups) == "array" then {groups: groups} else {groups: [groups]}, - // groups is a list of APIGroup. - withGroupsMixin(groups):: self + if std.type(groups) == "array" then {groups+: groups} else {groups+: [groups]}, - groupsType:: hidden.meta.v1.apiGroup, - mixin:: { - }, - }, - // APIResource specifies the name of a resource and whether it is namespaced. - apiResource:: { - new():: {}, - // categories is a list of the grouped resources this resource belongs to (e.g. 'all') - withCategories(categories):: self + if std.type(categories) == "array" then {categories: categories} else {categories: [categories]}, - // categories is a list of the grouped resources this resource belongs to (e.g. 'all') - withCategoriesMixin(categories):: self + if std.type(categories) == "array" then {categories+: categories} else {categories+: [categories]}, - // name is the plural name of the resource. - withName(name):: self + {name: name}, - // namespaced indicates if a resource is namespaced or not. - withNamespaced(namespaced):: self + {namespaced: namespaced}, - // shortNames is a list of suggested short names of the resource. - withShortNames(shortNames):: self + if std.type(shortNames) == "array" then {shortNames: shortNames} else {shortNames: [shortNames]}, - // shortNames is a list of suggested short names of the resource. - withShortNamesMixin(shortNames):: self + if std.type(shortNames) == "array" then {shortNames+: shortNames} else {shortNames+: [shortNames]}, - // singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface. - withSingularName(singularName):: self + {singularName: singularName}, - // verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy) - withVerbs(verbs):: self + if std.type(verbs) == "array" then {verbs: verbs} else {verbs: [verbs]}, - // verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy) - withVerbsMixin(verbs):: self + if std.type(verbs) == "array" then {verbs+: verbs} else {verbs+: [verbs]}, - mixin:: { - }, - }, - // APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced. - apiResourceList:: { - new():: {}, - // groupVersion is the group and version this APIResourceList is for. - withGroupVersion(groupVersion):: self + {groupVersion: groupVersion}, - // resources contains the name of the resources and if they are namespaced. - withResources(resources):: self + if std.type(resources) == "array" then {resources: resources} else {resources: [resources]}, - // resources contains the name of the resources and if they are namespaced. - withResourcesMixin(resources):: self + if std.type(resources) == "array" then {resources+: resources} else {resources+: [resources]}, - resourcesType:: hidden.meta.v1.apiResource, - mixin:: { - }, - }, - // APIVersions lists the versions that are available, to allow clients to discover the API at /api, which is the root path of the legacy v1 API. - apiVersions:: { - new():: {}, - // a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP. - withServerAddressByClientCidrs(serverAddressByClientCidrs):: self + if std.type(serverAddressByClientCidrs) == "array" then {serverAddressByClientCIDRs: serverAddressByClientCidrs} else {serverAddressByClientCIDRs: [serverAddressByClientCidrs]}, - // a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP. - withServerAddressByClientCidrsMixin(serverAddressByClientCidrs):: self + if std.type(serverAddressByClientCidrs) == "array" then {serverAddressByClientCIDRs+: serverAddressByClientCidrs} else {serverAddressByClientCIDRs+: [serverAddressByClientCidrs]}, - serverAddressByClientCidrsType:: hidden.meta.v1.serverAddressByClientCidr, - // versions are the api versions that are available. - withVersions(versions):: self + if std.type(versions) == "array" then {versions: versions} else {versions: [versions]}, - // versions are the api versions that are available. - withVersionsMixin(versions):: self + if std.type(versions) == "array" then {versions+: versions} else {versions+: [versions]}, - mixin:: { - }, - }, - // DeleteOptions may be provided when deleting an API object. - deleteOptions:: { - new():: {}, - // The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately. - withGracePeriodSeconds(gracePeriodSeconds):: self + {gracePeriodSeconds: gracePeriodSeconds}, - // Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both. - withOrphanDependents(orphanDependents):: self + {orphanDependents: orphanDependents}, - // Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. - withPropagationPolicy(propagationPolicy):: self + {propagationPolicy: propagationPolicy}, - mixin:: { - // Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned. - preconditions:: { - local __preconditionsMixin(preconditions) = {preconditions+: preconditions}, - mixinInstance(preconditions):: __preconditionsMixin(preconditions), - // Specifies the target UID. - withUid(uid):: self + __preconditionsMixin({uid: uid}), - }, - preconditionsType:: hidden.meta.v1.preconditions, - }, - }, - // GroupVersion contains the "group/version" and "version" string of a version. It is made a struct to keep extensibility. - groupVersionForDiscovery:: { - new():: {}, - // groupVersion specifies the API group and version in the form "group/version" - withGroupVersion(groupVersion):: self + {groupVersion: groupVersion}, - // version specifies the version in the form of "version". This is to save the clients the trouble of splitting the GroupVersion. - withVersion(version):: self + {version: version}, - mixin:: { - }, - }, - // Initializer is information about an initializer that has not yet completed. - initializer:: { - new():: {}, - // name of the process that is responsible for initializing this object. - withName(name):: self + {name: name}, - mixin:: { - }, - }, - // Initializers tracks the progress of initialization. - initializers:: { - new():: {}, - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then {pending: pending} else {pending: [pending]}, - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then {pending+: pending} else {pending+: [pending]}, - pendingType:: hidden.meta.v1.initializer, - mixin:: { - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = {result+: result}, - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - }, - // A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects. - labelSelector:: { - new():: {}, - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then {matchExpressions: matchExpressions} else {matchExpressions: [matchExpressions]}, - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then {matchExpressions+: matchExpressions} else {matchExpressions+: [matchExpressions]}, - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + {matchLabels: matchLabels}, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + {matchLabels+: matchLabels}, - mixin:: { - }, - }, - // A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. - labelSelectorRequirement:: { - new():: {}, - // key is the label key that the selector applies to. - withKey(key):: self + {key: key}, - // operator represents a key's relationship to a set of values. Valid operators ard In, NotIn, Exists and DoesNotExist. - withOperator(operator):: self + {operator: operator}, - // values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. - withValues(values):: self + if std.type(values) == "array" then {values: values} else {values: [values]}, - // values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. - withValuesMixin(values):: self + if std.type(values) == "array" then {values+: values} else {values+: [values]}, - mixin:: { - }, - }, - // ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}. - listMeta:: { - new():: {}, - // String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency - withResourceVersion(resourceVersion):: self + {resourceVersion: resourceVersion}, - // SelfLink is a URL representing this object. Populated by the system. Read-only. - withSelfLink(selfLink):: self + {selfLink: selfLink}, - mixin:: { - }, - }, - // ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create. - objectMeta:: { - new():: {}, - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotations(annotations):: self + {annotations: annotations}, - // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations - withAnnotationsMixin(annotations):: self + {annotations+: annotations}, - // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. - withClusterName(clusterName):: self + {clusterName: clusterName}, - // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. - withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + {deletionGracePeriodSeconds: deletionGracePeriodSeconds}, - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizers(finalizers):: self + if std.type(finalizers) == "array" then {finalizers: finalizers} else {finalizers: [finalizers]}, - // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. - withFinalizersMixin(finalizers):: self + if std.type(finalizers) == "array" then {finalizers+: finalizers} else {finalizers+: [finalizers]}, - // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server. - // - // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header). - // - // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency - withGenerateName(generateName):: self + {generateName: generateName}, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabels(labels):: self + {labels: labels}, - // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels - withLabelsMixin(labels):: self + {labels+: labels}, - // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + {name: name}, - // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. - // - // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces - withNamespace(namespace):: self + {namespace: namespace}, - mixin:: { - // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user. - initializers:: { - local __initializersMixin(initializers) = {initializers+: initializers}, - mixinInstance(initializers):: __initializersMixin(initializers), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPending(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}), - // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients. - withPendingMixin(pending):: self + if std.type(pending) == "array" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}), - pendingType:: hidden.meta.v1.initializer, - // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion. - result:: { - local __resultMixin(result) = __initializersMixin({result+: result}), - mixinInstance(result):: __resultMixin(result), - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + __resultMixin({code: code}), - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = __resultMixin({details+: details}), - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - // A human-readable description of the status of this operation. - withMessage(message):: self + __resultMixin({message: message}), - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + __resultMixin({reason: reason}), - }, - resultType:: hidden.meta.v1.status, - }, - initializersType:: hidden.meta.v1.initializers, - }, - }, - // OwnerReference contains enough information to let you identify an owning object. Currently, an owning object must be in the same namespace, so there is no namespace field. - ownerReference:: { - new():: {}, - // If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned. - withBlockOwnerDeletion(blockOwnerDeletion):: self + {blockOwnerDeletion: blockOwnerDeletion}, - // If true, this reference points to the managing controller. - withController(controller):: self + {controller: controller}, - // Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names - withName(name):: self + {name: name}, - // UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + {uid: uid}, - mixin:: { - }, - }, - // Patch is provided to give a concrete name and type to the Kubernetes PATCH request body. - patch:: { - new():: {}, - mixin:: { - }, - }, - // Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out. - preconditions:: { - new():: {}, - // Specifies the target UID. - withUid(uid):: self + {uid: uid}, - mixin:: { - }, - }, - // ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match. - serverAddressByClientCidr:: { - new():: {}, - // The CIDR with which clients can match their IP to figure out the server address that they should use. - withClientCidr(clientCidr):: self + {clientCIDR: clientCidr}, - // Address of this server, suitable for a client that matches the above CIDR. This can be a hostname, hostname:port, IP or IP:port. - withServerAddress(serverAddress):: self + {serverAddress: serverAddress}, - mixin:: { - }, - }, - // Status is a return value for calls that don't return other objects. - status:: { - new():: {}, - // Suggested HTTP return code for this status, 0 if not set. - withCode(code):: self + {code: code}, - // A human-readable description of the status of this operation. - withMessage(message):: self + {message: message}, - // A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. - withReason(reason):: self + {reason: reason}, - mixin:: { - // Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. - details:: { - local __detailsMixin(details) = {details+: details}, - mixinInstance(details):: __detailsMixin(details), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}), - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}), - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + __detailsMixin({group: group}), - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + __detailsMixin({name: name}), - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}), - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + __detailsMixin({uid: uid}), - }, - detailsType:: hidden.meta.v1.statusDetails, - }, - }, - // StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered. - statusCause:: { - new():: {}, - // The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional. - // - // Examples: - // "name" - the field "name" on the current resource - // "items[0].name" - the field "name" on the first array entry in "items" - withField(field):: self + {field: field}, - // A human-readable description of the cause of the error. This field may be presented as-is to a reader. - withMessage(message):: self + {message: message}, - // A machine-readable description of the cause of the error. If this value is empty there is no information available. - withReason(reason):: self + {reason: reason}, - mixin:: { - }, - }, - // StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined. - statusDetails:: { - new():: {}, - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCauses(causes):: self + if std.type(causes) == "array" then {causes: causes} else {causes: [causes]}, - // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. - withCausesMixin(causes):: self + if std.type(causes) == "array" then {causes+: causes} else {causes+: [causes]}, - causesType:: hidden.meta.v1.statusCause, - // The group attribute of the resource associated with the status StatusReason. - withGroup(group):: self + {group: group}, - // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). - withName(name):: self + {name: name}, - // If specified, the time in seconds before the operation should be retried. - withRetryAfterSeconds(retryAfterSeconds):: self + {retryAfterSeconds: retryAfterSeconds}, - // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids - withUid(uid):: self + {uid: uid}, - mixin:: { - }, - }, - // - time:: { - new():: {}, - mixin:: { - }, - }, - // Event represents a single event to a watched resource. - watchEvent:: { - new():: {}, - // - withType(type):: self + {type: type}, - mixin:: { - }, - }, - }, - }, - networking:: { - v1:: { - local apiVersion = {apiVersion: "networking/v1"}, - // NetworkPolicyIngressRule describes a particular set of traffic that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and from. - networkPolicyIngressRule:: { - new():: {}, - // List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list. - withFrom(from):: self + if std.type(from) == "array" then {from: from} else {from: [from]}, - // List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list. - withFromMixin(from):: self + if std.type(from) == "array" then {from+: from} else {from+: [from]}, - fromType:: hidden.networking.v1.networkPolicyPeer, - // List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list. - withPorts(ports):: self + if std.type(ports) == "array" then {ports: ports} else {ports: [ports]}, - // List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list. - withPortsMixin(ports):: self + if std.type(ports) == "array" then {ports+: ports} else {ports+: [ports]}, - portsType:: hidden.networking.v1.networkPolicyPort, - mixin:: { - }, - }, - // NetworkPolicyPeer describes a peer to allow traffic from. Exactly one of its fields must be specified. - networkPolicyPeer:: { - new():: {}, - mixin:: { - // Selects Namespaces using cluster scoped-labels. This matches all pods in all namespaces selected by this label selector. This field follows standard label selector semantics. If present but empty, this selector selects all namespaces. - namespaceSelector:: { - local __namespaceSelectorMixin(namespaceSelector) = {namespaceSelector+: namespaceSelector}, - mixinInstance(namespaceSelector):: __namespaceSelectorMixin(namespaceSelector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __namespaceSelectorMixin({matchExpressions: matchExpressions}) else __namespaceSelectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __namespaceSelectorMixin({matchExpressions+: matchExpressions}) else __namespaceSelectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __namespaceSelectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __namespaceSelectorMixin({matchLabels+: matchLabels}), - }, - namespaceSelectorType:: hidden.meta.v1.labelSelector, - // This is a label selector which selects Pods in this namespace. This field follows standard label selector semantics. If present but empty, this selector selects all pods in this namespace. - podSelector:: { - local __podSelectorMixin(podSelector) = {podSelector+: podSelector}, - mixinInstance(podSelector):: __podSelectorMixin(podSelector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __podSelectorMixin({matchExpressions: matchExpressions}) else __podSelectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __podSelectorMixin({matchExpressions+: matchExpressions}) else __podSelectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __podSelectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({matchLabels+: matchLabels}), - }, - podSelectorType:: hidden.meta.v1.labelSelector, - }, - }, - // NetworkPolicyPort describes a port to allow traffic on - networkPolicyPort:: { - new():: {}, - // The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. - withPort(port):: {port: port}, - // The protocol (TCP or UDP) which traffic must match. If not specified, this field defaults to TCP. - withProtocol(protocol):: self + {protocol: protocol}, - mixin:: { - }, - }, - // NetworkPolicySpec provides the specification of a NetworkPolicy - networkPolicySpec:: { - new():: {}, - // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default) - withIngress(ingress):: self + if std.type(ingress) == "array" then {ingress: ingress} else {ingress: [ingress]}, - // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default) - withIngressMixin(ingress):: self + if std.type(ingress) == "array" then {ingress+: ingress} else {ingress+: [ingress]}, - ingressType:: hidden.networking.v1.networkPolicyIngressRule, - mixin:: { - // Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace. - podSelector:: { - local __podSelectorMixin(podSelector) = {podSelector+: podSelector}, - mixinInstance(podSelector):: __podSelectorMixin(podSelector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __podSelectorMixin({matchExpressions: matchExpressions}) else __podSelectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __podSelectorMixin({matchExpressions+: matchExpressions}) else __podSelectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __podSelectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({matchLabels+: matchLabels}), - }, - podSelectorType:: hidden.meta.v1.labelSelector, - }, - }, - }, - }, - policy:: { - v1beta1:: { - local apiVersion = {apiVersion: "policy/v1beta1"}, - // PodDisruptionBudgetSpec is a description of a PodDisruptionBudget. - podDisruptionBudgetSpec:: { - new():: {}, - // An eviction is allowed if at most "maxUnavailable" pods selected by "selector" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with "minAvailable". - withMaxUnavailable(maxUnavailable):: {maxUnavailable: maxUnavailable}, - // An eviction is allowed if at least "minAvailable" pods selected by "selector" will still be available after the eviction, i.e. even in the absence of the evicted pod. So for example you can prevent all voluntary evictions by specifying "100%". - withMinAvailable(minAvailable):: {minAvailable: minAvailable}, - mixin:: { - // Label query over pods whose evictions are managed by the disruption budget. - selector:: { - local __selectorMixin(selector) = {selector+: selector}, - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - }, - }, - // PodDisruptionBudgetStatus represents information about the status of a PodDisruptionBudget. Status may trail the actual state of a system. - podDisruptionBudgetStatus:: { - new():: {}, - // current number of healthy pods - withCurrentHealthy(currentHealthy):: self + {currentHealthy: currentHealthy}, - // minimum desired number of healthy pods - withDesiredHealthy(desiredHealthy):: self + {desiredHealthy: desiredHealthy}, - // DisruptedPods contains information about pods whose eviction was processed by the API server eviction subresource handler but has not yet been observed by the PodDisruptionBudget controller. A pod will be in this map from the time when the API server processed the eviction request to the time when the pod is seen by PDB controller as having been marked for deletion (or after a timeout). The key in the map is the name of the pod and the value is the time when the API server processed the eviction request. If the deletion didn't occur and a pod is still there it will be removed from the list automatically by PodDisruptionBudget controller after some time. If everything goes smooth this map should be empty for the most of the time. Large number of entries in the map may indicate problems with pod deletions. - withDisruptedPods(disruptedPods):: self + {disruptedPods: disruptedPods}, - // DisruptedPods contains information about pods whose eviction was processed by the API server eviction subresource handler but has not yet been observed by the PodDisruptionBudget controller. A pod will be in this map from the time when the API server processed the eviction request to the time when the pod is seen by PDB controller as having been marked for deletion (or after a timeout). The key in the map is the name of the pod and the value is the time when the API server processed the eviction request. If the deletion didn't occur and a pod is still there it will be removed from the list automatically by PodDisruptionBudget controller after some time. If everything goes smooth this map should be empty for the most of the time. Large number of entries in the map may indicate problems with pod deletions. - withDisruptedPodsMixin(disruptedPods):: self + {disruptedPods+: disruptedPods}, - // Number of pod disruptions that are currently allowed. - withDisruptionsAllowed(disruptionsAllowed):: self + {disruptionsAllowed: disruptionsAllowed}, - // total number of pods counted by this disruption budget - withExpectedPods(expectedPods):: self + {expectedPods: expectedPods}, - // Most recent generation observed when updating this PDB status. PodDisruptionsAllowed and other status informatio is valid only if observedGeneration equals to PDB's object generation. - withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration}, - mixin:: { - }, - }, - }, - }, - rbac:: { - v1alpha1:: { - local apiVersion = {apiVersion: "rbac/v1alpha1"}, - // PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to. - policyRule:: { - new():: {}, - // APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. - withApiGroups(apiGroups):: self + if std.type(apiGroups) == "array" then {apiGroups: apiGroups} else {apiGroups: [apiGroups]}, - // APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. - withApiGroupsMixin(apiGroups):: self + if std.type(apiGroups) == "array" then {apiGroups+: apiGroups} else {apiGroups+: [apiGroups]}, - // NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different. Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both. - withNonResourceUrls(nonResourceUrls):: self + if std.type(nonResourceUrls) == "array" then {nonResourceURLs: nonResourceUrls} else {nonResourceURLs: [nonResourceUrls]}, - // NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different. Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both. - withNonResourceUrlsMixin(nonResourceUrls):: self + if std.type(nonResourceUrls) == "array" then {nonResourceURLs+: nonResourceUrls} else {nonResourceURLs+: [nonResourceUrls]}, - // ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. - withResourceNames(resourceNames):: self + if std.type(resourceNames) == "array" then {resourceNames: resourceNames} else {resourceNames: [resourceNames]}, - // ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. - withResourceNamesMixin(resourceNames):: self + if std.type(resourceNames) == "array" then {resourceNames+: resourceNames} else {resourceNames+: [resourceNames]}, - // Resources is a list of resources this rule applies to. ResourceAll represents all resources. - withResources(resources):: self + if std.type(resources) == "array" then {resources: resources} else {resources: [resources]}, - // Resources is a list of resources this rule applies to. ResourceAll represents all resources. - withResourcesMixin(resources):: self + if std.type(resources) == "array" then {resources+: resources} else {resources+: [resources]}, - // Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds. - withVerbs(verbs):: self + if std.type(verbs) == "array" then {verbs: verbs} else {verbs: [verbs]}, - // Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds. - withVerbsMixin(verbs):: self + if std.type(verbs) == "array" then {verbs+: verbs} else {verbs+: [verbs]}, - mixin:: { - }, - }, - // RoleRef contains information that points to the role being used - roleRef:: { - new():: {}, - // APIGroup is the group for the resource being referenced - withApiGroup(apiGroup):: self + {apiGroup: apiGroup}, - // Name is the name of resource being referenced - withName(name):: self + {name: name}, - mixin:: { - }, - }, - // Subject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names. - subject:: { - new():: {}, - // Name of the object being referenced. - withName(name):: self + {name: name}, - // Namespace of the referenced object. If the object kind is non-namespace, such as "User" or "Group", and this value is not empty the Authorizer should report an error. - withNamespace(namespace):: self + {namespace: namespace}, - mixin:: { - }, - }, - }, - v1beta1:: { - local apiVersion = {apiVersion: "rbac/v1beta1"}, - // PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to. - policyRule:: { - new():: {}, - // APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. - withApiGroups(apiGroups):: self + if std.type(apiGroups) == "array" then {apiGroups: apiGroups} else {apiGroups: [apiGroups]}, - // APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. - withApiGroupsMixin(apiGroups):: self + if std.type(apiGroups) == "array" then {apiGroups+: apiGroups} else {apiGroups+: [apiGroups]}, - // NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both. - withNonResourceUrls(nonResourceUrls):: self + if std.type(nonResourceUrls) == "array" then {nonResourceURLs: nonResourceUrls} else {nonResourceURLs: [nonResourceUrls]}, - // NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both. - withNonResourceUrlsMixin(nonResourceUrls):: self + if std.type(nonResourceUrls) == "array" then {nonResourceURLs+: nonResourceUrls} else {nonResourceURLs+: [nonResourceUrls]}, - // ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. - withResourceNames(resourceNames):: self + if std.type(resourceNames) == "array" then {resourceNames: resourceNames} else {resourceNames: [resourceNames]}, - // ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. - withResourceNamesMixin(resourceNames):: self + if std.type(resourceNames) == "array" then {resourceNames+: resourceNames} else {resourceNames+: [resourceNames]}, - // Resources is a list of resources this rule applies to. ResourceAll represents all resources. - withResources(resources):: self + if std.type(resources) == "array" then {resources: resources} else {resources: [resources]}, - // Resources is a list of resources this rule applies to. ResourceAll represents all resources. - withResourcesMixin(resources):: self + if std.type(resources) == "array" then {resources+: resources} else {resources+: [resources]}, - // Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds. - withVerbs(verbs):: self + if std.type(verbs) == "array" then {verbs: verbs} else {verbs: [verbs]}, - // Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds. - withVerbsMixin(verbs):: self + if std.type(verbs) == "array" then {verbs+: verbs} else {verbs+: [verbs]}, - mixin:: { - }, - }, - // RoleRef contains information that points to the role being used - roleRef:: { - new():: {}, - // APIGroup is the group for the resource being referenced - withApiGroup(apiGroup):: self + {apiGroup: apiGroup}, - // Name is the name of resource being referenced - withName(name):: self + {name: name}, - mixin:: { - }, - }, - // Subject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names. - subject:: { - new():: {}, - // APIGroup holds the API group of the referenced subject. Defaults to "" for ServiceAccount subjects. Defaults to "rbac.authorization.k8s.io" for User and Group subjects. - withApiGroup(apiGroup):: self + {apiGroup: apiGroup}, - // Name of the object being referenced. - withName(name):: self + {name: name}, - // Namespace of the referenced object. If the object kind is non-namespace, such as "User" or "Group", and this value is not empty the Authorizer should report an error. - withNamespace(namespace):: self + {namespace: namespace}, - mixin:: { - }, - }, - }, - }, - settings:: { - v1alpha1:: { - local apiVersion = {apiVersion: "settings/v1alpha1"}, - // PodPresetSpec is a description of a pod preset. - podPresetSpec:: { - new():: {}, - // Env defines the collection of EnvVar to inject into containers. - withEnv(env):: self + if std.type(env) == "array" then {env: env} else {env: [env]}, - // Env defines the collection of EnvVar to inject into containers. - withEnvMixin(env):: self + if std.type(env) == "array" then {env+: env} else {env+: [env]}, - // EnvFrom defines the collection of EnvFromSource to inject into containers. - withEnvFrom(envFrom):: self + if std.type(envFrom) == "array" then {envFrom: envFrom} else {envFrom: [envFrom]}, - // EnvFrom defines the collection of EnvFromSource to inject into containers. - withEnvFromMixin(envFrom):: self + if std.type(envFrom) == "array" then {envFrom+: envFrom} else {envFrom+: [envFrom]}, - envFromType:: hidden.core.v1.envFromSource, - envType:: hidden.core.v1.envVar, - // VolumeMounts defines the collection of VolumeMount to inject into containers. - withVolumeMounts(volumeMounts):: self + if std.type(volumeMounts) == "array" then {volumeMounts: volumeMounts} else {volumeMounts: [volumeMounts]}, - // VolumeMounts defines the collection of VolumeMount to inject into containers. - withVolumeMountsMixin(volumeMounts):: self + if std.type(volumeMounts) == "array" then {volumeMounts+: volumeMounts} else {volumeMounts+: [volumeMounts]}, - volumeMountsType:: hidden.core.v1.volumeMount, - // Volumes defines the collection of Volume to inject into the pod. - withVolumes(volumes):: self + if std.type(volumes) == "array" then {volumes: volumes} else {volumes: [volumes]}, - // Volumes defines the collection of Volume to inject into the pod. - withVolumesMixin(volumes):: self + if std.type(volumes) == "array" then {volumes+: volumes} else {volumes+: [volumes]}, - volumesType:: hidden.core.v1.volume, - mixin:: { - // Selector is a label query over a set of resources, in this case pods. Required. - selector:: { - local __selectorMixin(selector) = {selector+: selector}, - mixinInstance(selector):: __selectorMixin(selector), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}), - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == "array" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}), - matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement, - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}), - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}), - }, - selectorType:: hidden.meta.v1.labelSelector, - }, - }, - }, - }, - }, -} diff --git a/agents/app/lib/v1.7.0/swagger.json b/agents/app/lib/v1.7.0/swagger.json deleted file mode 100644 index 8cfb7398..00000000 --- a/agents/app/lib/v1.7.0/swagger.json +++ /dev/null @@ -1,56122 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "title": "Kubernetes", - "version": "v1.7.0" - }, - "paths": { - "/api/": { - "get": { - "description": "get available API versions", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core" - ], - "operationId": "getCoreAPIVersions", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIVersions" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/api/v1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "getCoreV1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/api/v1/componentstatuses": { - "get": { - "description": "list objects of kind ComponentStatus", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1ComponentStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ComponentStatusList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ComponentStatus" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/componentstatuses/{name}": { - "get": { - "description": "read the specified ComponentStatus", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1ComponentStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ComponentStatus" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ComponentStatus" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ComponentStatus", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/configmaps": { - "get": { - "description": "list or watch objects of kind ConfigMap", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1ConfigMapForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMapList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ConfigMap" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/endpoints": { - "get": { - "description": "list or watch objects of kind Endpoints", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1EndpointsForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.EndpointsList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Endpoints" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/events": { - "get": { - "description": "list or watch objects of kind Event", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1EventForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.EventList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Event" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/limitranges": { - "get": { - "description": "list or watch objects of kind LimitRange", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1LimitRangeForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRangeList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "LimitRange" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/namespaces": { - "get": { - "description": "list or watch objects of kind Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1Namespace", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.NamespaceList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Namespace" - } - }, - "post": { - "description": "create a Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1Namespace", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Namespace" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/bindings": { - "post": { - "description": "create a Binding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Binding" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Binding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Binding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/configmaps": { - "get": { - "description": "list or watch objects of kind ConfigMap", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedConfigMap", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMapList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ConfigMap" - } - }, - "post": { - "description": "create a ConfigMap", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedConfigMap", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMap" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMap" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ConfigMap" - } - }, - "delete": { - "description": "delete collection of ConfigMap", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedConfigMap", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ConfigMap" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/configmaps/{name}": { - "get": { - "description": "read the specified ConfigMap", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedConfigMap", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMap" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ConfigMap" - } - }, - "put": { - "description": "replace the specified ConfigMap", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedConfigMap", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMap" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMap" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ConfigMap" - } - }, - "delete": { - "description": "delete a ConfigMap", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedConfigMap", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ConfigMap" - } - }, - "patch": { - "description": "partially update the specified ConfigMap", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedConfigMap", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMap" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ConfigMap" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ConfigMap", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/endpoints": { - "get": { - "description": "list or watch objects of kind Endpoints", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedEndpoints", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.EndpointsList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Endpoints" - } - }, - "post": { - "description": "create Endpoints", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedEndpoints", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Endpoints" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Endpoints" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Endpoints" - } - }, - "delete": { - "description": "delete collection of Endpoints", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedEndpoints", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Endpoints" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/endpoints/{name}": { - "get": { - "description": "read the specified Endpoints", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedEndpoints", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Endpoints" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Endpoints" - } - }, - "put": { - "description": "replace the specified Endpoints", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedEndpoints", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Endpoints" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Endpoints" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Endpoints" - } - }, - "delete": { - "description": "delete Endpoints", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedEndpoints", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Endpoints" - } - }, - "patch": { - "description": "partially update the specified Endpoints", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedEndpoints", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Endpoints" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Endpoints" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Endpoints", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/events": { - "get": { - "description": "list or watch objects of kind Event", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedEvent", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.EventList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Event" - } - }, - "post": { - "description": "create an Event", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedEvent", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Event" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Event" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Event" - } - }, - "delete": { - "description": "delete collection of Event", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedEvent", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Event" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/events/{name}": { - "get": { - "description": "read the specified Event", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedEvent", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Event" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Event" - } - }, - "put": { - "description": "replace the specified Event", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedEvent", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Event" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Event" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Event" - } - }, - "delete": { - "description": "delete an Event", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedEvent", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Event" - } - }, - "patch": { - "description": "partially update the specified Event", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedEvent", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Event" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Event" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Event", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/limitranges": { - "get": { - "description": "list or watch objects of kind LimitRange", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedLimitRange", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRangeList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "LimitRange" - } - }, - "post": { - "description": "create a LimitRange", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedLimitRange", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRange" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRange" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "LimitRange" - } - }, - "delete": { - "description": "delete collection of LimitRange", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedLimitRange", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "LimitRange" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/limitranges/{name}": { - "get": { - "description": "read the specified LimitRange", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedLimitRange", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRange" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "LimitRange" - } - }, - "put": { - "description": "replace the specified LimitRange", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedLimitRange", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRange" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRange" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "LimitRange" - } - }, - "delete": { - "description": "delete a LimitRange", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedLimitRange", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "LimitRange" - } - }, - "patch": { - "description": "partially update the specified LimitRange", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedLimitRange", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRange" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "LimitRange" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the LimitRange", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/persistentvolumeclaims": { - "get": { - "description": "list or watch objects of kind PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedPersistentVolumeClaim", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolumeClaim" - } - }, - "post": { - "description": "create a PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedPersistentVolumeClaim", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolumeClaim" - } - }, - "delete": { - "description": "delete collection of PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedPersistentVolumeClaim", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolumeClaim" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}": { - "get": { - "description": "read the specified PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedPersistentVolumeClaim", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolumeClaim" - } - }, - "put": { - "description": "replace the specified PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedPersistentVolumeClaim", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolumeClaim" - } - }, - "delete": { - "description": "delete a PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedPersistentVolumeClaim", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolumeClaim" - } - }, - "patch": { - "description": "partially update the specified PersistentVolumeClaim", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedPersistentVolumeClaim", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolumeClaim" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PersistentVolumeClaim", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}/status": { - "get": { - "description": "read status of the specified PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedPersistentVolumeClaimStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolumeClaim" - } - }, - "put": { - "description": "replace status of the specified PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedPersistentVolumeClaimStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolumeClaim" - } - }, - "patch": { - "description": "partially update status of the specified PersistentVolumeClaim", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedPersistentVolumeClaimStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolumeClaim" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PersistentVolumeClaim", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods": { - "get": { - "description": "list or watch objects of kind Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedPod", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "post": { - "description": "create a Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedPod", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "delete": { - "description": "delete collection of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedPod", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}": { - "get": { - "description": "read the specified Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedPod", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "put": { - "description": "replace the specified Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedPod", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "delete": { - "description": "delete a Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedPod", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "patch": { - "description": "partially update the specified Pod", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedPod", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Pod", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/attach": { - "get": { - "description": "connect GET requests to attach of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNamespacedPodAttach", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "post": { - "description": "connect POST requests to attach of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNamespacedPodAttach", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The container in which to execute the command. Defaults to only container if there is only one container in the pod.", - "name": "container", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Pod", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Stderr if true indicates that stderr is to be redirected for the attach call. Defaults to true.", - "name": "stderr", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Stdin if true, redirects the standard input stream of the pod for this call. Defaults to false.", - "name": "stdin", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Stdout if true indicates that stdout is to be redirected for the attach call. Defaults to true.", - "name": "stdout", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "TTY if true indicates that a tty will be allocated for the attach call. This is passed through the container runtime so the tty is allocated on the worker node by the container runtime. Defaults to false.", - "name": "tty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/binding": { - "post": { - "description": "create binding of a Binding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedBindingBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Binding" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Binding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Binding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Binding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/eviction": { - "post": { - "description": "create eviction of an Eviction", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedEvictionEviction", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.Eviction" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.Eviction" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "policy", - "version": "v1beta1", - "kind": "Eviction" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Eviction", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/exec": { - "get": { - "description": "connect GET requests to exec of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNamespacedPodExec", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "post": { - "description": "connect POST requests to exec of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNamespacedPodExec", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "Command is the remote command to execute. argv array. Not executed within a shell.", - "name": "command", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Container in which to execute the command. Defaults to only container if there is only one container in the pod.", - "name": "container", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Pod", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Redirect the standard error stream of the pod for this call. Defaults to true.", - "name": "stderr", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Redirect the standard input stream of the pod for this call. Defaults to false.", - "name": "stdin", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Redirect the standard output stream of the pod for this call. Defaults to true.", - "name": "stdout", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "TTY if true indicates that a tty will be allocated for the exec call. Defaults to false.", - "name": "tty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/log": { - "get": { - "description": "read log of the specified Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "text/plain", - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedPodLog", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "The container for which to stream logs. Defaults to only container if there is one container in the pod.", - "name": "container", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Follow the log stream of the pod. Defaults to false.", - "name": "follow", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "If set, the number of bytes to read from the server before terminating the log output. This may not display a complete final line of logging, and may return slightly more or slightly less than the specified limit.", - "name": "limitBytes", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Pod", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Return previous terminated container logs. Defaults to false.", - "name": "previous", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "A relative time in seconds before the current time from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified.", - "name": "sinceSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "If set, the number of lines from the end of the logs to show. If not specified, logs are shown from the creation of the container or sinceSeconds or sinceTime", - "name": "tailLines", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line of log output. Defaults to false.", - "name": "timestamps", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/portforward": { - "get": { - "description": "connect GET requests to portforward of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNamespacedPodPortforward", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "post": { - "description": "connect POST requests to portforward of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNamespacedPodPortforward", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Pod", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "integer", - "description": "List of ports to forward Required when using WebSockets", - "name": "ports", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/proxy": { - "get": { - "description": "connect GET requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNamespacedPodProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "put": { - "description": "connect PUT requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PutNamespacedPodProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "post": { - "description": "connect POST requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNamespacedPodProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "delete": { - "description": "connect DELETE requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1DeleteNamespacedPodProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "options": { - "description": "connect OPTIONS requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1OptionsNamespacedPodProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "head": { - "description": "connect HEAD requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1HeadNamespacedPodProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "patch": { - "description": "connect PATCH requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PatchNamespacedPodProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Pod", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "Path is the URL path to use for the current proxy request to pod.", - "name": "path", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/proxy/{path}": { - "get": { - "description": "connect GET requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNamespacedPodProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "put": { - "description": "connect PUT requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PutNamespacedPodProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "post": { - "description": "connect POST requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNamespacedPodProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "delete": { - "description": "connect DELETE requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1DeleteNamespacedPodProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "options": { - "description": "connect OPTIONS requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1OptionsNamespacedPodProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "head": { - "description": "connect HEAD requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1HeadNamespacedPodProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "patch": { - "description": "connect PATCH requests to proxy of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PatchNamespacedPodProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Pod", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "path to the resource", - "name": "path", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "Path is the URL path to use for the current proxy request to pod.", - "name": "path", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/pods/{name}/status": { - "get": { - "description": "read status of the specified Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedPodStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "put": { - "description": "replace status of the specified Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedPodStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "patch": { - "description": "partially update status of the specified Pod", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedPodStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Pod", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/podtemplates": { - "get": { - "description": "list or watch objects of kind PodTemplate", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedPodTemplate", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PodTemplate" - } - }, - "post": { - "description": "create a PodTemplate", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedPodTemplate", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplate" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplate" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PodTemplate" - } - }, - "delete": { - "description": "delete collection of PodTemplate", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedPodTemplate", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PodTemplate" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/podtemplates/{name}": { - "get": { - "description": "read the specified PodTemplate", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedPodTemplate", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplate" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PodTemplate" - } - }, - "put": { - "description": "replace the specified PodTemplate", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedPodTemplate", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplate" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplate" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PodTemplate" - } - }, - "delete": { - "description": "delete a PodTemplate", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedPodTemplate", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PodTemplate" - } - }, - "patch": { - "description": "partially update the specified PodTemplate", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedPodTemplate", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplate" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PodTemplate" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodTemplate", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/replicationcontrollers": { - "get": { - "description": "list or watch objects of kind ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedReplicationController", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationControllerList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ReplicationController" - } - }, - "post": { - "description": "create a ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedReplicationController", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ReplicationController" - } - }, - "delete": { - "description": "delete collection of ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedReplicationController", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ReplicationController" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/replicationcontrollers/{name}": { - "get": { - "description": "read the specified ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedReplicationController", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ReplicationController" - } - }, - "put": { - "description": "replace the specified ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedReplicationController", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ReplicationController" - } - }, - "delete": { - "description": "delete a ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedReplicationController", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ReplicationController" - } - }, - "patch": { - "description": "partially update the specified ReplicationController", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedReplicationController", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ReplicationController" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicationController", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/replicationcontrollers/{name}/scale": { - "get": { - "description": "read scale of the specified Scale", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedScaleScale", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v1", - "kind": "Scale" - } - }, - "put": { - "description": "replace scale of the specified Scale", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedScaleScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.Scale" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v1", - "kind": "Scale" - } - }, - "patch": { - "description": "partially update scale of the specified Scale", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedScaleScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v1", - "kind": "Scale" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Scale", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/replicationcontrollers/{name}/status": { - "get": { - "description": "read status of the specified ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedReplicationControllerStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ReplicationController" - } - }, - "put": { - "description": "replace status of the specified ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedReplicationControllerStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ReplicationController" - } - }, - "patch": { - "description": "partially update status of the specified ReplicationController", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedReplicationControllerStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ReplicationController" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicationController", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/resourcequotas": { - "get": { - "description": "list or watch objects of kind ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedResourceQuota", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuotaList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ResourceQuota" - } - }, - "post": { - "description": "create a ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedResourceQuota", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ResourceQuota" - } - }, - "delete": { - "description": "delete collection of ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedResourceQuota", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ResourceQuota" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/resourcequotas/{name}": { - "get": { - "description": "read the specified ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedResourceQuota", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ResourceQuota" - } - }, - "put": { - "description": "replace the specified ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedResourceQuota", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ResourceQuota" - } - }, - "delete": { - "description": "delete a ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedResourceQuota", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ResourceQuota" - } - }, - "patch": { - "description": "partially update the specified ResourceQuota", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedResourceQuota", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ResourceQuota" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ResourceQuota", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/resourcequotas/{name}/status": { - "get": { - "description": "read status of the specified ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedResourceQuotaStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ResourceQuota" - } - }, - "put": { - "description": "replace status of the specified ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedResourceQuotaStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ResourceQuota" - } - }, - "patch": { - "description": "partially update status of the specified ResourceQuota", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedResourceQuotaStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ResourceQuota" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ResourceQuota", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/secrets": { - "get": { - "description": "list or watch objects of kind Secret", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedSecret", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.SecretList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Secret" - } - }, - "post": { - "description": "create a Secret", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedSecret", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Secret" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Secret" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Secret" - } - }, - "delete": { - "description": "delete collection of Secret", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedSecret", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Secret" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/secrets/{name}": { - "get": { - "description": "read the specified Secret", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedSecret", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Secret" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Secret" - } - }, - "put": { - "description": "replace the specified Secret", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedSecret", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Secret" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Secret" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Secret" - } - }, - "delete": { - "description": "delete a Secret", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedSecret", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Secret" - } - }, - "patch": { - "description": "partially update the specified Secret", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedSecret", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Secret" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Secret" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Secret", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/serviceaccounts": { - "get": { - "description": "list or watch objects of kind ServiceAccount", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedServiceAccount", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccountList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ServiceAccount" - } - }, - "post": { - "description": "create a ServiceAccount", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedServiceAccount", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccount" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccount" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ServiceAccount" - } - }, - "delete": { - "description": "delete collection of ServiceAccount", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNamespacedServiceAccount", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ServiceAccount" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/serviceaccounts/{name}": { - "get": { - "description": "read the specified ServiceAccount", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedServiceAccount", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccount" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ServiceAccount" - } - }, - "put": { - "description": "replace the specified ServiceAccount", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedServiceAccount", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccount" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccount" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ServiceAccount" - } - }, - "delete": { - "description": "delete a ServiceAccount", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedServiceAccount", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ServiceAccount" - } - }, - "patch": { - "description": "partially update the specified ServiceAccount", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedServiceAccount", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccount" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ServiceAccount" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ServiceAccount", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/services": { - "get": { - "description": "list or watch objects of kind Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1NamespacedService", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "post": { - "description": "create a Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1NamespacedService", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Service" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Service" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/services/{name}": { - "get": { - "description": "read the specified Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedService", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Service" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "put": { - "description": "replace the specified Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedService", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Service" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Service" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "delete": { - "description": "delete a Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1NamespacedService", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "patch": { - "description": "partially update the specified Service", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedService", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Service" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Service", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/services/{name}/proxy": { - "get": { - "description": "connect GET requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNamespacedServiceProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "put": { - "description": "connect PUT requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PutNamespacedServiceProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "post": { - "description": "connect POST requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNamespacedServiceProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "delete": { - "description": "connect DELETE requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1DeleteNamespacedServiceProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "options": { - "description": "connect OPTIONS requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1OptionsNamespacedServiceProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "head": { - "description": "connect HEAD requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1HeadNamespacedServiceProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "patch": { - "description": "connect PATCH requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PatchNamespacedServiceProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Service", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "Path is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.", - "name": "path", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/services/{name}/proxy/{path}": { - "get": { - "description": "connect GET requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNamespacedServiceProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "put": { - "description": "connect PUT requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PutNamespacedServiceProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "post": { - "description": "connect POST requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNamespacedServiceProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "delete": { - "description": "connect DELETE requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1DeleteNamespacedServiceProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "options": { - "description": "connect OPTIONS requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1OptionsNamespacedServiceProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "head": { - "description": "connect HEAD requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1HeadNamespacedServiceProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "patch": { - "description": "connect PATCH requests to proxy of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PatchNamespacedServiceProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Service", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "path to the resource", - "name": "path", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "Path is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.", - "name": "path", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{namespace}/services/{name}/status": { - "get": { - "description": "read status of the specified Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespacedServiceStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Service" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "put": { - "description": "replace status of the specified Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespacedServiceStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Service" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Service" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "patch": { - "description": "partially update status of the specified Service", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespacedServiceStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Service" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Service", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{name}": { - "get": { - "description": "read the specified Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1Namespace", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Namespace" - } - }, - "put": { - "description": "replace the specified Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1Namespace", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Namespace" - } - }, - "delete": { - "description": "delete a Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1Namespace", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Namespace" - } - }, - "patch": { - "description": "partially update the specified Namespace", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1Namespace", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Namespace" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Namespace", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{name}/finalize": { - "put": { - "description": "replace finalize of the specified Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespaceFinalize", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Namespace" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Namespace", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/namespaces/{name}/status": { - "get": { - "description": "read status of the specified Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NamespaceStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Namespace" - } - }, - "put": { - "description": "replace status of the specified Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NamespaceStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Namespace" - } - }, - "patch": { - "description": "partially update status of the specified Namespace", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NamespaceStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Namespace" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Namespace", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/nodes": { - "get": { - "description": "list or watch objects of kind Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1Node", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "post": { - "description": "create a Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1Node", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Node" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Node" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "delete": { - "description": "delete collection of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionNode", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/nodes/{name}": { - "get": { - "description": "read the specified Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1Node", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Node" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "put": { - "description": "replace the specified Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1Node", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Node" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Node" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "delete": { - "description": "delete a Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1Node", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "patch": { - "description": "partially update the specified Node", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1Node", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Node" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Node", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/nodes/{name}/proxy": { - "get": { - "description": "connect GET requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNodeProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "put": { - "description": "connect PUT requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PutNodeProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "post": { - "description": "connect POST requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNodeProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "delete": { - "description": "connect DELETE requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1DeleteNodeProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "options": { - "description": "connect OPTIONS requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1OptionsNodeProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "head": { - "description": "connect HEAD requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1HeadNodeProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "patch": { - "description": "connect PATCH requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PatchNodeProxy", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Node", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "Path is the URL path to use for the current proxy request to node.", - "name": "path", - "in": "query" - } - ] - }, - "/api/v1/nodes/{name}/proxy/{path}": { - "get": { - "description": "connect GET requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1GetNodeProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "put": { - "description": "connect PUT requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PutNodeProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "post": { - "description": "connect POST requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PostNodeProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "delete": { - "description": "connect DELETE requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1DeleteNodeProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "options": { - "description": "connect OPTIONS requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1OptionsNodeProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "head": { - "description": "connect HEAD requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1HeadNodeProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "patch": { - "description": "connect PATCH requests to proxy of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "connectCoreV1PatchNodeProxyWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "connect", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Node", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "path to the resource", - "name": "path", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "Path is the URL path to use for the current proxy request to node.", - "name": "path", - "in": "query" - } - ] - }, - "/api/v1/nodes/{name}/status": { - "get": { - "description": "read status of the specified Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1NodeStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Node" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "put": { - "description": "replace status of the specified Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1NodeStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Node" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Node" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "patch": { - "description": "partially update status of the specified Node", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1NodeStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Node" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Node", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/persistentvolumeclaims": { - "get": { - "description": "list or watch objects of kind PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1PersistentVolumeClaimForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolumeClaim" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/persistentvolumes": { - "get": { - "description": "list or watch objects of kind PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1PersistentVolume", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolume" - } - }, - "post": { - "description": "create a PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "createCoreV1PersistentVolume", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolume" - } - }, - "delete": { - "description": "delete collection of PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1CollectionPersistentVolume", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolume" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/persistentvolumes/{name}": { - "get": { - "description": "read the specified PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1PersistentVolume", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolume" - } - }, - "put": { - "description": "replace the specified PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1PersistentVolume", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolume" - } - }, - "delete": { - "description": "delete a PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "deleteCoreV1PersistentVolume", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolume" - } - }, - "patch": { - "description": "partially update the specified PersistentVolume", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1PersistentVolume", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolume" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PersistentVolume", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/persistentvolumes/{name}/status": { - "get": { - "description": "read status of the specified PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "readCoreV1PersistentVolumeStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolume" - } - }, - "put": { - "description": "replace status of the specified PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "replaceCoreV1PersistentVolumeStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolume" - } - }, - "patch": { - "description": "partially update status of the specified PersistentVolume", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "patchCoreV1PersistentVolumeStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolume" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PersistentVolume", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/api/v1/pods": { - "get": { - "description": "list or watch objects of kind Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1PodForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/podtemplates": { - "get": { - "description": "list or watch objects of kind PodTemplate", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1PodTemplateForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PodTemplate" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/proxy/namespaces/{namespace}/pods/{name}": { - "get": { - "description": "proxy GET requests to Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1GETNamespacedPod", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "put": { - "description": "proxy PUT requests to Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1PUTNamespacedPod", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "post": { - "description": "proxy POST requests to Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1POSTNamespacedPod", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "delete": { - "description": "proxy DELETE requests to Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1DELETENamespacedPod", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "options": { - "description": "proxy OPTIONS requests to Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1OPTIONSNamespacedPod", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "head": { - "description": "proxy HEAD requests to Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1HEADNamespacedPod", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "patch": { - "description": "proxy PATCH requests to Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1PATCHNamespacedPod", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Pod", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - } - ] - }, - "/api/v1/proxy/namespaces/{namespace}/pods/{name}/{path}": { - "get": { - "description": "proxy GET requests to Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1GETNamespacedPodWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "put": { - "description": "proxy PUT requests to Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1PUTNamespacedPodWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "post": { - "description": "proxy POST requests to Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1POSTNamespacedPodWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "delete": { - "description": "proxy DELETE requests to Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1DELETENamespacedPodWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "options": { - "description": "proxy OPTIONS requests to Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1OPTIONSNamespacedPodWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "head": { - "description": "proxy HEAD requests to Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1HEADNamespacedPodWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "patch": { - "description": "proxy PATCH requests to Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1PATCHNamespacedPodWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Pod", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "path to the resource", - "name": "path", - "in": "path", - "required": true - } - ] - }, - "/api/v1/proxy/namespaces/{namespace}/services/{name}": { - "get": { - "description": "proxy GET requests to Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1GETNamespacedService", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "put": { - "description": "proxy PUT requests to Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1PUTNamespacedService", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "post": { - "description": "proxy POST requests to Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1POSTNamespacedService", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "delete": { - "description": "proxy DELETE requests to Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1DELETENamespacedService", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "options": { - "description": "proxy OPTIONS requests to Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1OPTIONSNamespacedService", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "head": { - "description": "proxy HEAD requests to Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1HEADNamespacedService", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "patch": { - "description": "proxy PATCH requests to Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1PATCHNamespacedService", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Service", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - } - ] - }, - "/api/v1/proxy/namespaces/{namespace}/services/{name}/{path}": { - "get": { - "description": "proxy GET requests to Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1GETNamespacedServiceWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "put": { - "description": "proxy PUT requests to Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1PUTNamespacedServiceWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "post": { - "description": "proxy POST requests to Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1POSTNamespacedServiceWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "delete": { - "description": "proxy DELETE requests to Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1DELETENamespacedServiceWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "options": { - "description": "proxy OPTIONS requests to Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1OPTIONSNamespacedServiceWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "head": { - "description": "proxy HEAD requests to Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1HEADNamespacedServiceWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "patch": { - "description": "proxy PATCH requests to Service", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1PATCHNamespacedServiceWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Service", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "path to the resource", - "name": "path", - "in": "path", - "required": true - } - ] - }, - "/api/v1/proxy/nodes/{name}": { - "get": { - "description": "proxy GET requests to Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1GETNode", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "put": { - "description": "proxy PUT requests to Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1PUTNode", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "post": { - "description": "proxy POST requests to Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1POSTNode", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "delete": { - "description": "proxy DELETE requests to Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1DELETENode", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "options": { - "description": "proxy OPTIONS requests to Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1OPTIONSNode", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "head": { - "description": "proxy HEAD requests to Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1HEADNode", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "patch": { - "description": "proxy PATCH requests to Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1PATCHNode", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Node", - "name": "name", - "in": "path", - "required": true - } - ] - }, - "/api/v1/proxy/nodes/{name}/{path}": { - "get": { - "description": "proxy GET requests to Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1GETNodeWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "put": { - "description": "proxy PUT requests to Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1PUTNodeWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "post": { - "description": "proxy POST requests to Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1POSTNodeWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "delete": { - "description": "proxy DELETE requests to Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1DELETENodeWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "options": { - "description": "proxy OPTIONS requests to Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1OPTIONSNodeWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "head": { - "description": "proxy HEAD requests to Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1HEADNodeWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "patch": { - "description": "proxy PATCH requests to Node", - "consumes": [ - "*/*" - ], - "produces": [ - "*/*" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "proxyCoreV1PATCHNodeWithPath", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "proxy", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Node", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "path to the resource", - "name": "path", - "in": "path", - "required": true - } - ] - }, - "/api/v1/replicationcontrollers": { - "get": { - "description": "list or watch objects of kind ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1ReplicationControllerForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationControllerList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ReplicationController" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/resourcequotas": { - "get": { - "description": "list or watch objects of kind ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1ResourceQuotaForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuotaList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ResourceQuota" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/secrets": { - "get": { - "description": "list or watch objects of kind Secret", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1SecretForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.SecretList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Secret" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/serviceaccounts": { - "get": { - "description": "list or watch objects of kind ServiceAccount", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1ServiceAccountForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccountList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ServiceAccount" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/services": { - "get": { - "description": "list or watch objects of kind Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "listCoreV1ServiceForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/configmaps": { - "get": { - "description": "watch individual changes to a list of ConfigMap", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1ConfigMapListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ConfigMap" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/endpoints": { - "get": { - "description": "watch individual changes to a list of Endpoints", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1EndpointsListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Endpoints" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/events": { - "get": { - "description": "watch individual changes to a list of Event", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1EventListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Event" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/limitranges": { - "get": { - "description": "watch individual changes to a list of LimitRange", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1LimitRangeListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "LimitRange" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces": { - "get": { - "description": "watch individual changes to a list of Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespaceList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Namespace" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/configmaps": { - "get": { - "description": "watch individual changes to a list of ConfigMap", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedConfigMapList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ConfigMap" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/configmaps/{name}": { - "get": { - "description": "watch changes to an object of kind ConfigMap", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedConfigMap", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ConfigMap" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ConfigMap", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/endpoints": { - "get": { - "description": "watch individual changes to a list of Endpoints", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedEndpointsList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Endpoints" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/endpoints/{name}": { - "get": { - "description": "watch changes to an object of kind Endpoints", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedEndpoints", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Endpoints" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Endpoints", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/events": { - "get": { - "description": "watch individual changes to a list of Event", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedEventList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Event" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/events/{name}": { - "get": { - "description": "watch changes to an object of kind Event", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedEvent", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Event" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Event", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/limitranges": { - "get": { - "description": "watch individual changes to a list of LimitRange", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedLimitRangeList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "LimitRange" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/limitranges/{name}": { - "get": { - "description": "watch changes to an object of kind LimitRange", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedLimitRange", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "LimitRange" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the LimitRange", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/persistentvolumeclaims": { - "get": { - "description": "watch individual changes to a list of PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedPersistentVolumeClaimList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolumeClaim" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/persistentvolumeclaims/{name}": { - "get": { - "description": "watch changes to an object of kind PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedPersistentVolumeClaim", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolumeClaim" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the PersistentVolumeClaim", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/pods": { - "get": { - "description": "watch individual changes to a list of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedPodList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/pods/{name}": { - "get": { - "description": "watch changes to an object of kind Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedPod", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Pod", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/podtemplates": { - "get": { - "description": "watch individual changes to a list of PodTemplate", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedPodTemplateList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PodTemplate" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/podtemplates/{name}": { - "get": { - "description": "watch changes to an object of kind PodTemplate", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedPodTemplate", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PodTemplate" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodTemplate", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/replicationcontrollers": { - "get": { - "description": "watch individual changes to a list of ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedReplicationControllerList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ReplicationController" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/replicationcontrollers/{name}": { - "get": { - "description": "watch changes to an object of kind ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedReplicationController", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ReplicationController" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicationController", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/resourcequotas": { - "get": { - "description": "watch individual changes to a list of ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedResourceQuotaList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ResourceQuota" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/resourcequotas/{name}": { - "get": { - "description": "watch changes to an object of kind ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedResourceQuota", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ResourceQuota" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ResourceQuota", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/secrets": { - "get": { - "description": "watch individual changes to a list of Secret", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedSecretList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Secret" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/secrets/{name}": { - "get": { - "description": "watch changes to an object of kind Secret", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedSecret", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Secret" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Secret", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/serviceaccounts": { - "get": { - "description": "watch individual changes to a list of ServiceAccount", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedServiceAccountList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ServiceAccount" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/serviceaccounts/{name}": { - "get": { - "description": "watch changes to an object of kind ServiceAccount", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedServiceAccount", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ServiceAccount" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ServiceAccount", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/services": { - "get": { - "description": "watch individual changes to a list of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedServiceList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{namespace}/services/{name}": { - "get": { - "description": "watch changes to an object of kind Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NamespacedService", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Service", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/namespaces/{name}": { - "get": { - "description": "watch changes to an object of kind Namespace", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1Namespace", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Namespace" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Namespace", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/nodes": { - "get": { - "description": "watch individual changes to a list of Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1NodeList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/nodes/{name}": { - "get": { - "description": "watch changes to an object of kind Node", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1Node", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Node" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Node", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/persistentvolumeclaims": { - "get": { - "description": "watch individual changes to a list of PersistentVolumeClaim", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1PersistentVolumeClaimListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolumeClaim" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/persistentvolumes": { - "get": { - "description": "watch individual changes to a list of PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1PersistentVolumeList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolume" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/persistentvolumes/{name}": { - "get": { - "description": "watch changes to an object of kind PersistentVolume", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1PersistentVolume", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PersistentVolume" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the PersistentVolume", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/pods": { - "get": { - "description": "watch individual changes to a list of Pod", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1PodListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Pod" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/podtemplates": { - "get": { - "description": "watch individual changes to a list of PodTemplate", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1PodTemplateListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "PodTemplate" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/replicationcontrollers": { - "get": { - "description": "watch individual changes to a list of ReplicationController", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1ReplicationControllerListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ReplicationController" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/resourcequotas": { - "get": { - "description": "watch individual changes to a list of ResourceQuota", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1ResourceQuotaListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ResourceQuota" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/secrets": { - "get": { - "description": "watch individual changes to a list of Secret", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1SecretListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Secret" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/serviceaccounts": { - "get": { - "description": "watch individual changes to a list of ServiceAccount", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1ServiceAccountListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "ServiceAccount" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/api/v1/watch/services": { - "get": { - "description": "watch individual changes to a list of Service", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "operationId": "watchCoreV1ServiceListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "version": "v1", - "kind": "Service" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/": { - "get": { - "description": "get available API versions", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apis" - ], - "operationId": "getAPIVersions", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroupList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/admissionregistration.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration" - ], - "operationId": "getAdmissionregistrationAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/admissionregistration.k8s.io/v1alpha1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "getAdmissionregistrationV1alpha1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/admissionregistration.k8s.io/v1alpha1/externaladmissionhookconfigurations": { - "get": { - "description": "list or watch objects of kind ExternalAdmissionHookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "listAdmissionregistrationV1alpha1ExternalAdmissionHookConfiguration", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfigurationList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "ExternalAdmissionHookConfiguration" - } - }, - "post": { - "description": "create an ExternalAdmissionHookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "createAdmissionregistrationV1alpha1ExternalAdmissionHookConfiguration", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfiguration" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfiguration" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "ExternalAdmissionHookConfiguration" - } - }, - "delete": { - "description": "delete collection of ExternalAdmissionHookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "deleteAdmissionregistrationV1alpha1CollectionExternalAdmissionHookConfiguration", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "ExternalAdmissionHookConfiguration" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/admissionregistration.k8s.io/v1alpha1/externaladmissionhookconfigurations/{name}": { - "get": { - "description": "read the specified ExternalAdmissionHookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "readAdmissionregistrationV1alpha1ExternalAdmissionHookConfiguration", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfiguration" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "ExternalAdmissionHookConfiguration" - } - }, - "put": { - "description": "replace the specified ExternalAdmissionHookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "replaceAdmissionregistrationV1alpha1ExternalAdmissionHookConfiguration", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfiguration" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfiguration" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "ExternalAdmissionHookConfiguration" - } - }, - "delete": { - "description": "delete an ExternalAdmissionHookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "deleteAdmissionregistrationV1alpha1ExternalAdmissionHookConfiguration", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "ExternalAdmissionHookConfiguration" - } - }, - "patch": { - "description": "partially update the specified ExternalAdmissionHookConfiguration", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "patchAdmissionregistrationV1alpha1ExternalAdmissionHookConfiguration", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfiguration" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "ExternalAdmissionHookConfiguration" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ExternalAdmissionHookConfiguration", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/admissionregistration.k8s.io/v1alpha1/initializerconfigurations": { - "get": { - "description": "list or watch objects of kind InitializerConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "listAdmissionregistrationV1alpha1InitializerConfiguration", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfigurationList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "InitializerConfiguration" - } - }, - "post": { - "description": "create an InitializerConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "createAdmissionregistrationV1alpha1InitializerConfiguration", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfiguration" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfiguration" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "InitializerConfiguration" - } - }, - "delete": { - "description": "delete collection of InitializerConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "deleteAdmissionregistrationV1alpha1CollectionInitializerConfiguration", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "InitializerConfiguration" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/admissionregistration.k8s.io/v1alpha1/initializerconfigurations/{name}": { - "get": { - "description": "read the specified InitializerConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "readAdmissionregistrationV1alpha1InitializerConfiguration", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfiguration" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "InitializerConfiguration" - } - }, - "put": { - "description": "replace the specified InitializerConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "replaceAdmissionregistrationV1alpha1InitializerConfiguration", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfiguration" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfiguration" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "InitializerConfiguration" - } - }, - "delete": { - "description": "delete an InitializerConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "deleteAdmissionregistrationV1alpha1InitializerConfiguration", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "InitializerConfiguration" - } - }, - "patch": { - "description": "partially update the specified InitializerConfiguration", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "patchAdmissionregistrationV1alpha1InitializerConfiguration", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfiguration" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "InitializerConfiguration" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the InitializerConfiguration", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/admissionregistration.k8s.io/v1alpha1/watch/externaladmissionhookconfigurations": { - "get": { - "description": "watch individual changes to a list of ExternalAdmissionHookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "watchAdmissionregistrationV1alpha1ExternalAdmissionHookConfigurationList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "ExternalAdmissionHookConfiguration" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/admissionregistration.k8s.io/v1alpha1/watch/externaladmissionhookconfigurations/{name}": { - "get": { - "description": "watch changes to an object of kind ExternalAdmissionHookConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "watchAdmissionregistrationV1alpha1ExternalAdmissionHookConfiguration", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "ExternalAdmissionHookConfiguration" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ExternalAdmissionHookConfiguration", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/admissionregistration.k8s.io/v1alpha1/watch/initializerconfigurations": { - "get": { - "description": "watch individual changes to a list of InitializerConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "watchAdmissionregistrationV1alpha1InitializerConfigurationList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "InitializerConfiguration" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/admissionregistration.k8s.io/v1alpha1/watch/initializerconfigurations/{name}": { - "get": { - "description": "watch changes to an object of kind InitializerConfiguration", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "admissionregistration_v1alpha1" - ], - "operationId": "watchAdmissionregistrationV1alpha1InitializerConfiguration", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "InitializerConfiguration" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the InitializerConfiguration", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apiregistration.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration" - ], - "operationId": "getApiregistrationAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/apiregistration.k8s.io/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "getApiregistrationV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/apiregistration.k8s.io/v1beta1/apiservices": { - "get": { - "description": "list or watch objects of kind APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "listApiregistrationV1beta1APIService", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "version": "v1beta1", - "kind": "APIService" - } - }, - "post": { - "description": "create an APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "createApiregistrationV1beta1APIService", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "version": "v1beta1", - "kind": "APIService" - } - }, - "delete": { - "description": "delete collection of APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "deleteApiregistrationV1beta1CollectionAPIService", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "version": "v1beta1", - "kind": "APIService" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apiregistration.k8s.io/v1beta1/apiservices/{name}": { - "get": { - "description": "read the specified APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "readApiregistrationV1beta1APIService", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "version": "v1beta1", - "kind": "APIService" - } - }, - "put": { - "description": "replace the specified APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "replaceApiregistrationV1beta1APIService", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "version": "v1beta1", - "kind": "APIService" - } - }, - "delete": { - "description": "delete an APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "deleteApiregistrationV1beta1APIService", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "version": "v1beta1", - "kind": "APIService" - } - }, - "patch": { - "description": "partially update the specified APIService", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "patchApiregistrationV1beta1APIService", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "version": "v1beta1", - "kind": "APIService" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the APIService", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apiregistration.k8s.io/v1beta1/apiservices/{name}/status": { - "put": { - "description": "replace status of the specified APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "replaceApiregistrationV1beta1APIServiceStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "version": "v1beta1", - "kind": "APIService" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the APIService", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apiregistration.k8s.io/v1beta1/watch/apiservices": { - "get": { - "description": "watch individual changes to a list of APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "watchApiregistrationV1beta1APIServiceList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "version": "v1beta1", - "kind": "APIService" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apiregistration.k8s.io/v1beta1/watch/apiservices/{name}": { - "get": { - "description": "watch changes to an object of kind APIService", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apiregistration_v1beta1" - ], - "operationId": "watchApiregistrationV1beta1APIService", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apiregistration.k8s.io", - "version": "v1beta1", - "kind": "APIService" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the APIService", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps" - ], - "operationId": "getAppsAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/apps/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "getAppsV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/apps/v1beta1/controllerrevisions": { - "get": { - "description": "list or watch objects of kind ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "listAppsV1beta1ControllerRevisionForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevisionList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "ControllerRevision" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/deployments": { - "get": { - "description": "list or watch objects of kind Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "listAppsV1beta1DeploymentForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions": { - "get": { - "description": "list or watch objects of kind ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "listAppsV1beta1NamespacedControllerRevision", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevisionList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "ControllerRevision" - } - }, - "post": { - "description": "create a ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "createAppsV1beta1NamespacedControllerRevision", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "ControllerRevision" - } - }, - "delete": { - "description": "delete collection of ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "deleteAppsV1beta1CollectionNamespacedControllerRevision", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "ControllerRevision" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions/{name}": { - "get": { - "description": "read the specified ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "readAppsV1beta1NamespacedControllerRevision", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "ControllerRevision" - } - }, - "put": { - "description": "replace the specified ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "replaceAppsV1beta1NamespacedControllerRevision", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "ControllerRevision" - } - }, - "delete": { - "description": "delete a ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "deleteAppsV1beta1NamespacedControllerRevision", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "ControllerRevision" - } - }, - "patch": { - "description": "partially update the specified ControllerRevision", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "patchAppsV1beta1NamespacedControllerRevision", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "ControllerRevision" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ControllerRevision", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/deployments": { - "get": { - "description": "list or watch objects of kind Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "listAppsV1beta1NamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "post": { - "description": "create a Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "createAppsV1beta1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "delete": { - "description": "delete collection of Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "deleteAppsV1beta1CollectionNamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}": { - "get": { - "description": "read the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "readAppsV1beta1NamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "put": { - "description": "replace the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "replaceAppsV1beta1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "delete": { - "description": "delete a Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "deleteAppsV1beta1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "patch": { - "description": "partially update the specified Deployment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "patchAppsV1beta1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/rollback": { - "post": { - "description": "create rollback of a DeploymentRollback", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "createAppsV1beta1NamespacedDeploymentRollbackRollback", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentRollback" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentRollback" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "DeploymentRollback" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the DeploymentRollback", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/scale": { - "get": { - "description": "read scale of the specified Scale", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "readAppsV1beta1NamespacedScaleScale", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "Scale" - } - }, - "put": { - "description": "replace scale of the specified Scale", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "replaceAppsV1beta1NamespacedScaleScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Scale" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "Scale" - } - }, - "patch": { - "description": "partially update scale of the specified Scale", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "patchAppsV1beta1NamespacedScaleScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "Scale" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Scale", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/status": { - "get": { - "description": "read status of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "readAppsV1beta1NamespacedDeploymentStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "put": { - "description": "replace status of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "replaceAppsV1beta1NamespacedDeploymentStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "patch": { - "description": "partially update status of the specified Deployment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "patchAppsV1beta1NamespacedDeploymentStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/statefulsets": { - "get": { - "description": "list or watch objects of kind StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "listAppsV1beta1NamespacedStatefulSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "StatefulSet" - } - }, - "post": { - "description": "create a StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "createAppsV1beta1NamespacedStatefulSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "StatefulSet" - } - }, - "delete": { - "description": "delete collection of StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "deleteAppsV1beta1CollectionNamespacedStatefulSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "StatefulSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}": { - "get": { - "description": "read the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "readAppsV1beta1NamespacedStatefulSet", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "StatefulSet" - } - }, - "put": { - "description": "replace the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "replaceAppsV1beta1NamespacedStatefulSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "StatefulSet" - } - }, - "delete": { - "description": "delete a StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "deleteAppsV1beta1NamespacedStatefulSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "StatefulSet" - } - }, - "patch": { - "description": "partially update the specified StatefulSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "patchAppsV1beta1NamespacedStatefulSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "StatefulSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the StatefulSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/status": { - "get": { - "description": "read status of the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "readAppsV1beta1NamespacedStatefulSetStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "StatefulSet" - } - }, - "put": { - "description": "replace status of the specified StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "replaceAppsV1beta1NamespacedStatefulSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "StatefulSet" - } - }, - "patch": { - "description": "partially update status of the specified StatefulSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "patchAppsV1beta1NamespacedStatefulSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "StatefulSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the StatefulSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/statefulsets": { - "get": { - "description": "list or watch objects of kind StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "listAppsV1beta1StatefulSetForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "StatefulSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/controllerrevisions": { - "get": { - "description": "watch individual changes to a list of ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1ControllerRevisionListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "ControllerRevision" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/deployments": { - "get": { - "description": "watch individual changes to a list of Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1DeploymentListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/namespaces/{namespace}/controllerrevisions": { - "get": { - "description": "watch individual changes to a list of ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1NamespacedControllerRevisionList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "ControllerRevision" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/namespaces/{namespace}/controllerrevisions/{name}": { - "get": { - "description": "watch changes to an object of kind ControllerRevision", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1NamespacedControllerRevision", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "ControllerRevision" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ControllerRevision", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/namespaces/{namespace}/deployments": { - "get": { - "description": "watch individual changes to a list of Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1NamespacedDeploymentList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/namespaces/{namespace}/deployments/{name}": { - "get": { - "description": "watch changes to an object of kind Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1NamespacedDeployment", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/namespaces/{namespace}/statefulsets": { - "get": { - "description": "watch individual changes to a list of StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1NamespacedStatefulSetList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "StatefulSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/namespaces/{namespace}/statefulsets/{name}": { - "get": { - "description": "watch changes to an object of kind StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1NamespacedStatefulSet", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "StatefulSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the StatefulSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/apps/v1beta1/watch/statefulsets": { - "get": { - "description": "watch individual changes to a list of StatefulSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "apps_v1beta1" - ], - "operationId": "watchAppsV1beta1StatefulSetListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "apps", - "version": "v1beta1", - "kind": "StatefulSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/authentication.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authentication" - ], - "operationId": "getAuthenticationAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/authentication.k8s.io/v1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authentication_v1" - ], - "operationId": "getAuthenticationV1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/authentication.k8s.io/v1/tokenreviews": { - "post": { - "description": "create a TokenReview", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authentication_v1" - ], - "operationId": "createAuthenticationV1TokenReview", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReview" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReview" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "authentication.k8s.io", - "version": "v1", - "kind": "TokenReview" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/authentication.k8s.io/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authentication_v1beta1" - ], - "operationId": "getAuthenticationV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/authentication.k8s.io/v1beta1/tokenreviews": { - "post": { - "description": "create a TokenReview", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authentication_v1beta1" - ], - "operationId": "createAuthenticationV1beta1TokenReview", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReview" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReview" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "authentication.k8s.io", - "version": "v1beta1", - "kind": "TokenReview" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/authorization.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authorization" - ], - "operationId": "getAuthorizationAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/authorization.k8s.io/v1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authorization_v1" - ], - "operationId": "getAuthorizationV1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/authorization.k8s.io/v1/namespaces/{namespace}/localsubjectaccessreviews": { - "post": { - "description": "create a LocalSubjectAccessReview", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authorization_v1" - ], - "operationId": "createAuthorizationV1NamespacedLocalSubjectAccessReview", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.LocalSubjectAccessReview" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.LocalSubjectAccessReview" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "authorization.k8s.io", - "version": "v1", - "kind": "LocalSubjectAccessReview" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/authorization.k8s.io/v1/selfsubjectaccessreviews": { - "post": { - "description": "create a SelfSubjectAccessReview", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authorization_v1" - ], - "operationId": "createAuthorizationV1SelfSubjectAccessReview", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReview" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReview" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "authorization.k8s.io", - "version": "v1", - "kind": "SelfSubjectAccessReview" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/authorization.k8s.io/v1/subjectaccessreviews": { - "post": { - "description": "create a SubjectAccessReview", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authorization_v1" - ], - "operationId": "createAuthorizationV1SubjectAccessReview", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReview" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReview" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "authorization.k8s.io", - "version": "v1", - "kind": "SubjectAccessReview" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/authorization.k8s.io/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authorization_v1beta1" - ], - "operationId": "getAuthorizationV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/authorization.k8s.io/v1beta1/namespaces/{namespace}/localsubjectaccessreviews": { - "post": { - "description": "create a LocalSubjectAccessReview", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authorization_v1beta1" - ], - "operationId": "createAuthorizationV1beta1NamespacedLocalSubjectAccessReview", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.LocalSubjectAccessReview" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.LocalSubjectAccessReview" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "authorization.k8s.io", - "version": "v1beta1", - "kind": "LocalSubjectAccessReview" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/authorization.k8s.io/v1beta1/selfsubjectaccessreviews": { - "post": { - "description": "create a SelfSubjectAccessReview", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authorization_v1beta1" - ], - "operationId": "createAuthorizationV1beta1SelfSubjectAccessReview", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SelfSubjectAccessReview" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SelfSubjectAccessReview" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "authorization.k8s.io", - "version": "v1beta1", - "kind": "SelfSubjectAccessReview" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/authorization.k8s.io/v1beta1/subjectaccessreviews": { - "post": { - "description": "create a SubjectAccessReview", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "authorization_v1beta1" - ], - "operationId": "createAuthorizationV1beta1SubjectAccessReview", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReview" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReview" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "authorization.k8s.io", - "version": "v1beta1", - "kind": "SubjectAccessReview" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/autoscaling/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling" - ], - "operationId": "getAutoscalingAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/autoscaling/v1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "getAutoscalingV1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/autoscaling/v1/horizontalpodautoscalers": { - "get": { - "description": "list or watch objects of kind HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "listAutoscalingV1HorizontalPodAutoscalerForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v1", - "kind": "HorizontalPodAutoscaler" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers": { - "get": { - "description": "list or watch objects of kind HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "listAutoscalingV1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v1", - "kind": "HorizontalPodAutoscaler" - } - }, - "post": { - "description": "create a HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "createAutoscalingV1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v1", - "kind": "HorizontalPodAutoscaler" - } - }, - "delete": { - "description": "delete collection of HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "deleteAutoscalingV1CollectionNamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v1", - "kind": "HorizontalPodAutoscaler" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}": { - "get": { - "description": "read the specified HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "readAutoscalingV1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v1", - "kind": "HorizontalPodAutoscaler" - } - }, - "put": { - "description": "replace the specified HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "replaceAutoscalingV1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v1", - "kind": "HorizontalPodAutoscaler" - } - }, - "delete": { - "description": "delete a HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "deleteAutoscalingV1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v1", - "kind": "HorizontalPodAutoscaler" - } - }, - "patch": { - "description": "partially update the specified HorizontalPodAutoscaler", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "patchAutoscalingV1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v1", - "kind": "HorizontalPodAutoscaler" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the HorizontalPodAutoscaler", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status": { - "get": { - "description": "read status of the specified HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "readAutoscalingV1NamespacedHorizontalPodAutoscalerStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v1", - "kind": "HorizontalPodAutoscaler" - } - }, - "put": { - "description": "replace status of the specified HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "replaceAutoscalingV1NamespacedHorizontalPodAutoscalerStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v1", - "kind": "HorizontalPodAutoscaler" - } - }, - "patch": { - "description": "partially update status of the specified HorizontalPodAutoscaler", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "patchAutoscalingV1NamespacedHorizontalPodAutoscalerStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v1", - "kind": "HorizontalPodAutoscaler" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the HorizontalPodAutoscaler", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/autoscaling/v1/watch/horizontalpodautoscalers": { - "get": { - "description": "watch individual changes to a list of HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "watchAutoscalingV1HorizontalPodAutoscalerListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v1", - "kind": "HorizontalPodAutoscaler" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/autoscaling/v1/watch/namespaces/{namespace}/horizontalpodautoscalers": { - "get": { - "description": "watch individual changes to a list of HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "watchAutoscalingV1NamespacedHorizontalPodAutoscalerList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v1", - "kind": "HorizontalPodAutoscaler" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/autoscaling/v1/watch/namespaces/{namespace}/horizontalpodautoscalers/{name}": { - "get": { - "description": "watch changes to an object of kind HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v1" - ], - "operationId": "watchAutoscalingV1NamespacedHorizontalPodAutoscaler", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v1", - "kind": "HorizontalPodAutoscaler" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the HorizontalPodAutoscaler", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/autoscaling/v2alpha1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2alpha1" - ], - "operationId": "getAutoscalingV2alpha1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/autoscaling/v2alpha1/horizontalpodautoscalers": { - "get": { - "description": "list or watch objects of kind HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2alpha1" - ], - "operationId": "listAutoscalingV2alpha1HorizontalPodAutoscalerForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v2alpha1", - "kind": "HorizontalPodAutoscaler" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/autoscaling/v2alpha1/namespaces/{namespace}/horizontalpodautoscalers": { - "get": { - "description": "list or watch objects of kind HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2alpha1" - ], - "operationId": "listAutoscalingV2alpha1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v2alpha1", - "kind": "HorizontalPodAutoscaler" - } - }, - "post": { - "description": "create a HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2alpha1" - ], - "operationId": "createAutoscalingV2alpha1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v2alpha1", - "kind": "HorizontalPodAutoscaler" - } - }, - "delete": { - "description": "delete collection of HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2alpha1" - ], - "operationId": "deleteAutoscalingV2alpha1CollectionNamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v2alpha1", - "kind": "HorizontalPodAutoscaler" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/autoscaling/v2alpha1/namespaces/{namespace}/horizontalpodautoscalers/{name}": { - "get": { - "description": "read the specified HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2alpha1" - ], - "operationId": "readAutoscalingV2alpha1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v2alpha1", - "kind": "HorizontalPodAutoscaler" - } - }, - "put": { - "description": "replace the specified HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2alpha1" - ], - "operationId": "replaceAutoscalingV2alpha1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v2alpha1", - "kind": "HorizontalPodAutoscaler" - } - }, - "delete": { - "description": "delete a HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2alpha1" - ], - "operationId": "deleteAutoscalingV2alpha1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v2alpha1", - "kind": "HorizontalPodAutoscaler" - } - }, - "patch": { - "description": "partially update the specified HorizontalPodAutoscaler", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2alpha1" - ], - "operationId": "patchAutoscalingV2alpha1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v2alpha1", - "kind": "HorizontalPodAutoscaler" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the HorizontalPodAutoscaler", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/autoscaling/v2alpha1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status": { - "get": { - "description": "read status of the specified HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2alpha1" - ], - "operationId": "readAutoscalingV2alpha1NamespacedHorizontalPodAutoscalerStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v2alpha1", - "kind": "HorizontalPodAutoscaler" - } - }, - "put": { - "description": "replace status of the specified HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2alpha1" - ], - "operationId": "replaceAutoscalingV2alpha1NamespacedHorizontalPodAutoscalerStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v2alpha1", - "kind": "HorizontalPodAutoscaler" - } - }, - "patch": { - "description": "partially update status of the specified HorizontalPodAutoscaler", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2alpha1" - ], - "operationId": "patchAutoscalingV2alpha1NamespacedHorizontalPodAutoscalerStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v2alpha1", - "kind": "HorizontalPodAutoscaler" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the HorizontalPodAutoscaler", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/autoscaling/v2alpha1/watch/horizontalpodautoscalers": { - "get": { - "description": "watch individual changes to a list of HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2alpha1" - ], - "operationId": "watchAutoscalingV2alpha1HorizontalPodAutoscalerListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v2alpha1", - "kind": "HorizontalPodAutoscaler" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/autoscaling/v2alpha1/watch/namespaces/{namespace}/horizontalpodautoscalers": { - "get": { - "description": "watch individual changes to a list of HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2alpha1" - ], - "operationId": "watchAutoscalingV2alpha1NamespacedHorizontalPodAutoscalerList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v2alpha1", - "kind": "HorizontalPodAutoscaler" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/autoscaling/v2alpha1/watch/namespaces/{namespace}/horizontalpodautoscalers/{name}": { - "get": { - "description": "watch changes to an object of kind HorizontalPodAutoscaler", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "autoscaling_v2alpha1" - ], - "operationId": "watchAutoscalingV2alpha1NamespacedHorizontalPodAutoscaler", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "autoscaling", - "version": "v2alpha1", - "kind": "HorizontalPodAutoscaler" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the HorizontalPodAutoscaler", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch" - ], - "operationId": "getBatchAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/batch/v1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "getBatchV1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/batch/v1/jobs": { - "get": { - "description": "list or watch objects of kind Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "listBatchV1JobForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.JobList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v1", - "kind": "Job" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v1/namespaces/{namespace}/jobs": { - "get": { - "description": "list or watch objects of kind Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "listBatchV1NamespacedJob", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.JobList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v1", - "kind": "Job" - } - }, - "post": { - "description": "create a Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "createBatchV1NamespacedJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v1", - "kind": "Job" - } - }, - "delete": { - "description": "delete collection of Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "deleteBatchV1CollectionNamespacedJob", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v1", - "kind": "Job" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/batch/v1/namespaces/{namespace}/jobs/{name}": { - "get": { - "description": "read the specified Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "readBatchV1NamespacedJob", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v1", - "kind": "Job" - } - }, - "put": { - "description": "replace the specified Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "replaceBatchV1NamespacedJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v1", - "kind": "Job" - } - }, - "delete": { - "description": "delete a Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "deleteBatchV1NamespacedJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v1", - "kind": "Job" - } - }, - "patch": { - "description": "partially update the specified Job", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "patchBatchV1NamespacedJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v1", - "kind": "Job" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Job", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/batch/v1/namespaces/{namespace}/jobs/{name}/status": { - "get": { - "description": "read status of the specified Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "readBatchV1NamespacedJobStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v1", - "kind": "Job" - } - }, - "put": { - "description": "replace status of the specified Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "replaceBatchV1NamespacedJobStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v1", - "kind": "Job" - } - }, - "patch": { - "description": "partially update status of the specified Job", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "patchBatchV1NamespacedJobStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v1", - "kind": "Job" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Job", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/batch/v1/watch/jobs": { - "get": { - "description": "watch individual changes to a list of Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "watchBatchV1JobListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v1", - "kind": "Job" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v1/watch/namespaces/{namespace}/jobs": { - "get": { - "description": "watch individual changes to a list of Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "watchBatchV1NamespacedJobList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v1", - "kind": "Job" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v1/watch/namespaces/{namespace}/jobs/{name}": { - "get": { - "description": "watch changes to an object of kind Job", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v1" - ], - "operationId": "watchBatchV1NamespacedJob", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v1", - "kind": "Job" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Job", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v2alpha1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "getBatchV2alpha1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/batch/v2alpha1/cronjobs": { - "get": { - "description": "list or watch objects of kind CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "listBatchV2alpha1CronJobForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "CronJob" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v2alpha1/namespaces/{namespace}/cronjobs": { - "get": { - "description": "list or watch objects of kind CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "listBatchV2alpha1NamespacedCronJob", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "CronJob" - } - }, - "post": { - "description": "create a CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "createBatchV2alpha1NamespacedCronJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "CronJob" - } - }, - "delete": { - "description": "delete collection of CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "deleteBatchV2alpha1CollectionNamespacedCronJob", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "CronJob" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/batch/v2alpha1/namespaces/{namespace}/cronjobs/{name}": { - "get": { - "description": "read the specified CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "readBatchV2alpha1NamespacedCronJob", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "CronJob" - } - }, - "put": { - "description": "replace the specified CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "replaceBatchV2alpha1NamespacedCronJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "CronJob" - } - }, - "delete": { - "description": "delete a CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "deleteBatchV2alpha1NamespacedCronJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "CronJob" - } - }, - "patch": { - "description": "partially update the specified CronJob", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "patchBatchV2alpha1NamespacedCronJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "CronJob" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the CronJob", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/batch/v2alpha1/namespaces/{namespace}/cronjobs/{name}/status": { - "get": { - "description": "read status of the specified CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "readBatchV2alpha1NamespacedCronJobStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "CronJob" - } - }, - "put": { - "description": "replace status of the specified CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "replaceBatchV2alpha1NamespacedCronJobStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "CronJob" - } - }, - "patch": { - "description": "partially update status of the specified CronJob", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "patchBatchV2alpha1NamespacedCronJobStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "CronJob" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the CronJob", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/batch/v2alpha1/namespaces/{namespace}/scheduledjobs": { - "get": { - "description": "list or watch objects of kind ScheduledJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "listBatchV2alpha1NamespacedScheduledJob", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "ScheduledJob" - } - }, - "post": { - "description": "create a ScheduledJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "createBatchV2alpha1NamespacedScheduledJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "ScheduledJob" - } - }, - "delete": { - "description": "delete collection of ScheduledJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "deleteBatchV2alpha1CollectionNamespacedScheduledJob", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "ScheduledJob" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/batch/v2alpha1/namespaces/{namespace}/scheduledjobs/{name}": { - "get": { - "description": "read the specified ScheduledJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "readBatchV2alpha1NamespacedScheduledJob", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "ScheduledJob" - } - }, - "put": { - "description": "replace the specified ScheduledJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "replaceBatchV2alpha1NamespacedScheduledJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "ScheduledJob" - } - }, - "delete": { - "description": "delete a ScheduledJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "deleteBatchV2alpha1NamespacedScheduledJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "ScheduledJob" - } - }, - "patch": { - "description": "partially update the specified ScheduledJob", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "patchBatchV2alpha1NamespacedScheduledJob", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "ScheduledJob" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ScheduledJob", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/batch/v2alpha1/namespaces/{namespace}/scheduledjobs/{name}/status": { - "get": { - "description": "read status of the specified ScheduledJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "readBatchV2alpha1NamespacedScheduledJobStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "ScheduledJob" - } - }, - "put": { - "description": "replace status of the specified ScheduledJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "replaceBatchV2alpha1NamespacedScheduledJobStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "ScheduledJob" - } - }, - "patch": { - "description": "partially update status of the specified ScheduledJob", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "patchBatchV2alpha1NamespacedScheduledJobStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "ScheduledJob" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ScheduledJob", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/batch/v2alpha1/scheduledjobs": { - "get": { - "description": "list or watch objects of kind ScheduledJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "listBatchV2alpha1ScheduledJobForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "ScheduledJob" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v2alpha1/watch/cronjobs": { - "get": { - "description": "watch individual changes to a list of CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "watchBatchV2alpha1CronJobListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "CronJob" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v2alpha1/watch/namespaces/{namespace}/cronjobs": { - "get": { - "description": "watch individual changes to a list of CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "watchBatchV2alpha1NamespacedCronJobList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "CronJob" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v2alpha1/watch/namespaces/{namespace}/cronjobs/{name}": { - "get": { - "description": "watch changes to an object of kind CronJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "watchBatchV2alpha1NamespacedCronJob", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "CronJob" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the CronJob", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v2alpha1/watch/namespaces/{namespace}/scheduledjobs": { - "get": { - "description": "watch individual changes to a list of ScheduledJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "watchBatchV2alpha1NamespacedScheduledJobList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "ScheduledJob" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v2alpha1/watch/namespaces/{namespace}/scheduledjobs/{name}": { - "get": { - "description": "watch changes to an object of kind ScheduledJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "watchBatchV2alpha1NamespacedScheduledJob", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "ScheduledJob" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ScheduledJob", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/batch/v2alpha1/watch/scheduledjobs": { - "get": { - "description": "watch individual changes to a list of ScheduledJob", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "batch_v2alpha1" - ], - "operationId": "watchBatchV2alpha1ScheduledJobListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "batch", - "version": "v2alpha1", - "kind": "ScheduledJob" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/certificates.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates" - ], - "operationId": "getCertificatesAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/certificates.k8s.io/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "getCertificatesV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/certificates.k8s.io/v1beta1/certificatesigningrequests": { - "get": { - "description": "list or watch objects of kind CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "listCertificatesV1beta1CertificateSigningRequest", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "version": "v1beta1", - "kind": "CertificateSigningRequest" - } - }, - "post": { - "description": "create a CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "createCertificatesV1beta1CertificateSigningRequest", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "version": "v1beta1", - "kind": "CertificateSigningRequest" - } - }, - "delete": { - "description": "delete collection of CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "deleteCertificatesV1beta1CollectionCertificateSigningRequest", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "version": "v1beta1", - "kind": "CertificateSigningRequest" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}": { - "get": { - "description": "read the specified CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "readCertificatesV1beta1CertificateSigningRequest", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "version": "v1beta1", - "kind": "CertificateSigningRequest" - } - }, - "put": { - "description": "replace the specified CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "replaceCertificatesV1beta1CertificateSigningRequest", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "version": "v1beta1", - "kind": "CertificateSigningRequest" - } - }, - "delete": { - "description": "delete a CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "deleteCertificatesV1beta1CertificateSigningRequest", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "version": "v1beta1", - "kind": "CertificateSigningRequest" - } - }, - "patch": { - "description": "partially update the specified CertificateSigningRequest", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "patchCertificatesV1beta1CertificateSigningRequest", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "version": "v1beta1", - "kind": "CertificateSigningRequest" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the CertificateSigningRequest", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}/approval": { - "put": { - "description": "replace approval of the specified CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "replaceCertificatesV1beta1CertificateSigningRequestApproval", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "version": "v1beta1", - "kind": "CertificateSigningRequest" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the CertificateSigningRequest", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}/status": { - "put": { - "description": "replace status of the specified CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "replaceCertificatesV1beta1CertificateSigningRequestStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "version": "v1beta1", - "kind": "CertificateSigningRequest" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the CertificateSigningRequest", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/certificates.k8s.io/v1beta1/watch/certificatesigningrequests": { - "get": { - "description": "watch individual changes to a list of CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "watchCertificatesV1beta1CertificateSigningRequestList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "version": "v1beta1", - "kind": "CertificateSigningRequest" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/certificates.k8s.io/v1beta1/watch/certificatesigningrequests/{name}": { - "get": { - "description": "watch changes to an object of kind CertificateSigningRequest", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "certificates_v1beta1" - ], - "operationId": "watchCertificatesV1beta1CertificateSigningRequest", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "certificates.k8s.io", - "version": "v1beta1", - "kind": "CertificateSigningRequest" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the CertificateSigningRequest", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions" - ], - "operationId": "getExtensionsAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/extensions/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "getExtensionsV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/extensions/v1beta1/daemonsets": { - "get": { - "description": "list or watch objects of kind DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1DaemonSetForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "DaemonSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/deployments": { - "get": { - "description": "list or watch objects of kind Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1DeploymentForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/ingresses": { - "get": { - "description": "list or watch objects of kind Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1IngressForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Ingress" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets": { - "get": { - "description": "list or watch objects of kind DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1NamespacedDaemonSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "DaemonSet" - } - }, - "post": { - "description": "create a DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "createExtensionsV1beta1NamespacedDaemonSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "DaemonSet" - } - }, - "delete": { - "description": "delete collection of DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1CollectionNamespacedDaemonSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "DaemonSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}": { - "get": { - "description": "read the specified DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedDaemonSet", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "DaemonSet" - } - }, - "put": { - "description": "replace the specified DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedDaemonSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "DaemonSet" - } - }, - "delete": { - "description": "delete a DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1NamespacedDaemonSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "DaemonSet" - } - }, - "patch": { - "description": "partially update the specified DaemonSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedDaemonSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "DaemonSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the DaemonSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}/status": { - "get": { - "description": "read status of the specified DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedDaemonSetStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "DaemonSet" - } - }, - "put": { - "description": "replace status of the specified DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedDaemonSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "DaemonSet" - } - }, - "patch": { - "description": "partially update status of the specified DaemonSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedDaemonSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "DaemonSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the DaemonSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/deployments": { - "get": { - "description": "list or watch objects of kind Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1NamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "post": { - "description": "create a Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "createExtensionsV1beta1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "delete": { - "description": "delete collection of Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1CollectionNamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}": { - "get": { - "description": "read the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedDeployment", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "put": { - "description": "replace the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "delete": { - "description": "delete a Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "patch": { - "description": "partially update the specified Deployment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedDeployment", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/rollback": { - "post": { - "description": "create rollback of a DeploymentRollback", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "createExtensionsV1beta1NamespacedDeploymentRollbackRollback", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentRollback" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentRollback" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "DeploymentRollback" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the DeploymentRollback", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scale": { - "get": { - "description": "read scale of the specified Scale", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedDeploymentsScale", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Scale" - } - }, - "put": { - "description": "replace scale of the specified Scale", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedDeploymentsScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Scale" - } - }, - "patch": { - "description": "partially update scale of the specified Scale", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedDeploymentsScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Scale" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Scale", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/status": { - "get": { - "description": "read status of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedDeploymentStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "put": { - "description": "replace status of the specified Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedDeploymentStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "patch": { - "description": "partially update status of the specified Deployment", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedDeploymentStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/ingresses": { - "get": { - "description": "list or watch objects of kind Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1NamespacedIngress", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Ingress" - } - }, - "post": { - "description": "create an Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "createExtensionsV1beta1NamespacedIngress", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Ingress" - } - }, - "delete": { - "description": "delete collection of Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1CollectionNamespacedIngress", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Ingress" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}": { - "get": { - "description": "read the specified Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedIngress", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Ingress" - } - }, - "put": { - "description": "replace the specified Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedIngress", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Ingress" - } - }, - "delete": { - "description": "delete an Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1NamespacedIngress", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Ingress" - } - }, - "patch": { - "description": "partially update the specified Ingress", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedIngress", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Ingress" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Ingress", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}/status": { - "get": { - "description": "read status of the specified Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedIngressStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Ingress" - } - }, - "put": { - "description": "replace status of the specified Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedIngressStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Ingress" - } - }, - "patch": { - "description": "partially update status of the specified Ingress", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedIngressStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Ingress" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Ingress", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies": { - "get": { - "description": "list or watch objects of kind NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1NamespacedNetworkPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "NetworkPolicy" - } - }, - "post": { - "description": "create a NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "createExtensionsV1beta1NamespacedNetworkPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "NetworkPolicy" - } - }, - "delete": { - "description": "delete collection of NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1CollectionNamespacedNetworkPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "NetworkPolicy" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies/{name}": { - "get": { - "description": "read the specified NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedNetworkPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "NetworkPolicy" - } - }, - "put": { - "description": "replace the specified NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedNetworkPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "NetworkPolicy" - } - }, - "delete": { - "description": "delete a NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1NamespacedNetworkPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "NetworkPolicy" - } - }, - "patch": { - "description": "partially update the specified NetworkPolicy", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedNetworkPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "NetworkPolicy" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the NetworkPolicy", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/replicasets": { - "get": { - "description": "list or watch objects of kind ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1NamespacedReplicaSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ReplicaSet" - } - }, - "post": { - "description": "create a ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "createExtensionsV1beta1NamespacedReplicaSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ReplicaSet" - } - }, - "delete": { - "description": "delete collection of ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1CollectionNamespacedReplicaSet", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ReplicaSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}": { - "get": { - "description": "read the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedReplicaSet", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ReplicaSet" - } - }, - "put": { - "description": "replace the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedReplicaSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ReplicaSet" - } - }, - "delete": { - "description": "delete a ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1NamespacedReplicaSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ReplicaSet" - } - }, - "patch": { - "description": "partially update the specified ReplicaSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedReplicaSet", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ReplicaSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicaSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/scale": { - "get": { - "description": "read scale of the specified Scale", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedReplicasetsScale", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Scale" - } - }, - "put": { - "description": "replace scale of the specified Scale", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedReplicasetsScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Scale" - } - }, - "patch": { - "description": "partially update scale of the specified Scale", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedReplicasetsScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Scale" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Scale", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/status": { - "get": { - "description": "read status of the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedReplicaSetStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ReplicaSet" - } - }, - "put": { - "description": "replace status of the specified ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedReplicaSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ReplicaSet" - } - }, - "patch": { - "description": "partially update status of the specified ReplicaSet", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedReplicaSetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ReplicaSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicaSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/namespaces/{namespace}/replicationcontrollers/{name}/scale": { - "get": { - "description": "read scale of the specified Scale", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1NamespacedReplicationcontrollersScale", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Scale" - } - }, - "put": { - "description": "replace scale of the specified Scale", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1NamespacedReplicationcontrollersScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Scale" - } - }, - "patch": { - "description": "partially update scale of the specified Scale", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1NamespacedReplicationcontrollersScale", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Scale" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Scale", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/networkpolicies": { - "get": { - "description": "list or watch objects of kind NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1NetworkPolicyForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "NetworkPolicy" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/podsecuritypolicies": { - "get": { - "description": "list or watch objects of kind PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1PodSecurityPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicyList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "PodSecurityPolicy" - } - }, - "post": { - "description": "create a PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "createExtensionsV1beta1PodSecurityPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "PodSecurityPolicy" - } - }, - "delete": { - "description": "delete collection of PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1CollectionPodSecurityPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "PodSecurityPolicy" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/podsecuritypolicies/{name}": { - "get": { - "description": "read the specified PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1PodSecurityPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "PodSecurityPolicy" - } - }, - "put": { - "description": "replace the specified PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1PodSecurityPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "PodSecurityPolicy" - } - }, - "delete": { - "description": "delete a PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1PodSecurityPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "PodSecurityPolicy" - } - }, - "patch": { - "description": "partially update the specified PodSecurityPolicy", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1PodSecurityPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "PodSecurityPolicy" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodSecurityPolicy", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/replicasets": { - "get": { - "description": "list or watch objects of kind ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1ReplicaSetForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ReplicaSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/thirdpartyresources": { - "get": { - "description": "list or watch objects of kind ThirdPartyResource", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "listExtensionsV1beta1ThirdPartyResource", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ThirdPartyResource" - } - }, - "post": { - "description": "create a ThirdPartyResource", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "createExtensionsV1beta1ThirdPartyResource", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResource" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResource" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ThirdPartyResource" - } - }, - "delete": { - "description": "delete collection of ThirdPartyResource", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1CollectionThirdPartyResource", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ThirdPartyResource" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/thirdpartyresources/{name}": { - "get": { - "description": "read the specified ThirdPartyResource", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "readExtensionsV1beta1ThirdPartyResource", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResource" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ThirdPartyResource" - } - }, - "put": { - "description": "replace the specified ThirdPartyResource", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "replaceExtensionsV1beta1ThirdPartyResource", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResource" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResource" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ThirdPartyResource" - } - }, - "delete": { - "description": "delete a ThirdPartyResource", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "deleteExtensionsV1beta1ThirdPartyResource", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ThirdPartyResource" - } - }, - "patch": { - "description": "partially update the specified ThirdPartyResource", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "patchExtensionsV1beta1ThirdPartyResource", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResource" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ThirdPartyResource" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ThirdPartyResource", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/daemonsets": { - "get": { - "description": "watch individual changes to a list of DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1DaemonSetListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "DaemonSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/deployments": { - "get": { - "description": "watch individual changes to a list of Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1DeploymentListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/ingresses": { - "get": { - "description": "watch individual changes to a list of Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1IngressListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Ingress" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets": { - "get": { - "description": "watch individual changes to a list of DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedDaemonSetList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "DaemonSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets/{name}": { - "get": { - "description": "watch changes to an object of kind DaemonSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedDaemonSet", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "DaemonSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the DaemonSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments": { - "get": { - "description": "watch individual changes to a list of Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedDeploymentList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments/{name}": { - "get": { - "description": "watch changes to an object of kind Deployment", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedDeployment", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Deployment" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Deployment", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/ingresses": { - "get": { - "description": "watch individual changes to a list of Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedIngressList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Ingress" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/ingresses/{name}": { - "get": { - "description": "watch changes to an object of kind Ingress", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedIngress", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "Ingress" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Ingress", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/networkpolicies": { - "get": { - "description": "watch individual changes to a list of NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedNetworkPolicyList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "NetworkPolicy" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/networkpolicies/{name}": { - "get": { - "description": "watch changes to an object of kind NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedNetworkPolicy", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "NetworkPolicy" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the NetworkPolicy", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets": { - "get": { - "description": "watch individual changes to a list of ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedReplicaSetList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ReplicaSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets/{name}": { - "get": { - "description": "watch changes to an object of kind ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NamespacedReplicaSet", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ReplicaSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ReplicaSet", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/networkpolicies": { - "get": { - "description": "watch individual changes to a list of NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1NetworkPolicyListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "NetworkPolicy" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/podsecuritypolicies": { - "get": { - "description": "watch individual changes to a list of PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1PodSecurityPolicyList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "PodSecurityPolicy" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/podsecuritypolicies/{name}": { - "get": { - "description": "watch changes to an object of kind PodSecurityPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1PodSecurityPolicy", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "PodSecurityPolicy" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodSecurityPolicy", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/replicasets": { - "get": { - "description": "watch individual changes to a list of ReplicaSet", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1ReplicaSetListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ReplicaSet" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/thirdpartyresources": { - "get": { - "description": "watch individual changes to a list of ThirdPartyResource", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1ThirdPartyResourceList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ThirdPartyResource" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/extensions/v1beta1/watch/thirdpartyresources/{name}": { - "get": { - "description": "watch changes to an object of kind ThirdPartyResource", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "extensions_v1beta1" - ], - "operationId": "watchExtensionsV1beta1ThirdPartyResource", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "extensions", - "version": "v1beta1", - "kind": "ThirdPartyResource" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ThirdPartyResource", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/networking.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking" - ], - "operationId": "getNetworkingAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/networking.k8s.io/v1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "getNetworkingV1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies": { - "get": { - "description": "list or watch objects of kind NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "listNetworkingV1NamespacedNetworkPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "version": "v1", - "kind": "NetworkPolicy" - } - }, - "post": { - "description": "create a NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "createNetworkingV1NamespacedNetworkPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "version": "v1", - "kind": "NetworkPolicy" - } - }, - "delete": { - "description": "delete collection of NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "deleteNetworkingV1CollectionNamespacedNetworkPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "version": "v1", - "kind": "NetworkPolicy" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}": { - "get": { - "description": "read the specified NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "readNetworkingV1NamespacedNetworkPolicy", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "version": "v1", - "kind": "NetworkPolicy" - } - }, - "put": { - "description": "replace the specified NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "replaceNetworkingV1NamespacedNetworkPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "version": "v1", - "kind": "NetworkPolicy" - } - }, - "delete": { - "description": "delete a NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "deleteNetworkingV1NamespacedNetworkPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "version": "v1", - "kind": "NetworkPolicy" - } - }, - "patch": { - "description": "partially update the specified NetworkPolicy", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "patchNetworkingV1NamespacedNetworkPolicy", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "version": "v1", - "kind": "NetworkPolicy" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the NetworkPolicy", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/networking.k8s.io/v1/networkpolicies": { - "get": { - "description": "list or watch objects of kind NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "listNetworkingV1NetworkPolicyForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "version": "v1", - "kind": "NetworkPolicy" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/networking.k8s.io/v1/watch/namespaces/{namespace}/networkpolicies": { - "get": { - "description": "watch individual changes to a list of NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "watchNetworkingV1NamespacedNetworkPolicyList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "version": "v1", - "kind": "NetworkPolicy" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/networking.k8s.io/v1/watch/namespaces/{namespace}/networkpolicies/{name}": { - "get": { - "description": "watch changes to an object of kind NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "watchNetworkingV1NamespacedNetworkPolicy", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "version": "v1", - "kind": "NetworkPolicy" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the NetworkPolicy", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/networking.k8s.io/v1/watch/networkpolicies": { - "get": { - "description": "watch individual changes to a list of NetworkPolicy", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "networking_v1" - ], - "operationId": "watchNetworkingV1NetworkPolicyListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "networking.k8s.io", - "version": "v1", - "kind": "NetworkPolicy" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/policy/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy" - ], - "operationId": "getPolicyAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/policy/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "getPolicyV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets": { - "get": { - "description": "list or watch objects of kind PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "listPolicyV1beta1NamespacedPodDisruptionBudget", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "policy", - "version": "v1beta1", - "kind": "PodDisruptionBudget" - } - }, - "post": { - "description": "create a PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "createPolicyV1beta1NamespacedPodDisruptionBudget", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "policy", - "version": "v1beta1", - "kind": "PodDisruptionBudget" - } - }, - "delete": { - "description": "delete collection of PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "deletePolicyV1beta1CollectionNamespacedPodDisruptionBudget", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "policy", - "version": "v1beta1", - "kind": "PodDisruptionBudget" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name}": { - "get": { - "description": "read the specified PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "readPolicyV1beta1NamespacedPodDisruptionBudget", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "policy", - "version": "v1beta1", - "kind": "PodDisruptionBudget" - } - }, - "put": { - "description": "replace the specified PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "replacePolicyV1beta1NamespacedPodDisruptionBudget", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "policy", - "version": "v1beta1", - "kind": "PodDisruptionBudget" - } - }, - "delete": { - "description": "delete a PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "deletePolicyV1beta1NamespacedPodDisruptionBudget", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "policy", - "version": "v1beta1", - "kind": "PodDisruptionBudget" - } - }, - "patch": { - "description": "partially update the specified PodDisruptionBudget", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "patchPolicyV1beta1NamespacedPodDisruptionBudget", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "policy", - "version": "v1beta1", - "kind": "PodDisruptionBudget" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodDisruptionBudget", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name}/status": { - "get": { - "description": "read status of the specified PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "readPolicyV1beta1NamespacedPodDisruptionBudgetStatus", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "policy", - "version": "v1beta1", - "kind": "PodDisruptionBudget" - } - }, - "put": { - "description": "replace status of the specified PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "replacePolicyV1beta1NamespacedPodDisruptionBudgetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "policy", - "version": "v1beta1", - "kind": "PodDisruptionBudget" - } - }, - "patch": { - "description": "partially update status of the specified PodDisruptionBudget", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "patchPolicyV1beta1NamespacedPodDisruptionBudgetStatus", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "policy", - "version": "v1beta1", - "kind": "PodDisruptionBudget" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodDisruptionBudget", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/policy/v1beta1/poddisruptionbudgets": { - "get": { - "description": "list or watch objects of kind PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "listPolicyV1beta1PodDisruptionBudgetForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "policy", - "version": "v1beta1", - "kind": "PodDisruptionBudget" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/policy/v1beta1/watch/namespaces/{namespace}/poddisruptionbudgets": { - "get": { - "description": "watch individual changes to a list of PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "watchPolicyV1beta1NamespacedPodDisruptionBudgetList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "policy", - "version": "v1beta1", - "kind": "PodDisruptionBudget" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/policy/v1beta1/watch/namespaces/{namespace}/poddisruptionbudgets/{name}": { - "get": { - "description": "watch changes to an object of kind PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "watchPolicyV1beta1NamespacedPodDisruptionBudget", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "policy", - "version": "v1beta1", - "kind": "PodDisruptionBudget" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodDisruptionBudget", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/policy/v1beta1/watch/poddisruptionbudgets": { - "get": { - "description": "watch individual changes to a list of PodDisruptionBudget", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "policy_v1beta1" - ], - "operationId": "watchPolicyV1beta1PodDisruptionBudgetListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "policy", - "version": "v1beta1", - "kind": "PodDisruptionBudget" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization" - ], - "operationId": "getRbacAuthorizationAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "getRbacAuthorizationV1alpha1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/clusterrolebindings": { - "get": { - "description": "list or watch objects of kind ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "listRbacAuthorizationV1alpha1ClusterRoleBinding", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBindingList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRoleBinding" - } - }, - "post": { - "description": "create a ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "createRbacAuthorizationV1alpha1ClusterRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRoleBinding" - } - }, - "delete": { - "description": "delete collection of ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "deleteRbacAuthorizationV1alpha1CollectionClusterRoleBinding", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/clusterrolebindings/{name}": { - "get": { - "description": "read the specified ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "readRbacAuthorizationV1alpha1ClusterRoleBinding", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRoleBinding" - } - }, - "put": { - "description": "replace the specified ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "replaceRbacAuthorizationV1alpha1ClusterRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRoleBinding" - } - }, - "delete": { - "description": "delete a ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "deleteRbacAuthorizationV1alpha1ClusterRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRoleBinding" - } - }, - "patch": { - "description": "partially update the specified ClusterRoleBinding", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "patchRbacAuthorizationV1alpha1ClusterRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ClusterRoleBinding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/clusterroles": { - "get": { - "description": "list or watch objects of kind ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "listRbacAuthorizationV1alpha1ClusterRole", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRole" - } - }, - "post": { - "description": "create a ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "createRbacAuthorizationV1alpha1ClusterRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRole" - } - }, - "delete": { - "description": "delete collection of ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "deleteRbacAuthorizationV1alpha1CollectionClusterRole", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRole" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/clusterroles/{name}": { - "get": { - "description": "read the specified ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "readRbacAuthorizationV1alpha1ClusterRole", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRole" - } - }, - "put": { - "description": "replace the specified ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "replaceRbacAuthorizationV1alpha1ClusterRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRole" - } - }, - "delete": { - "description": "delete a ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "deleteRbacAuthorizationV1alpha1ClusterRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRole" - } - }, - "patch": { - "description": "partially update the specified ClusterRole", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "patchRbacAuthorizationV1alpha1ClusterRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRole" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ClusterRole", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/rolebindings": { - "get": { - "description": "list or watch objects of kind RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "listRbacAuthorizationV1alpha1NamespacedRoleBinding", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBindingList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "RoleBinding" - } - }, - "post": { - "description": "create a RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "createRbacAuthorizationV1alpha1NamespacedRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "RoleBinding" - } - }, - "delete": { - "description": "delete collection of RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "deleteRbacAuthorizationV1alpha1CollectionNamespacedRoleBinding", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "RoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/rolebindings/{name}": { - "get": { - "description": "read the specified RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "readRbacAuthorizationV1alpha1NamespacedRoleBinding", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "RoleBinding" - } - }, - "put": { - "description": "replace the specified RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "replaceRbacAuthorizationV1alpha1NamespacedRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "RoleBinding" - } - }, - "delete": { - "description": "delete a RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "deleteRbacAuthorizationV1alpha1NamespacedRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "RoleBinding" - } - }, - "patch": { - "description": "partially update the specified RoleBinding", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "patchRbacAuthorizationV1alpha1NamespacedRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "RoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the RoleBinding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/roles": { - "get": { - "description": "list or watch objects of kind Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "listRbacAuthorizationV1alpha1NamespacedRole", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "Role" - } - }, - "post": { - "description": "create a Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "createRbacAuthorizationV1alpha1NamespacedRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "Role" - } - }, - "delete": { - "description": "delete collection of Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "deleteRbacAuthorizationV1alpha1CollectionNamespacedRole", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "Role" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/roles/{name}": { - "get": { - "description": "read the specified Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "readRbacAuthorizationV1alpha1NamespacedRole", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "Role" - } - }, - "put": { - "description": "replace the specified Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "replaceRbacAuthorizationV1alpha1NamespacedRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "Role" - } - }, - "delete": { - "description": "delete a Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "deleteRbacAuthorizationV1alpha1NamespacedRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "Role" - } - }, - "patch": { - "description": "partially update the specified Role", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "patchRbacAuthorizationV1alpha1NamespacedRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "Role" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Role", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/rolebindings": { - "get": { - "description": "list or watch objects of kind RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "listRbacAuthorizationV1alpha1RoleBindingForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBindingList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "RoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/roles": { - "get": { - "description": "list or watch objects of kind Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "listRbacAuthorizationV1alpha1RoleForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "Role" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/watch/clusterrolebindings": { - "get": { - "description": "watch individual changes to a list of ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "watchRbacAuthorizationV1alpha1ClusterRoleBindingList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/watch/clusterrolebindings/{name}": { - "get": { - "description": "watch changes to an object of kind ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "watchRbacAuthorizationV1alpha1ClusterRoleBinding", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ClusterRoleBinding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/watch/clusterroles": { - "get": { - "description": "watch individual changes to a list of ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "watchRbacAuthorizationV1alpha1ClusterRoleList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRole" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/watch/clusterroles/{name}": { - "get": { - "description": "watch changes to an object of kind ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "watchRbacAuthorizationV1alpha1ClusterRole", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRole" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ClusterRole", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/watch/namespaces/{namespace}/rolebindings": { - "get": { - "description": "watch individual changes to a list of RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "watchRbacAuthorizationV1alpha1NamespacedRoleBindingList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "RoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/watch/namespaces/{namespace}/rolebindings/{name}": { - "get": { - "description": "watch changes to an object of kind RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "watchRbacAuthorizationV1alpha1NamespacedRoleBinding", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "RoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the RoleBinding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/watch/namespaces/{namespace}/roles": { - "get": { - "description": "watch individual changes to a list of Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "watchRbacAuthorizationV1alpha1NamespacedRoleList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "Role" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/watch/namespaces/{namespace}/roles/{name}": { - "get": { - "description": "watch changes to an object of kind Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "watchRbacAuthorizationV1alpha1NamespacedRole", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "Role" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Role", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/watch/rolebindings": { - "get": { - "description": "watch individual changes to a list of RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "watchRbacAuthorizationV1alpha1RoleBindingListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "RoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1alpha1/watch/roles": { - "get": { - "description": "watch individual changes to a list of Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1alpha1" - ], - "operationId": "watchRbacAuthorizationV1alpha1RoleListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "Role" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "getRbacAuthorizationV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings": { - "get": { - "description": "list or watch objects of kind ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "listRbacAuthorizationV1beta1ClusterRoleBinding", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBindingList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRoleBinding" - } - }, - "post": { - "description": "create a ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "createRbacAuthorizationV1beta1ClusterRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRoleBinding" - } - }, - "delete": { - "description": "delete collection of ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "deleteRbacAuthorizationV1beta1CollectionClusterRoleBinding", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings/{name}": { - "get": { - "description": "read the specified ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "readRbacAuthorizationV1beta1ClusterRoleBinding", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRoleBinding" - } - }, - "put": { - "description": "replace the specified ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "replaceRbacAuthorizationV1beta1ClusterRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRoleBinding" - } - }, - "delete": { - "description": "delete a ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "deleteRbacAuthorizationV1beta1ClusterRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRoleBinding" - } - }, - "patch": { - "description": "partially update the specified ClusterRoleBinding", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "patchRbacAuthorizationV1beta1ClusterRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ClusterRoleBinding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/clusterroles": { - "get": { - "description": "list or watch objects of kind ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "listRbacAuthorizationV1beta1ClusterRole", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRole" - } - }, - "post": { - "description": "create a ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "createRbacAuthorizationV1beta1ClusterRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRole" - } - }, - "delete": { - "description": "delete collection of ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "deleteRbacAuthorizationV1beta1CollectionClusterRole", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRole" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/clusterroles/{name}": { - "get": { - "description": "read the specified ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "readRbacAuthorizationV1beta1ClusterRole", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRole" - } - }, - "put": { - "description": "replace the specified ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "replaceRbacAuthorizationV1beta1ClusterRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRole" - } - }, - "delete": { - "description": "delete a ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "deleteRbacAuthorizationV1beta1ClusterRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRole" - } - }, - "patch": { - "description": "partially update the specified ClusterRole", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "patchRbacAuthorizationV1beta1ClusterRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRole" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the ClusterRole", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings": { - "get": { - "description": "list or watch objects of kind RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "listRbacAuthorizationV1beta1NamespacedRoleBinding", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBindingList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "RoleBinding" - } - }, - "post": { - "description": "create a RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "createRbacAuthorizationV1beta1NamespacedRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "RoleBinding" - } - }, - "delete": { - "description": "delete collection of RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "deleteRbacAuthorizationV1beta1CollectionNamespacedRoleBinding", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "RoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings/{name}": { - "get": { - "description": "read the specified RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "readRbacAuthorizationV1beta1NamespacedRoleBinding", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "RoleBinding" - } - }, - "put": { - "description": "replace the specified RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "replaceRbacAuthorizationV1beta1NamespacedRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "RoleBinding" - } - }, - "delete": { - "description": "delete a RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "deleteRbacAuthorizationV1beta1NamespacedRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "RoleBinding" - } - }, - "patch": { - "description": "partially update the specified RoleBinding", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "patchRbacAuthorizationV1beta1NamespacedRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "RoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the RoleBinding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles": { - "get": { - "description": "list or watch objects of kind Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "listRbacAuthorizationV1beta1NamespacedRole", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "Role" - } - }, - "post": { - "description": "create a Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "createRbacAuthorizationV1beta1NamespacedRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "Role" - } - }, - "delete": { - "description": "delete collection of Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "deleteRbacAuthorizationV1beta1CollectionNamespacedRole", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "Role" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles/{name}": { - "get": { - "description": "read the specified Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "readRbacAuthorizationV1beta1NamespacedRole", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "Role" - } - }, - "put": { - "description": "replace the specified Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "replaceRbacAuthorizationV1beta1NamespacedRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "Role" - } - }, - "delete": { - "description": "delete a Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "deleteRbacAuthorizationV1beta1NamespacedRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "Role" - } - }, - "patch": { - "description": "partially update the specified Role", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "patchRbacAuthorizationV1beta1NamespacedRole", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "Role" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the Role", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/rolebindings": { - "get": { - "description": "list or watch objects of kind RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "listRbacAuthorizationV1beta1RoleBindingForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBindingList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "RoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/roles": { - "get": { - "description": "list or watch objects of kind Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "listRbacAuthorizationV1beta1RoleForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "Role" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolebindings": { - "get": { - "description": "watch individual changes to a list of ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1ClusterRoleBindingList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolebindings/{name}": { - "get": { - "description": "watch changes to an object of kind ClusterRoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1ClusterRoleBinding", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ClusterRoleBinding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterroles": { - "get": { - "description": "watch individual changes to a list of ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1ClusterRoleList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRole" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterroles/{name}": { - "get": { - "description": "watch changes to an object of kind ClusterRole", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1ClusterRole", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRole" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the ClusterRole", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/rolebindings": { - "get": { - "description": "watch individual changes to a list of RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1NamespacedRoleBindingList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "RoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/rolebindings/{name}": { - "get": { - "description": "watch changes to an object of kind RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1NamespacedRoleBinding", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "RoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the RoleBinding", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/roles": { - "get": { - "description": "watch individual changes to a list of Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1NamespacedRoleList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "Role" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/roles/{name}": { - "get": { - "description": "watch changes to an object of kind Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1NamespacedRole", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "Role" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the Role", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/rolebindings": { - "get": { - "description": "watch individual changes to a list of RoleBinding", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1RoleBindingListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "RoleBinding" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/rbac.authorization.k8s.io/v1beta1/watch/roles": { - "get": { - "description": "watch individual changes to a list of Role", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "rbacAuthorization_v1beta1" - ], - "operationId": "watchRbacAuthorizationV1beta1RoleListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "Role" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/settings.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "settings" - ], - "operationId": "getSettingsAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/settings.k8s.io/v1alpha1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "settings_v1alpha1" - ], - "operationId": "getSettingsV1alpha1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/settings.k8s.io/v1alpha1/namespaces/{namespace}/podpresets": { - "get": { - "description": "list or watch objects of kind PodPreset", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "settings_v1alpha1" - ], - "operationId": "listSettingsV1alpha1NamespacedPodPreset", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPresetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "settings.k8s.io", - "version": "v1alpha1", - "kind": "PodPreset" - } - }, - "post": { - "description": "create a PodPreset", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "settings_v1alpha1" - ], - "operationId": "createSettingsV1alpha1NamespacedPodPreset", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "settings.k8s.io", - "version": "v1alpha1", - "kind": "PodPreset" - } - }, - "delete": { - "description": "delete collection of PodPreset", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "settings_v1alpha1" - ], - "operationId": "deleteSettingsV1alpha1CollectionNamespacedPodPreset", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "settings.k8s.io", - "version": "v1alpha1", - "kind": "PodPreset" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/settings.k8s.io/v1alpha1/namespaces/{namespace}/podpresets/{name}": { - "get": { - "description": "read the specified PodPreset", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "settings_v1alpha1" - ], - "operationId": "readSettingsV1alpha1NamespacedPodPreset", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "settings.k8s.io", - "version": "v1alpha1", - "kind": "PodPreset" - } - }, - "put": { - "description": "replace the specified PodPreset", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "settings_v1alpha1" - ], - "operationId": "replaceSettingsV1alpha1NamespacedPodPreset", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "settings.k8s.io", - "version": "v1alpha1", - "kind": "PodPreset" - } - }, - "delete": { - "description": "delete a PodPreset", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "settings_v1alpha1" - ], - "operationId": "deleteSettingsV1alpha1NamespacedPodPreset", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "settings.k8s.io", - "version": "v1alpha1", - "kind": "PodPreset" - } - }, - "patch": { - "description": "partially update the specified PodPreset", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "settings_v1alpha1" - ], - "operationId": "patchSettingsV1alpha1NamespacedPodPreset", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "settings.k8s.io", - "version": "v1alpha1", - "kind": "PodPreset" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodPreset", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/settings.k8s.io/v1alpha1/podpresets": { - "get": { - "description": "list or watch objects of kind PodPreset", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "settings_v1alpha1" - ], - "operationId": "listSettingsV1alpha1PodPresetForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPresetList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "settings.k8s.io", - "version": "v1alpha1", - "kind": "PodPreset" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/settings.k8s.io/v1alpha1/watch/namespaces/{namespace}/podpresets": { - "get": { - "description": "watch individual changes to a list of PodPreset", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "settings_v1alpha1" - ], - "operationId": "watchSettingsV1alpha1NamespacedPodPresetList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "settings.k8s.io", - "version": "v1alpha1", - "kind": "PodPreset" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/settings.k8s.io/v1alpha1/watch/namespaces/{namespace}/podpresets/{name}": { - "get": { - "description": "watch changes to an object of kind PodPreset", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "settings_v1alpha1" - ], - "operationId": "watchSettingsV1alpha1NamespacedPodPreset", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "settings.k8s.io", - "version": "v1alpha1", - "kind": "PodPreset" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the PodPreset", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "object name and auth scope, such as for teams and projects", - "name": "namespace", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/settings.k8s.io/v1alpha1/watch/podpresets": { - "get": { - "description": "watch individual changes to a list of PodPreset", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "settings_v1alpha1" - ], - "operationId": "watchSettingsV1alpha1PodPresetListForAllNamespaces", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "settings.k8s.io", - "version": "v1alpha1", - "kind": "PodPreset" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/": { - "get": { - "description": "get information of a group", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage" - ], - "operationId": "getStorageAPIGroup", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/storage.k8s.io/v1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "getStorageV1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/storage.k8s.io/v1/storageclasses": { - "get": { - "description": "list or watch objects of kind StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "listStorageV1StorageClass", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1.StorageClassList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1", - "kind": "StorageClass" - } - }, - "post": { - "description": "create a StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "createStorageV1StorageClass", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1", - "kind": "StorageClass" - } - }, - "delete": { - "description": "delete collection of StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "deleteStorageV1CollectionStorageClass", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1", - "kind": "StorageClass" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1/storageclasses/{name}": { - "get": { - "description": "read the specified StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "readStorageV1StorageClass", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1", - "kind": "StorageClass" - } - }, - "put": { - "description": "replace the specified StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "replaceStorageV1StorageClass", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1", - "kind": "StorageClass" - } - }, - "delete": { - "description": "delete a StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "deleteStorageV1StorageClass", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1", - "kind": "StorageClass" - } - }, - "patch": { - "description": "partially update the specified StorageClass", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "patchStorageV1StorageClass", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1", - "kind": "StorageClass" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the StorageClass", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1/watch/storageclasses": { - "get": { - "description": "watch individual changes to a list of StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "watchStorageV1StorageClassList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1", - "kind": "StorageClass" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1/watch/storageclasses/{name}": { - "get": { - "description": "watch changes to an object of kind StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1" - ], - "operationId": "watchStorageV1StorageClass", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1", - "kind": "StorageClass" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the StorageClass", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1beta1/": { - "get": { - "description": "get available resources", - "consumes": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "getStorageV1beta1APIResources", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/apis/storage.k8s.io/v1beta1/storageclasses": { - "get": { - "description": "list or watch objects of kind StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "listStorageV1beta1StorageClass", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClassList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1beta1", - "kind": "StorageClass" - } - }, - "post": { - "description": "create a StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "createStorageV1beta1StorageClass", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "post", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1beta1", - "kind": "StorageClass" - } - }, - "delete": { - "description": "delete collection of StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "deleteStorageV1beta1CollectionStorageClass", - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "deletecollection", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1beta1", - "kind": "StorageClass" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1beta1/storageclasses/{name}": { - "get": { - "description": "read the specified StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "readStorageV1beta1StorageClass", - "parameters": [ - { - "uniqueItems": true, - "type": "boolean", - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", - "name": "exact", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Should this value be exported. Export strips fields that a user can not specify.", - "name": "export", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "get", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1beta1", - "kind": "StorageClass" - } - }, - "put": { - "description": "replace the specified StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "replaceStorageV1beta1StorageClass", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "put", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1beta1", - "kind": "StorageClass" - } - }, - "delete": { - "description": "delete a StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "deleteStorageV1beta1StorageClass", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - } - }, - { - "uniqueItems": true, - "type": "integer", - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "name": "gracePeriodSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "name": "orphanDependents", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "name": "propagationPolicy", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "delete", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1beta1", - "kind": "StorageClass" - } - }, - "patch": { - "description": "partially update the specified StorageClass", - "consumes": [ - "application/json-patch+json", - "application/merge-patch+json", - "application/strategic-merge-patch+json" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "patchStorageV1beta1StorageClass", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "patch", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1beta1", - "kind": "StorageClass" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "name of the StorageClass", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1beta1/watch/storageclasses": { - "get": { - "description": "watch individual changes to a list of StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "watchStorageV1beta1StorageClassList", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1beta1", - "kind": "StorageClass" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/apis/storage.k8s.io/v1beta1/watch/storageclasses/{name}": { - "get": { - "description": "watch changes to an object of kind StorageClass", - "consumes": [ - "*/*" - ], - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "schemes": [ - "https" - ], - "tags": [ - "storage_v1beta1" - ], - "operationId": "watchStorageV1beta1StorageClass", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "x-kubernetes-action": "watch", - "x-kubernetes-group-version-kind": { - "group": "storage.k8s.io", - "version": "v1beta1", - "kind": "StorageClass" - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "name": "fieldSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "If true, partially initialized resources are included in the response.", - "name": "includeUninitialized", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "name": "labelSelector", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "name of the StorageClass", - "name": "name", - "in": "path", - "required": true - }, - { - "uniqueItems": true, - "type": "string", - "description": "If 'true', then the output is pretty printed.", - "name": "pretty", - "in": "query" - }, - { - "uniqueItems": true, - "type": "string", - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "name": "resourceVersion", - "in": "query" - }, - { - "uniqueItems": true, - "type": "integer", - "description": "Timeout for the list/watch call.", - "name": "timeoutSeconds", - "in": "query" - }, - { - "uniqueItems": true, - "type": "boolean", - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "name": "watch", - "in": "query" - } - ] - }, - "/logs/": { - "get": { - "schemes": [ - "https" - ], - "tags": [ - "logs" - ], - "operationId": "logFileListHandler", - "responses": { - "401": { - "description": "Unauthorized" - } - } - } - }, - "/logs/{logpath}": { - "get": { - "schemes": [ - "https" - ], - "tags": [ - "logs" - ], - "operationId": "logFileHandler", - "responses": { - "401": { - "description": "Unauthorized" - } - } - }, - "parameters": [ - { - "uniqueItems": true, - "type": "string", - "description": "path to the log", - "name": "logpath", - "in": "path", - "required": true - } - ] - }, - "/version/": { - "get": { - "description": "get the code version", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "schemes": [ - "https" - ], - "tags": [ - "version" - ], - "operationId": "getCodeVersion", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.version.Info" - } - }, - "401": { - "description": "Unauthorized" - } - } - } - } - }, - "definitions": { - "io.k8s.apimachinery.pkg.api.resource.Quantity": { - "type": "string" - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup": { - "description": "APIGroup contains the name, the supported versions, and the preferred version of a group.", - "required": [ - "name", - "versions", - "serverAddressByClientCIDRs" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "name is the name of the group.", - "type": "string" - }, - "preferredVersion": { - "description": "preferredVersion is the version preferred by the API server, which probably is the storage version.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery" - }, - "serverAddressByClientCIDRs": { - "description": "a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR" - } - }, - "versions": { - "description": "versions are the versions supported in this group.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery" - } - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.APIGroupList": { - "description": "APIGroupList is a list of APIGroup, to allow clients to discover the API at /apis.", - "required": [ - "groups" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "groups": { - "description": "groups is a list of APIGroup.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.APIResource": { - "description": "APIResource specifies the name of a resource and whether it is namespaced.", - "required": [ - "name", - "singularName", - "namespaced", - "kind", - "verbs" - ], - "properties": { - "categories": { - "description": "categories is a list of the grouped resources this resource belongs to (e.g. 'all')", - "type": "array", - "items": { - "type": "string" - } - }, - "kind": { - "description": "kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')", - "type": "string" - }, - "name": { - "description": "name is the plural name of the resource.", - "type": "string" - }, - "namespaced": { - "description": "namespaced indicates if a resource is namespaced or not.", - "type": "boolean" - }, - "shortNames": { - "description": "shortNames is a list of suggested short names of the resource.", - "type": "array", - "items": { - "type": "string" - } - }, - "singularName": { - "description": "singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.", - "type": "string" - }, - "verbs": { - "description": "verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList": { - "description": "APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.", - "required": [ - "groupVersion", - "resources" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "groupVersion": { - "description": "groupVersion is the group and version this APIResourceList is for.", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "resources": { - "description": "resources contains the name of the resources and if they are namespaced.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResource" - } - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.APIVersions": { - "description": "APIVersions lists the versions that are available, to allow clients to discover the API at /api, which is the root path of the legacy v1 API.", - "required": [ - "versions", - "serverAddressByClientCIDRs" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "serverAddressByClientCIDRs": { - "description": "a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR" - } - }, - "versions": { - "description": "versions are the api versions that are available.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions": { - "description": "DeleteOptions may be provided when deleting an API object.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "gracePeriodSeconds": { - "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - "type": "integer", - "format": "int64" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "orphanDependents": { - "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - "type": "boolean" - }, - "preconditions": { - "description": "Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions" - }, - "propagationPolicy": { - "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery": { - "description": "GroupVersion contains the \"group/version\" and \"version\" string of a version. It is made a struct to keep extensibility.", - "required": [ - "groupVersion", - "version" - ], - "properties": { - "groupVersion": { - "description": "groupVersion specifies the API group and version in the form \"group/version\"", - "type": "string" - }, - "version": { - "description": "version specifies the version in the form of \"version\". This is to save the clients the trouble of splitting the GroupVersion.", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.Initializer": { - "description": "Initializer is information about an initializer that has not yet completed.", - "required": [ - "name" - ], - "properties": { - "name": { - "description": "name of the process that is responsible for initializing this object.", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.Initializers": { - "description": "Initializers tracks the progress of initialization.", - "required": [ - "pending" - ], - "properties": { - "pending": { - "description": "Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Initializer" - } - }, - "result": { - "description": "If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector": { - "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", - "properties": { - "matchExpressions": { - "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement" - } - }, - "matchLabels": { - "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement": { - "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", - "required": [ - "key", - "operator" - ], - "properties": { - "key": { - "description": "key is the label key that the selector applies to.", - "type": "string", - "x-kubernetes-patch-merge-key": "key", - "x-kubernetes-patch-strategy": "merge" - }, - "operator": { - "description": "operator represents a key's relationship to a set of values. Valid operators ard In, NotIn, Exists and DoesNotExist.", - "type": "string" - }, - "values": { - "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta": { - "description": "ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.", - "properties": { - "resourceVersion": { - "description": "String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency", - "type": "string" - }, - "selfLink": { - "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "properties": { - "annotations": { - "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "clusterName": { - "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", - "type": "string" - }, - "creationTimestamp": { - "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "deletionGracePeriodSeconds": { - "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", - "type": "integer", - "format": "int64" - }, - "deletionTimestamp": { - "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field. Once set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "finalizers": { - "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.", - "type": "array", - "items": { - "type": "string" - }, - "x-kubernetes-patch-strategy": "merge" - }, - "generateName": { - "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency", - "type": "string" - }, - "generation": { - "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", - "type": "integer", - "format": "int64" - }, - "initializers": { - "description": "An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n\nWhen an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Initializers" - }, - "labels": { - "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", - "type": "string" - }, - "namespace": { - "description": "Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n\nMust be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces", - "type": "string" - }, - "ownerReferences": { - "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference" - }, - "x-kubernetes-patch-merge-key": "uid", - "x-kubernetes-patch-strategy": "merge" - }, - "resourceVersion": { - "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n\nPopulated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency", - "type": "string" - }, - "selfLink": { - "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.", - "type": "string" - }, - "uid": { - "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference": { - "description": "OwnerReference contains enough information to let you identify an owning object. Currently, an owning object must be in the same namespace, so there is no namespace field.", - "required": [ - "apiVersion", - "kind", - "name", - "uid" - ], - "properties": { - "apiVersion": { - "description": "API version of the referent.", - "type": "string" - }, - "blockOwnerDeletion": { - "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", - "type": "boolean" - }, - "controller": { - "description": "If true, this reference points to the managing controller.", - "type": "boolean" - }, - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", - "type": "string" - }, - "uid": { - "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.Patch": { - "description": "Patch is provided to give a concrete name and type to the Kubernetes PATCH request body." - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions": { - "description": "Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.", - "properties": { - "uid": { - "description": "Specifies the target UID.", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR": { - "description": "ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match.", - "required": [ - "clientCIDR", - "serverAddress" - ], - "properties": { - "clientCIDR": { - "description": "The CIDR with which clients can match their IP to figure out the server address that they should use.", - "type": "string" - }, - "serverAddress": { - "description": "Address of this server, suitable for a client that matches the above CIDR. This can be a hostname, hostname:port, IP or IP:port.", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.Status": { - "description": "Status is a return value for calls that don't return other objects.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "code": { - "description": "Suggested HTTP return code for this status, 0 if not set.", - "type": "integer", - "format": "int32" - }, - "details": { - "description": "Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "message": { - "description": "A human-readable description of the status of this operation.", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - }, - "reason": { - "description": "A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.", - "type": "string" - }, - "status": { - "description": "Status of the operation. One of: \"Success\" or \"Failure\". More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.StatusCause": { - "description": "StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.", - "properties": { - "field": { - "description": "The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.\n\nExamples:\n \"name\" - the field \"name\" on the current resource\n \"items[0].name\" - the field \"name\" on the first array entry in \"items\"", - "type": "string" - }, - "message": { - "description": "A human-readable description of the cause of the error. This field may be presented as-is to a reader.", - "type": "string" - }, - "reason": { - "description": "A machine-readable description of the cause of the error. If this value is empty there is no information available.", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails": { - "description": "StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.", - "properties": { - "causes": { - "description": "The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusCause" - } - }, - "group": { - "description": "The group attribute of the resource associated with the status StatusReason.", - "type": "string" - }, - "kind": { - "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).", - "type": "string" - }, - "retryAfterSeconds": { - "description": "If specified, the time in seconds before the operation should be retried.", - "type": "integer", - "format": "int32" - }, - "uid": { - "description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids", - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.Time": { - "type": "string", - "format": "date-time" - }, - "io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent": { - "description": "Event represents a single event to a watched resource.", - "required": [ - "type", - "object" - ], - "properties": { - "object": { - "description": "Object is:\n * If Type is Added or Modified: the new state of the object.\n * If Type is Deleted: the state of the object immediately before deletion.\n * If Type is Error: *Status is recommended; other types may make sense\n depending on context.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension" - }, - "type": { - "type": "string" - } - } - }, - "io.k8s.apimachinery.pkg.runtime.RawExtension": { - "description": "RawExtension is used to hold extensions in external versions.\n\nTo use this, make a field which has RawExtension as its type in your external, versioned struct, and Object in your internal struct. You also need to register your various plugin types.\n\n// Internal package: type MyAPIObject struct {\n\truntime.TypeMeta `json:\",inline\"`\n\tMyPlugin runtime.Object `json:\"myPlugin\"`\n} type PluginA struct {\n\tAOption string `json:\"aOption\"`\n}\n\n// External package: type MyAPIObject struct {\n\truntime.TypeMeta `json:\",inline\"`\n\tMyPlugin runtime.RawExtension `json:\"myPlugin\"`\n} type PluginA struct {\n\tAOption string `json:\"aOption\"`\n}\n\n// On the wire, the JSON will look something like this: {\n\t\"kind\":\"MyAPIObject\",\n\t\"apiVersion\":\"v1\",\n\t\"myPlugin\": {\n\t\t\"kind\":\"PluginA\",\n\t\t\"aOption\":\"foo\",\n\t},\n}\n\nSo what happens? Decode first uses json or yaml to unmarshal the serialized data into your external MyAPIObject. That causes the raw JSON to be stored, but not unpacked. The next step is to copy (using pkg/conversion) into the internal struct. The runtime package's DefaultScheme has conversion functions installed which will unpack the JSON stored in RawExtension, turning it into the correct object type, and storing it in the Object. (TODO: In the case where the object is of an unknown type, a runtime.Unknown object will be created and stored.)", - "required": [ - "Raw" - ], - "properties": { - "Raw": { - "description": "Raw is the underlying serialization of this object.", - "type": "string", - "format": "byte" - } - } - }, - "io.k8s.apimachinery.pkg.util.intstr.IntOrString": { - "type": "string", - "format": "int-or-string" - }, - "io.k8s.apimachinery.pkg.version.Info": { - "description": "Info contains versioning information. how we'll want to distribute that information.", - "required": [ - "major", - "minor", - "gitVersion", - "gitCommit", - "gitTreeState", - "buildDate", - "goVersion", - "compiler", - "platform" - ], - "properties": { - "buildDate": { - "type": "string" - }, - "compiler": { - "type": "string" - }, - "gitCommit": { - "type": "string" - }, - "gitTreeState": { - "type": "string" - }, - "gitVersion": { - "type": "string" - }, - "goVersion": { - "type": "string" - }, - "major": { - "type": "string" - }, - "minor": { - "type": "string" - }, - "platform": { - "type": "string" - } - } - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService": { - "description": "APIService represents a server for a particular GroupVersion. Name must be \"version.group\".", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec contains information for locating and communicating with a server", - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceSpec" - }, - "status": { - "description": "Status contains derived information about an API server", - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceStatus" - } - } - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceCondition": { - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status is the status of the condition. Can be True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type is the type of the condition.", - "type": "string" - } - } - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceList": { - "description": "APIServiceList is a list of APIService objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - } - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceSpec": { - "description": "APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.", - "required": [ - "service", - "caBundle", - "groupPriorityMinimum", - "versionPriority" - ], - "properties": { - "caBundle": { - "description": "CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate.", - "type": "string", - "format": "byte" - }, - "group": { - "description": "Group is the API group name this server hosts", - "type": "string" - }, - "groupPriorityMinimum": { - "description": "GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is prefered by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s", - "type": "integer", - "format": "int32" - }, - "insecureSkipTLSVerify": { - "description": "InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged. You should use the CABundle instead.", - "type": "boolean" - }, - "service": { - "description": "Service is a reference to the service for this API server. It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.", - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.ServiceReference" - }, - "version": { - "description": "Version is the API version this server hosts. For example, \"v1\"", - "type": "string" - }, - "versionPriority": { - "description": "VersionPriority controls the ordering of this API version inside of its group. Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) Since it's inside of a group, the number can be small, probably in the 10s.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceStatus": { - "description": "APIServiceStatus contains derived information about an API server", - "properties": { - "conditions": { - "description": "Current service state of apiService.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - } - } - }, - "io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.ServiceReference": { - "description": "ServiceReference holds a reference to Service.legacy.k8s.io", - "properties": { - "name": { - "description": "Name is the name of the service", - "type": "string" - }, - "namespace": { - "description": "Namespace is the namespace of the service", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.AWSElasticBlockStoreVolumeSource": { - "description": "Represents a Persistent Disk resource in AWS.\n\nAn AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.", - "required": [ - "volumeID" - ], - "properties": { - "fsType": { - "description": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", - "type": "string" - }, - "partition": { - "description": "The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).", - "type": "integer", - "format": "int32" - }, - "readOnly": { - "description": "Specify \"true\" to force and set the ReadOnly property in VolumeMounts to \"true\". If omitted, the default is \"false\". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", - "type": "boolean" - }, - "volumeID": { - "description": "Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.Affinity": { - "description": "Affinity is a group of affinity scheduling rules.", - "properties": { - "nodeAffinity": { - "description": "Describes node affinity scheduling rules for the pod.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeAffinity" - }, - "podAffinity": { - "description": "Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodAffinity" - }, - "podAntiAffinity": { - "description": "Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodAntiAffinity" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.AttachedVolume": { - "description": "AttachedVolume describes a volume attached to a node", - "required": [ - "name", - "devicePath" - ], - "properties": { - "devicePath": { - "description": "DevicePath represents the device path where the volume should be available", - "type": "string" - }, - "name": { - "description": "Name of the attached volume", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.AzureDiskVolumeSource": { - "description": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", - "required": [ - "diskName", - "diskURI" - ], - "properties": { - "cachingMode": { - "description": "Host Caching mode: None, Read Only, Read Write.", - "type": "string" - }, - "diskName": { - "description": "The Name of the data disk in the blob storage", - "type": "string" - }, - "diskURI": { - "description": "The URI the data disk in the blob storage", - "type": "string" - }, - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - "type": "string" - }, - "kind": { - "description": "Expected values Shared: mulitple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared", - "type": "string" - }, - "readOnly": { - "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.AzureFileVolumeSource": { - "description": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", - "required": [ - "secretName", - "shareName" - ], - "properties": { - "readOnly": { - "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - }, - "secretName": { - "description": "the name of secret that contains Azure Storage Account Name and Key", - "type": "string" - }, - "shareName": { - "description": "Share Name", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.Binding": { - "description": "Binding ties one object to another; for example, a pod is bound to a node by a scheduler. Deprecated in 1.7, please use the bindings subresource of pods instead.", - "required": [ - "target" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "target": { - "description": "The target object that you want to bind to the standard object.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectReference" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "Binding" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.Capabilities": { - "description": "Adds and removes POSIX capabilities from running containers.", - "properties": { - "add": { - "description": "Added capabilities", - "type": "array", - "items": { - "type": "string" - } - }, - "drop": { - "description": "Removed capabilities", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.CephFSVolumeSource": { - "description": "Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.", - "required": [ - "monitors" - ], - "properties": { - "monitors": { - "description": "Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "type": "array", - "items": { - "type": "string" - } - }, - "path": { - "description": "Optional: Used as the mounted root, rather than the full Ceph tree, default is /", - "type": "string" - }, - "readOnly": { - "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "type": "boolean" - }, - "secretFile": { - "description": "Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "type": "string" - }, - "secretRef": { - "description": "Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalObjectReference" - }, - "user": { - "description": "Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.CinderVolumeSource": { - "description": "Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.", - "required": [ - "volumeID" - ], - "properties": { - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "type": "string" - }, - "readOnly": { - "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "type": "boolean" - }, - "volumeID": { - "description": "volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ComponentCondition": { - "description": "Information about the condition of a component.", - "required": [ - "type", - "status" - ], - "properties": { - "error": { - "description": "Condition error code for a component. For example, a health check error code.", - "type": "string" - }, - "message": { - "description": "Message about the condition for a component. For example, information about a health check.", - "type": "string" - }, - "status": { - "description": "Status of the condition for a component. Valid values for \"Healthy\": \"True\", \"False\", or \"Unknown\".", - "type": "string" - }, - "type": { - "description": "Type of condition for a component. Valid value: \"Healthy\"", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ComponentStatus": { - "description": "ComponentStatus (and ComponentStatusList) holds the cluster validation info.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "conditions": { - "description": "List of component conditions observed", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ComponentCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "ComponentStatus" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.ComponentStatusList": { - "description": "Status of all the conditions for the component as a list of ComponentStatus objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of ComponentStatus objects.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ComponentStatus" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "ComponentStatusList" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.ConfigMap": { - "description": "ConfigMap holds configuration data for pods to consume.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "data": { - "description": "Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "ConfigMap" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.ConfigMapEnvSource": { - "description": "ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.\n\nThe contents of the target ConfigMap's Data field will represent the key-value pairs as environment variables.", - "properties": { - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "optional": { - "description": "Specify whether the ConfigMap must be defined", - "type": "boolean" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ConfigMapKeySelector": { - "description": "Selects a key from a ConfigMap.", - "required": [ - "key" - ], - "properties": { - "key": { - "description": "The key to select.", - "type": "string" - }, - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "optional": { - "description": "Specify whether the ConfigMap or it's key must be defined", - "type": "boolean" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ConfigMapList": { - "description": "ConfigMapList is a resource containing a list of ConfigMap objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of ConfigMaps.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMap" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "ConfigMapList" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.ConfigMapProjection": { - "description": "Adapts a ConfigMap into a projected volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a projected volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. Note that this is identical to a configmap volume source without the default mode.", - "properties": { - "items": { - "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.KeyToPath" - } - }, - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "optional": { - "description": "Specify whether the ConfigMap or it's keys must be defined", - "type": "boolean" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ConfigMapVolumeSource": { - "description": "Adapts a ConfigMap into a volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.", - "properties": { - "defaultMode": { - "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - "type": "integer", - "format": "int32" - }, - "items": { - "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.KeyToPath" - } - }, - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "optional": { - "description": "Specify whether the ConfigMap or it's keys must be defined", - "type": "boolean" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.Container": { - "description": "A single application container that you want to run within a pod.", - "required": [ - "name", - "image" - ], - "properties": { - "args": { - "description": "Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell", - "type": "array", - "items": { - "type": "string" - } - }, - "command": { - "description": "Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell", - "type": "array", - "items": { - "type": "string" - } - }, - "env": { - "description": "List of environment variables to set in the container. Cannot be updated.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.EnvVar" - }, - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge" - }, - "envFrom": { - "description": "List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.EnvFromSource" - } - }, - "image": { - "description": "Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images", - "type": "string" - }, - "imagePullPolicy": { - "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", - "type": "string" - }, - "lifecycle": { - "description": "Actions that the management system should take in response to container lifecycle events. Cannot be updated.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Lifecycle" - }, - "livenessProbe": { - "description": "Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Probe" - }, - "name": { - "description": "Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.", - "type": "string" - }, - "ports": { - "description": "List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default \"0.0.0.0\" address inside a container will be accessible from the network. Cannot be updated.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerPort" - }, - "x-kubernetes-patch-merge-key": "containerPort", - "x-kubernetes-patch-strategy": "merge" - }, - "readinessProbe": { - "description": "Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Probe" - }, - "resources": { - "description": "Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceRequirements" - }, - "securityContext": { - "description": "Security options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.SecurityContext" - }, - "stdin": { - "description": "Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.", - "type": "boolean" - }, - "stdinOnce": { - "description": "Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false", - "type": "boolean" - }, - "terminationMessagePath": { - "description": "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.", - "type": "string" - }, - "terminationMessagePolicy": { - "description": "Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.", - "type": "string" - }, - "tty": { - "description": "Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.", - "type": "boolean" - }, - "volumeMounts": { - "description": "Pod volumes to mount into the container's filesystem. Cannot be updated.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.VolumeMount" - }, - "x-kubernetes-patch-merge-key": "mountPath", - "x-kubernetes-patch-strategy": "merge" - }, - "workingDir": { - "description": "Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ContainerImage": { - "description": "Describe a container image", - "required": [ - "names" - ], - "properties": { - "names": { - "description": "Names by which this image is known. e.g. [\"gcr.io/google_containers/hyperkube:v1.0.7\", \"dockerhub.io/google_containers/hyperkube:v1.0.7\"]", - "type": "array", - "items": { - "type": "string" - } - }, - "sizeBytes": { - "description": "The size of the image in bytes.", - "type": "integer", - "format": "int64" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ContainerPort": { - "description": "ContainerPort represents a network port in a single container.", - "required": [ - "containerPort" - ], - "properties": { - "containerPort": { - "description": "Number of port to expose on the pod's IP address. This must be a valid port number, 0 \u003c x \u003c 65536.", - "type": "integer", - "format": "int32" - }, - "hostIP": { - "description": "What host IP to bind the external port to.", - "type": "string" - }, - "hostPort": { - "description": "Number of port to expose on the host. If specified, this must be a valid port number, 0 \u003c x \u003c 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.", - "type": "integer", - "format": "int32" - }, - "name": { - "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", - "type": "string" - }, - "protocol": { - "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ContainerState": { - "description": "ContainerState holds a possible state of container. Only one of its members may be specified. If none of them is specified, the default one is ContainerStateWaiting.", - "properties": { - "running": { - "description": "Details about a running container", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerStateRunning" - }, - "terminated": { - "description": "Details about a terminated container", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerStateTerminated" - }, - "waiting": { - "description": "Details about a waiting container", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerStateWaiting" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ContainerStateRunning": { - "description": "ContainerStateRunning is a running state of a container.", - "properties": { - "startedAt": { - "description": "Time at which the container was last (re-)started", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ContainerStateTerminated": { - "description": "ContainerStateTerminated is a terminated state of a container.", - "required": [ - "exitCode" - ], - "properties": { - "containerID": { - "description": "Container's ID in the format 'docker://\u003ccontainer_id\u003e'", - "type": "string" - }, - "exitCode": { - "description": "Exit status from the last termination of the container", - "type": "integer", - "format": "int32" - }, - "finishedAt": { - "description": "Time at which the container last terminated", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "Message regarding the last termination of the container", - "type": "string" - }, - "reason": { - "description": "(brief) reason from the last termination of the container", - "type": "string" - }, - "signal": { - "description": "Signal from the last termination of the container", - "type": "integer", - "format": "int32" - }, - "startedAt": { - "description": "Time at which previous execution of the container started", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ContainerStateWaiting": { - "description": "ContainerStateWaiting is a waiting state of a container.", - "properties": { - "message": { - "description": "Message regarding why the container is not yet running.", - "type": "string" - }, - "reason": { - "description": "(brief) reason the container is not yet running.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ContainerStatus": { - "description": "ContainerStatus contains details for the current status of this container.", - "required": [ - "name", - "ready", - "restartCount", - "image", - "imageID" - ], - "properties": { - "containerID": { - "description": "Container's ID in the format 'docker://\u003ccontainer_id\u003e'.", - "type": "string" - }, - "image": { - "description": "The image the container is running. More info: https://kubernetes.io/docs/concepts/containers/images", - "type": "string" - }, - "imageID": { - "description": "ImageID of the container's image.", - "type": "string" - }, - "lastState": { - "description": "Details about the container's last termination condition.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerState" - }, - "name": { - "description": "This must be a DNS_LABEL. Each container in a pod must have a unique name. Cannot be updated.", - "type": "string" - }, - "ready": { - "description": "Specifies whether the container has passed its readiness probe.", - "type": "boolean" - }, - "restartCount": { - "description": "The number of times the container has been restarted, currently based on the number of dead containers that have not yet been removed. Note that this is calculated from dead containers. But those containers are subject to garbage collection. This value will get capped at 5 by GC.", - "type": "integer", - "format": "int32" - }, - "state": { - "description": "Details about the container's current condition.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerState" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.DaemonEndpoint": { - "description": "DaemonEndpoint contains information about a single Daemon endpoint.", - "required": [ - "Port" - ], - "properties": { - "Port": { - "description": "Port number of the given endpoint.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.DownwardAPIProjection": { - "description": "Represents downward API info for projecting into a projected volume. Note that this is identical to a downwardAPI volume source without the default mode.", - "properties": { - "items": { - "description": "Items is a list of DownwardAPIVolume file", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeFile" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeFile": { - "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", - "required": [ - "path" - ], - "properties": { - "fieldRef": { - "description": "Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectFieldSelector" - }, - "mode": { - "description": "Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - "type": "integer", - "format": "int32" - }, - "path": { - "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", - "type": "string" - }, - "resourceFieldRef": { - "description": "Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceFieldSelector" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeSource": { - "description": "DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.", - "properties": { - "defaultMode": { - "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - "type": "integer", - "format": "int32" - }, - "items": { - "description": "Items is a list of downward API volume file", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeFile" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.EmptyDirVolumeSource": { - "description": "Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.", - "properties": { - "medium": { - "description": "What type of storage medium should back this directory. The default is \"\" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir", - "type": "string" - }, - "sizeLimit": { - "description": "Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.EndpointAddress": { - "description": "EndpointAddress is a tuple that describes single IP address.", - "required": [ - "ip" - ], - "properties": { - "hostname": { - "description": "The Hostname of this endpoint", - "type": "string" - }, - "ip": { - "description": "The IP of this endpoint. May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24). IPv6 is also accepted but not fully supported on all platforms. Also, certain kubernetes components, like kube-proxy, are not IPv6 ready.", - "type": "string" - }, - "nodeName": { - "description": "Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.", - "type": "string" - }, - "targetRef": { - "description": "Reference to object providing the endpoint.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectReference" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.EndpointPort": { - "description": "EndpointPort is a tuple that describes a single port.", - "required": [ - "port" - ], - "properties": { - "name": { - "description": "The name of this port (corresponds to ServicePort.Name). Must be a DNS_LABEL. Optional only if one port is defined.", - "type": "string" - }, - "port": { - "description": "The port number of the endpoint.", - "type": "integer", - "format": "int32" - }, - "protocol": { - "description": "The IP protocol for this port. Must be UDP or TCP. Default is TCP.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.EndpointSubset": { - "description": "EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given:\n {\n Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n }\nThe resulting set of endpoints can be viewed as:\n a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],\n b: [ 10.10.1.1:309, 10.10.2.2:309 ]", - "properties": { - "addresses": { - "description": "IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.EndpointAddress" - } - }, - "notReadyAddresses": { - "description": "IP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.EndpointAddress" - } - }, - "ports": { - "description": "Port numbers available on the related IP addresses.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.EndpointPort" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.Endpoints": { - "description": "Endpoints is a collection of endpoints that implement the actual service. Example:\n Name: \"mysvc\",\n Subsets: [\n {\n Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n },\n {\n Addresses: [{\"ip\": \"10.10.3.3\"}],\n Ports: [{\"name\": \"a\", \"port\": 93}, {\"name\": \"b\", \"port\": 76}]\n },\n ]", - "required": [ - "subsets" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "subsets": { - "description": "The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.EndpointSubset" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "Endpoints" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.EndpointsList": { - "description": "EndpointsList is a list of endpoints.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of endpoints.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Endpoints" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "EndpointsList" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.EnvFromSource": { - "description": "EnvFromSource represents the source of a set of ConfigMaps", - "properties": { - "configMapRef": { - "description": "The ConfigMap to select from", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMapEnvSource" - }, - "prefix": { - "description": "An optional identifer to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.", - "type": "string" - }, - "secretRef": { - "description": "The Secret to select from", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.SecretEnvSource" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.EnvVar": { - "description": "EnvVar represents an environment variable present in a Container.", - "required": [ - "name" - ], - "properties": { - "name": { - "description": "Name of the environment variable. Must be a C_IDENTIFIER.", - "type": "string" - }, - "value": { - "description": "Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to \"\".", - "type": "string" - }, - "valueFrom": { - "description": "Source for the environment variable's value. Cannot be used if value is not empty.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.EnvVarSource" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.EnvVarSource": { - "description": "EnvVarSource represents a source for the value of an EnvVar.", - "properties": { - "configMapKeyRef": { - "description": "Selects a key of a ConfigMap.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMapKeySelector" - }, - "fieldRef": { - "description": "Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectFieldSelector" - }, - "resourceFieldRef": { - "description": "Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceFieldSelector" - }, - "secretKeyRef": { - "description": "Selects a key of a secret in the pod's namespace", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.SecretKeySelector" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.Event": { - "description": "Event is a report of an event somewhere in the cluster.", - "required": [ - "metadata", - "involvedObject" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "count": { - "description": "The number of times this event has occurred.", - "type": "integer", - "format": "int32" - }, - "firstTimestamp": { - "description": "The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "involvedObject": { - "description": "The object that this event is about.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectReference" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "lastTimestamp": { - "description": "The time at which the most recent occurrence of this event was recorded.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human-readable description of the status of this operation.", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "reason": { - "description": "This should be a short, machine understandable string that gives the reason for the transition into the object's current status.", - "type": "string" - }, - "source": { - "description": "The component reporting this event. Should be a short machine understandable string.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.EventSource" - }, - "type": { - "description": "Type of this event (Normal, Warning), new types could be added in the future", - "type": "string" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "Event" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.EventList": { - "description": "EventList is a list of events.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of events", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Event" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "EventList" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.EventSource": { - "description": "EventSource contains information for an event.", - "properties": { - "component": { - "description": "Component from which the event is generated.", - "type": "string" - }, - "host": { - "description": "Node name on which the event is generated.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ExecAction": { - "description": "ExecAction describes a \"run in container\" action.", - "properties": { - "command": { - "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.FCVolumeSource": { - "description": "Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.", - "required": [ - "targetWWNs", - "lun" - ], - "properties": { - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - "type": "string" - }, - "lun": { - "description": "Required: FC target lun number", - "type": "integer", - "format": "int32" - }, - "readOnly": { - "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - }, - "targetWWNs": { - "description": "Required: FC target worldwide names (WWNs)", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.FlexVolumeSource": { - "description": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.", - "required": [ - "driver" - ], - "properties": { - "driver": { - "description": "Driver is the name of the driver to use for this volume.", - "type": "string" - }, - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.", - "type": "string" - }, - "options": { - "description": "Optional: Extra command options if any.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "readOnly": { - "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - }, - "secretRef": { - "description": "Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalObjectReference" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.FlockerVolumeSource": { - "description": "Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling.", - "properties": { - "datasetName": { - "description": "Name of the dataset stored as metadata -\u003e name on the dataset for Flocker should be considered as deprecated", - "type": "string" - }, - "datasetUUID": { - "description": "UUID of the dataset. This is unique identifier of a Flocker dataset", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.GCEPersistentDiskVolumeSource": { - "description": "Represents a Persistent Disk resource in Google Compute Engine.\n\nA GCE PD must exist before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once or read-only many times. GCE PDs support ownership management and SELinux relabeling.", - "required": [ - "pdName" - ], - "properties": { - "fsType": { - "description": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - "type": "string" - }, - "partition": { - "description": "The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - "type": "integer", - "format": "int32" - }, - "pdName": { - "description": "Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - "type": "string" - }, - "readOnly": { - "description": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - "type": "boolean" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.GitRepoVolumeSource": { - "description": "Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling.", - "required": [ - "repository" - ], - "properties": { - "directory": { - "description": "Target directory name. Must not contain or start with '..'. If '.' is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.", - "type": "string" - }, - "repository": { - "description": "Repository URL", - "type": "string" - }, - "revision": { - "description": "Commit hash for the specified revision.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.GlusterfsVolumeSource": { - "description": "Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.", - "required": [ - "endpoints", - "path" - ], - "properties": { - "endpoints": { - "description": "EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - "type": "string" - }, - "path": { - "description": "Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - "type": "string" - }, - "readOnly": { - "description": "ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - "type": "boolean" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.HTTPGetAction": { - "description": "HTTPGetAction describes an action based on HTTP Get requests.", - "required": [ - "port" - ], - "properties": { - "host": { - "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", - "type": "string" - }, - "httpHeaders": { - "description": "Custom headers to set in the request. HTTP allows repeated headers.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.HTTPHeader" - } - }, - "path": { - "description": "Path to access on the HTTP server.", - "type": "string" - }, - "port": { - "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - }, - "scheme": { - "description": "Scheme to use for connecting to the host. Defaults to HTTP.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.HTTPHeader": { - "description": "HTTPHeader describes a custom header to be used in HTTP probes", - "required": [ - "name", - "value" - ], - "properties": { - "name": { - "description": "The header field name", - "type": "string" - }, - "value": { - "description": "The header field value", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.Handler": { - "description": "Handler defines a specific action that should be taken", - "properties": { - "exec": { - "description": "One and only one of the following should be specified. Exec specifies the action to take.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ExecAction" - }, - "httpGet": { - "description": "HTTPGet specifies the http request to perform.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.HTTPGetAction" - }, - "tcpSocket": { - "description": "TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.TCPSocketAction" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.HostAlias": { - "description": "HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file.", - "properties": { - "hostnames": { - "description": "Hostnames for the above IP address.", - "type": "array", - "items": { - "type": "string" - } - }, - "ip": { - "description": "IP address of the host file entry.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.HostPathVolumeSource": { - "description": "Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.", - "required": [ - "path" - ], - "properties": { - "path": { - "description": "Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ISCSIVolumeSource": { - "description": "Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.", - "required": [ - "targetPortal", - "iqn", - "lun" - ], - "properties": { - "chapAuthDiscovery": { - "description": "whether support iSCSI Discovery CHAP authentication", - "type": "boolean" - }, - "chapAuthSession": { - "description": "whether support iSCSI Session CHAP authentication", - "type": "boolean" - }, - "fsType": { - "description": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi", - "type": "string" - }, - "iqn": { - "description": "Target iSCSI Qualified Name.", - "type": "string" - }, - "iscsiInterface": { - "description": "Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport.", - "type": "string" - }, - "lun": { - "description": "iSCSI target lun number.", - "type": "integer", - "format": "int32" - }, - "portals": { - "description": "iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).", - "type": "array", - "items": { - "type": "string" - } - }, - "readOnly": { - "description": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.", - "type": "boolean" - }, - "secretRef": { - "description": "CHAP secret for iSCSI target and initiator authentication", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalObjectReference" - }, - "targetPortal": { - "description": "iSCSI target portal. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.KeyToPath": { - "description": "Maps a string key to a path within a volume.", - "required": [ - "key", - "path" - ], - "properties": { - "key": { - "description": "The key to project.", - "type": "string" - }, - "mode": { - "description": "Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - "type": "integer", - "format": "int32" - }, - "path": { - "description": "The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.Lifecycle": { - "description": "Lifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.", - "properties": { - "postStart": { - "description": "PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Handler" - }, - "preStop": { - "description": "PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Handler" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.LimitRange": { - "description": "LimitRange sets resource usage limits for each kind of resource in a Namespace.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the limits enforced. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRangeSpec" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "LimitRange" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.LimitRangeItem": { - "description": "LimitRangeItem defines a min/max usage limit for any resource that matches on kind.", - "properties": { - "default": { - "description": "Default resource requirement limit value by resource name if resource limit is omitted.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "defaultRequest": { - "description": "DefaultRequest is the default resource requirement request value by resource name if resource request is omitted.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "max": { - "description": "Max usage constraints on this kind by resource name.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "maxLimitRequestRatio": { - "description": "MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "min": { - "description": "Min usage constraints on this kind by resource name.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "type": { - "description": "Type of resource that this limit applies to.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.LimitRangeList": { - "description": "LimitRangeList is a list of LimitRange items.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of LimitRange objects. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_limit_range.md", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRange" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "LimitRangeList" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.LimitRangeSpec": { - "description": "LimitRangeSpec defines a min/max usage limit for resources that match on kind.", - "required": [ - "limits" - ], - "properties": { - "limits": { - "description": "Limits is the list of LimitRangeItem objects that are enforced.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRangeItem" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.LoadBalancerIngress": { - "description": "LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.", - "properties": { - "hostname": { - "description": "Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)", - "type": "string" - }, - "ip": { - "description": "IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.LoadBalancerStatus": { - "description": "LoadBalancerStatus represents the status of a load-balancer.", - "properties": { - "ingress": { - "description": "Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LoadBalancerIngress" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.LocalObjectReference": { - "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", - "properties": { - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.LocalVolumeSource": { - "description": "Local represents directly-attached storage with node affinity", - "required": [ - "path" - ], - "properties": { - "path": { - "description": "The full path to the volume on the node For alpha, this path must be a directory Once block as a source is supported, then this path can point to a block device", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.NFSVolumeSource": { - "description": "Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.", - "required": [ - "server", - "path" - ], - "properties": { - "path": { - "description": "Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - "type": "string" - }, - "readOnly": { - "description": "ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - "type": "boolean" - }, - "server": { - "description": "Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.Namespace": { - "description": "Namespace provides a scope for Names. Use of multiple namespaces is optional.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the behavior of the Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.NamespaceSpec" - }, - "status": { - "description": "Status describes the current status of a Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.NamespaceStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "Namespace" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.NamespaceList": { - "description": "NamespaceList is a list of Namespaces.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "NamespaceList" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.NamespaceSpec": { - "description": "NamespaceSpec describes the attributes on a Namespace.", - "properties": { - "finalizers": { - "description": "Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#finalizers", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.NamespaceStatus": { - "description": "NamespaceStatus is information about the current status of a Namespace.", - "properties": { - "phase": { - "description": "Phase is the current lifecycle phase of the namespace. More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#phases", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.Node": { - "description": "Node is a worker node in Kubernetes. Each node will have a unique identifier in the cache (i.e. in etcd).", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the behavior of a node. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeSpec" - }, - "status": { - "description": "Most recently observed status of the node. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "Node" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.NodeAddress": { - "description": "NodeAddress contains information for the node's address.", - "required": [ - "type", - "address" - ], - "properties": { - "address": { - "description": "The node address.", - "type": "string" - }, - "type": { - "description": "Node address type, one of Hostname, ExternalIP or InternalIP.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.NodeAffinity": { - "description": "Node affinity is a group of node affinity scheduling rules.", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PreferredSchedulingTerm" - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeSelector" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.NodeCondition": { - "description": "NodeCondition contains condition information for a node.", - "required": [ - "type", - "status" - ], - "properties": { - "lastHeartbeatTime": { - "description": "Last time we got an update on a given condition.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "lastTransitionTime": { - "description": "Last time the condition transit from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "Human readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "(brief) reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of node condition.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.NodeDaemonEndpoints": { - "description": "NodeDaemonEndpoints lists ports opened by daemons running on the Node.", - "properties": { - "kubeletEndpoint": { - "description": "Endpoint on which Kubelet is listening.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.DaemonEndpoint" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.NodeList": { - "description": "NodeList is the whole list of all Nodes which have been registered with master.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of nodes", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Node" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "NodeList" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.NodeSelector": { - "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", - "required": [ - "nodeSelectorTerms" - ], - "properties": { - "nodeSelectorTerms": { - "description": "Required. A list of node selector terms. The terms are ORed.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeSelectorTerm" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.NodeSelectorRequirement": { - "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", - "required": [ - "key", - "operator" - ], - "properties": { - "key": { - "description": "The label key that the selector applies to.", - "type": "string", - "x-kubernetes-patch-merge-key": "key", - "x-kubernetes-patch-strategy": "merge" - }, - "operator": { - "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", - "type": "string" - }, - "values": { - "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.NodeSelectorTerm": { - "description": "A null or empty node selector term matches no objects.", - "required": [ - "matchExpressions" - ], - "properties": { - "matchExpressions": { - "description": "Required. A list of node selector requirements. The requirements are ANDed.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeSelectorRequirement" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.NodeSpec": { - "description": "NodeSpec describes the attributes that a node is created with.", - "properties": { - "externalID": { - "description": "External ID of the node assigned by some machine database (e.g. a cloud provider). Deprecated.", - "type": "string" - }, - "podCIDR": { - "description": "PodCIDR represents the pod IP range assigned to the node.", - "type": "string" - }, - "providerID": { - "description": "ID of the node assigned by the cloud provider in the format: \u003cProviderName\u003e://\u003cProviderSpecificNodeID\u003e", - "type": "string" - }, - "taints": { - "description": "If specified, the node's taints.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Taint" - } - }, - "unschedulable": { - "description": "Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration", - "type": "boolean" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.NodeStatus": { - "description": "NodeStatus is information about the current status of a node.", - "properties": { - "addresses": { - "description": "List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeAddress" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "allocatable": { - "description": "Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "capacity": { - "description": "Capacity represents the total resources of a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "conditions": { - "description": "Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "daemonEndpoints": { - "description": "Endpoints of daemons running on the Node.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeDaemonEndpoints" - }, - "images": { - "description": "List of container images on this node", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerImage" - } - }, - "nodeInfo": { - "description": "Set of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeSystemInfo" - }, - "phase": { - "description": "NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.", - "type": "string" - }, - "volumesAttached": { - "description": "List of volumes that are attached to the node.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.AttachedVolume" - } - }, - "volumesInUse": { - "description": "List of attachable volumes in use (mounted) by the node.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.NodeSystemInfo": { - "description": "NodeSystemInfo is a set of ids/uuids to uniquely identify the node.", - "required": [ - "machineID", - "systemUUID", - "bootID", - "kernelVersion", - "osImage", - "containerRuntimeVersion", - "kubeletVersion", - "kubeProxyVersion", - "operatingSystem", - "architecture" - ], - "properties": { - "architecture": { - "description": "The Architecture reported by the node", - "type": "string" - }, - "bootID": { - "description": "Boot ID reported by the node.", - "type": "string" - }, - "containerRuntimeVersion": { - "description": "ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).", - "type": "string" - }, - "kernelVersion": { - "description": "Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).", - "type": "string" - }, - "kubeProxyVersion": { - "description": "KubeProxy Version reported by the node.", - "type": "string" - }, - "kubeletVersion": { - "description": "Kubelet Version reported by the node.", - "type": "string" - }, - "machineID": { - "description": "MachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html", - "type": "string" - }, - "operatingSystem": { - "description": "The Operating System reported by the node", - "type": "string" - }, - "osImage": { - "description": "OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).", - "type": "string" - }, - "systemUUID": { - "description": "SystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ObjectFieldSelector": { - "description": "ObjectFieldSelector selects an APIVersioned field of an object.", - "required": [ - "fieldPath" - ], - "properties": { - "apiVersion": { - "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", - "type": "string" - }, - "fieldPath": { - "description": "Path of the field to select in the specified API version.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ObjectReference": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "properties": { - "apiVersion": { - "description": "API version of the referent.", - "type": "string" - }, - "fieldPath": { - "description": "If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.", - "type": "string" - }, - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "namespace": { - "description": "Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/", - "type": "string" - }, - "resourceVersion": { - "description": "Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency", - "type": "string" - }, - "uid": { - "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolume": { - "description": "PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeSpec" - }, - "status": { - "description": "Status represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "PersistentVolume" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim": { - "description": "PersistentVolumeClaim is a user's request for and claim to a persistent volume", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimSpec" - }, - "status": { - "description": "Status represents the current information/status of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "PersistentVolumeClaim" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimList": { - "description": "PersistentVolumeClaimList is a list of PersistentVolumeClaim items.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "PersistentVolumeClaimList" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimSpec": { - "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", - "properties": { - "accessModes": { - "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", - "type": "array", - "items": { - "type": "string" - } - }, - "resources": { - "description": "Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceRequirements" - }, - "selector": { - "description": "A label query over volumes to consider for binding.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "storageClassName": { - "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", - "type": "string" - }, - "volumeName": { - "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimStatus": { - "description": "PersistentVolumeClaimStatus is the current status of a persistent volume claim.", - "properties": { - "accessModes": { - "description": "AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", - "type": "array", - "items": { - "type": "string" - } - }, - "capacity": { - "description": "Represents the actual resources of the underlying volume.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "phase": { - "description": "Phase represents the current phase of PersistentVolumeClaim.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimVolumeSource": { - "description": "PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system).", - "required": [ - "claimName" - ], - "properties": { - "claimName": { - "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", - "type": "string" - }, - "readOnly": { - "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", - "type": "boolean" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeList": { - "description": "PersistentVolumeList is a list of PersistentVolume items.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "PersistentVolumeList" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeSpec": { - "description": "PersistentVolumeSpec is the specification of a persistent volume.", - "properties": { - "accessModes": { - "description": "AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes", - "type": "array", - "items": { - "type": "string" - } - }, - "awsElasticBlockStore": { - "description": "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.AWSElasticBlockStoreVolumeSource" - }, - "azureDisk": { - "description": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.AzureDiskVolumeSource" - }, - "azureFile": { - "description": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.AzureFileVolumeSource" - }, - "capacity": { - "description": "A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "cephfs": { - "description": "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.CephFSVolumeSource" - }, - "cinder": { - "description": "Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.CinderVolumeSource" - }, - "claimRef": { - "description": "ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectReference" - }, - "fc": { - "description": "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.FCVolumeSource" - }, - "flexVolume": { - "description": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.FlexVolumeSource" - }, - "flocker": { - "description": "Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.FlockerVolumeSource" - }, - "gcePersistentDisk": { - "description": "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.GCEPersistentDiskVolumeSource" - }, - "glusterfs": { - "description": "Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.GlusterfsVolumeSource" - }, - "hostPath": { - "description": "HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.HostPathVolumeSource" - }, - "iscsi": { - "description": "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ISCSIVolumeSource" - }, - "local": { - "description": "Local represents directly-attached storage with node affinity", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalVolumeSource" - }, - "nfs": { - "description": "NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.NFSVolumeSource" - }, - "persistentVolumeReclaimPolicy": { - "description": "What happens to a persistent volume when released from its claim. Valid options are Retain (default) and Recycle. Recycling must be supported by the volume plugin underlying this persistent volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming", - "type": "string" - }, - "photonPersistentDisk": { - "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PhotonPersistentDiskVolumeSource" - }, - "portworxVolume": { - "description": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PortworxVolumeSource" - }, - "quobyte": { - "description": "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.QuobyteVolumeSource" - }, - "rbd": { - "description": "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.RBDVolumeSource" - }, - "scaleIO": { - "description": "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ScaleIOVolumeSource" - }, - "storageClassName": { - "description": "Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.", - "type": "string" - }, - "storageos": { - "description": "StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.StorageOSPersistentVolumeSource" - }, - "vsphereVolume": { - "description": "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.VsphereVirtualDiskVolumeSource" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeStatus": { - "description": "PersistentVolumeStatus is the current status of a persistent volume.", - "properties": { - "message": { - "description": "A human-readable message indicating details about why the volume is in this state.", - "type": "string" - }, - "phase": { - "description": "Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase", - "type": "string" - }, - "reason": { - "description": "Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.PhotonPersistentDiskVolumeSource": { - "description": "Represents a Photon Controller persistent disk resource.", - "required": [ - "pdID" - ], - "properties": { - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - "type": "string" - }, - "pdID": { - "description": "ID that identifies Photon Controller persistent disk", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.Pod": { - "description": "Pod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodSpec" - }, - "status": { - "description": "Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "Pod" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.PodAffinity": { - "description": "Pod affinity is a group of inter pod affinity scheduling rules.", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.WeightedPodAffinityTerm" - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodAffinityTerm" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.PodAffinityTerm": { - "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e tches that of any node on which a pod of the set of pods is running", - "properties": { - "labelSelector": { - "description": "A label query over a set of resources, in this case pods.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "namespaces": { - "description": "namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"", - "type": "array", - "items": { - "type": "string" - } - }, - "topologyKey": { - "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. For PreferredDuringScheduling pod anti-affinity, empty topologyKey is interpreted as \"all topologies\" (\"all topologies\" here means all the topologyKeys indicated by scheduler command-line argument --failure-domains); for affinity and for RequiredDuringScheduling pod anti-affinity, empty topologyKey is not allowed.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.PodAntiAffinity": { - "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.WeightedPodAffinityTerm" - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodAffinityTerm" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.PodCondition": { - "description": "PodCondition contains details for the current condition of this pod.", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Last time we probed the condition.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status is the status of the condition. Can be True, False, Unknown. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions", - "type": "string" - }, - "type": { - "description": "Type is the type of the condition. Currently only Ready. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.PodList": { - "description": "PodList is a list of Pods.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of pods. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "PodList" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.PodSecurityContext": { - "description": "PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.", - "properties": { - "fsGroup": { - "description": "A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n\n1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n\nIf unset, the Kubelet will not modify the ownership and permissions of any volume.", - "type": "integer", - "format": "int64" - }, - "runAsNonRoot": { - "description": "Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", - "type": "boolean" - }, - "runAsUser": { - "description": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", - "type": "integer", - "format": "int64" - }, - "seLinuxOptions": { - "description": "The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.SELinuxOptions" - }, - "supplementalGroups": { - "description": "A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container.", - "type": "array", - "items": { - "type": "integer", - "format": "int64" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.PodSpec": { - "description": "PodSpec is a description of a pod.", - "required": [ - "containers" - ], - "properties": { - "activeDeadlineSeconds": { - "description": "Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.", - "type": "integer", - "format": "int64" - }, - "affinity": { - "description": "If specified, the pod's scheduling constraints", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Affinity" - }, - "automountServiceAccountToken": { - "description": "AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.", - "type": "boolean" - }, - "containers": { - "description": "List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Container" - }, - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge" - }, - "dnsPolicy": { - "description": "Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", - "type": "string" - }, - "hostAliases": { - "description": "HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.HostAlias" - }, - "x-kubernetes-patch-merge-key": "ip", - "x-kubernetes-patch-strategy": "merge" - }, - "hostIPC": { - "description": "Use the host's ipc namespace. Optional: Default to false.", - "type": "boolean" - }, - "hostNetwork": { - "description": "Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.", - "type": "boolean" - }, - "hostPID": { - "description": "Use the host's pid namespace. Optional: Default to false.", - "type": "boolean" - }, - "hostname": { - "description": "Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.", - "type": "string" - }, - "imagePullSecrets": { - "description": "ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalObjectReference" - }, - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge" - }, - "initContainers": { - "description": "List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Container" - }, - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge" - }, - "nodeName": { - "description": "NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.", - "type": "string" - }, - "nodeSelector": { - "description": "NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "restartPolicy": { - "description": "Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy", - "type": "string" - }, - "schedulerName": { - "description": "If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.", - "type": "string" - }, - "securityContext": { - "description": "SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodSecurityContext" - }, - "serviceAccount": { - "description": "DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.", - "type": "string" - }, - "serviceAccountName": { - "description": "ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", - "type": "string" - }, - "subdomain": { - "description": "If specified, the fully qualified Pod hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the pod will not have a domainname at all.", - "type": "string" - }, - "terminationGracePeriodSeconds": { - "description": "Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.", - "type": "integer", - "format": "int64" - }, - "tolerations": { - "description": "If specified, the pod's tolerations.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Toleration" - } - }, - "volumes": { - "description": "List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Volume" - }, - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.PodStatus": { - "description": "PodStatus represents information about the status of a pod. Status may trail the actual state of a system.", - "properties": { - "conditions": { - "description": "Current service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "containerStatuses": { - "description": "The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerStatus" - } - }, - "hostIP": { - "description": "IP address of the host to which the pod is assigned. Empty if not yet scheduled.", - "type": "string" - }, - "initContainerStatuses": { - "description": "The list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerStatus" - } - }, - "message": { - "description": "A human readable message indicating details about why the pod is in this condition.", - "type": "string" - }, - "phase": { - "description": "Current condition of the pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase", - "type": "string" - }, - "podIP": { - "description": "IP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated.", - "type": "string" - }, - "qosClass": { - "description": "The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://github.com/kubernetes/kubernetes/blob/master/docs/design/resource-qos.md", - "type": "string" - }, - "reason": { - "description": "A brief CamelCase message indicating details about why the pod is in this state. e.g. 'OutOfDisk'", - "type": "string" - }, - "startTime": { - "description": "RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.PodTemplate": { - "description": "PodTemplate describes a template for creating copies of a predefined pod.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "template": { - "description": "Template defines the pods that will be created from this pod template. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "PodTemplate" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.PodTemplateList": { - "description": "PodTemplateList is a list of PodTemplates.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of pod templates", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplate" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "PodTemplateList" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec": { - "description": "PodTemplateSpec describes the data a pod should have when created from a template", - "properties": { - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodSpec" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.PortworxVolumeSource": { - "description": "PortworxVolumeSource represents a Portworx volume resource.", - "required": [ - "volumeID" - ], - "properties": { - "fsType": { - "description": "FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.", - "type": "string" - }, - "readOnly": { - "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - }, - "volumeID": { - "description": "VolumeID uniquely identifies a Portworx volume", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.PreferredSchedulingTerm": { - "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", - "required": [ - "weight", - "preference" - ], - "properties": { - "preference": { - "description": "A node selector term, associated with the corresponding weight.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeSelectorTerm" - }, - "weight": { - "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.Probe": { - "description": "Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.", - "properties": { - "exec": { - "description": "One and only one of the following should be specified. Exec specifies the action to take.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ExecAction" - }, - "failureThreshold": { - "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", - "type": "integer", - "format": "int32" - }, - "httpGet": { - "description": "HTTPGet specifies the http request to perform.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.HTTPGetAction" - }, - "initialDelaySeconds": { - "description": "Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", - "type": "integer", - "format": "int32" - }, - "periodSeconds": { - "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", - "type": "integer", - "format": "int32" - }, - "successThreshold": { - "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", - "type": "integer", - "format": "int32" - }, - "tcpSocket": { - "description": "TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.TCPSocketAction" - }, - "timeoutSeconds": { - "description": "Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ProjectedVolumeSource": { - "description": "Represents a projected volume source", - "required": [ - "sources" - ], - "properties": { - "defaultMode": { - "description": "Mode bits to use on created files by default. Must be a value between 0 and 0777. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - "type": "integer", - "format": "int32" - }, - "sources": { - "description": "list of volume projections", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.VolumeProjection" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.QuobyteVolumeSource": { - "description": "Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.", - "required": [ - "registry", - "volume" - ], - "properties": { - "group": { - "description": "Group to map volume access to Default is no group", - "type": "string" - }, - "readOnly": { - "description": "ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.", - "type": "boolean" - }, - "registry": { - "description": "Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes", - "type": "string" - }, - "user": { - "description": "User to map volume access to Defaults to serivceaccount user", - "type": "string" - }, - "volume": { - "description": "Volume is a string that references an already created Quobyte volume by name.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.RBDVolumeSource": { - "description": "Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.", - "required": [ - "monitors", - "image" - ], - "properties": { - "fsType": { - "description": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd", - "type": "string" - }, - "image": { - "description": "The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "string" - }, - "keyring": { - "description": "Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "string" - }, - "monitors": { - "description": "A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "array", - "items": { - "type": "string" - } - }, - "pool": { - "description": "The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "string" - }, - "readOnly": { - "description": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "boolean" - }, - "secretRef": { - "description": "SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalObjectReference" - }, - "user": { - "description": "The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ReplicationController": { - "description": "ReplicationController represents the configuration of a replication controller.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "If the Labels of a ReplicationController are empty, they are defaulted to be the same as the Pod(s) that the replication controller manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the specification of the desired behavior of the replication controller. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationControllerSpec" - }, - "status": { - "description": "Status is the most recently observed status of the replication controller. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationControllerStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "ReplicationController" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.ReplicationControllerCondition": { - "description": "ReplicationControllerCondition describes the state of a replication controller at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "The last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of replication controller condition.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ReplicationControllerList": { - "description": "ReplicationControllerList is a collection of replication controllers.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of replication controllers. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "ReplicationControllerList" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.ReplicationControllerSpec": { - "description": "ReplicationControllerSpec is the specification of a replication controller.", - "properties": { - "minReadySeconds": { - "description": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "template": { - "description": "Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ReplicationControllerStatus": { - "description": "ReplicationControllerStatus represents the current status of a replication controller.", - "required": [ - "replicas" - ], - "properties": { - "availableReplicas": { - "description": "The number of available replicas (ready for at least minReadySeconds) for this replication controller.", - "type": "integer", - "format": "int32" - }, - "conditions": { - "description": "Represents the latest available observations of a replication controller's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationControllerCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "fullyLabeledReplicas": { - "description": "The number of pods that have labels matching the labels of the pod template of the replication controller.", - "type": "integer", - "format": "int32" - }, - "observedGeneration": { - "description": "ObservedGeneration reflects the generation of the most recently observed replication controller.", - "type": "integer", - "format": "int64" - }, - "readyReplicas": { - "description": "The number of ready replicas for this replication controller.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ResourceFieldSelector": { - "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", - "required": [ - "resource" - ], - "properties": { - "containerName": { - "description": "Container name: required for volumes, optional for env vars", - "type": "string" - }, - "divisor": { - "description": "Specifies the output format of the exposed resources, defaults to \"1\"", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - }, - "resource": { - "description": "Required: resource to select", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ResourceQuota": { - "description": "ResourceQuota sets aggregate quota restrictions enforced per namespace", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the desired quota. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuotaSpec" - }, - "status": { - "description": "Status defines the actual enforced quota and its current usage. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuotaStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "ResourceQuota" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.ResourceQuotaList": { - "description": "ResourceQuotaList is a list of ResourceQuota items.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of ResourceQuota objects. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "ResourceQuotaList" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.ResourceQuotaSpec": { - "description": "ResourceQuotaSpec defines the desired hard limits to enforce for Quota.", - "properties": { - "hard": { - "description": "Hard is the set of desired hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "scopes": { - "description": "A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ResourceQuotaStatus": { - "description": "ResourceQuotaStatus defines the enforced hard limits and observed use.", - "properties": { - "hard": { - "description": "Hard is the set of enforced hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "used": { - "description": "Used is the current observed total usage of the resource in the namespace.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ResourceRequirements": { - "description": "ResourceRequirements describes the compute resource requirements.", - "properties": { - "limits": { - "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - }, - "requests": { - "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.SELinuxOptions": { - "description": "SELinuxOptions are the labels to be applied to the container", - "properties": { - "level": { - "description": "Level is SELinux level label that applies to the container.", - "type": "string" - }, - "role": { - "description": "Role is a SELinux role label that applies to the container.", - "type": "string" - }, - "type": { - "description": "Type is a SELinux type label that applies to the container.", - "type": "string" - }, - "user": { - "description": "User is a SELinux user label that applies to the container.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ScaleIOVolumeSource": { - "description": "ScaleIOVolumeSource represents a persistent ScaleIO volume", - "required": [ - "gateway", - "system", - "secretRef" - ], - "properties": { - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - "type": "string" - }, - "gateway": { - "description": "The host address of the ScaleIO API Gateway.", - "type": "string" - }, - "protectionDomain": { - "description": "The name of the Protection Domain for the configured storage (defaults to \"default\").", - "type": "string" - }, - "readOnly": { - "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - }, - "secretRef": { - "description": "SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalObjectReference" - }, - "sslEnabled": { - "description": "Flag to enable/disable SSL communication with Gateway, default false", - "type": "boolean" - }, - "storageMode": { - "description": "Indicates whether the storage for a volume should be thick or thin (defaults to \"thin\").", - "type": "string" - }, - "storagePool": { - "description": "The Storage Pool associated with the protection domain (defaults to \"default\").", - "type": "string" - }, - "system": { - "description": "The name of the storage system as configured in ScaleIO.", - "type": "string" - }, - "volumeName": { - "description": "The name of a volume already created in the ScaleIO system that is associated with this volume source.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.Secret": { - "description": "Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "data": { - "description": "Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4", - "type": "object", - "additionalProperties": { - "type": "string", - "format": "byte" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "stringData": { - "description": "stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "type": { - "description": "Used to facilitate programmatic handling of secret data.", - "type": "string" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "Secret" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.SecretEnvSource": { - "description": "SecretEnvSource selects a Secret to populate the environment variables with.\n\nThe contents of the target Secret's Data field will represent the key-value pairs as environment variables.", - "properties": { - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "optional": { - "description": "Specify whether the Secret must be defined", - "type": "boolean" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.SecretKeySelector": { - "description": "SecretKeySelector selects a key of a Secret.", - "required": [ - "key" - ], - "properties": { - "key": { - "description": "The key of the secret to select from. Must be a valid secret key.", - "type": "string" - }, - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "optional": { - "description": "Specify whether the Secret or it's key must be defined", - "type": "boolean" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.SecretList": { - "description": "SecretList is a list of Secret.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of secret objects. More info: https://kubernetes.io/docs/concepts/configuration/secret", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Secret" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "SecretList" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.SecretProjection": { - "description": "Adapts a secret into a projected volume.\n\nThe contents of the target Secret's Data field will be presented in a projected volume as files using the keys in the Data field as the file names. Note that this is identical to a secret volume source without the default mode.", - "properties": { - "items": { - "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.KeyToPath" - } - }, - "name": { - "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "optional": { - "description": "Specify whether the Secret or its key must be defined", - "type": "boolean" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.SecretVolumeSource": { - "description": "Adapts a Secret into a volume.\n\nThe contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.", - "properties": { - "defaultMode": { - "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - "type": "integer", - "format": "int32" - }, - "items": { - "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.KeyToPath" - } - }, - "optional": { - "description": "Specify whether the Secret or it's keys must be defined", - "type": "boolean" - }, - "secretName": { - "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.SecurityContext": { - "description": "SecurityContext holds security configuration that will be applied to a container. Some fields are present in both SecurityContext and PodSecurityContext. When both are set, the values in SecurityContext take precedence.", - "properties": { - "capabilities": { - "description": "The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Capabilities" - }, - "privileged": { - "description": "Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.", - "type": "boolean" - }, - "readOnlyRootFilesystem": { - "description": "Whether this container has a read-only root filesystem. Default is false.", - "type": "boolean" - }, - "runAsNonRoot": { - "description": "Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", - "type": "boolean" - }, - "runAsUser": { - "description": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", - "type": "integer", - "format": "int64" - }, - "seLinuxOptions": { - "description": "The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.SELinuxOptions" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.Service": { - "description": "Service is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceSpec" - }, - "status": { - "description": "Most recently observed status of the service. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "Service" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.ServiceAccount": { - "description": "ServiceAccount binds together: * a name, understood by users, and perhaps by peripheral systems, for an identity * a principal that can be authenticated and authorized * a set of secrets", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "automountServiceAccountToken": { - "description": "AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted. Can be overridden at the pod level.", - "type": "boolean" - }, - "imagePullSecrets": { - "description": "ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalObjectReference" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "secrets": { - "description": "Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectReference" - }, - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "ServiceAccount" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.ServiceAccountList": { - "description": "ServiceAccountList is a list of ServiceAccount objects", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of ServiceAccounts. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccount" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "ServiceAccountList" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.ServiceList": { - "description": "ServiceList holds a list of services.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of services", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Service" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "version": "v1", - "kind": "ServiceList" - } - ] - }, - "io.k8s.kubernetes.pkg.api.v1.ServicePort": { - "description": "ServicePort contains information on service's port.", - "required": [ - "port" - ], - "properties": { - "name": { - "description": "The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. This maps to the 'Name' field in EndpointPort objects. Optional if only one ServicePort is defined on this service.", - "type": "string" - }, - "nodePort": { - "description": "The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport", - "type": "integer", - "format": "int32" - }, - "port": { - "description": "The port that will be exposed by this service.", - "type": "integer", - "format": "int32" - }, - "protocol": { - "description": "The IP protocol for this port. Supports \"TCP\" and \"UDP\". Default is TCP.", - "type": "string" - }, - "targetPort": { - "description": "Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ServiceSpec": { - "description": "ServiceSpec describes the attributes that a user creates on a service.", - "properties": { - "clusterIP": { - "description": "clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are \"None\", empty string (\"\"), or a valid IP address. \"None\" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies", - "type": "string" - }, - "externalIPs": { - "description": "externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system.", - "type": "array", - "items": { - "type": "string" - } - }, - "externalName": { - "description": "externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid DNS name and requires Type to be ExternalName.", - "type": "string" - }, - "externalTrafficPolicy": { - "description": "externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. \"Local\" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. \"Cluster\" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.", - "type": "string" - }, - "healthCheckNodePort": { - "description": "healthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local.", - "type": "integer", - "format": "int32" - }, - "loadBalancerIP": { - "description": "Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.", - "type": "string" - }, - "loadBalancerSourceRanges": { - "description": "If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\" More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/", - "type": "array", - "items": { - "type": "string" - } - }, - "ports": { - "description": "The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ServicePort" - }, - "x-kubernetes-patch-merge-key": "port", - "x-kubernetes-patch-strategy": "merge" - }, - "selector": { - "description": "Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "sessionAffinity": { - "description": "Supports \"ClientIP\" and \"None\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies", - "type": "string" - }, - "type": { - "description": "type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \"ExternalName\" maps to the specified externalName. \"ClusterIP\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is \"None\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. \"NodePort\" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. \"LoadBalancer\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.ServiceStatus": { - "description": "ServiceStatus represents the current status of a service.", - "properties": { - "loadBalancer": { - "description": "LoadBalancer contains the current status of the load-balancer, if one is present.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LoadBalancerStatus" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.StorageOSPersistentVolumeSource": { - "description": "Represents a StorageOS persistent volume resource.", - "properties": { - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - "type": "string" - }, - "readOnly": { - "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - }, - "secretRef": { - "description": "SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectReference" - }, - "volumeName": { - "description": "VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.", - "type": "string" - }, - "volumeNamespace": { - "description": "VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.StorageOSVolumeSource": { - "description": "Represents a StorageOS persistent volume resource.", - "properties": { - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - "type": "string" - }, - "readOnly": { - "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "type": "boolean" - }, - "secretRef": { - "description": "SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalObjectReference" - }, - "volumeName": { - "description": "VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.", - "type": "string" - }, - "volumeNamespace": { - "description": "VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.TCPSocketAction": { - "description": "TCPSocketAction describes an action based on opening a socket", - "required": [ - "port" - ], - "properties": { - "host": { - "description": "Optional: Host name to connect to, defaults to the pod IP.", - "type": "string" - }, - "port": { - "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.Taint": { - "description": "The node this Taint is attached to has the effect \"effect\" on any pod that that does not tolerate the Taint.", - "required": [ - "key", - "effect" - ], - "properties": { - "effect": { - "description": "Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute.", - "type": "string" - }, - "key": { - "description": "Required. The taint key to be applied to a node.", - "type": "string", - "x-kubernetes-patch-merge-key": "key", - "x-kubernetes-patch-strategy": "merge" - }, - "timeAdded": { - "description": "TimeAdded represents the time at which the taint was added. It is only written for NoExecute taints.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "value": { - "description": "Required. The taint value corresponding to the taint key.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.Toleration": { - "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", - "properties": { - "effect": { - "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", - "type": "string" - }, - "key": { - "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", - "type": "string", - "x-kubernetes-patch-merge-key": "key", - "x-kubernetes-patch-strategy": "merge" - }, - "operator": { - "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", - "type": "string" - }, - "tolerationSeconds": { - "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", - "type": "integer", - "format": "int64" - }, - "value": { - "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.Volume": { - "description": "Volume represents a named volume in a pod that may be accessed by any container in the pod.", - "required": [ - "name" - ], - "properties": { - "awsElasticBlockStore": { - "description": "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.AWSElasticBlockStoreVolumeSource" - }, - "azureDisk": { - "description": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.AzureDiskVolumeSource" - }, - "azureFile": { - "description": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.AzureFileVolumeSource" - }, - "cephfs": { - "description": "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.CephFSVolumeSource" - }, - "cinder": { - "description": "Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.CinderVolumeSource" - }, - "configMap": { - "description": "ConfigMap represents a configMap that should populate this volume", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMapVolumeSource" - }, - "downwardAPI": { - "description": "DownwardAPI represents downward API about the pod that should populate this volume", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeSource" - }, - "emptyDir": { - "description": "EmptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.EmptyDirVolumeSource" - }, - "fc": { - "description": "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.FCVolumeSource" - }, - "flexVolume": { - "description": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.FlexVolumeSource" - }, - "flocker": { - "description": "Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.FlockerVolumeSource" - }, - "gcePersistentDisk": { - "description": "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.GCEPersistentDiskVolumeSource" - }, - "gitRepo": { - "description": "GitRepo represents a git repository at a particular revision.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.GitRepoVolumeSource" - }, - "glusterfs": { - "description": "Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.GlusterfsVolumeSource" - }, - "hostPath": { - "description": "HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.HostPathVolumeSource" - }, - "iscsi": { - "description": "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ISCSIVolumeSource" - }, - "name": { - "description": "Volume's name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - "type": "string" - }, - "nfs": { - "description": "NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.NFSVolumeSource" - }, - "persistentVolumeClaim": { - "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimVolumeSource" - }, - "photonPersistentDisk": { - "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PhotonPersistentDiskVolumeSource" - }, - "portworxVolume": { - "description": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PortworxVolumeSource" - }, - "projected": { - "description": "Items for all in one resources secrets, configmaps, and downward API", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ProjectedVolumeSource" - }, - "quobyte": { - "description": "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.QuobyteVolumeSource" - }, - "rbd": { - "description": "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.RBDVolumeSource" - }, - "scaleIO": { - "description": "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ScaleIOVolumeSource" - }, - "secret": { - "description": "Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.SecretVolumeSource" - }, - "storageos": { - "description": "StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.StorageOSVolumeSource" - }, - "vsphereVolume": { - "description": "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.VsphereVirtualDiskVolumeSource" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.VolumeMount": { - "description": "VolumeMount describes a mounting of a Volume within a container.", - "required": [ - "name", - "mountPath" - ], - "properties": { - "mountPath": { - "description": "Path within the container at which the volume should be mounted. Must not contain ':'.", - "type": "string" - }, - "name": { - "description": "This must match the Name of a Volume.", - "type": "string" - }, - "readOnly": { - "description": "Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.", - "type": "boolean" - }, - "subPath": { - "description": "Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root).", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.VolumeProjection": { - "description": "Projection that may be projected along with other supported volume types", - "properties": { - "configMap": { - "description": "information about the configMap data to project", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMapProjection" - }, - "downwardAPI": { - "description": "information about the downwardAPI data to project", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.DownwardAPIProjection" - }, - "secret": { - "description": "information about the secret data to project", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.SecretProjection" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.VsphereVirtualDiskVolumeSource": { - "description": "Represents a vSphere volume resource.", - "required": [ - "volumePath" - ], - "properties": { - "fsType": { - "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - "type": "string" - }, - "storagePolicyID": { - "description": "Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.", - "type": "string" - }, - "storagePolicyName": { - "description": "Storage Policy Based Management (SPBM) profile name.", - "type": "string" - }, - "volumePath": { - "description": "Path that identifies vSphere volume vmdk", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.api.v1.WeightedPodAffinityTerm": { - "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", - "required": [ - "weight", - "podAffinityTerm" - ], - "properties": { - "podAffinityTerm": { - "description": "Required. A pod affinity term, associated with the corresponding weight.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodAffinityTerm" - }, - "weight": { - "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.AdmissionHookClientConfig": { - "description": "AdmissionHookClientConfig contains the information to make a TLS connection with the webhook", - "required": [ - "service", - "caBundle" - ], - "properties": { - "caBundle": { - "description": "CABundle is a PEM encoded CA bundle which will be used to validate webhook's server certificate. Required", - "type": "string", - "format": "byte" - }, - "service": { - "description": "Service is a reference to the service for this webhook. If there is only one port open for the service, that port will be used. If there are multiple ports open, port 443 will be used if it is open, otherwise it is an error. Required", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ServiceReference" - } - } - }, - "io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHook": { - "description": "ExternalAdmissionHook describes an external admission webhook and the resources and operations it applies to.", - "required": [ - "name", - "clientConfig" - ], - "properties": { - "clientConfig": { - "description": "ClientConfig defines how to communicate with the hook. Required", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.AdmissionHookClientConfig" - }, - "failurePolicy": { - "description": "FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Ignore.", - "type": "string" - }, - "name": { - "description": "The name of the external admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \"imagepolicy\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.", - "type": "string" - }, - "rules": { - "description": "Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.RuleWithOperations" - } - } - } - }, - "io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfiguration": { - "description": "ExternalAdmissionHookConfiguration describes the configuration of initializers.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "externalAdmissionHooks": { - "description": "ExternalAdmissionHooks is a list of external admission webhooks and the affected resources and operations.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHook" - }, - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "ExternalAdmissionHookConfiguration" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfigurationList": { - "description": "ExternalAdmissionHookConfigurationList is a list of ExternalAdmissionHookConfiguration.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of ExternalAdmissionHookConfiguration.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfiguration" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "ExternalAdmissionHookConfigurationList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.Initializer": { - "description": "Initializer describes the name and the failure policy of an initializer, and what resources it applies to.", - "required": [ - "name" - ], - "properties": { - "failurePolicy": { - "description": "FailurePolicy defines what happens if the responsible initializer controller fails to takes action. Allowed values are Ignore, or Fail. If \"Ignore\" is set, initializer is removed from the initializers list of an object if the timeout is reached; If \"Fail\" is set, admissionregistration returns timeout error if the timeout is reached.", - "type": "string" - }, - "name": { - "description": "Name is the identifier of the initializer. It will be added to the object that needs to be initialized. Name should be fully qualified, e.g., alwayspullimages.kubernetes.io, where \"alwayspullimages\" is the name of the webhook, and kubernetes.io is the name of the organization. Required", - "type": "string" - }, - "rules": { - "description": "Rules describes what resources/subresources the initializer cares about. The initializer cares about an operation if it matches _any_ Rule. Rule.Resources must not include subresources.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.Rule" - } - } - } - }, - "io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfiguration": { - "description": "InitializerConfiguration describes the configuration of initializers.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "initializers": { - "description": "Initializers is a list of resources and their default initializers Order-sensitive. When merging multiple InitializerConfigurations, we sort the initializers from different InitializerConfigurations by the name of the InitializerConfigurations; the order of the initializers from the same InitializerConfiguration is preserved.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.Initializer" - }, - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "InitializerConfiguration" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfigurationList": { - "description": "InitializerConfigurationList is a list of InitializerConfiguration.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of InitializerConfiguration.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfiguration" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "admissionregistration.k8s.io", - "version": "v1alpha1", - "kind": "InitializerConfigurationList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.Rule": { - "description": "Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended to make sure that all the tuple expansions are valid.", - "properties": { - "apiGroups": { - "description": "APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.", - "type": "array", - "items": { - "type": "string" - } - }, - "apiVersions": { - "description": "APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.", - "type": "array", - "items": { - "type": "string" - } - }, - "resources": { - "description": "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nDepending on the enclosing object, subresources might not be allowed. Required.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.RuleWithOperations": { - "description": "RuleWithOperations is a tuple of Operations and Resources. It is recommended to make sure that all the tuple expansions are valid.", - "properties": { - "apiGroups": { - "description": "APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.", - "type": "array", - "items": { - "type": "string" - } - }, - "apiVersions": { - "description": "APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.", - "type": "array", - "items": { - "type": "string" - } - }, - "operations": { - "description": "Operations is the operations the admission hook cares about - CREATE, UPDATE, or * for all operations. If '*' is present, the length of the slice must be one. Required.", - "type": "array", - "items": { - "type": "string" - } - }, - "resources": { - "description": "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nDepending on the enclosing object, subresources might not be allowed. Required.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ServiceReference": { - "description": "ServiceReference holds a reference to Service.legacy.k8s.io", - "required": [ - "namespace", - "name" - ], - "properties": { - "name": { - "description": "Name is the name of the service Required", - "type": "string" - }, - "namespace": { - "description": "Namespace is the namespace of the service Required", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision": { - "description": "ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.", - "required": [ - "revision" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "data": { - "description": "Data is the serialized representation of the state.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "revision": { - "description": "Revision indicates the revision of the state represented by Data.", - "type": "integer", - "format": "int64" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "version": "v1beta1", - "kind": "ControllerRevision" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevisionList": { - "description": "ControllerRevisionList is a resource containing a list of ControllerRevision objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of ControllerRevisions", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "version": "v1beta1", - "kind": "ControllerRevisionList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment": { - "description": "Deployment enables declarative updates for Pods and ReplicaSets.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of the Deployment.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentSpec" - }, - "status": { - "description": "Most recently observed status of the Deployment.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "version": "v1beta1", - "kind": "Deployment" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentCondition": { - "description": "DeploymentCondition describes the state of a deployment at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "lastUpdateTime": { - "description": "The last time this condition was updated.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of deployment condition.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentList": { - "description": "DeploymentList is a list of Deployments.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of Deployments.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "version": "v1beta1", - "kind": "DeploymentList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentRollback": { - "description": "DeploymentRollback stores the information required to rollback a deployment.", - "required": [ - "name", - "rollbackTo" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Required: This must match the Name of a deployment.", - "type": "string" - }, - "rollbackTo": { - "description": "The config of this deployment rollback.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollbackConfig" - }, - "updatedAnnotations": { - "description": "The annotations to be updated to a deployment", - "type": "object", - "additionalProperties": { - "type": "string" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "version": "v1beta1", - "kind": "DeploymentRollback" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentSpec": { - "description": "DeploymentSpec is the specification of the desired behavior of the Deployment.", - "required": [ - "template" - ], - "properties": { - "minReadySeconds": { - "description": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - "type": "integer", - "format": "int32" - }, - "paused": { - "description": "Indicates that the deployment is paused.", - "type": "boolean" - }, - "progressDeadlineSeconds": { - "description": "The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Once autoRollback is implemented, the deployment controller will automatically rollback failed deployments. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.", - "type": "integer", - "format": "int32" - }, - "revisionHistoryLimit": { - "description": "The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 2.", - "type": "integer", - "format": "int32" - }, - "rollbackTo": { - "description": "The config this deployment is rolling back to. Will be cleared after rollback is done.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollbackConfig" - }, - "selector": { - "description": "Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "strategy": { - "description": "The deployment strategy to use to replace existing pods with new ones.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentStrategy" - }, - "template": { - "description": "Template describes the pods that will be created.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec" - } - } - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentStatus": { - "description": "DeploymentStatus is the most recently observed status of the Deployment.", - "properties": { - "availableReplicas": { - "description": "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", - "type": "integer", - "format": "int32" - }, - "collisionCount": { - "description": "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", - "type": "integer", - "format": "int64" - }, - "conditions": { - "description": "Represents the latest available observations of a deployment's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "observedGeneration": { - "description": "The generation observed by the deployment controller.", - "type": "integer", - "format": "int64" - }, - "readyReplicas": { - "description": "Total number of ready pods targeted by this deployment.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Total number of non-terminated pods targeted by this deployment (their labels match the selector).", - "type": "integer", - "format": "int32" - }, - "unavailableReplicas": { - "description": "Total number of unavailable pods targeted by this deployment.", - "type": "integer", - "format": "int32" - }, - "updatedReplicas": { - "description": "Total number of non-terminated pods targeted by this deployment that have the desired template spec.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentStrategy": { - "description": "DeploymentStrategy describes how to replace existing pods with new ones.", - "properties": { - "rollingUpdate": { - "description": "Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollingUpdateDeployment" - }, - "type": { - "description": "Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollbackConfig": { - "properties": { - "revision": { - "description": "The revision to rollback to. If set to 0, rollback to the last revision.", - "type": "integer", - "format": "int64" - } - } - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollingUpdateDeployment": { - "description": "Spec to control the desired behavior of rolling update.", - "properties": { - "maxSurge": { - "description": "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - }, - "maxUnavailable": { - "description": "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - } - } - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollingUpdateStatefulSetStrategy": { - "description": "RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.", - "properties": { - "partition": { - "description": "Partition indicates the ordinal at which the StatefulSet should be partitioned.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.Scale": { - "description": "Scale represents a scaling request for a resource.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ScaleSpec" - }, - "status": { - "description": "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ScaleStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "version": "v1beta1", - "kind": "Scale" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.ScaleSpec": { - "description": "ScaleSpec describes the attributes of a scale subresource", - "properties": { - "replicas": { - "description": "desired number of instances for the scaled object.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.ScaleStatus": { - "description": "ScaleStatus represents the current status of a scale subresource.", - "required": [ - "replicas" - ], - "properties": { - "replicas": { - "description": "actual number of observed instances of the scaled object.", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "targetSelector": { - "description": "label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet": { - "description": "StatefulSet represents a set of pods with consistent identities. Identities are defined as:\n - Network: A single stable DNS and hostname.\n - Storage: As many VolumeClaims as requested.\nThe StatefulSet guarantees that a given network identity will always map to the same storage identity.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the desired identities of pods in this set.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetSpec" - }, - "status": { - "description": "Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "version": "v1beta1", - "kind": "StatefulSet" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetList": { - "description": "StatefulSetList is a collection of StatefulSets.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "apps", - "version": "v1beta1", - "kind": "StatefulSetList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetSpec": { - "description": "A StatefulSetSpec is the specification of a StatefulSet.", - "required": [ - "template", - "serviceName" - ], - "properties": { - "podManagementPolicy": { - "description": "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.", - "type": "string" - }, - "replicas": { - "description": "replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.", - "type": "integer", - "format": "int32" - }, - "revisionHistoryLimit": { - "description": "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "serviceName": { - "description": "serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.", - "type": "string" - }, - "template": { - "description": "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec" - }, - "updateStrategy": { - "description": "updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetUpdateStrategy" - }, - "volumeClaimTemplates": { - "description": "volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim" - } - } - } - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetStatus": { - "description": "StatefulSetStatus represents the current state of a StatefulSet.", - "required": [ - "replicas" - ], - "properties": { - "currentReplicas": { - "description": "currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.", - "type": "integer", - "format": "int32" - }, - "currentRevision": { - "description": "currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).", - "type": "string" - }, - "observedGeneration": { - "description": "observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.", - "type": "integer", - "format": "int64" - }, - "readyReplicas": { - "description": "readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "replicas is the number of Pods created by the StatefulSet controller.", - "type": "integer", - "format": "int32" - }, - "updateRevision": { - "description": "updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)", - "type": "string" - }, - "updatedReplicas": { - "description": "updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetUpdateStrategy": { - "description": "StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.", - "properties": { - "rollingUpdate": { - "description": "RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollingUpdateStatefulSetStrategy" - }, - "type": { - "description": "Type indicates the type of the StatefulSetUpdateStrategy.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReview": { - "description": "TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.", - "required": [ - "spec" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec holds information about the request being evaluated", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReviewSpec" - }, - "status": { - "description": "Status is filled in by the server and indicates whether the request can be authenticated.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReviewStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "authentication.k8s.io", - "version": "v1", - "kind": "TokenReview" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReviewSpec": { - "description": "TokenReviewSpec is a description of the token authentication request.", - "properties": { - "token": { - "description": "Token is the opaque bearer token.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReviewStatus": { - "description": "TokenReviewStatus is the result of the token authentication request.", - "properties": { - "authenticated": { - "description": "Authenticated indicates that the token was associated with a known user.", - "type": "boolean" - }, - "error": { - "description": "Error indicates that the token couldn't be checked", - "type": "string" - }, - "user": { - "description": "User is the UserInfo associated with the provided token.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1.UserInfo" - } - } - }, - "io.k8s.kubernetes.pkg.apis.authentication.v1.UserInfo": { - "description": "UserInfo holds the information about the user needed to implement the user.Info interface.", - "properties": { - "extra": { - "description": "Any additional information provided by the authenticator.", - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "groups": { - "description": "The names of groups this user is a part of.", - "type": "array", - "items": { - "type": "string" - } - }, - "uid": { - "description": "A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.", - "type": "string" - }, - "username": { - "description": "The name that uniquely identifies this user among all active users.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReview": { - "description": "TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.", - "required": [ - "spec" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec holds information about the request being evaluated", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReviewSpec" - }, - "status": { - "description": "Status is filled in by the server and indicates whether the request can be authenticated.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReviewStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "authentication.k8s.io", - "version": "v1beta1", - "kind": "TokenReview" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReviewSpec": { - "description": "TokenReviewSpec is a description of the token authentication request.", - "properties": { - "token": { - "description": "Token is the opaque bearer token.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReviewStatus": { - "description": "TokenReviewStatus is the result of the token authentication request.", - "properties": { - "authenticated": { - "description": "Authenticated indicates that the token was associated with a known user.", - "type": "boolean" - }, - "error": { - "description": "Error indicates that the token couldn't be checked", - "type": "string" - }, - "user": { - "description": "User is the UserInfo associated with the provided token.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1beta1.UserInfo" - } - } - }, - "io.k8s.kubernetes.pkg.apis.authentication.v1beta1.UserInfo": { - "description": "UserInfo holds the information about the user needed to implement the user.Info interface.", - "properties": { - "extra": { - "description": "Any additional information provided by the authenticator.", - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "groups": { - "description": "The names of groups this user is a part of.", - "type": "array", - "items": { - "type": "string" - } - }, - "uid": { - "description": "A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.", - "type": "string" - }, - "username": { - "description": "The name that uniquely identifies this user among all active users.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1.LocalSubjectAccessReview": { - "description": "LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.", - "required": [ - "spec" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec holds information about the request being evaluated. spec.namespace must be equal to the namespace you made the request against. If empty, it is defaulted.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewSpec" - }, - "status": { - "description": "Status is filled in by the server and indicates whether the request is allowed or not", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "authorization.k8s.io", - "version": "v1", - "kind": "LocalSubjectAccessReview" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1.NonResourceAttributes": { - "description": "NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface", - "properties": { - "path": { - "description": "Path is the URL path of the request", - "type": "string" - }, - "verb": { - "description": "Verb is the standard HTTP verb", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1.ResourceAttributes": { - "description": "ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface", - "properties": { - "group": { - "description": "Group is the API Group of the Resource. \"*\" means all.", - "type": "string" - }, - "name": { - "description": "Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.", - "type": "string" - }, - "namespace": { - "description": "Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview", - "type": "string" - }, - "resource": { - "description": "Resource is one of the existing resource types. \"*\" means all.", - "type": "string" - }, - "subresource": { - "description": "Subresource is one of the existing resource types. \"\" means none.", - "type": "string" - }, - "verb": { - "description": "Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. \"*\" means all.", - "type": "string" - }, - "version": { - "description": "Version is the API Version of the Resource. \"*\" means all.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReview": { - "description": "SelfSubjectAccessReview checks whether or the current user can perform an action. Not filling in a spec.namespace means \"in all namespaces\". Self is a special case, because users should always be able to check whether they can perform an action", - "required": [ - "spec" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec holds information about the request being evaluated. user and groups must be empty", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReviewSpec" - }, - "status": { - "description": "Status is filled in by the server and indicates whether the request is allowed or not", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "authorization.k8s.io", - "version": "v1", - "kind": "SelfSubjectAccessReview" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReviewSpec": { - "description": "SelfSubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set", - "properties": { - "nonResourceAttributes": { - "description": "NonResourceAttributes describes information for a non-resource access request", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.NonResourceAttributes" - }, - "resourceAttributes": { - "description": "ResourceAuthorizationAttributes describes information for a resource access request", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.ResourceAttributes" - } - } - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReview": { - "description": "SubjectAccessReview checks whether or not a user or group can perform an action.", - "required": [ - "spec" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec holds information about the request being evaluated", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewSpec" - }, - "status": { - "description": "Status is filled in by the server and indicates whether the request is allowed or not", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "authorization.k8s.io", - "version": "v1", - "kind": "SubjectAccessReview" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewSpec": { - "description": "SubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set", - "properties": { - "extra": { - "description": "Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here.", - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "groups": { - "description": "Groups is the groups you're testing for.", - "type": "array", - "items": { - "type": "string" - } - }, - "nonResourceAttributes": { - "description": "NonResourceAttributes describes information for a non-resource access request", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.NonResourceAttributes" - }, - "resourceAttributes": { - "description": "ResourceAuthorizationAttributes describes information for a resource access request", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.ResourceAttributes" - }, - "user": { - "description": "User is the user you're testing for. If you specify \"User\" but not \"Groups\", then is it interpreted as \"What if User were not a member of any groups", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewStatus": { - "description": "SubjectAccessReviewStatus", - "required": [ - "allowed" - ], - "properties": { - "allowed": { - "description": "Allowed is required. True if the action would be allowed, false otherwise.", - "type": "boolean" - }, - "evaluationError": { - "description": "EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.", - "type": "string" - }, - "reason": { - "description": "Reason is optional. It indicates why a request was allowed or denied.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1beta1.LocalSubjectAccessReview": { - "description": "LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.", - "required": [ - "spec" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec holds information about the request being evaluated. spec.namespace must be equal to the namespace you made the request against. If empty, it is defaulted.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewSpec" - }, - "status": { - "description": "Status is filled in by the server and indicates whether the request is allowed or not", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "authorization.k8s.io", - "version": "v1beta1", - "kind": "LocalSubjectAccessReview" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1beta1.NonResourceAttributes": { - "description": "NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface", - "properties": { - "path": { - "description": "Path is the URL path of the request", - "type": "string" - }, - "verb": { - "description": "Verb is the standard HTTP verb", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1beta1.ResourceAttributes": { - "description": "ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface", - "properties": { - "group": { - "description": "Group is the API Group of the Resource. \"*\" means all.", - "type": "string" - }, - "name": { - "description": "Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.", - "type": "string" - }, - "namespace": { - "description": "Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview", - "type": "string" - }, - "resource": { - "description": "Resource is one of the existing resource types. \"*\" means all.", - "type": "string" - }, - "subresource": { - "description": "Subresource is one of the existing resource types. \"\" means none.", - "type": "string" - }, - "verb": { - "description": "Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. \"*\" means all.", - "type": "string" - }, - "version": { - "description": "Version is the API Version of the Resource. \"*\" means all.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SelfSubjectAccessReview": { - "description": "SelfSubjectAccessReview checks whether or the current user can perform an action. Not filling in a spec.namespace means \"in all namespaces\". Self is a special case, because users should always be able to check whether they can perform an action", - "required": [ - "spec" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec holds information about the request being evaluated. user and groups must be empty", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SelfSubjectAccessReviewSpec" - }, - "status": { - "description": "Status is filled in by the server and indicates whether the request is allowed or not", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "authorization.k8s.io", - "version": "v1beta1", - "kind": "SelfSubjectAccessReview" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SelfSubjectAccessReviewSpec": { - "description": "SelfSubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set", - "properties": { - "nonResourceAttributes": { - "description": "NonResourceAttributes describes information for a non-resource access request", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.NonResourceAttributes" - }, - "resourceAttributes": { - "description": "ResourceAuthorizationAttributes describes information for a resource access request", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.ResourceAttributes" - } - } - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReview": { - "description": "SubjectAccessReview checks whether or not a user or group can perform an action.", - "required": [ - "spec" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec holds information about the request being evaluated", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewSpec" - }, - "status": { - "description": "Status is filled in by the server and indicates whether the request is allowed or not", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "authorization.k8s.io", - "version": "v1beta1", - "kind": "SubjectAccessReview" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewSpec": { - "description": "SubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set", - "properties": { - "extra": { - "description": "Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here.", - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "group": { - "description": "Groups is the groups you're testing for.", - "type": "array", - "items": { - "type": "string" - } - }, - "nonResourceAttributes": { - "description": "NonResourceAttributes describes information for a non-resource access request", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.NonResourceAttributes" - }, - "resourceAttributes": { - "description": "ResourceAuthorizationAttributes describes information for a resource access request", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.ResourceAttributes" - }, - "user": { - "description": "User is the user you're testing for. If you specify \"User\" but not \"Group\", then is it interpreted as \"What if User were not a member of any groups", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewStatus": { - "description": "SubjectAccessReviewStatus", - "required": [ - "allowed" - ], - "properties": { - "allowed": { - "description": "Allowed is required. True if the action would be allowed, false otherwise.", - "type": "boolean" - }, - "evaluationError": { - "description": "EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.", - "type": "string" - }, - "reason": { - "description": "Reason is optional. It indicates why a request was allowed or denied.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v1.CrossVersionObjectReference": { - "description": "CrossVersionObjectReference contains enough information to let you identify the referred resource.", - "required": [ - "kind", - "name" - ], - "properties": { - "apiVersion": { - "description": "API version of the referent", - "type": "string" - }, - "kind": { - "description": "Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"", - "type": "string" - }, - "name": { - "description": "Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler": { - "description": "configuration of a horizontal pod autoscaler.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "behaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerSpec" - }, - "status": { - "description": "current information about the autoscaler.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "autoscaling", - "version": "v1", - "kind": "HorizontalPodAutoscaler" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerList": { - "description": "list of horizontal pod autoscaler objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "list of horizontal pod autoscaler objects.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "autoscaling", - "version": "v1", - "kind": "HorizontalPodAutoscalerList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerSpec": { - "description": "specification of a horizontal pod autoscaler.", - "required": [ - "scaleTargetRef", - "maxReplicas" - ], - "properties": { - "maxReplicas": { - "description": "upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas.", - "type": "integer", - "format": "int32" - }, - "minReplicas": { - "description": "lower limit for the number of pods that can be set by the autoscaler, default 1.", - "type": "integer", - "format": "int32" - }, - "scaleTargetRef": { - "description": "reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption and will set the desired number of pods by using its Scale subresource.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.CrossVersionObjectReference" - }, - "targetCPUUtilizationPercentage": { - "description": "target average CPU utilization (represented as a percentage of requested CPU) over all the pods; if not specified the default autoscaling policy will be used.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerStatus": { - "description": "current status of a horizontal pod autoscaler", - "required": [ - "currentReplicas", - "desiredReplicas" - ], - "properties": { - "currentCPUUtilizationPercentage": { - "description": "current average CPU utilization over all pods, represented as a percentage of requested CPU, e.g. 70 means that an average pod is using now 70% of its requested CPU.", - "type": "integer", - "format": "int32" - }, - "currentReplicas": { - "description": "current number of replicas of pods managed by this autoscaler.", - "type": "integer", - "format": "int32" - }, - "desiredReplicas": { - "description": "desired number of replicas of pods managed by this autoscaler.", - "type": "integer", - "format": "int32" - }, - "lastScaleTime": { - "description": "last time the HorizontalPodAutoscaler scaled the number of pods; used by the autoscaler to control how often the number of pods is changed.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "observedGeneration": { - "description": "most recent generation observed by this autoscaler.", - "type": "integer", - "format": "int64" - } - } - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v1.Scale": { - "description": "Scale represents a scaling request for a resource.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.ScaleSpec" - }, - "status": { - "description": "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.ScaleStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "autoscaling", - "version": "v1", - "kind": "Scale" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v1.ScaleSpec": { - "description": "ScaleSpec describes the attributes of a scale subresource.", - "properties": { - "replicas": { - "description": "desired number of instances for the scaled object.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v1.ScaleStatus": { - "description": "ScaleStatus represents the current status of a scale subresource.", - "required": [ - "replicas" - ], - "properties": { - "replicas": { - "description": "actual number of observed instances of the scaled object.", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "label query over pods that should match the replicas count. This is same as the label selector but in the string format to avoid introspection by clients. The string will be in the same format as the query-param syntax. More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.CrossVersionObjectReference": { - "description": "CrossVersionObjectReference contains enough information to let you identify the referred resource.", - "required": [ - "kind", - "name" - ], - "properties": { - "apiVersion": { - "description": "API version of the referent", - "type": "string" - }, - "kind": { - "description": "Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"", - "type": "string" - }, - "name": { - "description": "Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler": { - "description": "HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerSpec" - }, - "status": { - "description": "status is the current information about the autoscaler.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "autoscaling", - "version": "v2alpha1", - "kind": "HorizontalPodAutoscaler" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerCondition": { - "description": "HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "lastTransitionTime is the last time the condition transitioned from one status to another", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "message is a human-readable explanation containing details about the transition", - "type": "string" - }, - "reason": { - "description": "reason is the reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "status is the status of the condition (True, False, Unknown)", - "type": "string" - }, - "type": { - "description": "type describes the current condition", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerList": { - "description": "HorizontalPodAutoscaler is a list of horizontal pod autoscaler objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "items is the list of horizontal pod autoscaler objects.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "metadata is the standard list metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "autoscaling", - "version": "v2alpha1", - "kind": "HorizontalPodAutoscalerList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerSpec": { - "description": "HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.", - "required": [ - "scaleTargetRef", - "maxReplicas" - ], - "properties": { - "maxReplicas": { - "description": "maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.", - "type": "integer", - "format": "int32" - }, - "metrics": { - "description": "metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.MetricSpec" - } - }, - "minReplicas": { - "description": "minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.", - "type": "integer", - "format": "int32" - }, - "scaleTargetRef": { - "description": "scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.CrossVersionObjectReference" - } - } - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerStatus": { - "description": "HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler.", - "required": [ - "currentReplicas", - "desiredReplicas", - "currentMetrics", - "conditions" - ], - "properties": { - "conditions": { - "description": "conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerCondition" - } - }, - "currentMetrics": { - "description": "currentMetrics is the last read state of the metrics used by this autoscaler.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.MetricStatus" - } - }, - "currentReplicas": { - "description": "currentReplicas is current number of replicas of pods managed by this autoscaler, as last seen by the autoscaler.", - "type": "integer", - "format": "int32" - }, - "desiredReplicas": { - "description": "desiredReplicas is the desired number of replicas of pods managed by this autoscaler, as last calculated by the autoscaler.", - "type": "integer", - "format": "int32" - }, - "lastScaleTime": { - "description": "lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, used by the autoscaler to control how often the number of pods is changed.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "observedGeneration": { - "description": "observedGeneration is the most recent generation observed by this autoscaler.", - "type": "integer", - "format": "int64" - } - } - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.MetricSpec": { - "description": "MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).", - "required": [ - "type" - ], - "properties": { - "object": { - "description": "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ObjectMetricSource" - }, - "pods": { - "description": "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.PodsMetricSource" - }, - "resource": { - "description": "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ResourceMetricSource" - }, - "type": { - "description": "type is the type of metric source. It should match one of the fields below.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.MetricStatus": { - "description": "MetricStatus describes the last-read state of a single metric.", - "required": [ - "type" - ], - "properties": { - "object": { - "description": "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ObjectMetricStatus" - }, - "pods": { - "description": "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.PodsMetricStatus" - }, - "resource": { - "description": "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ResourceMetricStatus" - }, - "type": { - "description": "type is the type of metric source. It will match one of the fields below.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ObjectMetricSource": { - "description": "ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", - "required": [ - "target", - "metricName", - "targetValue" - ], - "properties": { - "metricName": { - "description": "metricName is the name of the metric in question.", - "type": "string" - }, - "target": { - "description": "target is the described Kubernetes object.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.CrossVersionObjectReference" - }, - "targetValue": { - "description": "targetValue is the target value of the metric (as a quantity).", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - } - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ObjectMetricStatus": { - "description": "ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", - "required": [ - "target", - "metricName", - "currentValue" - ], - "properties": { - "currentValue": { - "description": "currentValue is the current value of the metric (as a quantity).", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - }, - "metricName": { - "description": "metricName is the name of the metric in question.", - "type": "string" - }, - "target": { - "description": "target is the described Kubernetes object.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.CrossVersionObjectReference" - } - } - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.PodsMetricSource": { - "description": "PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", - "required": [ - "metricName", - "targetAverageValue" - ], - "properties": { - "metricName": { - "description": "metricName is the name of the metric in question", - "type": "string" - }, - "targetAverageValue": { - "description": "targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity)", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - } - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.PodsMetricStatus": { - "description": "PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).", - "required": [ - "metricName", - "currentAverageValue" - ], - "properties": { - "currentAverageValue": { - "description": "currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity)", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - }, - "metricName": { - "description": "metricName is the name of the metric in question", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ResourceMetricSource": { - "description": "ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source. Only one \"target\" type should be set.", - "required": [ - "name" - ], - "properties": { - "name": { - "description": "name is the name of the resource in question.", - "type": "string" - }, - "targetAverageUtilization": { - "description": "targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.", - "type": "integer", - "format": "int32" - }, - "targetAverageValue": { - "description": "targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - } - } - }, - "io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ResourceMetricStatus": { - "description": "ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", - "required": [ - "name", - "currentAverageValue" - ], - "properties": { - "currentAverageUtilization": { - "description": "currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. It will only be present if `targetAverageValue` was set in the corresponding metric specification.", - "type": "integer", - "format": "int32" - }, - "currentAverageValue": { - "description": "currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type. It will always be set, regardless of the corresponding metric specification.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity" - }, - "name": { - "description": "name is the name of the resource in question.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.batch.v1.Job": { - "description": "Job represents the configuration of a single job.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.JobSpec" - }, - "status": { - "description": "Current status of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.JobStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "batch", - "version": "v1", - "kind": "Job" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.batch.v1.JobCondition": { - "description": "JobCondition describes current state of a job.", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Last time the condition was checked.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "lastTransitionTime": { - "description": "Last time the condition transit from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "Human readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "(brief) reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of job condition, Complete or Failed.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.batch.v1.JobList": { - "description": "JobList is a collection of jobs.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "items is the list of Jobs.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "batch", - "version": "v1", - "kind": "JobList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.batch.v1.JobSpec": { - "description": "JobSpec describes how the job execution will look like.", - "required": [ - "template" - ], - "properties": { - "activeDeadlineSeconds": { - "description": "Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer", - "type": "integer", - "format": "int64" - }, - "completions": { - "description": "Specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", - "type": "integer", - "format": "int32" - }, - "manualSelector": { - "description": "manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://git.k8s.io/community/contributors/design-proposals/selector-generation.md", - "type": "boolean" - }, - "parallelism": { - "description": "Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) \u003c .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "template": { - "description": "Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec" - } - } - }, - "io.k8s.kubernetes.pkg.apis.batch.v1.JobStatus": { - "description": "JobStatus represents the current state of a Job.", - "properties": { - "active": { - "description": "The number of actively running pods.", - "type": "integer", - "format": "int32" - }, - "completionTime": { - "description": "Represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "conditions": { - "description": "The latest available observations of an object's current state. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.JobCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "failed": { - "description": "The number of pods which reached phase Failed.", - "type": "integer", - "format": "int32" - }, - "startTime": { - "description": "Represents time when the job was acknowledged by the job controller. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "succeeded": { - "description": "The number of pods which reached phase Succeeded.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob": { - "description": "CronJob represents the configuration of a single cron job.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobSpec" - }, - "status": { - "description": "Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "batch", - "version": "v2alpha1", - "kind": "CronJob" - }, - { - "group": "batch", - "version": "v2alpha1", - "kind": "ScheduledJob" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobList": { - "description": "CronJobList is a collection of cron jobs.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "items is the list of CronJobs.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "batch", - "version": "v2alpha1", - "kind": "CronJobList" - }, - { - "group": "batch", - "version": "v2alpha1", - "kind": "ScheduledJobList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobSpec": { - "description": "CronJobSpec describes how the job execution will look like and when it will actually run.", - "required": [ - "schedule", - "jobTemplate" - ], - "properties": { - "concurrencyPolicy": { - "description": "Specifies how to treat concurrent executions of a Job. Defaults to Allow.", - "type": "string" - }, - "failedJobsHistoryLimit": { - "description": "The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.", - "type": "integer", - "format": "int32" - }, - "jobTemplate": { - "description": "Specifies the job that will be created when executing a CronJob.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.JobTemplateSpec" - }, - "schedule": { - "description": "The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.", - "type": "string" - }, - "startingDeadlineSeconds": { - "description": "Optional deadline in seconds for starting the job if it misses scheduled time for any reason. Missed jobs executions will be counted as failed ones.", - "type": "integer", - "format": "int64" - }, - "successfulJobsHistoryLimit": { - "description": "The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.", - "type": "integer", - "format": "int32" - }, - "suspend": { - "description": "This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false.", - "type": "boolean" - } - } - }, - "io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobStatus": { - "description": "CronJobStatus represents the current state of a cron job.", - "properties": { - "active": { - "description": "A list of pointers to currently running jobs.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectReference" - } - }, - "lastScheduleTime": { - "description": "Information when was the last time the job was successfully scheduled.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - } - } - }, - "io.k8s.kubernetes.pkg.apis.batch.v2alpha1.JobTemplateSpec": { - "description": "JobTemplateSpec describes the data a Job should have when created from a template", - "properties": { - "metadata": { - "description": "Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.JobSpec" - } - } - }, - "io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest": { - "description": "Describes a certificate signing request", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "The certificate request itself and any additional information.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestSpec" - }, - "status": { - "description": "Derived information about the request.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "certificates.k8s.io", - "version": "v1beta1", - "kind": "CertificateSigningRequest" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestCondition": { - "required": [ - "type" - ], - "properties": { - "lastUpdateTime": { - "description": "timestamp for the last update to this condition", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "human readable message with details about the request state", - "type": "string" - }, - "reason": { - "description": "brief reason for the request state", - "type": "string" - }, - "type": { - "description": "request approval state, currently Approved or Denied.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestList": { - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "certificates.k8s.io", - "version": "v1beta1", - "kind": "CertificateSigningRequestList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestSpec": { - "description": "This information is immutable after the request is created. Only the Request and Usages fields can be set on creation, other fields are derived by Kubernetes and cannot be modified by users.", - "required": [ - "request" - ], - "properties": { - "extra": { - "description": "Extra information about the requesting user. See user.Info interface for details.", - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "groups": { - "description": "Group information about the requesting user. See user.Info interface for details.", - "type": "array", - "items": { - "type": "string" - } - }, - "request": { - "description": "Base64-encoded PKCS#10 CSR data", - "type": "string", - "format": "byte" - }, - "uid": { - "description": "UID information about the requesting user. See user.Info interface for details.", - "type": "string" - }, - "usages": { - "description": "allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3\n https://tools.ietf.org/html/rfc5280#section-4.2.1.12", - "type": "array", - "items": { - "type": "string" - } - }, - "username": { - "description": "Information about the requesting user. See user.Info interface for details.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestStatus": { - "properties": { - "certificate": { - "description": "If request was approved, the controller will place the issued certificate here.", - "type": "string", - "format": "byte" - }, - "conditions": { - "description": "Conditions applied to the request, such as approval or denial.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestCondition" - } - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.APIVersion": { - "description": "An APIVersion represents a single concrete version of an object model.", - "properties": { - "name": { - "description": "Name of this version (e.g. 'v1').", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet": { - "description": "DaemonSet represents the configuration of a daemon set.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetSpec" - }, - "status": { - "description": "The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "version": "v1beta1", - "kind": "DaemonSet" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetList": { - "description": "DaemonSetList is a collection of daemon sets.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "A list of daemon sets.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "version": "v1beta1", - "kind": "DaemonSetList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetSpec": { - "description": "DaemonSetSpec is the specification of a daemon set.", - "required": [ - "template" - ], - "properties": { - "minReadySeconds": { - "description": "The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).", - "type": "integer", - "format": "int32" - }, - "revisionHistoryLimit": { - "description": "The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "template": { - "description": "An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec" - }, - "templateGeneration": { - "description": "DEPRECATED. A sequence number representing a specific generation of the template. Populated by the system. It can be set only during the creation.", - "type": "integer", - "format": "int64" - }, - "updateStrategy": { - "description": "An update strategy to replace existing DaemonSet pods with new pods.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetUpdateStrategy" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetStatus": { - "description": "DaemonSetStatus represents the current status of a daemon set.", - "required": [ - "currentNumberScheduled", - "numberMisscheduled", - "desiredNumberScheduled", - "numberReady" - ], - "properties": { - "collisionCount": { - "description": "Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", - "type": "integer", - "format": "int64" - }, - "currentNumberScheduled": { - "description": "The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - "type": "integer", - "format": "int32" - }, - "desiredNumberScheduled": { - "description": "The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - "type": "integer", - "format": "int32" - }, - "numberAvailable": { - "description": "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)", - "type": "integer", - "format": "int32" - }, - "numberMisscheduled": { - "description": "The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - "type": "integer", - "format": "int32" - }, - "numberReady": { - "description": "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.", - "type": "integer", - "format": "int32" - }, - "numberUnavailable": { - "description": "The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)", - "type": "integer", - "format": "int32" - }, - "observedGeneration": { - "description": "The most recent generation observed by the daemon set controller.", - "type": "integer", - "format": "int64" - }, - "updatedNumberScheduled": { - "description": "The total number of nodes that are running updated daemon pod", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetUpdateStrategy": { - "properties": { - "rollingUpdate": { - "description": "Rolling update config params. Present only if type = \"RollingUpdate\".", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollingUpdateDaemonSet" - }, - "type": { - "description": "Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is OnDelete.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment": { - "description": "Deployment enables declarative updates for Pods and ReplicaSets.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of the Deployment.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentSpec" - }, - "status": { - "description": "Most recently observed status of the Deployment.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "version": "v1beta1", - "kind": "Deployment" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentCondition": { - "description": "DeploymentCondition describes the state of a deployment at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "Last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "lastUpdateTime": { - "description": "The last time this condition was updated.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of deployment condition.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentList": { - "description": "DeploymentList is a list of Deployments.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of Deployments.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "version": "v1beta1", - "kind": "DeploymentList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentRollback": { - "description": "DeploymentRollback stores the information required to rollback a deployment.", - "required": [ - "name", - "rollbackTo" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Required: This must match the Name of a deployment.", - "type": "string" - }, - "rollbackTo": { - "description": "The config of this deployment rollback.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollbackConfig" - }, - "updatedAnnotations": { - "description": "The annotations to be updated to a deployment", - "type": "object", - "additionalProperties": { - "type": "string" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "version": "v1beta1", - "kind": "DeploymentRollback" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentSpec": { - "description": "DeploymentSpec is the specification of the desired behavior of the Deployment.", - "required": [ - "template" - ], - "properties": { - "minReadySeconds": { - "description": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - "type": "integer", - "format": "int32" - }, - "paused": { - "description": "Indicates that the deployment is paused and will not be processed by the deployment controller.", - "type": "boolean" - }, - "progressDeadlineSeconds": { - "description": "The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Once autoRollback is implemented, the deployment controller will automatically rollback failed deployments. Note that progress will not be estimated during the time a deployment is paused. This is not set by default.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.", - "type": "integer", - "format": "int32" - }, - "revisionHistoryLimit": { - "description": "The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified.", - "type": "integer", - "format": "int32" - }, - "rollbackTo": { - "description": "The config this deployment is rolling back to. Will be cleared after rollback is done.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollbackConfig" - }, - "selector": { - "description": "Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "strategy": { - "description": "The deployment strategy to use to replace existing pods with new ones.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStrategy" - }, - "template": { - "description": "Template describes the pods that will be created.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStatus": { - "description": "DeploymentStatus is the most recently observed status of the Deployment.", - "properties": { - "availableReplicas": { - "description": "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", - "type": "integer", - "format": "int32" - }, - "collisionCount": { - "description": "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", - "type": "integer", - "format": "int64" - }, - "conditions": { - "description": "Represents the latest available observations of a deployment's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "observedGeneration": { - "description": "The generation observed by the deployment controller.", - "type": "integer", - "format": "int64" - }, - "readyReplicas": { - "description": "Total number of ready pods targeted by this deployment.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Total number of non-terminated pods targeted by this deployment (their labels match the selector).", - "type": "integer", - "format": "int32" - }, - "unavailableReplicas": { - "description": "Total number of unavailable pods targeted by this deployment.", - "type": "integer", - "format": "int32" - }, - "updatedReplicas": { - "description": "Total number of non-terminated pods targeted by this deployment that have the desired template spec.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStrategy": { - "description": "DeploymentStrategy describes how to replace existing pods with new ones.", - "properties": { - "rollingUpdate": { - "description": "Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollingUpdateDeployment" - }, - "type": { - "description": "Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.FSGroupStrategyOptions": { - "description": "FSGroupStrategyOptions defines the strategy type and options used to create the strategy.", - "properties": { - "ranges": { - "description": "Ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IDRange" - } - }, - "rule": { - "description": "Rule is the strategy that will dictate what FSGroup is used in the SecurityContext.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressPath": { - "description": "HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.", - "required": [ - "backend" - ], - "properties": { - "backend": { - "description": "Backend defines the referenced service endpoint to which the traffic will be forwarded to.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressBackend" - }, - "path": { - "description": "Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressRuleValue": { - "description": "HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http://\u003chost\u003e/\u003cpath\u003e?\u003csearchpart\u003e -\u003e backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.", - "required": [ - "paths" - ], - "properties": { - "paths": { - "description": "A collection of paths that map requests to backends.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressPath" - } - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HostPortRange": { - "description": "Host Port Range defines a range of host ports that will be enabled by a policy for pods to use. It requires both the start and end to be defined.", - "required": [ - "min", - "max" - ], - "properties": { - "max": { - "description": "max is the end of the range, inclusive.", - "type": "integer", - "format": "int32" - }, - "min": { - "description": "min is the start of the range, inclusive.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IDRange": { - "description": "ID Range provides a min/max of an allowed range of IDs.", - "required": [ - "min", - "max" - ], - "properties": { - "max": { - "description": "Max is the end of the range, inclusive.", - "type": "integer", - "format": "int64" - }, - "min": { - "description": "Min is the start of the range, inclusive.", - "type": "integer", - "format": "int64" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress": { - "description": "Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressSpec" - }, - "status": { - "description": "Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "version": "v1beta1", - "kind": "Ingress" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressBackend": { - "description": "IngressBackend describes all endpoints for a given service and port.", - "required": [ - "serviceName", - "servicePort" - ], - "properties": { - "serviceName": { - "description": "Specifies the name of the referenced service.", - "type": "string" - }, - "servicePort": { - "description": "Specifies the port of the referenced service.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressList": { - "description": "IngressList is a collection of Ingress.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of Ingress.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "version": "v1beta1", - "kind": "IngressList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressRule": { - "description": "IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.", - "properties": { - "host": { - "description": "Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the \"host\" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the\n\t IP in the Spec of the parent Ingress.\n2. The `:` delimiter is not respected because ports are not allowed.\n\t Currently the port of an Ingress is implicitly :80 for http and\n\t :443 for https.\nBoth these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.", - "type": "string" - }, - "http": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressRuleValue" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressSpec": { - "description": "IngressSpec describes the Ingress the user wishes to exist.", - "properties": { - "backend": { - "description": "A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressBackend" - }, - "rules": { - "description": "A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressRule" - } - }, - "tls": { - "description": "TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressTLS" - } - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressStatus": { - "description": "IngressStatus describe the current state of the Ingress.", - "properties": { - "loadBalancer": { - "description": "LoadBalancer contains the current status of the load-balancer.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.LoadBalancerStatus" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressTLS": { - "description": "IngressTLS describes the transport layer security associated with an Ingress.", - "properties": { - "hosts": { - "description": "Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.", - "type": "array", - "items": { - "type": "string" - } - }, - "secretName": { - "description": "SecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the \"Host\" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy": { - "description": "NetworkPolicy describes what network traffic is allowed for a set of Pods", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior for this NetworkPolicy.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicySpec" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "version": "v1beta1", - "kind": "NetworkPolicy" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyIngressRule": { - "description": "This NetworkPolicyIngressRule matches traffic if and only if the traffic matches both ports AND from.", - "properties": { - "from": { - "description": "List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyPeer" - } - }, - "ports": { - "description": "List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyPort" - } - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyList": { - "description": "Network Policy List is a list of NetworkPolicy objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of schema objects.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "version": "v1beta1", - "kind": "NetworkPolicyList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyPeer": { - "properties": { - "namespaceSelector": { - "description": "Selects Namespaces using cluster scoped-labels. This matches all pods in all namespaces selected by this label selector. This field follows standard label selector semantics. If present but empty, this selector selects all namespaces.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "podSelector": { - "description": "This is a label selector which selects Pods in this namespace. This field follows standard label selector semantics. If present but empty, this selector selects all pods in this namespace.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyPort": { - "properties": { - "port": { - "description": "If specified, the port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - }, - "protocol": { - "description": "Optional. The protocol (TCP or UDP) which traffic must match. If not specified, this field defaults to TCP.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicySpec": { - "required": [ - "podSelector" - ], - "properties": { - "ingress": { - "description": "List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyIngressRule" - } - }, - "podSelector": { - "description": "Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy": { - "description": "Pod Security Policy governs the ability to make requests that affect the Security Context that will be applied to a pod and container.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "spec defines the policy enforced.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicySpec" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "version": "v1beta1", - "kind": "PodSecurityPolicy" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicyList": { - "description": "Pod Security Policy List is a list of PodSecurityPolicy objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of schema objects.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "version": "v1beta1", - "kind": "PodSecurityPolicyList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicySpec": { - "description": "Pod Security Policy Spec defines the policy enforced.", - "required": [ - "seLinux", - "runAsUser", - "supplementalGroups", - "fsGroup" - ], - "properties": { - "allowedCapabilities": { - "description": "AllowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both AllowedCapabilities and RequiredDropCapabilities.", - "type": "array", - "items": { - "type": "string" - } - }, - "defaultAddCapabilities": { - "description": "DefaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capabiility in both DefaultAddCapabilities and RequiredDropCapabilities.", - "type": "array", - "items": { - "type": "string" - } - }, - "fsGroup": { - "description": "FSGroup is the strategy that will dictate what fs group is used by the SecurityContext.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.FSGroupStrategyOptions" - }, - "hostIPC": { - "description": "hostIPC determines if the policy allows the use of HostIPC in the pod spec.", - "type": "boolean" - }, - "hostNetwork": { - "description": "hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.", - "type": "boolean" - }, - "hostPID": { - "description": "hostPID determines if the policy allows the use of HostPID in the pod spec.", - "type": "boolean" - }, - "hostPorts": { - "description": "hostPorts determines which host port ranges are allowed to be exposed.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HostPortRange" - } - }, - "privileged": { - "description": "privileged determines if a pod can request to be run as privileged.", - "type": "boolean" - }, - "readOnlyRootFilesystem": { - "description": "ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.", - "type": "boolean" - }, - "requiredDropCapabilities": { - "description": "RequiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.", - "type": "array", - "items": { - "type": "string" - } - }, - "runAsUser": { - "description": "runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RunAsUserStrategyOptions" - }, - "seLinux": { - "description": "seLinux is the strategy that will dictate the allowable labels that may be set.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.SELinuxStrategyOptions" - }, - "supplementalGroups": { - "description": "SupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.SupplementalGroupsStrategyOptions" - }, - "volumes": { - "description": "volumes is a white list of allowed volume plugins. Empty indicates that all plugins may be used.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet": { - "description": "ReplicaSet represents the configuration of a ReplicaSet.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetSpec" - }, - "status": { - "description": "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "version": "v1beta1", - "kind": "ReplicaSet" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetCondition": { - "description": "ReplicaSetCondition describes the state of a replica set at a certain point.", - "required": [ - "type", - "status" - ], - "properties": { - "lastTransitionTime": { - "description": "The last time the condition transitioned from one status to another.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - }, - "message": { - "description": "A human readable message indicating details about the transition.", - "type": "string" - }, - "reason": { - "description": "The reason for the condition's last transition.", - "type": "string" - }, - "status": { - "description": "Status of the condition, one of True, False, Unknown.", - "type": "string" - }, - "type": { - "description": "Type of replica set condition.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetList": { - "description": "ReplicaSetList is a collection of ReplicaSets.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "version": "v1beta1", - "kind": "ReplicaSetList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetSpec": { - "description": "ReplicaSetSpec is the specification of a ReplicaSet.", - "properties": { - "minReadySeconds": { - "description": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "template": { - "description": "Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetStatus": { - "description": "ReplicaSetStatus represents the current status of a ReplicaSet.", - "required": [ - "replicas" - ], - "properties": { - "availableReplicas": { - "description": "The number of available replicas (ready for at least minReadySeconds) for this replica set.", - "type": "integer", - "format": "int32" - }, - "conditions": { - "description": "Represents the latest available observations of a replica set's current state.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetCondition" - }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "fullyLabeledReplicas": { - "description": "The number of pods that have labels matching the labels of the pod template of the replicaset.", - "type": "integer", - "format": "int32" - }, - "observedGeneration": { - "description": "ObservedGeneration reflects the generation of the most recently observed ReplicaSet.", - "type": "integer", - "format": "int64" - }, - "readyReplicas": { - "description": "The number of ready replicas for this replica set.", - "type": "integer", - "format": "int32" - }, - "replicas": { - "description": "Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollbackConfig": { - "properties": { - "revision": { - "description": "The revision to rollback to. If set to 0, rollback to the last revision.", - "type": "integer", - "format": "int64" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollingUpdateDaemonSet": { - "description": "Spec to control the desired behavior of daemon set rolling update.", - "properties": { - "maxUnavailable": { - "description": "The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollingUpdateDeployment": { - "description": "Spec to control the desired behavior of rolling update.", - "properties": { - "maxSurge": { - "description": "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - }, - "maxUnavailable": { - "description": "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RunAsUserStrategyOptions": { - "description": "Run A sUser Strategy Options defines the strategy type and any options used to create the strategy.", - "required": [ - "rule" - ], - "properties": { - "ranges": { - "description": "Ranges are the allowed ranges of uids that may be used.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IDRange" - } - }, - "rule": { - "description": "Rule is the strategy that will dictate the allowable RunAsUser values that may be set.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.SELinuxStrategyOptions": { - "description": "SELinux Strategy Options defines the strategy type and any options used to create the strategy.", - "required": [ - "rule" - ], - "properties": { - "rule": { - "description": "type is the strategy that will dictate the allowable labels that may be set.", - "type": "string" - }, - "seLinuxOptions": { - "description": "seLinuxOptions required to run as; required for MustRunAs More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.SELinuxOptions" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale": { - "description": "represents a scaling request for a resource.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ScaleSpec" - }, - "status": { - "description": "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ScaleStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "version": "v1beta1", - "kind": "Scale" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ScaleSpec": { - "description": "describes the attributes of a scale subresource", - "properties": { - "replicas": { - "description": "desired number of instances for the scaled object.", - "type": "integer", - "format": "int32" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ScaleStatus": { - "description": "represents the current status of a scale subresource.", - "required": [ - "replicas" - ], - "properties": { - "replicas": { - "description": "actual number of observed instances of the scaled object.", - "type": "integer", - "format": "int32" - }, - "selector": { - "description": "label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "targetSelector": { - "description": "label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.SupplementalGroupsStrategyOptions": { - "description": "SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy.", - "properties": { - "ranges": { - "description": "Ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IDRange" - } - }, - "rule": { - "description": "Rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResource": { - "description": "A ThirdPartyResource is a generic representation of a resource, it is used by add-ons and plugins to add new resource types to the API. It consists of one or more Versions of the api.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "description": { - "description": "Description is the description of this object.", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "versions": { - "description": "Versions are versions for this third party object", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.APIVersion" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "version": "v1beta1", - "kind": "ThirdPartyResource" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResourceList": { - "description": "ThirdPartyResourceList is a list of ThirdPartyResources.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of ThirdPartyResources.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResource" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "extensions", - "version": "v1beta1", - "kind": "ThirdPartyResourceList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy": { - "description": "NetworkPolicy describes what network traffic is allowed for a set of Pods", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior for this NetworkPolicy.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicySpec" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "networking.k8s.io", - "version": "v1", - "kind": "NetworkPolicy" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyIngressRule": { - "description": "NetworkPolicyIngressRule describes a particular set of traffic that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and from.", - "properties": { - "from": { - "description": "List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyPeer" - } - }, - "ports": { - "description": "List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyPort" - } - } - } - }, - "io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyList": { - "description": "NetworkPolicyList is a list of NetworkPolicy objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of schema objects.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "networking.k8s.io", - "version": "v1", - "kind": "NetworkPolicyList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyPeer": { - "description": "NetworkPolicyPeer describes a peer to allow traffic from. Exactly one of its fields must be specified.", - "properties": { - "namespaceSelector": { - "description": "Selects Namespaces using cluster scoped-labels. This matches all pods in all namespaces selected by this label selector. This field follows standard label selector semantics. If present but empty, this selector selects all namespaces.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "podSelector": { - "description": "This is a label selector which selects Pods in this namespace. This field follows standard label selector semantics. If present but empty, this selector selects all pods in this namespace.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - } - } - }, - "io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyPort": { - "description": "NetworkPolicyPort describes a port to allow traffic on", - "properties": { - "port": { - "description": "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - }, - "protocol": { - "description": "The protocol (TCP or UDP) which traffic must match. If not specified, this field defaults to TCP.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicySpec": { - "description": "NetworkPolicySpec provides the specification of a NetworkPolicy", - "required": [ - "podSelector" - ], - "properties": { - "ingress": { - "description": "List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyIngressRule" - } - }, - "podSelector": { - "description": "Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - } - } - }, - "io.k8s.kubernetes.pkg.apis.policy.v1beta1.Eviction": { - "description": "Eviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod. A request to cause such an eviction is created by POSTing to .../pods/\u003cpod name\u003e/evictions.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "deleteOptions": { - "description": "DeleteOptions may be provided", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "ObjectMeta describes the pod that is being evicted.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "policy", - "version": "v1beta1", - "kind": "Eviction" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget": { - "description": "PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "description": "Specification of the desired behavior of the PodDisruptionBudget.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetSpec" - }, - "status": { - "description": "Most recently observed status of the PodDisruptionBudget.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetStatus" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "policy", - "version": "v1beta1", - "kind": "PodDisruptionBudget" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetList": { - "description": "PodDisruptionBudgetList is a collection of PodDisruptionBudgets.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "policy", - "version": "v1beta1", - "kind": "PodDisruptionBudgetList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetSpec": { - "description": "PodDisruptionBudgetSpec is a description of a PodDisruptionBudget.", - "properties": { - "maxUnavailable": { - "description": "An eviction is allowed if at most \"maxUnavailable\" pods selected by \"selector\" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with \"minAvailable\".", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - }, - "minAvailable": { - "description": "An eviction is allowed if at least \"minAvailable\" pods selected by \"selector\" will still be available after the eviction, i.e. even in the absence of the evicted pod. So for example you can prevent all voluntary evictions by specifying \"100%\".", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString" - }, - "selector": { - "description": "Label query over pods whose evictions are managed by the disruption budget.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - } - } - }, - "io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetStatus": { - "description": "PodDisruptionBudgetStatus represents information about the status of a PodDisruptionBudget. Status may trail the actual state of a system.", - "required": [ - "disruptedPods", - "disruptionsAllowed", - "currentHealthy", - "desiredHealthy", - "expectedPods" - ], - "properties": { - "currentHealthy": { - "description": "current number of healthy pods", - "type": "integer", - "format": "int32" - }, - "desiredHealthy": { - "description": "minimum desired number of healthy pods", - "type": "integer", - "format": "int32" - }, - "disruptedPods": { - "description": "DisruptedPods contains information about pods whose eviction was processed by the API server eviction subresource handler but has not yet been observed by the PodDisruptionBudget controller. A pod will be in this map from the time when the API server processed the eviction request to the time when the pod is seen by PDB controller as having been marked for deletion (or after a timeout). The key in the map is the name of the pod and the value is the time when the API server processed the eviction request. If the deletion didn't occur and a pod is still there it will be removed from the list automatically by PodDisruptionBudget controller after some time. If everything goes smooth this map should be empty for the most of the time. Large number of entries in the map may indicate problems with pod deletions.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" - } - }, - "disruptionsAllowed": { - "description": "Number of pod disruptions that are currently allowed.", - "type": "integer", - "format": "int32" - }, - "expectedPods": { - "description": "total number of pods counted by this disruption budget", - "type": "integer", - "format": "int32" - }, - "observedGeneration": { - "description": "Most recent generation observed when updating this PDB status. PodDisruptionsAllowed and other status informatio is valid only if observedGeneration equals to PDB's object generation.", - "type": "integer", - "format": "int64" - } - } - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole": { - "description": "ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.", - "required": [ - "rules" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "rules": { - "description": "Rules holds all the PolicyRules for this ClusterRole", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.PolicyRule" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRole" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding": { - "description": "ClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject.", - "required": [ - "subjects", - "roleRef" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "roleRef": { - "description": "RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleRef" - }, - "subjects": { - "description": "Subjects holds references to the objects the role applies to.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Subject" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRoleBinding" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBindingList": { - "description": "ClusterRoleBindingList is a collection of ClusterRoleBindings", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of ClusterRoleBindings", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRoleBindingList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleList": { - "description": "ClusterRoleList is a collection of ClusterRoles", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of ClusterRoles", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "ClusterRoleList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.PolicyRule": { - "description": "PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.", - "required": [ - "verbs" - ], - "properties": { - "apiGroups": { - "description": "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.", - "type": "array", - "items": { - "type": "string" - } - }, - "nonResourceURLs": { - "description": "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different. Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"), but not both.", - "type": "array", - "items": { - "type": "string" - } - }, - "resourceNames": { - "description": "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.", - "type": "array", - "items": { - "type": "string" - } - }, - "resources": { - "description": "Resources is a list of resources this rule applies to. ResourceAll represents all resources.", - "type": "array", - "items": { - "type": "string" - } - }, - "verbs": { - "description": "Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role": { - "description": "Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.", - "required": [ - "rules" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "rules": { - "description": "Rules holds all the PolicyRules for this Role", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.PolicyRule" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "Role" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding": { - "description": "RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace.", - "required": [ - "subjects", - "roleRef" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "roleRef": { - "description": "RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleRef" - }, - "subjects": { - "description": "Subjects holds references to the objects the role applies to.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Subject" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "RoleBinding" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBindingList": { - "description": "RoleBindingList is a collection of RoleBindings", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of RoleBindings", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "RoleBindingList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleList": { - "description": "RoleList is a collection of Roles", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of Roles", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "version": "v1alpha1", - "kind": "RoleList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleRef": { - "description": "RoleRef contains information that points to the role being used", - "required": [ - "apiGroup", - "kind", - "name" - ], - "properties": { - "apiGroup": { - "description": "APIGroup is the group for the resource being referenced", - "type": "string" - }, - "kind": { - "description": "Kind is the type of resource being referenced", - "type": "string" - }, - "name": { - "description": "Name is the name of resource being referenced", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Subject": { - "description": "Subject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names.", - "required": [ - "kind", - "name" - ], - "properties": { - "apiVersion": { - "description": "APIVersion holds the API group and version of the referenced subject. Defaults to \"v1\" for ServiceAccount subjects. Defaults to \"rbac.authorization.k8s.io/v1alpha1\" for User and Group subjects.", - "type": "string" - }, - "kind": { - "description": "Kind of object being referenced. Values defined by this API group are \"User\", \"Group\", and \"ServiceAccount\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.", - "type": "string" - }, - "name": { - "description": "Name of the object being referenced.", - "type": "string" - }, - "namespace": { - "description": "Namespace of the referenced object. If the object kind is non-namespace, such as \"User\" or \"Group\", and this value is not empty the Authorizer should report an error.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole": { - "description": "ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.", - "required": [ - "rules" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "rules": { - "description": "Rules holds all the PolicyRules for this ClusterRole", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.PolicyRule" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRole" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding": { - "description": "ClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject.", - "required": [ - "subjects", - "roleRef" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "roleRef": { - "description": "RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleRef" - }, - "subjects": { - "description": "Subjects holds references to the objects the role applies to.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Subject" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRoleBinding" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBindingList": { - "description": "ClusterRoleBindingList is a collection of ClusterRoleBindings", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of ClusterRoleBindings", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRoleBindingList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleList": { - "description": "ClusterRoleList is a collection of ClusterRoles", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of ClusterRoles", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "ClusterRoleList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.PolicyRule": { - "description": "PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.", - "required": [ - "verbs" - ], - "properties": { - "apiGroups": { - "description": "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.", - "type": "array", - "items": { - "type": "string" - } - }, - "nonResourceURLs": { - "description": "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"), but not both.", - "type": "array", - "items": { - "type": "string" - } - }, - "resourceNames": { - "description": "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.", - "type": "array", - "items": { - "type": "string" - } - }, - "resources": { - "description": "Resources is a list of resources this rule applies to. ResourceAll represents all resources.", - "type": "array", - "items": { - "type": "string" - } - }, - "verbs": { - "description": "Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role": { - "description": "Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.", - "required": [ - "rules" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "rules": { - "description": "Rules holds all the PolicyRules for this Role", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.PolicyRule" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "Role" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding": { - "description": "RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace.", - "required": [ - "subjects", - "roleRef" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "roleRef": { - "description": "RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleRef" - }, - "subjects": { - "description": "Subjects holds references to the objects the role applies to.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Subject" - } - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "RoleBinding" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBindingList": { - "description": "RoleBindingList is a collection of RoleBindings", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of RoleBindings", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "RoleBindingList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleList": { - "description": "RoleList is a collection of Roles", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of Roles", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "rbac.authorization.k8s.io", - "version": "v1beta1", - "kind": "RoleList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleRef": { - "description": "RoleRef contains information that points to the role being used", - "required": [ - "apiGroup", - "kind", - "name" - ], - "properties": { - "apiGroup": { - "description": "APIGroup is the group for the resource being referenced", - "type": "string" - }, - "kind": { - "description": "Kind is the type of resource being referenced", - "type": "string" - }, - "name": { - "description": "Name is the name of resource being referenced", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Subject": { - "description": "Subject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names.", - "required": [ - "kind", - "name" - ], - "properties": { - "apiGroup": { - "description": "APIGroup holds the API group of the referenced subject. Defaults to \"\" for ServiceAccount subjects. Defaults to \"rbac.authorization.k8s.io\" for User and Group subjects.", - "type": "string" - }, - "kind": { - "description": "Kind of object being referenced. Values defined by this API group are \"User\", \"Group\", and \"ServiceAccount\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.", - "type": "string" - }, - "name": { - "description": "Name of the object being referenced.", - "type": "string" - }, - "namespace": { - "description": "Namespace of the referenced object. If the object kind is non-namespace, such as \"User\" or \"Group\", and this value is not empty the Authorizer should report an error.", - "type": "string" - } - } - }, - "io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset": { - "description": "PodPreset is a policy resource that defines additional runtime requirements for a Pod.", - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "spec": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPresetSpec" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "settings.k8s.io", - "version": "v1alpha1", - "kind": "PodPreset" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPresetList": { - "description": "PodPresetList is a list of PodPreset objects.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is a list of schema objects.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "settings.k8s.io", - "version": "v1alpha1", - "kind": "PodPresetList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPresetSpec": { - "description": "PodPresetSpec is a description of a pod preset.", - "properties": { - "env": { - "description": "Env defines the collection of EnvVar to inject into containers.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.EnvVar" - } - }, - "envFrom": { - "description": "EnvFrom defines the collection of EnvFromSource to inject into containers.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.EnvFromSource" - } - }, - "selector": { - "description": "Selector is a label query over a set of resources, in this case pods. Required.", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" - }, - "volumeMounts": { - "description": "VolumeMounts defines the collection of VolumeMount to inject into containers.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.VolumeMount" - } - }, - "volumes": { - "description": "Volumes defines the collection of Volume to inject into the pod.", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.Volume" - } - } - } - }, - "io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass": { - "description": "StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.", - "required": [ - "provisioner" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "parameters": { - "description": "Parameters holds the parameters for the provisioner that should create volumes of this storage class.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "provisioner": { - "description": "Provisioner indicates the type of the provisioner.", - "type": "string" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "storage.k8s.io", - "version": "v1", - "kind": "StorageClass" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.storage.v1.StorageClassList": { - "description": "StorageClassList is a collection of storage classes.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of StorageClasses", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "storage.k8s.io", - "version": "v1", - "kind": "StorageClassList" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass": { - "description": "StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.", - "required": [ - "provisioner" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" - }, - "parameters": { - "description": "Parameters holds the parameters for the provisioner that should create volumes of this storage class.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "provisioner": { - "description": "Provisioner indicates the type of the provisioner.", - "type": "string" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "storage.k8s.io", - "version": "v1beta1", - "kind": "StorageClass" - } - ] - }, - "io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClassList": { - "description": "StorageClassList is a collection of storage classes.", - "required": [ - "items" - ], - "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "items": { - "description": "Items is the list of StorageClasses", - "type": "array", - "items": { - "$ref": "#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass" - } - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "metadata": { - "description": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" - } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "storage.k8s.io", - "version": "v1beta1", - "kind": "StorageClassList" - } - ] - } - }, - "securityDefinitions": { - "BearerToken": { - "description": "Bearer Token authentication", - "type": "apiKey", - "name": "authorization", - "in": "header" - } - }, - "security": [ - { - "BearerToken": [] - } - ] - } diff --git a/agents/app/vendor/kubeflow/tf-job/README.md b/agents/app/vendor/kubeflow/tf-job/README.md deleted file mode 100644 index 2709df31..00000000 --- a/agents/app/vendor/kubeflow/tf-job/README.md +++ /dev/null @@ -1,76 +0,0 @@ -# tf-job - -> Prototypes for running TensorFlow jobs. - - -* [Quickstart](#quickstart) -* [Using Prototypes](#using-prototypes) - * [io.ksonnet.pkg.tf-job](#io.ksonnet.pkg.tf-job) - * [io.ksonnet.pkg.tf-cnn](#io.ksonnet.pkg.tf-cnn) - -## Quickstart - -*The following commands use the `io.ksonnet.pkg.tf-job` prototype to generate Kubernetes YAML for tf-job, and then deploys it to your Kubernetes cluster.* - -First, create a cluster and install the ksonnet CLI (see root-level [README.md](rootReadme)). - -If you haven't yet created a [ksonnet application](linkToSomewhere), do so using `ks init `. - -Finally, in the ksonnet application directory, run the following: - -```shell -# Expand prototype as a Jsonnet file, place in a file in the -# `components/` directory. (YAML and JSON are also available.) -$ ks prototype use io.ksonnet.pkg.tf-job tf-job \ - --namespace default \ - --name tf-job - -# Apply to server. -$ ks apply -f tf-job.jsonnet -``` - -## Using the library - -The library files for tf-job define a set of relevant *parts* (_e.g._, deployments, services, secrets, and so on) that can be combined to configure tf-job for a wide variety of scenarios. For example, a database like Redis may need a secret to hold the user password, or it may have no password if it's acting as a cache. - -This library provides a set of pre-fabricated "flavors" (or "distributions") of tf-job, each of which is configured for a different use case. These are captured as ksonnet *prototypes*, which allow users to interactively customize these distributions for their specific needs. - -These prototypes, as well as how to use them, are enumerated below. - -### io.ksonnet.pkg.tf-job - -A TensorFlow job (could be training or evaluation). -#### Example - -```shell -# Expand prototype as a Jsonnet file, place in a file in the -# `components/` directory. (YAML and JSON are also available.) -$ ks prototype use io.ksonnet.pkg.tf-job tf-job \ - --name YOUR_NAME_HERE -``` - -#### Parameters - -The available options to pass prototype are: - -* `--name=`: Name to give to each of the components [string] -### io.ksonnet.pkg.tf-cnn - -A TensorFlow CNN Benchmarking job -#### Example - -```shell -# Expand prototype as a Jsonnet file, place in a file in the -# `components/` directory. (YAML and JSON are also available.) -$ ks prototype use io.ksonnet.pkg.tf-cnn tf-job \ - --name YOUR_NAME_HERE -``` - -#### Parameters - -The available options to pass prototype are: - -* `--name=`: Name for the job. [string] - - -[rootReadme]: https://github.com/ksonnet/mixins diff --git a/agents/app/vendor/kubeflow/tf-job/parts.yaml b/agents/app/vendor/kubeflow/tf-job/parts.yaml deleted file mode 100644 index 905ff0a9..00000000 --- a/agents/app/vendor/kubeflow/tf-job/parts.yaml +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "tf-job", - "apiVersion": "0.0.1", - "kind": "ksonnet.io/parts", - "description": "Prototypes for running TensorFlow jobs.\n", - "author": "kubeflow team ", - "contributors": [ - { - "name": "Jeremy Lewi", - "email": "jlewi@google.com" - } - ], - "repository": { - "type": "git", - "url": "https://github.com/kubeflow/kubeflow" - }, - "bugs": { - "url": "https://github.com/kubeflow/kubeflow/issues" - }, - "keywords": [ - "kubeflow", - "tensorflow", - "database" - ], - "quickStart": { - "prototype": "io.ksonnet.pkg.tf-job", - "componentName": "tf-job", - "flags": { - "name": "tf-job", - "namespace": "default" - }, - "comment": "Run TensorFlow Job" - }, - "license": "Apache 2.0" -} diff --git a/agents/app/vendor/kubeflow/tf-job/prototypes/tf-cnn-benchmarks.jsonnet b/agents/app/vendor/kubeflow/tf-job/prototypes/tf-cnn-benchmarks.jsonnet deleted file mode 100644 index b4a8a021..00000000 --- a/agents/app/vendor/kubeflow/tf-job/prototypes/tf-cnn-benchmarks.jsonnet +++ /dev/null @@ -1,104 +0,0 @@ -// @apiVersion 0.1 -// @name io.ksonnet.pkg.tf-cnn -// @description A TensorFlow CNN Benchmarking job -// @shortDescription Run the TensorFlow CNN benchmarking job. -// @param name string Name for the job. -// @optionalParam namespace string default Namespace -// @optionalParam batch_size number 32 The batch size -// @optionalParam model string resnet50 Which model to use -// @optionalParam num_gpus number 0 The number of GPUs to attach to workers. -// @optionalParam image string gcr.io/kubeflow/tf-benchmarks-cpu:v20171202-bdab599-dirty-284af3 The docker image to use for the job. -// @optionalParam image_gpu string gcr.io/kubeflow/tf-benchmarks-gpu:v20171202-bdab599-dirty-284af3 The docker image to use when using GPUs. -// @optionalParam num_ps number 1 The number of ps to use -// @optionalParam num_workers number 1 The number of workers to use - -// We need at least 1 parameter server. - -// TODO(jlewi): Should we move this into an examples package? - -// TODO(https://github.com/ksonnet/ksonnet/issues/222): We have to add namespace as an explicit parameter -// because ksonnet doesn't support inheriting it from the environment yet. - -local k = import "k.libsonnet"; -local deployment = k.extensions.v1beta1.deployment; -local container = deployment.mixin.spec.template.spec.containersType; -local podTemplate = k.extensions.v1beta1.podTemplate; - -local tfJob = import "kubeflow/tf-job/tf-job.libsonnet"; - -local name = import "param://name"; -local namespace = import "param://namespace"; - -local numGpus = import "param://num_gpus"; -local batchSize = import "param://batch_size"; -local model = import "param://model"; - -local args = [ - "python", - "tf_cnn_benchmarks.py", - "--batch_size=" + batchSize, - "--model=" + model, - "--variable_update=parameter_server", - "--flush_stdout=true", - ] + - if numGpus == 0 then - // We need to set num_gpus=1 even if not using GPUs because otherwise the devie list - // is empty because of this code - // https://github.com/tensorflow/benchmarks/blob/master/scripts/tf_cnn_benchmarks/benchmark_cnn.py#L775 - // We won't actually use GPUs because based on other flags no ops will be assigned to GPus. - [ - "--num_gpus=1", - "--local_parameter_device=cpu", - "--device=cpu", - "--data_format=NHWC", - ] - else - [ - "--num_gpus=" + numGpus, - ] -; - -local image = import "param://image"; -local imageGpu = import "param://image_gpu"; -local numPs = import "param://num_ps"; -local numWorkers = import "param://num_workers"; -local numGpus = import "param://num_gpus"; - -local workerSpec = if numGpus > 0 then - tfJob.parts.tfJobReplica("WORKER", numWorkers, args, imageGpu, numGpus) -else - tfJob.parts.tfJobReplica("WORKER", numWorkers, args, image); - -// TODO(jlewi): Look at how the redis prototype modifies a container by -// using mapContainersWithName. Can we do something similar? -// https://github.com/ksonnet/parts/blob/9d78d6bb445d530d5b927656d2293d4f12654608/incubator/redis/redis.libsonnet -local replicas = std.map(function(s) - s { - template+: { - spec+: { - // TODO(jlewi): Does this overwrite containers? - containers: [ - s.template.spec.containers[0] { - workingDir: "/opt/tf-benchmarks/scripts/tf_cnn_benchmarks", - }, - ], - }, - }, - }, - std.prune([workerSpec, tfJob.parts.tfJobReplica("PS", numPs, args, image)])); - -local job = - if numWorkers < 1 then - error "num_workers must be >= 1" - else - if numPs < 1 then - error "num_ps must be >= 1" - else - tfJob.parts.tfJob(name, namespace, replicas) + { - spec+: { - tfImage: image, - terminationPolicy: { chief: { replicaName: "WORKER", replicaIndex: 0 } }, - }, - }; - -std.prune(k.core.v1.list.new([job])) diff --git a/agents/app/vendor/kubeflow/tf-job/prototypes/tf-job.jsonnet b/agents/app/vendor/kubeflow/tf-job/prototypes/tf-job.jsonnet deleted file mode 100644 index 2e48b527..00000000 --- a/agents/app/vendor/kubeflow/tf-job/prototypes/tf-job.jsonnet +++ /dev/null @@ -1,51 +0,0 @@ -// @apiVersion 0.1 -// @name io.ksonnet.pkg.tf-job -// @description A TensorFlow job (could be training or evaluation). -// @shortDescription A TensorFlow job. -// @param name string Name to give to each of the components -// @optionalParam namespace string default Namespace -// @optionalParam args string null Comma separated list of arguments to pass to the job -// @optionalParam image string null The docker image to use for the job. -// @optionalParam image_gpu string null The docker image to use when using GPUs. -// @optionalParam num_masters number 1 The number of masters to use -// @optionalParam num_ps number 0 The number of ps to use -// @optionalParam num_workers number 0 The number of workers to use -// @optionalParam num_gpus number 0 The number of GPUs to attach to workers. - -// TODO(https://github.com/ksonnet/ksonnet/issues/235): ks param set args won't work if the arg starts with "--". - -// TODO(https://github.com/ksonnet/ksonnet/issues/222): We have to add namespace as an explicit parameter -// because ksonnet doesn't support inheriting it from the environment yet. - -local k = import "k.libsonnet"; -local tfJob = import "kubeflow/tf-job/tf-job.libsonnet"; - -local name = import "param://name"; -local namespace = import "param://namespace"; - -local argsParam = import "param://args"; -local args = - if argsParam == "null" then - [] - else - std.split(argsParam, ","); - -local image = import "param://image"; -local imageGpu = import "param://image_gpu"; -local numMasters = import "param://num_masters"; -local numPs = import "param://num_ps"; -local numWorkers = import "param://num_workers"; -local numGpus = import "param://num_gpus"; - -local workerSpec = if numGpus > 0 then - tfJob.parts.tfJobReplica("WORKER", numWorkers, args, imageGpu, numGpus) -else - tfJob.parts.tfJobReplica("WORKER", numWorkers, args, image); - -std.prune(k.core.v1.list.new([ - tfJob.parts.tfJob(name, namespace, [ - tfJob.parts.tfJobReplica("MASTER", numMasters, args, image), - workerSpec, - tfJob.parts.tfJobReplica("PS", numPs, args, image), - ]), -])) diff --git a/agents/app/vendor/kubeflow/tf-job/tf-job.libsonnet b/agents/app/vendor/kubeflow/tf-job/tf-job.libsonnet deleted file mode 100644 index b539051d..00000000 --- a/agents/app/vendor/kubeflow/tf-job/tf-job.libsonnet +++ /dev/null @@ -1,49 +0,0 @@ -local k = import "k.libsonnet"; - -{ - parts:: { - tfJobReplica(replicaType, number, args, image, numGpus=0):: - local baseContainer = { - image: image, - name: "tensorflow", - }; - local containerArgs = if std.length(args) > 0 then - { - args: args, - } - else {}; - local resources = if numGpus > 0 then { - resources: { - limits: { - "nvidia.com/gpu": numGpus, - }, - }, - } else {}; - if number > 0 then - { - replicas: number, - template: { - spec: { - containers: [ - baseContainer + containerArgs + resources, - ], - restartPolicy: "OnFailure", - }, - }, - tfReplicaType: replicaType, - } - else {}, - - tfJob(name, namespace, replicas):: { - apiVersion: "kubeflow.org/v1alpha1", - kind: "TFJob", - metadata: { - name: name, - namespace: namespace, - }, - spec: { - replicaSpecs: replicas, - }, - }, - }, -} diff --git a/agents/doc/builder.png b/agents/doc/builder.png deleted file mode 100644 index feb96fd6a727a1f04fc6e6be157ed916c1794b01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 635278 zcma%i1yo$!k}eQj6Es+G2p-(sAviSdPSdz+NN{(8I|P@|G){s`aCZpq1Zb?0$A9m< zJM-4eoB#G&=d9EFY_Fw3K-@ZA+fo`9? z{JijFrP{2SN1)?R&-RDHf!IWFwCJwr?BQ8Rcdy}^F?3jlkUmXdJkoQy^(92A(M_a? z2PY_7WtW=r5tqH^H++XjI{G;q^Am1rPhv5AKJ|3pudULb!b~LzCo;kXsIFX=PBou; zzB~|Le66Y?PS9qhGAQ*=XE<>Z(3Ev`<+r1$`X=M32;WWSLT_{Ze8>L;v9eMO-}?|8 z%ajlzJz}3G0*N6u<1CdFWmk-h2&sa2+UA04H89tRnu_ zQe?1yDu%y{>Uvjx+rmsZGle}uS#4WRCW&}b>Tc3s-CFuqEms3RPvn>OL-voan_soe zUXybAhuao?NGBIcx%AKdAd1j{z6}!~<}j18$lJrveM94>P-K<4DKsDs7;|R*YF9z~ zUjI#e3u?%51XYlC4JEHM2VqwK&LEGil*-=TM|6t0o-GtarYlnVH}H%(zfl%pd_mkhciWB zbYL_^mPhHHTMIM(u!4ukFODz;N3nqI6DCJH=qG(n^6KJeUcxPIVwklEsv2d7s#Aa$vB^f zmo}cfAwrjv{tx6Q{gdaQOM?UHIgta5rp9x`{N-@VP&T5I?KEMl+Y7{)(LU9nMl> zmg}cs9V&h>ZXIqF66p`ZI`U&gzaQ`uaG5_9oCysPKpV)-DD#R$-thN7gg$(tL`5s0 za+gNokpA_WwD*mRRC}U0Em@>2ZlWbE)*C7fOSXo$j1t2MScAO9gm(l2pR=XeC{G5- zx8F>CX_pl(c&jMGqaH9rMjqW-5NP|BBw9sgdcuL5f>k=bh`^Shm9$z;wJ?2x)E4C) z;bZ`=G=}2?%`ZZ?9$j79w2%^WTnAA=Osa+Uf^ijE=K)X`WiC3PH@hxXSX|_BZ_Elww*9CN(CVr4sj#2NhGACGZU-i!sL%akQ6%--nn7XSeAu2waJL zJ{79e=X zFCGLQZ<0`wWgZnf_bHB6v>cheDWd7h1Dk!LOlf5d&V@AqkvISR;+3l{XhEO z8=1gy_8uQTgb92Z9ki@6B{N;I^d~718+O7EnrTq?lQSZR8v8Xi)$*FO>H6heW1Xl9 ze#{Zi!OYPX#1h1DcQFF4Mz(T!@Ezq&o{(1yEV*%ex&PUJRdjY(;5+9#>FajYbYwJl zG|xAIGe>k(J17`KIlESp@sL#xqxQ$!N4y|zz0<>Sj<(7 zWK6N_a*Tc~atv$CRt!eW4YAmVg0IaP#hFzcb{q#>Jlr{^g7b}IS2e_ozeYcrHjN!; zFZ#J*Tq0i5?PBeYvox|U5Z)1b5ZBkk68@wfE_T zKku5kaF9RrR)yVyJ#L=27Tc-RtKkN4hD||35vQ6uZefCFl6!`|UKR)lJP2%iG`?Sk zDLvr8x@>&vcI#CTP2qpS_rX^OlLWg2lOj+c6Qh(M%_2dOgiyxOMBhlFqG9L}xJFlx z?=}Dz0}5&iE+tjN)qBjlc|%07A=v35e9GbsAu75en}H#EA@2*RaHSh)bmT-M8X|_{ z?m^Tp<}6Rm-N&xJ z425imY#R;b2_$ASsRW@5Sy?Djr1u#O1pK_*sosR1cidV%l$9HoTa}MbwNC-cps4cGCHA^BFkRO}L?l)AvO%BkrXM9w+e?Kl%%X!xG>ox<$rhFWCv{iW7_qt(G_43O_ zP{x<>%`v+SAh*}#irnSHE+{Mhmukj(!w*Y|&CfNVKQX-63R#AAul#}oB=mkR_n}2+ zp+hl<2tA+hA2f{;6%&j1=WxgA4AOopg(?}O3$Pk=9RoRPZ_OhE6nuvEG#n55^2h^g zZhf464lm{i*qC{1X>0JS+gpZhX2&?84G#@tvv`2{TC*BP<4ezzD=^XUK&q3ToF0SG zy!spC$>ufp$6;t5A1d$4x2xI}h`Q5OL+lyfA6}!?<2Ii&!bes*15prxV@C(8w?ROv zkM^DC@9XxH)!9F@dx0*n63_6{xFm8DdubkWp(3x`8jtGg)e;C$hFqVa`e;$a%4<3I zlSr%|=*Dq*U_qyW;yC>@=m~gH%ZC#}ZY!|w>3l}@U5XTE8i#0}2KxO7MuLb%9vc~Z zA}1N&$nC>R{xo_D$+Rxo9WK(B(;+J&V;1K17Jl}AM*9=FmTbo$WKarO5#l+RfllM8 zLUPfB+@2gJ7B%-C#>mCaJUZ__4}{VXt+MeNy0&NqE#6&huIB`atsGA22lYV}EwcO! zG-0>b7CHenx$T6`C&wPwP$fQU$Hw)THXqnriUB#q2a>ls)P8yBxV9SXhjE5?N+hP{ zr}m_FW;RO!2s%D;KH$H9zcINpz!87u;VNVzJmhoHQdyTZXY@34Zg;{pU^6NrAp#m_ z5Iggw3gnnDxGKBPBQ??Q6uwG7Gf9WhLp?f@+DZJ4?q&CsN0(ik4DO5WDLO}d`OZ6U zzl??FP^^mP!cxu;4u1R^FCHf_sp{koz=HV(eE>SE{YrG+?m~F$U~A6=R||y8r|S+1 z=Y@NpOkl&+LKSscoc$xnyzfrgkqvI<7U4DI^(W`s_y%HLu0bvD^vAe?dxV)GyJ9Ro zm5SsdY9fMMXH*Jgl=b~r;`Rs|(U#86rqdf6>GtohvEdjR2y7%XhQ{&@PAq5UptujV z&j_g>oZAgjGNfMo1~g}RJvTTwLb|^$cm)mGb2vD7b2}|vcU|R=f)-97HZw~nb1OD) zkn>AzI5=T%!IwvnmAe_GH^{-!P0(9}`X4m}U!MOeW~Zk7M-_LV2(_-V8l{wzs}&^= z8#mhrYEg7bN=ji@OKU+5Y1#j1{_;m>(cJhDwk+yQPaJ6%Gw{vo&{HtFxb0-gX5o+qc2Kv|UpYycx zw)@YK9Nqq7SuYD@|LYAq2iphsfA#&+RQRt_L2WlHS1BhD$jZ@ORMW!M%F5Br*2!J? zA5H$Bm;W)KF#BJ#_%E~i=aT??Vl*R zcehM;x4%g@Kb;zD;d8qE zBS4#RHkClbNSkeT=U!Wnt#DdZ#C^Sdwj~@60hMyX5ovckZ{2Y`7EcNe9`UvK|M#}x zfMM$z68u-APk(=Nroxcsz24|@p4EzsRZfWbCaWU?X0BdPS6634;rwoSkQR`XW5QBG zKv0(EhV#D;{GT(*Uq$84M30P$OTMb<;1S22-cGKWgHzD@XSF~oEZ!`$3D`of|wYn>c1=}T)aPh1xYjbf4h}kdz zPH7z(B-D(xDZ_^qrDxGRZ~p&#_5X~uq(#|Y-vQ)!<6=_d88M49Nlex0ujId8Y2So~ zgOmRCt1U5~YxBwnzbMSZIrZP>)N~)82mZ~zU)xe3D5ECWzVFSWE+<^3>yLl|-t|P3@<~;%PP7;;&%%tm2 zD~kSqBar{KlVbhchi~61Ql_G!xNcAdaQ{u}iGM+eMUii8h|qrfCjjVd zqO9-DFQh|QvpQMqp@;VGiu?%@^`nSgcej0~9yG?j-2Et|B_QM| zZLL!Uq^1F2^22$TRB|-0;HeVFhAODym(w(08Q+zrI(m@j>%H=C?&g?YuqJ`LeJJhm zpIcm-x$gcpqTBbC6(c2*UBgVOiV9Z2DcS@I(z+?VGPFwW(uLBY0}3Jgr##;3S{f|j zan?hmN`yy`xQvzWaaOcPA2&i2g|a-YbP-g9Zm$psU5Ng@b@QhqsvyZf5b(B7-)N)$ zamB4ck7RRo!NtND839l~a;;b$X!UtdA(lE^qk)f(;|O+h!LzDjE-MGNEw zrKOVcDXP2FFZ)RAHfyzthe5ouPPA!VDjT~FOeutnkpDe0I=@5BMo*ZzG-cuc4ZEmT zGuCElv4UBy52b48x_taXxzpNSVSQv@Et|xy*C#|$7d%WBq7naU*9Xl#U|p>m1r31 zvz7m;$0a4WXJlt$PJj5Vp%4+7R=i*f36N08z)wq?708J=cUDl1nf}d*MbR}DCc!o3 zPBHoB%_(#z$8CZMOkY$)P0K1eHahZ4jB(TVK}7)#JZI-nSllk@Ng-5Y(t?Xe%-Aul zQJfwa>N>>sK53XKV3fXJNlV&0$7oqV*C!WKBs}80l`wn`y zk+fw_D=Ns;iz{%lH{%zu;Py2U|7_jMP5ApviK3A`R=_Peo}`e^5xI~aEkUZpvJb{9 zM?5Gr{adXRDYOF_q$efX)XrGcP@#{#otuy|a8cacZg^i@qF5Wpm{cgn7aQAgFDU3N zY;u7fy*dsU#~zyE>yWa@YS~#EH`uT^-(4Kfdn5}Z@$6hg3dJQa7sEj7%nNOZQXHCf ztDBr?YFY`*9i0igx!j|_4f{KhCu;x1uDpSR;7#;Xb#)2Jaa||1sgg12cq+#=-xdrY zADTXwUv&-+l^*s8G&4&*Ug$8oz#gz0c~QhO7`aB%ZG$O^Qgp4tCY!9{u7~`cHibDV z%XZ~oz*{aoLdxqi#E(xu3R4^IxTC-@~M}v z8r)*$8!iO-?Eu|M2e&&{rE<@H=b&t#ozn@>vaeef=xbZdAwV4D;+AK{rT^XmYd7!bw z!yn4uV8QTZpskr2agSL#z7TZH$GWo3JA^&YH6B@15I4^4W_8!|Nj&x{>!t z`*LGG#uET!;rpDs_FE8Qq^W|WeaPZq8m4Vpk8#}AaM^p!VIxm*FwLP|X{$A|mW_9@ zJ7>h^{@sLPdY%XKHX^_a+HH=IWWa0I7YF=&Ch~ETQ^TyB3qIccBLCVj5!i9cjNeH0Iddd{tVx}%?y@F%+c&DQW^qeh@EYEYsZ%IcbzC?V25FT z>_X=onj!mbCwTlm3t60{&WymfhJs7l7dV@U81Q&9KALXjhrJJkef5VehMschIuDUH zoj9%Q)3-I653LkDS|%YkBo!9XDM`^WUz4TuwP6pAn;1}gnRrD$du)UJ=p9d>8WjWz z=G=8e!d3TUt*<9g(wP@$}pDj8@D)qwd$`#Q7p>n_WB_Su9kuOY4Gotg~`3T;=J4noA zS)Uz77_IJ~m{>IMh*e8fdTO$K!A-0nRZCvdyI4m$KqA8K=79SJ{Y#Rpy4Nyp5Icvw zriUk_5hL&3ZbkqH-TCkPZ|`z;rV0Xff+0G?nU8Y4@1~!Pcvnw6ExoX?tMG{^(M01y zWvhONfoJMrKP_OB7LIe@=mFk!KSm!CzkK$h0i65>>K|A}BI7w`2{)_(_&s=qUvX7w zL=aK_!M0)52!uF?`se@53QrHDH2KOiX|Ub(c$+dwWq^FAgX&__jx4{6d0=1@*>N4z zW}1PKST#AnSweDX>mc0bS&0#kd6L9tGHXvBd}1HA-`;ZX>+O3&NEFhdY9iD%Z!fk6 z>^G(%d{-~7v;hRi1GX||%CeefBMB-q&Bcg}>GJx=%D`y`&cF2ERIhpImWHC5FSZ!; zWw9x=8cXaqDO7u~9i#l6%`qktd_Mv=BTNWX&{WGUPn846+m#r(SE1j%uf7j{ zr`JQnKwYd@R%B6Gy!^vl;V6$;j#)>k1z%CyLuT+K!^amPcr$U$j?r~~mdk)gcxpl~ z_GEFERWxDV+aM|IdOB^S2^flAnPM&xKaLbC*S@8{ll;u*_Icq%zj~t1;1vRIm7>CD zK>9+S+lscw`5c4^pA^StBwvNxsxS=LfR4Tz>gUw5>L`?XL@(#=q!;}fz{bvEHmgcP3JBc-#|jzU?zwRd%%jJ9 zFE5F*l5rKg$=N*ZrWvhKFP7CJk#eD2UyNh4yF~(Y>djI?V^?)*N+|$Oy;hj%pwzNI zMt97?EZw%NHTB;eexa-rwx5cd8^s$`Pm_}S7B!5FSvLvPJvxV@X?AWWZ5P`(BotNb zy^EPXniuvIYeJX~mMS$0shNtu9e*VodlrvUj8~FrneX21?sqyU!oiHcQaYnt@3Joi z4oyxy@_N9&@cc|f^WALih(j{CZq{sb{AC)6JvrASboOE-wK(Vo@!7GeJLo2udPCgn ze?)*4|MX*nR5cBa*^2x;T}*g`0>lZD{6QHOKO-@*g4`7q&v}Ka4JzNdXjLj=4$9+I zPPnpRVlWyOf<9NwfbMdoK!L+Mshw&DM4;r^1>Mp;w}z^ZrO+crKz&hxOV6#DWBrY9 z9U8{q0;;x0|L)Cx0!#dA;1~bO(x})`AI=9RS+<3f`8KLDW+Zl;38|iW}2$dOPTLTn)6ux4_FF=Rji8+!o-?Ap&xj0sTKuh1+3@;Hb)TL%F zI$R~f$fVDo-`yEMt4Z_nJWg)@_Wtgafas3hkq?BUY%;R+jqKNm7wNtkom`oh_1=)% zQB#z*2yp?(^s}6dHW=82E4-c+7aNt*n;HFQtv#w@*cVbCy;g>o&u^#+UsQ|i@WO*G zy|RG7f}q(qOP~7@5SKaKdQX?nyI&Qxd8M6_CtZE^56R-IrT^5R{ED78Q!}7gQtEYX zJqY+S@v-IZ;<`!1oanjsEyoY*Jg%Pa!X%~#IsS2-8NRG$?LKRu5Ws}33XHDu*Tp@( zNoa!ly+1c^d(``mE05)c{baxm^aJ1($+J<50wHLbxeaP#>YDeCv)!-tN=fw+g-d_w zV0g@B^yybZS-Pe!zH8@bwGrH`pcz~MBf(JQb{g_j)5 z-+>gt$VkTCHZ7LGpP^-IhSYpxIcy3`Z;I;8HWT*?uT|G)f5d=P!<#DqHR^k8|@%S4sq7GO4 znW|O-R_TH(`3^dXO!re(yy;%o>JQd`ioPw!EfF97}L5~bc$npH067=q~k>hK{pt9#I&+azW z3$D+j>9Dd6At%r(4Jo#jPqO)}7dAP2!k2-|oV#=z)ubol*zk}z`!*_4Vue3X0kd8M z6;r*k_8xRt<=*4f+N^hTJJUP0(euNdD|n|$a}hvti-A0WI>^WQ4cP$rjQcnO{^yPy zSYKzR5Q`SCu>sR!{rdd1L@<0(NgGb{0B5O<4Fc_Gs8zt0@=cqJ!OgWUKsG(RGA&Bv}`|rKr zMZG(f%NTfb7tp~u;DY)$)j#9{mYAkF~GfNIGHa*ltCC z?v?BQx@F{$Dx2cw56av>rz>YH2Zr5qNnlh1j#IP8a2IL~|YYJY_A8-JOQaJxQ2 z6H-!xwFC%Kje~U9ya+pla>JlR6a|1rFDpe$hF|kjyz|FY36o&nG&z; zXbqD~4nC0PfQO|w>IR$$sIYC7h%3F#EZpPSp0ruS%?b36sUJV7*fs1exE#z<$!M5c ztO(9E>_~w4@cCaVvUw;N3*6hQC8fB^ z&TmWR;(+uGP^f7ERV}CTxu6JCpsBV}7JDY@J+)usubJt4w`Tq2fd}iKoOh3-I*3kF z#RsC~LNhRZ{wi%967+-x_)@#9%okI-bt0*w6kz8)6nI^>4~+X;0KA%JBIWf^3;sKf zR85LXCvuu=*DypD+f8kmW@Gk216WKC1N!!63B`=SmtuaC1T&MdKY}Ce#B*IKr;KsFtP zC%4+5F5*8c<4`CUZdrdGgCy^1v)2+0rJ3m?Z94u=@__n~$yFQ=X`Wn;MuB=B9Z#7? z@hu$+K(E)QmaW=wT8%J|T!#xvV3=!blJB>`8sXY=b@h5Zw7eu2O@!RMo(Grs_PRha zr>fPwgH!C&>|ICDWLH{s`kvUrZuRdjust_Gdk^C~eQOlmT-?D|K!T4AO!S6JPfcUj zWd77!kF8cxr8<-~`|WgPv`~0SoB#MvjR3Z))_A0xw|^H-nD9j~j-b`AHS#@iK#z)A zg&zZ-N91tBC(ZeRvcV!U`?E*vtr+uf8cdhp&0o--Te57J_UKp5@Lk&)5R$I7LaT{{ z#gy2SmLnn^^4Lo*{Rv;969XB#`4{WNwV624OP2A=2$k0<5DJ{(7VAgR$-&J<*cF{PpZol<`z4DNGV znz^iS>d5Y<)^pp40H$+xdd=ShfZ)4T&4Ajot-cb+JS-p8nd=XPrFCkd;CwVP0BAdR zKCSsB!|S@QqEmN-sIt+bN0J&ay7ebDi3FY}J<HI?q+)wx)DL*{;`5Bx zu^j}r@t?r@NG#8pjAN!>fBGli2DL(#W;3&wWO)6UQuZ6ZN+$Hhl=r1-D;Nh z(OgBG!*qTcQj8#7A8dJDH-g6bxTc(by39gx;~3B;rY)rgAl{EZtMVN0n|Tt^2dy8Y z{+(-OkAWC2|IWu}Qh?}Py&S$C%#0_1i9=B=uC}O3ql@I*@x+x#gS8UUF7^pSB{-_T z^-IP@xD4}---{NhKr_Rw-b}1D5!5~n*b2Ct%~G;TYmz3;4~~CPh&8F<+7@-u=O%f4 zqtz7t?`rLkkT6ueiwxNtDJIkSV6Lk24wl9Kj=Q&l62V3KlUwt?Rbl<@n~z{5m1$-d z#Is7>9!f0otswSXN*9v1FJAOp$l43cW0;!YvUFXXu5C4$UI*sn;KB$q6tj*n4Ea*6I|TC)VE4Fh?y^CPKnpw`cdF z3|#Lbo}PAC15_S`(3_{VRGpH=4)1(fb(yY2ethO{<1V&LH7>n6DUgW$xmE#o41(B( zVl2*N5`W-m1cn(3P+wiXuFHI`36*r%CcIaaxFecz+Z%rK$_fHl(W}3ydx1HSYJPtl zZ^T!a2S{DJ)nAL3ZkKn&s*`l0lMzleyiN=Cy*@fx*WZ6Z3S9{lst`siNxfRm?Sdv^z<|jV_k(=9G8NaUL@H+i!eod+1y4NqgnWNu+0hZF_(m@F_OTPyYID%=6m}6ErY@$9M z8a(5iqGCmS%>b$w!Y6Jd=7a33(4&p&Aax3E;XWM@x1j1#4RDT1UR*g_vGd(Id`+n0 z20E*c%B!2LRi}zF$kT5ll=imMxe7UQhrH)oE629;^k*@>k; zaY)Zj7xpB@*W3eOb?2kxB;S0M^2P@m$wv!M{D9RYLt@G7k0`-gK!=eehTcX4|&1Qqx?QciUW*H{*8qCkZt_g^I zlB)wr%f*WD{JfIAW-ODMP9jlnke>7(#gAYAoiJyMXAp|(HkkogW5EVqO3%4Qbd32& z64eAti_*Fe69==nr8y3bzMt9YCvS;8l_L^n-kRKyVrU-=8yB2VjD>p3Y{ge!lkmis zw<=2aplYX*q?EIyA4YMO&lyan5x>OcO-_`@g3BeVZR<6eoum(Cb^YQi6cL;_ z-SXPy?DnlBw}+5kU>z$>^_MmgoOdKR@WB|e`T2z!P5AggFn1z6T76PQ>Ru-2g-6@T zy&s#(m&h;4ziFo)ZzOvR-c7FiphS%{E`60B=La1Sx@|t>EY@Kvz2OfCHV0LE-`X~% zq^7s6_t=#);;t#eZ%S5&d`(SeE+Mf!`vy~1Rf6ge3qNvMEB$w?c%vJy?tIWKI_-XW z?jwnS?wrG7`E#iz6=Nit>(zkYDV!-#dn!NK2Y-Bnl7ym zN!o?1v~+U}1&3BmhF?AH5ryzt^D{;KP)z{JPG?(Z4H4L%O4BK0wZ^bZ@14)CRm(v| zi|eGcNmiND^96i8hR&<|s}%O2-)TQ)A8&Bp4JDa~-qvMxIbBGTN2;6b^ zG2TU1PB_nmx;_StloYwi@w|4;Q6>P`$ycx4Loc?_YH~bB%5m=|@==O5?{HPmx^y1v z<5H{GvZvbI9+7WW^Kv9P?hf#=ZRp&xI~i>H)wW3-*k!`5+aQ@6beTh+6MoZnQYrQX zzB-)KJH5Sd!NdK zt8iclHspUYB*93ZduY;CDbAMWEDuqBRp*Sh;8VYt*ElcfnHuiRu&dvH8khw19O08t z6()TO5NHW`Bd44)xe^tt)o_a_WMXEo`R-al$|DpI8v_Q}HUPfP{oMDA>vEasV#Jy~ zz?{=053F96s3dikZSXhi7U9bgV#^xroJ3PCGZZ)`5v;uIH6)hjD}j7-M8jtikWoy} zp!jo0aI%eExcBMUM#<5Kh)XEU$UcMP+BB7$!ijGJM!V$g8^%43mr{q`4VN@BTnbRL@P zYZctyZd8au7+k?x^8y)!VtXFL# z8@>FGFu{+W_DI!oIF=(g+%XNDwc>%ojpjsw?~^ z{jqO5C>M~x1cKzwu*{>(_ar@(XH$TnZVxdeTB78p6 z68}F0I$lfWcb-R7FUho-`R^y$u}Qm1*47I{cauC#B43W1BrUAy1%6|FIy#cIZxwL~ z{8*v7--NvNW(-Y5u8h~Zyv3MCOPpRkk!UU2TKlm&zVS8(Q4ke+KdzQEfNn&Ic`Qva;;5&Jlo$luxkp0ztX1CW*q8wB zisa^1JVXOP%uSXC%TL9D_rB9{Mw}ME`Sm&-zf>koseQ7%zn!cZjsTJJw_3WVq!YF? z7ZhT=4hjjw8f>E=w3dVXKDiYYSI277PVg|+7v11tWcf|Bdy@v^SS+>c(}yW=IJ zR+YGw@?d;qgff~5z}b99n-?^1Eb<|lO?*l~WKf}n2ATLyKaSn)+BhW_e~L08^v~cht9rP?2}*tze$I?} zJ7aR}!o632Jf*1XhfS8|!&NqTT#ok;ep)`OEsOn*a{Y0Z!fJ9#Tk=z{Y7hB;*Ibmv z;!>M$oW8iRO82(Kp)sM)H_W+l)aB*V3-%AIKKvq&-Gb$|4HW|+Mf z!$`SOh;oO07avl`iq&Q zMXH6*fYsH61eMo(5(pGt$-Qls*PY87m=ZHX`HQV1BHfExY`dN$bFoa055j+Qi{=Fk z8d)ivl{vnSOkba{x9@ygVU+D}HHlk)4VONiIXA(k7bYH!SalfwsP_P>#>aj8?vJPa zPaFfnYG%C>T&D-S@i#i4?W0$%voArJk+uPuksIWj6b?qT2G;zJ(Vv-w0_0!~$@8x> zR0@tq8B`s=51Yc#jnnNA5Akd(Z;tNc<^h){UU4FX7y-KPC;OQ|e+Y$H+Ra$k*t)#! ztIs1K#!&#Iwu50MaHz7$jo(z(`iudL+=-@+AO`}9c{=U#T}-!Oy8o|`wnK$9oJx4i=;ssnUknavAtiDw{Q)pu*sN=@K^stMI#1A^q5oGB<- zSaXw40o%6EK;_vSQ`ABoA@W*XfPQLX2TJ_l6wlG>v5m3G`w}ZF*OA#vTBZia4+G0- z28jC9YQ;gewF1WPd%)0Nlpq7m^?gE8Rtrtsow}yH`a>$-xkFF8$wW?`{3!YJYaOox zN}QNeh9Yk1-&mEL=3A#HD3(s@<$TMlOL>>;6T>u+EB@Jw(mC{xloN=-P5xbu-J1rW z)KMYNw)Jv6Ijr=nMy>g@e*IZprN$riXA^Ju1OP#NvwZaSei^E(?$y8+&2>TO=-J%j z&E@UAkP?ru&jf}0)f_}oe~vf&e*)^%x_(?bu_wO-9`4OLKl~Fxh0XAMRx=1iPt-*% z>4>#9>NrQB1<3T05^mRtM-Wif=gX@{@NzZ@tG=QRrUBDCo5LskFr%0f0cbF;e(9zp z31~Y!?8GEH8^gN~_w{Bwl5tY|8k^BM2(FqOo7HL_8~@Th`y-GPO=K3|e%6 z7-011R_3POE1b7*l_F9ME1!vFGybXPIq`QNi%e#)f}K9rkpIjN>?ko2|J2L-mCvHW z?<0FVv<3*Xh#%MA#ynmgIf-}r>yR$^%?Vk4r~K`9l37$gZ7*_xcZkGZFdy>8zMC?5 z&zdTE<4xHaJh?p+{^}Hs)Y_on>1XD7wqOVy2! z?IsW{(AKq)Yx{;}&MIyHz%05s%d=?_P{|@y${~i7Lps-Q3$)k_N{^ZSP{P;FWJ*}* z5N($Fz3P4rRyjZN`0V{FCmB3>FkcytNin0!IVITGXST@j-_z8bjnQIAW^_2?cZRH{ z`*}#-{dw0+MD1g}3FE9XQSI=YsA>*_Wbt-@E{OH`dtcx*=U%38X}N4B91VSK)<60P z%M}Uu+B4W83yVZ4^VsnV!prG062nYK$dZauA!_Z|0tE<6zTT_j<(KGSRU!IU|DvWT z0e9zfiRwrLnA9>k(0qx>j*Q<`tE#FqwLOo=s@<@HfLGt5n3k?J8t@YA!$>$5OJSVD zwf;rmMk3sM;MitZ86R@A&bB3o=>da?$AE|H?Ws`WEfwNxat_IERO3apZE{EJ0Ads! zr|6NGt@4i35M#HDHvXFzlemo+ael0We_Qlxq&N_5dzN-isBZ?ufaf2xkV&bV@x%dI zPPNZx)*{VhUaMU;w=gc#YVne$fQ-B>q^ln%Nhf}HsPGuC;o?@o=h`_A7PUyorei;w zBm_o}tR4{0Z$Ys6{n*;FhugpQ2E@J?6Z*Y~PFu=+Udv1!@{ZN^N!+O4?R&~Gwu~`? zQ;+yUF%$eB!YX-KTo0!=Wa#M3LC9+c^|GfhSkN|#$z3)K)-S}~23B=bod6&)i!IR3 z8wyTq3!oW}1t97hm?bphDfZ5{!anY?@3Ds! zc62PH59w$EX2Kf8=DqLCUYh`1ezr^#Yg1PPjS0{Y9n;e?L zm}>24DVyzk2+L=tvI*{kqeIVXug*BBM2&gRR#*u?C`?4r@p3kHj22{G+ddI2Z^S*u zL6;^M&(@&^Udr7q!>Z42H#H{-wfD zXT~sg%BT&4tAI_VZ%#`ZP5qd5hU)7-zE^lj6o8^;PjEhjbAB(efsEaw?R!Jgkff`W zqXU%RaY+U~j}KUZjWI6~Xy=~#!nCo5_H`jwkAE^%tr=#Ld%>y_VvkFbpt}a`-H&dfzR=7SB@_odR0t3?s`+wo{)=hBy-X zKDrV%O4nQ4H1{(Nh^vBcI6lPJH(bk!%khmZSFj@qa^ytubxn5?a=aN;yz-rlxwiZi zkGpwL+RaQ89||}&mKEbcX!SGITAe3f@H3<7tP)_Gpt*@B02tT_TK*a7a(Xl!AULwp zM`|T8hsH>%U;W&nHXa1$jj}-)3>VDx7)b8C59n%>WHwo>8#XQoLt?P`NOnZ%arl+K zji)gqs9{3;5gptKmhroW%G3}Tm_n1(j*!Qf!Dsm}@_D{|Xl5v1b?euFN0p#~vlTz_ zYkPUu*P!{&cVA`yl~Vq%$o?2Gm>x+!=_MKddCowsW~W+7GF+;vLSELexp==d7D@i& z%;$H2(cUJE8YW!Qatws6M?Z#j8Tm!jk zd@{kmqs3LfqCi83ri(C#`?FpEH7|G)7j$Q zvzF%*D0kf@>YztPGg8w{n$k5ur7zotxpKBR5$j%+4z zwiFo1y#V%ZZ!_^3*ll))+5{LZ0lxcrvpftcbAm=Nr;ysJb($^c*C68Mt~t&u`H4@% zRWbOGb-X2dh9b0TkHg~-Vxp=acNc-6)W#~T6}oBq;RgXOphzCwi=*3N@;s#7e}O+Dbpfo1qm>PBQIi*`ytB!x(i5X;x@PRPrAv&H zxO6DO;~8jDeE+jYl9~5{guiP8^na-zJb|z(SfUhSd}RdjX-i3+2YpHODip6$jPwc~ zx#n~?6@zdAXU$nr5aj0S4HsL1wJ>}SDR>MRBG_oc*WwQ+hyagO3U-6FqWtA1tF;=8 zy3ibuj!8P9S|t-NGWMg^r6;_3t7?XjPnq0>2Lx&-o8AJwc&s zYdjr4e}fhG;0mMCDc`X``s37aG**#h|md3b~BnJ8)#JkN(xAm7ZhctI|8aK}2$Fb9O85))A;;pTx?y(WDZp|(xX1P5 zmk8d{SPIshsp;*UoyyfS89uI!<$G2k?)_$yFzo%x6URfqBf2in_G+$?kWxldi$284 zZ*a#C=RR=EFYH?df$OXPF&iwK4nWoH4p7LAc<_NC z7OZZ9`@+lg>2L}kxTgPk^l}^gV6!%I`Qu)1Pj>VC$Z->SP(#ARIDZI#jdnP{=Cf`D zcPYvULaD2u_53*^`sQ&XDA$E(h$Y`FIKfM&Dp8|D4f@BR){~&;P^f@I3LHCHiDA_< zm%}N+-k_J7P#Rb22t2W4VrI5_7%ZUj0)hOdG&FnJ#!_ECD4U#Ar<%veCN44~B1Q7o z5K0Jzf!?3*iDV?b{=H`r(G=SvyF98po4D+2JxGJnu#=X$ywkHPG)!q^ePY3Dznp1< zvnOxtQ}W=h%RcYhFEnfXhvOpBIA^<{LvDwrvT3ARWXdW6Kv!R{AVvAS5~S7ICktFA zg#jOCn%zusS^`e6?9}BDF%PFlvgt{bKZI`p8t0|L;3-B<4@ef5E zmPLmW!ErW6XS2{Y2HEDvvfgaL)WRrx0r!TaYo0Rs=6@=~7uTAt!?vOA6ZF1KX=k&{ zqyo$i+rE&iX_G{@wWW1l@rN3s&11}XZrY8Ei9E@W3l$GCIAx!SGM?lS|BjoFvYzk! z!s)3yy)^ILW_S2kEsoTNB@VjuMUVKTlNkFO9<}4VQ>rX z65KVodvJFP?(V^ZCBfZ?;10pvWpH;G_-6O+UU|Fw?!NCohVIj+`kYf$ztTp=F*)0r zb<0Rd+QnwjtCKgA!>fREDJh(8V7NfzBJ>BvY=tZxR*!yT6f#0=XRd6Cl9G#SX&_7z zv{-}KQQ+NFRJwM&dG!#gKCc>Z!!Q2k``*663OAyJ)kD6+oSe517nx&{`raZrBzNwHNUrAqXr`%oWT%p_fI@vN%-v`Go7vzn= zp7*v4Eu}WJ!BR1OekWeuVx1BqU=`Za>eBcRqx(OVA(tO)=SGNp1v26!BH=M{=p}L3 z;c6IkAes3`9$_XfRV``JSe%L+%fm9Lgv&ED61?u`=#{ZL2$V!i5K-s*_?<#5RC_AyR zDG#)x1OB(v+~4*eRPc#O$WcC?c{C0KpB@}I3CcFX}3e?}aAN6DS z3oJ>kFU5=+3;!BAp-)?f_fF1# zZ@^k9qG)zFYva*(%?W;TIp2#MoPyHQPQU)$UCFzJvf2J?aOn2D*wE5r!7W#l$BHxF zTuDYyXy`zSF8p>+PYHncB*?EtVK|2&xTo-ZWnsi|q$d%;&ivl@uEKozTtVOM+tyA_ zk~#MMHE1=A_m76-pGXqOwv)n+O2Q^!P(_*y=K@*G405!nm|YbG@pv062ufasnm9|w z=lJb$r1Lmd9{yAuhyhEOocF&!PaIpNZEG>PZ6GXIPl$i%Ipikjl0Qr&C>$Xz?K9Nb zxital!L|Rj|`Cg6So-^IZMhX@%mo44GdRBkWU-sCA74kjsR)+e(wdK)U;iVcODs< z^NpJc4Kbd6xl+#eyrCFCchhL+>r%&eJB(k>BW0D{e!SH1tkqx}VD|^2{!Ea4`oYbF zib`@OOuk}Vz4yc6ev-Qn(PU^Pki}L~Fgy$)b#PERJSM_^a)|RdZlc;zN=`a%;4QUg zjZ18Z1U>2o{=CN>k6o$`o7vayzTS^@@hlCwT3uwZ!1I``OfJouqLWALvW2gc9U#jR zm@%t8=MlrEU!?e7vedsWj5_##dJ(Sf-|Z!;2b(aHuGeZ?@}>n?{N`X$gyV3jn8D^= zO4d24wZ*lDS7`PU`Iv)(Szf?zb9?3evQ4Z!Aq5$qPDwmq2uR+y)C!h}wQw&GI`IN6 zH-o&s2ZX!Pt~j(>{HZ7ZUnKngm;Z$b$)hZP)HZ&DOt2bJI-7Sc?^aU$OA7UuBpI$J zZj(}HXU80Te6kzHU#xsI6-|05%RVUUtqU%npG!ac9RE$Rg^&q^92@k-aCOuCD?7wU z8C|c>uS6b($SZ)G3$v|N&RHL+-nuOvZr-^{)E{#LP}(2sTTXlsQ4l9z0}Pe*G*wxL zN;oF&L3_MHU%_zot!F7-=KcRtX+mB&xNY{jUV>tyCj_XsYYEJtADWI4e{oQRE?@&_ z<6uGn*5+lrZSKq1dvTf6oTJ%fRpaAN*X*tZUGv<^%3759@Hce>kQQ}MZUP>Gk58jx z5j&Cr;s@FKo3Wg`r?UU80Ooh4;4j3FCD|&0ojLb${&JzL1p*#ElxK4*T@#EZ1Zp;| z_!rcc3TNxp>IgXAy}9ehV%;v=CJw8sX|mqez+=u$eUvFlxc#1d%Q?>b9+dwoG1TwW zl)Jz%>Ev;J)g=|aV)bzEhp`j!FGp`p2Yt@(GVOyUMalPlTCk5Y;fC8_)8$7lbr@6# zMlFVO704QygY(yd=0zs>#y$e`7ofl%hyVjCxo~Z$iTK$RzhQ_1LwwN7igT8GZs??J zVh|AT*rrCEE@&K}t*4#+@HcbP$9Cl_ysjfg;~3-kDO@o_4JMBN)9DN2do zzgK=fm9)nyLBtIW{ol2NeFtJt4^oyMVG+)>=w*p*Y+4O;5-u^FPqXU;9M5z$NHL{E z%TZ0fTkE#*Sv_3OA!&cmF+SpT8$%)_jVONbwZ}fwO;(o5=GR|o7(q{C^D&dVLi4ez z(4P3N`Cw%FU$}IX)1Ot#zu=oYRiw1ZW;s|+H|y#j9P{zR58AkoNa%i7X#25j(!H<$ z;)wmW_c(DvEpOssubPQ#Suzm}d)VUq|cF9!bFSHb_{1BvWn zt%bMfVqI1-N?d60|1PhE5MdDFYG1_4{R$IC384_<-u=$=ewt zO?V0iix9`w-zEI_CRlsKArW$X671vqn*(y+L*OFPdF6jiYW&AOay>)H$$TDTj{Tbh zJ}N?vbRZx7-`xp62sxlWI3gX{f&Hs<(w}h4a9;jx@g8=x*GDr21 zIq@I-ka+>Es;au-Qx^)aqN{r}+Gl%!FQZf_NR{a=OJHsG7U)^l?Yl^+ODu}wq5wzWzv1zy;^Lv2TY_}*03JxAP@jWBoOPg7* zMOM?(W27iFO-M?!*IEo+=w}RK)U21Dv0EW~Kqg4&czHimJFsce{{t#d&2FX@%Ss?F z_=G+sF<6Yn_7b7#X@4l|eT}Q~*r02<-|az{dhP zYX!sA1&yYJ*XH~6`Tpn$s&&Ek3g(ctZ3&L&gG`#wM3a_ae3AaNYBJfqYT1olw%;9| z?;sb!FS6vv9>V4E;)yedRh^Brw9GcE{#^e?870V0GH zXOrrmS`*`%oh9V7$~)G5(yYF!0~l+23>lu7H8}nHwRCFsP+?nfM`>V$o6&_SJW(a`J!F$ovI>rt;iLPbC=jt8)^;lCrt9?dU6cEQ2~r%Ul)PT{ z@c8P@RkUfz%-}P4jR^d(jrF|Bd@b;FoPgy>Y~c|;EBM&`odx5o4wXUy%v^5G@z zpZagFnG_$4rH`JyxkdiL)uU4Wb7{DD$DBZFH}K)?d6l+Z+QY# zc{d@r>yv{VKgLyyL(qYauQdbz%?{A5{_3Q;OCn~_FWXZdcsZ{S;{7om4eh*mb>%39 z|GvBC_{2YsZeR8x>#=WjiQ!tnx@#phA|et}rbl;Wez~J{(j@02C_BDdG9V>&?^Tz# zTDtK)^Kn)ES-tdiGMJDxSD%=Mj=?QiF?&2hGnD;>6DU>iWR&i7(bUOo!0!1r4o#1Pu<^RV33PmvU^WUT8{Uh_tUDSf9N9rf?NedWvNyM8&z zv~7ySWQqT*uxC3dY0Qc~fLlP>B5U9tQO zE!RhGh1+)RM`kyBh7IQy-d2Y?FWoG*Z}dGbY|7T`KUBwTOKOE;R{iYT_Kc@-H#uj+ngTwHWfSTRuL$}a z9d&UB7V-!LK2tb&D*0{Pj-SV8l$W^puQpT^_Y5CGul3orDPbSBzw7Sz--mC1IP{Nu$N1?8@z9U9!aU zL)0i@VujxsYjgW_^?PljxrZ)PA7FVJ?;>$&)psbmI*M2%F9QAB;l8YKIy?HQK^7|= z_RgrwnDgziJ4W|0BqgLg_1NR`*K(SgVr8?bix%XorIwu)#O{(z0;z)xoO*QEJe9Lg zXPb9g+h2=;W@at9X-7MO(b`*kApLQt>YFC}ruENsS0Jx2>!oVlZ0}==8=iX5vX-^S zn3I8f_jPWjzT~dzDa0c4;!XMD>zG=$k_(&gFOd%9p}zNZKHE z6h7+U`wROzVDZVc{Sfa7Q|fs&3)mxl%h#4c1C{IZ`2|*^ugdY_St;#|8u(7&%llAA z@G`Ro9hZ;tOOY9(9(*}=t}M_HueeXcjP#LiU6rBXFz@9RA2J2PIfZ)s@~ZfjgI?x7eKuux6%6hYU-G}0>d<|lufAbp;@im5msYM0L1KS_p0vxm zeA9)YHPTJXsEI`!nWXWed!>sZZL-Eo-EGcRxB2$j441ecb&h#UB^!IPP~vo61XbTqzQ@Ld17exz+O z$q8u*v^myFjh&0j3Tg6K1oft5=adPl#=FwcY0a|QrBD9uI@b4?v6PCEa(9z!U6{-@ zp51*ec)PS8n`Rs&B zN3tt`*1wCEUt=iX_Ey8DgISD)wPri#*@M;|%k8<$4SVP_3Pnit*yC7{7>hnegJvFaREhb8XHAKt5AbY(f9t@2W_6~CrGOT z&KZ4|cV3dSC`4uus=&g?1Uy>{6W$ws0*8#}PwN#ZE!c=F_s_l?cz5x@5C-q~!iu(> zl?UGE*&9F4ijdcXt*YA2+8;j9j{z?~n-Gn-mc`1una^``+fEX(PrF-p`T}_lF6?mR zv|03~4dheh_gIugxETluFFlTC>T0}fRxUE&x7zRdk}bG$bJq&$uRI2Vr&@(HbF%rD z#s*fv@U_b-f>L1@st3D;7skfMCJk`m^z_p|-Q5NpeF%|~0N{D+-?+o*XWRZ$hEglpR55+9S2eM*8wmVP zyd+kW9gX#5vL)3@clsyLMsudhH~}|Dk&4e~h<=X6b4$@J+vC3FPwVA>0%6I@Cc=Wn zS|iAp?z1a<2^MZ92j_qFa%5UT^IvV$sy3bW3KIDU53&=SM-ux=@azXG?F!?# zI^2r2?fQYIQ(F|^o)4;uw^H!S9dL?E?}Jp2DhDamzL_k>=pF}TsHd9@-d0u1ccF6X z_@wJNZSys(j+2M{-5Y4D{;5>Cu97Hy$mG+;Y+fr<6V! z1nQZ*-7#AXu4;eWWL6JeE9Y(BZTo(2Ud-G=7*VU8HWXOoq3ctFmi;vUFpgy+Z*OlESR^JkGNg4fyyy zmT2@uS|n2K!ag(Jzq*X=FXPlHnby}!mCI-tx&hu%G%!7w;V{0`$A5wyX*CA9gHVng zk{O;L#@Zh24%Em}*SG1mcXGl3OeX6LRhBd>EOvTMwl<3(Jr5P&O|(jEJNF`dg;j-E z3ESo9hN+{n_WIJp=E?mkFMZ|}VwvP+cMVentQURdwP5n>Kt-)(Z15Q01)2!Fg~qN+ zdZ{4Q$^pYI7YDegzPt)?xM9Uz?rTrZ(r$D~3XF}`5WtHZo@U({slo1(uP^z-8w zq-hJ?q03G3nBQQ=^5No6t6gi6VN}_oTQlvu&AzB}Vyl@;n)}bK+I~;Ov#w@9koVJe z>Y%nAQ;HE%`0`C8@hx4G_p^C>0=pGwV+v_~;LfA>9m-rcuiD6V-h=PDAJUwe8rI-< zZOycih3C1C-`~q*Gr8rWt{xKfS-$A+RJ>j>?ef(xaNAw$MB>zSs{>N5Cend)$*|)t z{>iXC(nm^Hy6e>*5%FC@@*}4qYruNg#EO>KAVU+NOvtW$R!*(s4I#+WUK2LpY&T5u4oWGU8= z2uf;`Gab%4o=5G8|4Z89*QN67} z37VaUNCP&<$NeVH2byVvD4&gGMgklxtR_TXsqpZ(2HaNzTQ&>wq^xu@Op5v-l-Rjz zV~J>coIpe?tqb=D>*KOIsaMwgtgp7F<@=|J}{(bOEa&YNm< zJ{2_e)m|~IC8j4c=-)3f(#Ni7ODF>cOVA%yi;Bo$b0Ap1GAxrT zk|n6X*;&0h;b1*Tv$}BHUXrP0kFV$qXs|D^wX0CK(lx<3Ke{q63pkvEq#!)3GrwmCZBN#St1}qn(4IbikDw7V%!{`6`kQ&pNy7A zpKrPK;k=g+hs`qM&C->hEzeZLRYv__mlpfh{t#pQk58gsT{2kgPCq?8LF(b`Y*fr- zv$ljCuZhNs)lp`zO;gm)G``~G3bH*rs?YaoRkW6uy)U08(fN8Bc61;zt3#?=cb}kY zTdmmZ)_!LC{1C4DX*D;taF95^fk8gn9qIkNm*v{W!H3?#=>uK5Dg%745$zuxv|SqP zVLv!{arQQ&$5T{RD&LJnOdqsL`HX$MADi9dW3wUWBWWkv-`FY&8yQCM>}!A(|SLxCWXeTRxqph8Cs*W1kfR-LYHgrf0hle27s9 z&*kdEal6x~)##bae{r*U@<) zY5o|u!oajFKH#*D&uY1r6jLpH0-mXk435vn+E{_G`FPB47f1<5&OKn5%zrNq`FGEM zE*RnCr|zfqmTSSVhMY+&6m!RW9Jqz9c_-vwy^^4iPj&AGcGHff+ZJJ|9=2-h%n{g| z4<5@Fj(>#sEG#hY+ALKs>xQl5;W$rRs?29J9NXhO9ezoui$EZVk5_t%{K~P)s3UGE z*}(|I?#2evv025=uH>LdR-IlT%a7F~INlRb)%%Kt@%<&^77=&Cp1kQsqe{-&&8SW1 z+&KF8=;(%4ng+Ex5_7n zrWd6$vV|Vf@!(iK9{byn`rUo8ZEbDv+a%@Gio(|nV$$&&zg#?So_qE=aSR|JTcrFNM}`6;gM{;eq@a=Qu(+pyHzNi-bp~EUO^V`NxrMr z#llJdO1LN(ahubqU>UU(Mmo+(?X^Va23iXrki}xe#K5$1{uYkVHWNDGWhinw<)%^s zBzg4xxFngNl-Q~(Feg>W{ruu2(1*%PpoV^+1U2F|5}mrDQ;?^(l21t%7J#Qn7U+O% zM0GG_C>UxwY6En7Kv_066B&Nb3?s%9C9>wj{Fv~@zp_B&0Go(ZK^FIe>+48c=W>>% z(E2C-!LUd!+sabWj2$`IJIvP-=b#}ZwCN8jmgG#L_)h_&{QA$Qku6TV4qd7pybhr;sUDvEaA5WL)-5edx|dQU1+6LMAXW{FtO=Rrh8yoj-z z{S8mn&twY4pJJd{JMv6d>kNZlq!ciCFjeympX_fD87j#7GOTA8(5DH=g`aa zGW2zphIfU!Yhg!JD1Ai|1HEia7N5l^f66Q(CW_16r;G1tAgdT-di4}EG8sQ(2G|c# zBB&vj)KC<;FiD@#6``etUj4@pfHgESJUUkV?W(GOBh2SxKN=p@-|i6l08>w9n96G& zWYDd3n)4|#sGTdg*oT!TL23Kcl(CQcCLaGNvj9658xyLx%`+=z9= zMqeU2i#nBb;`T7GK@Jb6i3Q0D3+}t!njXuB{IkJv&RU$&y|z;Ea?f z*#{>>)y=kR(76U23E$G!>3O6WTA!+t(R)0>D4Gh=J^lb#gnwf1^mV@a488pk_n{KS z+qig4K+>y=eLFmqS7wA3%O^u57jvJcZ1WDiL3y@ZR9?{w*oU8@XSvb{bV`_gAVVD# z#i5A6Nr9C~fu$c8MT5@5_FncqbcA$tLd7TibUV;Isi@&}+polBFN!TVcSnsbl|nyt zawoz3dY0Gw5@vDf!V`gvoHD?sJE$W@w}rnGv4ucB|05uod_a%zVZS2Y*z|DAV&a<* z-KOW+@d4AEW~&~J?Cw>M+gcJDGEeM-3*PBxDB@j7p$@27eCl1Ib$s4&b@A``os2*f z)=|!FQ?hPkxwliv4vA)I#$7b~hP;09UtYv*#8V>eyJuR=Re<49MC>p8GZ@7!@e{#fq)Q%+ zGIz!b>jYwCRvgwWV}hbdQ=0H+TjB_k9A4pgWG*`#^6z43H2gkFCb%Dny-Lb9vR z&;8V0&iDNc@?Zr4cNyUGHp<=MBC*^ai+)F(Zp?{Q^mi;%RDz$>W>-`sQV9T~hpwtv z_CGy!zaBw!4k!dk>z@|nr?D;d$v`dWt-`$D4k^hs%nqYQ0M$3Q0g>f}jNqzTs2uui zc1RsW!Bs2zi8HNcm1o(9a*dgqjdN4!+&4WR@>JfR83oH)qzJ;Hq?T&dq@9yzhn$`E z+UW0DD%BeJGM)8nHpW_uzY1Pza&-4hW3mgXc`0N2)3meq8>=}<$~?8jq&VM*b#Y&x z)!jrPfNhT&@69Y+%7h^v4rO1jLeya;+Ts1);g8~t;?c}NM?^F!L0+buCn7VDf8GeWXG zz~Y|zTew6>WaE(h0hx$x`;(q19_ea-tZ{s2ysFhq*GO^Y-DgGwS!Z?X1AQSD<74Q% zqu9Kn+QAGa!APg-PqRif=17UY`o8qD1TmcLD1?U6Jp9j54P0FeFUvoUK2j)GsJX=2 z2ZH9#ldYn@c6(UI%g7{s$?K=)d#pywQ*z$Hr_aAQ13f2V&Y9b_O{kU{kLhtGYz=2m z*ARic!S~NJH9L%KoteNBx0{8VQCAuDQfB%xFPPYh`3vj}be+3%Pu{$r%!P|zR(ki= z*m?sfuMW6yOjn$ILoU*cXb4hVs*Ol|$2L!(GOZj4#VRYzN3-mfQZhF8p za)XONNJYYuHBO(gxE$a)tLjakw2tVzhoSP&hh4CM{+FdGiW>dLSA80;7TmpT)rV6+ zBmybMAqWPFvj6gO5R0O_vQS(8y&`r$VYgg6ING6vxtEzmsCDa&pH2Q-6qO=b+hfjb zk3%RfEguG-_B|^86?f*frUMrg$pC<`-2I&HDWDY^)gT42V(M_Zy3ltYh?N2s$cXs@-^!TVI1n z@y1x-=#^@0Hz^SWiv}bc9j7F!Qx*Id4es7XyyDml-#B#l6oAz?X-1u1n*xDRRjDxLBQzDF*Gn8^-Lowd=4K0LXBGbiwkV5v6qIrBSOTA&_SI zJZ-a3jr0m6mcVT+o@Y<4S&eW8Ek@XKbHo|`6ILb_pUU5=k*N9&61m*|hn;CT{XLFK z`@Pp;NWyZRp7+B|6MjG6CAv!^_aQRUsr0@Px3+&_N`&3185sUev{7Nc)hG0E$}i4= z_WgTI8nuF4i7;WP(ekzj+0|dHY{=%af=%_w2Va`9y)u1`M;%6j==kL;>7#O^lyG^F zP_6;6wR1}V;{dZyQHa^2*E-26-B^@((rkoXo|#@ov0Wai2Kgmvzh6RUIJxF|f!V6# zLw{U&PdX}r_w$gDJr}tg{&ZlA2$|u8?|8MUuo=CGC}UK#y;52M8Jy7z#f9<6ZH;+fy9jVVVj{>Ha2N)Nd%cF+)kA%YZWKhi zH0$@wD(@Sb8{Vhw-|8XjcZ&jxDEoENBcxRQ$9!-Mfglnty_gau^&8}OwgE#P_dT4Z zCr@DNHiu<;zsDpz7Pk%~KtG+-wDdMPLkz_`aS`txt`}(XC6q`M;jt<&xOF~hm^@CU zqY7fZ>r-l9ePSC}K(^5m)uN<&bN4{pl|&IwtwW>wCk{#cUNTon?Uuj?>^sGv& zq#;59S)?u*!;dkT2td(THvD_IK~L)?`qUq3+x)(8Dn#VEIo<$ebY6u~0!>gQNUku8tvYMD9bd1^6r^^}GO2gH-JS{q#uV`_w2ru5uis;etpd+D4iqF)79r zqlK`l`U92N&&(lo=6ksi;gjz0Xdh6Y_*E=#d5Df2CcH!LJgMV!*(EHO7)pG$| z99W}rS&KExsb@FaVYp2_SZq3mO-Uu6*{OlbY`f^;d3mq1W9YF?4eF}$WE>@YElDH2 zKUJP={^-g|bS%8bnyo^>`8F4TnL1Rh&?OPur_nx}$%;oRzwX}okkT`x_W4Qau*U5f zN`)m>Ufg^%I~ktzb|?sV+lyQp*xALyULx)&ac)zRll*6p@K*_D%LIiLCpx4L3m7Mx zfcr(r`SX7IafBWBF8xlvVoWw6DSVk*($a1bI23m<1+1&RKm(jhnZ5=Cr4DygiVmqIY}`NH|F6pGs$2^gBgONDAF@08A&44%8c7U^fL7*R(8o#ZrCa@EPU9 z~|V2Rc|N8!p{zagsG+@E|t!?dhik_DOlXTV~a7E3RC|y zRyfo$nH>Gx_I?nsrxeCjG?I-{)d8K@Xg%2)pCtAr?UiVXQQo^ih4EAxRf2M;Vv-aM z>zM(nVk;qp9|ilLukhs(>clqT#I4V+Lw!tn2J0&AWbJeKJQgNr#bneZv))3AveBC` zb4!0<98i(e&NX=vCnQbBqb|}5KJxqwL*8XkLZ?uG)W{!WV6C&fM?+5M6x)k3Lv@$^ zl=kV-8v~S`h2Dctnb!1ZA-SN?L7X_Ur3qWk^6axgT2*MQp|z3YkT@(rhEsmi*&}m4 z1Mf59&<*hN1o$9!jR%JhoSw>5yYESpJLge9EKbCm8)hoy#^l_v@P1$#B7v@kqNOqtKw*wN8*UGphN z`G^r}xyNFHsTl>2&X=gPR0lXD_of3QSe7q`r{0Ee+o2kM2)sL45xo{3$H@DA zOik#VQRih^RQ5|Z^6S8XT~M|s3`jmtvPR`y4ZO{rr(mY5cc5^9A$ec=7E9j?o)`1& z-Kc)GR`URK_~Vwz;xXJa3>haE%f*SrIakIU=mdD4de(uHCP_w>cPW?~EX^`(eP_o^ z8qmf_(ysi^!^UQUxAg;=+~oHSc;QzRELZ^*6m)9oo5vQ7w2En%iT13vinyYo)G;Ud zy>cm4iACv7d}yL}V^1JM8vW*iJ?JLjl`pa3w|rf%>$jvx!Q%PMD+-?lhPWK)wX5EO zd~~};kM6LBU5g~Mmk>V82(@;fg~W*ADK3DfLD?KJYLV}9~1jp24%LUs5tjHq~E-{yVyQM&#n}mFhYo;zAwm)pA}9K$$vNC!T;Ko zufTnqVdJOTii11O8ZkZ+XJB|H;ruR z;xT^iy19y>wrUn6OH+R|DSt;ml8rFv6iiA7JURP48sot*Mahc^fjFZWa$bdlX9DC;_rM+{cg9;zfBfX&^wtiDfzbp^#a~)?2cm;0Td9j zqkzj*ri-q7;}3{;t+TxLs$qny`Svef`JZ+)cXzukrX>{}yzXIi7>J1B4z1J?2+k&u z0(}kW<7|jTCQoNIM{plrFsO) ztF!Wo0dmx~>EIu9bGaH(U%p8+FX3;~W5OKewx9Iy0e$~e`4n4EwRE+xV zPwVRQ$g@REUN=!SJ&ptmi0kUTQG4s?i8O-_y+`i2=2_14yM>&qeI99=E1yo~MgG%K z@cXVp_M5~Iqw%V}fYO>spe@j|yQCaN(CYWgVT4eWNr`~GE>-(@9#!de{SWc4DTHp# z0|SB@(JAIk;V$0F>NgSaZ~-JsKK7--KB7Au`oSsf|jtO9EkfG3Mx{(I5cZP8Bh7J}QQ-iz=T>9blXA+ITy zVnRFUC*|-{cE6m0&O&*b(&ZLu|I*2_L-(*EQ&3spa`co#4hStZ! zZj0VC|3W$qWuqT!?c3uICoL4(vhZI{{GMJivahqinOd8T=~53QP$hyK^zL{Je)6w_ zR^f-Xhty@ck$A!{i7y)}0dmfr&Dzz>&FDmp`;8r?xX+hh61HFtzMUafnx&qg*L?}ZwIv) z;WJwQMzS~#8%r9M>a-+Uy{VdhA&OEK^I__qNbG=5qNiGOwPOj~`R2e|UlBCPyns8v zO>}~`j{by+6h(Kel}rRCP1Iy(GMzfVPhlFJ=GP}qO5lx(Y)Zw$kYHVCi*sCXWa`87 zIb)7ilQ7;ljq*!fU~;p^KbQP}K%Pb~1c0<&^~{xM0&aH4V~ZCDJ!8YxeO(FJYP}1J0;oiUXs+hEo6O0r`=oKvK0f zAQDZDaC?3RCg>@>PyV+R`_G&I2d)2-wZ|~f;r!*~`vMz&ewvKHiYM)Z4}az2`<*ra zHTw5SmKQS*y78-ABozIQg3tUg~chu<*{EIh0FT>_Vdp` zZwZAoGHtg*$LVQ<>#P!3OJfSum(b(U#LOB6qhEe`PFTvPixt2^Z$p!RO~otI;o2LQ z2E6EUy+41!+f+1!yHp#yLk>=*L$leYf4s@sG35{9dlUjb`t?*MnV3Vv1b_p2lk3%I zfLscjIR4W@3-JID3_sEujzN`Tci&2d$5IemTZ%y?KZs}tq*5=}VP4(tPf-;BpB_mb zZFqHtCl&*InrjoNmF#hbUGO=ER-dC%59d1zJhvmxmfJKKo&ohX5cxOpRgZxtNzhJl z=>9hH#N?_uI;3xQ&JEHM5y29uJsvhtwdb@m1j#Mi?vFQ4pl}kmSZVZ6qS2)9EfMs- z{2KL^cK{*X8%McGSQEnVQ72oA_jjE=kt}8#ALbi9GBO36#Lu?}C`Qg&}FkV)*lp&J81lA{Op^Lq#D zZFsj2?=BJ;ZQkCUV4%qCp^Nd`T#jUkeF8DSy5UU}%bXI%#$H6?`yAfB(rok1x1Ou* zdFPJZ=bX#sej64=z^mkXxWterB~thSVpJ8Gsz@cXh~;Vqd9+Fb(HVbXjcQL~C1^D4gpF{K&X zP0rZtWbbD0$N~I-OTG_YJBQq?x_v_J?#^HSAd%K$DB=JBdIg2V-B&F0PJOl();ux9 zR$`}aV6ARq^q_u(&o^0GoRK35E_(mq=SDG@^PSjblsYAsi}P(d7Uyok^Z94rc#E2y z!OQszlfx}M7OPR=`H*hax*BPh z!UiNLkLZ$_=nORj7J;u(Wl!O6f+0rT=6xN7%lE}Z1C!3=0kzkW*4|G?3M>%!lC=Wf zH??m8hs%C1jItdPINcb-a%}5sjsiV&TfLKIGnmy`M4}v#Zsf1+ravPkFj!&JXf+zV zi#)3}>@+>A#u8^sW@DRTp@75{&SciPf|Bk0=5SUi64d1IrR1ahSV0U4!9yuBS^KIKQVD5z z4$4XAPks8*;$hrYvtP;R)XI|6op2;|8Ce10t3Xk9X5jVv4+pKPtETW5TGMngZCcZ$ z<@^9C2g1U%cckLNjj`w3$|U-FU3S-xJ<8wR(FSs6{h(LffOFn42h5ZlK1~@rS?^4n zADNwl<^d7KLrL_EO^#-<)0Dke{HaH8`sN`mVJIXZ-y|?YIv5Md$0K?a_(3WdSA#f^qA|Y{vYQV@CMpjD^VT;^4!$f zY_GS_5yFmlj*YTe?D}v>_!gOxMhlZu-;~L!QkBb<8*$~{rT4VE;MX z92t;nYozf_Y_Aw(tj@TSN+tA*WG%Gpi%0|Zo1&u@^Cp-5)=&qJWmE1VQ>20&3)={U zb}=tzhIIMA#O$lm_B&OyBi=;Oh=16y6tQC~S8OhTL}a@V@DCrINpG2g#ANvzqleTP zhk|HWxB8v}3rI8dwb;IcX8rq)9Ong?69!?=cjEhq_qQCJsFi9fTPMIT!+z{Yfsk#C zsx?>@UIP^MdNfe=nGH_gNx|jeVnp}{$V)oIc%H{IDkDE^yTbJK8Z3ux)c7^D5IZzI z$)qxNE$@6jZQZCNt*^44eoO9N`o>V_z$`j?jiG*M>+#IR*MZ>aDN?T}^5yee8oJq1 z#JOb;+?!GTMiM50i$?P$guu1$W9qA2uMD)KvfL?U(`hUwic)a0Jvze_X_FWzm|9mv zu!RoQaLD8v(DWaE*a&Xq^NaD!cUGr~6-#EH23s{e2n@Or2Ze;-uA3XJ2rYfd2x}xV z_HLjd^^O^0=AJvUn6J${Jt6Bo?rQ;JA6hHbM;>@Fwp5$asUs2&1NWCzSWE{EU<@z| zVzSs&vppV37l$t(TnV*l&*8j<>v2C0&o_DX@38cr_-7vGgV2WA^BEdH((fPy8QSU8 zWH)3)dmDUQ;VGQ~kV+s>;Ny&AKbXld$;of}xqrv>*x&3h$-(Wp0RyQ#NDK1G*ome9 zY|ZGT+;v|_CcT|+bITc!+L9n^8*00e^!N72)MYP}?Cp&IB@E=a_R}z_Sjs$`2w7t9 zO*8S&tDq`;*C+atA9F2s?Nn6*pv}FH@e{>5KZF~Elsuc_S-Oc>Hd~wz3!^?F{{ZO z_qmp+7Z~8CGq%#@SiR`L$2jCKm`~isd*{=r9}8l~6YB>ODH3m1JYgSv+8nOZ*lbd! zLdX?LcA_6s(&r<=ewTC1p#8QLDkM2tiU=%@Ne#9AWKj0`y?{(nl)EQKlLOM(JsFgb zK{{+o@a|lBoxVfww@LG;-H-r|-Y=#Sxbm&P_X40JrH!P%iiZu)g#vv}T{RSYx zS_d7fglD0T2^?~kcrgjebj-FC@<|#*K5GIrC#X42#~V{$f9A`u4e&wWjRt$+Fp*v!UXEsClnfbcm)g()ue@3KeIEhY zr(=Nt{g)~WVc-g#s!TRJ4Fv)44t$gS`j;h$_l`#8JC}}WXW4r&wHlE z7HAldV2oCQLLjm$&~1Fu@vtDqBf;^0Sg5M&ZBh%5%YE(EVEjlFaWLWz>n2O88=gEz z%ezs>VKYcT7fYT6%~V4e@?A1wd00&Kxit+oj~yM&7T-YYg=P`uVtE=5r|l&E2ju<- zu40YRu(P?BgzGUMB*bIVsqOrxX2TM=dXwp~H8Y*5vh~9ggWS1~3!ve}CEqMdaGgAg z$qd(Z^Q2WqVd{47FzKL^LvXLpk1N)IwizXBHssk+G1LZvA1?8ul09oM(^Vn|lG_za zOBt1|utO!*!Ch|~+8N9HoN?0;;XIr`NzZ&s6kqZgpOLOtx<`!0@+tzKi72c%ty#YC zq)?Z<%o}@~^nTybPJ1AcE;OUZV?msgsCxZGBqYNjPG0|Jt<~s~nC;Ex1mn^J;Js88 zJU=x41;tZ3w_9G*P8P2pa*Wblp=yozbqQ|!sCFZ!@rBmAFzRo8KF*J~G)?WB{K`OC zni`!3<2UB7L!cUx33inw;OQemK#Uq>H9KNlmky;Kch66oP1)lNHhiL5eA&odP~^rT z&J(3d{9J}ptYGJ-%^j{cJD-0%G{g|BlBY>1_U7`n-GwndI|>teUzvXv?bC-a~-Lbg1%xV>NU2bd=GYDp8u zR<3A&)Cj$?VVJ<;cbm-~H7%sTj5Lhq7KAU$!Q$~TFy($(@D@h(XSq~O?-f9%NVfW= zpjxc(h6}}@dFw-O2K#R7A9HK~ghA`{} zIjI+vRFIhC{_wn{AXo8w7GAsTOcsxOYmbVPRP>N7-~8q}ll6&Y)RZ?IWXK?l+fusc zfm!ett&ZX@bdA9POL~n#l};bZDlBOfB%vuooj3sequWmDlKpW|H9a~AJ`we4V=A5X z+%TtN8v*8xEG2aA8zSajgrLl$W!u>hhDFoP+H}->%v4L8&+kbbpr!W2&TZPEP#M}b zbZScj-i0BPVX}>%ZFU`3kX8|7Zu7^Eupe-ezF+CIO0NRH^E*@irm@oY5a!foN*b`f zY6+N=h)Oq*9{cc3QJ%Wl(RNh<{G7zF=*DAy$4=|BczrEOjPW}bhR1y zm62x(j~l%3pfA515@QJ2GplC5uCgko$fiCO;00<+YT<9t(|0qCnwbo$L9EC3wG?(w z^)_0Z5I_NOWGqEgbNP!>>97S<1k^f0R;f%#=k#T{yejeMdoR~l_4NkUW};@bQI!JP zHseXeuG@;TWC@}Jov@lN-zP7p^^{A;V7NqF!KxjqR~=|H(R8a-X>r+28SWZO{pZW5 z3XS%Q?3DgjIhG3Ph;V72OGmNr(pDctC9lW@cljtVDEO5IBu58o-?A>(zq>`vjBp1j zL69p6_F{Kw;NjwMO}XDMS<-Ig2Zr{9!V#TcA4*s@-fG>@rRdZzUfh0=2w4^8$>qLP zOjurIX%^Bj^Cb}vo>uI~iZoYuI=L0o* zIIhmPC!V7eS(!t%4xH?Z94g-TtF0{>I{a`__2<~#lbHjk3Uj%^z_#MABfK<2Mw1^^ zDuJNET;v`zpoKD+Ddvbbd~4Oj)jE4d#PdiZWFV&wVLmkAPf^Bxh|S^riR_>8JzjD0 zHY_;QaK6rGEceAAgYtYIZ}2jbp?~$PuyK*Z-2o{wQKNE*a06B7XO2NCgB(HkQpNkO zrz@7y`j_c@+bf|o4Ijksb>b-`9A(Pz4^QuvQC{IaMgNG=Z~10=tU9-93gtaw^PF%; z?FnT5IIL*BByS(+nSR6sak^eWyXM-Ts|DmNt0MdBaRq2qYvT-SN3)9}0Y2_%f4$tt6!ZcK zOUVoL`a#wV8SBOdDj*8@C`4fwz9Vx|uHIjNe^iZ%TFDEr%k_4OD7)TZVZ6Gr>(gV> zEiJ~0nY%neff2S|Ci=fX91`$b;i;rjG2{%o2d85itNSll_FdXtVBs{IS|;apJ@%!d zdOpTcoNX3eqd7D<+D%hf(o-?k*6~=EJE?~09yi>?nfKNg~q9NK-%$f53Hc9Y9Zr!5~uIGE? zP#m{iAw4)o`lpM37S)q-r$&q#AqnbGGWW}@pvdg z%qrS<@mFY!{AV2z6cLXmPt0z z^xvis(By zA{>j{zZ~b#n?4Sk8>N4*R2jmZzTT%?BT5o3Oq%Ets3?6tXp~Zv*vI?UM{~_YC%jtKF+)UE2neHAjAjD^VWfW_^l9L=g(DHG>W% z*@9l2u($jqKfl_JJD@5+UPR!;NQ$1pSK?i@muMVYq#BwF3ERAFt1va5T_+jcml|vo z2x})8{+KLo;>$t2j%nRHMg$FiemuxXQ<_btJWU=Ec$jj%dWLKxI4*<`woD!Fx^kS@ zKf~d{LzV-VY?>e~FdOQ#{^@74ze5aYnx)^3)wM5j%#+Br+nJZT@~A~Htwf2y*{{Y( z`6G8v$KGZ+k3RwkAJuuZq$n-??o^v< z5S#}V2{3A!Hg9(rp;zEvRk>TR>bu-000r9OsN2Bp%#5mB=zcN8Q73^NOS>&v!G?-& z0r4}@QzEF?9~ab5+XrH8F+%{^oD?_2^(nYCqqGjNO6eEqwu*19?^r)dIuKf9Zb!L+ zs-WB%eJurprv|JDSXY7DLT41>0Vc`C=KH?iJ|lK!sV&Y@Jz3O{ns;yv%jY^V8Mgcv$=&mggjQY zntP|=*hmDv>3Q_|I~XfN?>C7?a8cZRGhQSiLn&hM@Dn(jRUO{)^1i2SI!}~r-L@1V^maNAoEkHtysyUJcm8Pr3l*5Xpw6b2A<<0~R zskq&z@Uf;ai4EY|X0E$^1SU_kqIb0)uqHa4d9S_g$mJQMqXZ{t22y~v=jG0ug#{2L zp=-ZM`r>cb;$2CC8^yrE`Uwvcc7`fFsA0bHdI1)=Mp)xg8QUDVMfh?<8?tc1@dyh@ zj+O4pX=dHIP zVcXtAE|UC=#qSoX<8k2TZGD#$V7x2m@TjOhg2tSJ1EU#jlHuK#Av>=~nm9J~vS}M`^>Zgb^S1wEfd)Qpze=2Q2zsCZF<4T9T_Qb%}r5x&IoS zd?QzuL;yK@jyk=|I#&zFzbiH(>MBaTZC6J@#-xK}UGST2{j^Ore+Lg^ z<@fFBy>CJR)yJ9nR87NMBQjYfxTOfVi84(_hI4`40i+R;koj80q#lICd&NDbnH~mj zVrpt?h2eH8K$qpC3vKP*3ZgR>uD5l}MdpixyO&-^8+lXhhB1=TXEhpv_afak<-Ep- zKd-cGE)2y~IH@{Rz2N>AU4t|1~Ueg|& zbGiRRk~sag7C|b14q1V{&=;|v(3x%0++;-R2A2_&LO9q3m3Unvg;gsBBB12OS)k7~ z-GqauRjlB+GRf2%I@Tla>+;~_3_&VTbP_%jBm}Qv=l+ndCPRGk4H>77a*UL{(UG{0 za1E#tOPRQjvE>|6mnTKFyGK9>RdGBAIsuG{87{`JJ=|3MyNqWF=`a=Z6*brMyWJPp zLxfK-**mPeMLT}s&!Si#h)_>`L$=)hboj2CJq#?vcT*x& zq=U3O7ysO+UZpWGy`66HobX8tH9wHgP8EC^+#ygvJ3x$l7=7n_VZPVgi=93I0>pqx z+Zd|@ID{&pD)H-jNa##IFq#1gC=J{o4h8|5*l!V`PZKrdSTDX>b~)Fv5G(2cCn;Rb z64MUEMo1oPd#>NdA5$L8jYo#wbb1weV=o%bh<;jB{}V6F9pilk@&+8 z&h8WaKIkT=q*b=)B8YeUcHT>_COtxf$(pCmc^ghS!m58GN^c|tqADy^UwUEpj#VtY z`R5f!YH+^Ee*65X)RObzl8UO1Ee}(d@cw$2gk@?uNwIr0@4vxd;_Rg*swu;u7qIs0 zmt-=I2I-4d4AQ}K;%1r8tpIWVVpVr>=Q@)|x&*-gUzwDO-&fSf5Rrrt#m_xp^3(CN4_z**D?v3#7+?J3@LY|;) z#pql9@?*%swbG6D2Y0EkbOtE$UE<)`e&Y8&t@J-8jZ4n)LNtI^6TBT8rKQq6ibh2 ziws7bwV6J*qEqT*)P)HWYi|qt_{fKpEm#k@kNqmGSLCi9g#ly%$4CV5^_Tk*GWJY;AmN>30{h`wM@b}s5_nKONXj)*@ zfd$yRuzBJGtR*%TTiW@FT$GG@pnk+^h%xP@tDI}|8br`*T4?Azx3INBpQiFHgy=vV z?D|zX;SnN}$rI2G&p}H&?%*Se=;|aDL}tXSHy&4#XAid5i{DqQB<;Z$5u4K$xTX(7 z+vM4*hhu9~D7fGL!Yhcy)Gp}!TPMGiE9=NZbko@lVHU$iV{U_#DY-0?@ip|kA2^pY z_S>LP%lneEW<)QvG{|Z?*l>g~qiA;>e&Bi9d{GEmziZK;I*u^qzfH@%AZ8g zw4hnk!kcf-yW9hf6B>mvB~JE+eGiui$cz9lg}H2qM^a#jX=DJ0U?j9l))zVCN%XEI zsI;wR73@0UPErW59Fpp&WE&R;8|FV7BgXeST^QPbn_o?%+4}w6-)%QJ>cDpM;Zght z+dr)iL5m9cUeG(B@b>4np60a$bO2rT419w&{}kT97tisa_}QabP0xlBymLYHHfva2 zD%-k1V1lpQqpz1LuIGC4)_`-*2P4*pL_GBso^{O%@GD|5v*?3`4&AfumfH|vJlPq| zcv`yOMY{4{FG=0HO>4uYh-@Y^p)|NVD((HcmeQGs!YC>bVddIh=g<<%3@T#L`@9>2 zl3ABbdrK{cKU7FbuUKwb*wA~5-0cM0$@x%CyshVu8bDg#8B{pF1rGUfDbcL7C_#@n z*@&a)P`OPVTvIZ&7`e(h+rsK9Fd_!UQu4we4<*RqgXK<~&X3j;;~W)HyL}{O zrVEx>=b&@UY;#MW)>6$yxl>W45xP3{U~~S{$j!nR_MSL1+r0b6SKCRM_F2XUE#c=#&3U5t?b4qaZekTc5 z;?XetoIC{g_ig{-2_e2rZa6r6r{3LA$oryMh)`OZMyc|4e75Q-kK67@iZ*#4=Kmp~ zxo5soszs|7wZvIiGGj2`GZjFyw zrK}exN=kA+cx!v57_|?LhYDQy1$SiK2)WC0Ai@G{9#bCJH`bx(Xt+=L`^So-+Be;m z6#UUV_3cp;R)=f>oM=q@$uZj>%|p$NZ(NK905jkBTAdLp$C8m4cihY-#xuWH&kfsN znzL^BWt@{798(m!+}46c(T@C+9NAdQ2BCZ}j$W&z+7LseYZ0NTPVhVf%~oq|@sfF7 z6WaKdDr%?5Mos*^9Wk(F;%~eL3Ht^v~@CWCe=`=)gD*t7H`Kx67 z;}H6Q7zCm=1GpK6ibU3FWXWeJ1lkCYH>dYS9Z!6sw-JAQ256iqYH$7lGX{mqP&qw* zk4JExl0bdwakRiPL-kqk`N+lOWbuG-PSk7qXSWx2exjG7rngzADK_7?*%s-18Y^&v zDGdZ1=b2Y8NU7G-d$+7WTMjKq;$F>|>Watmis43{O8!3=Fm9fUl_`=<>(lc6o?~d! z90)pk#(M1hY(~Igh27`sP@qJ4?g$yzI&+QRJkN6*>og|)YpS*OOWCS6T(kN_ws=Lw4!=kfrs^gQDi76nLwv4oFiP>vlN$Qefv+%y$AWgLC_^>+?;+ z@a5pzKT!^%UI~3R?TM%)RH?6a+Dt?BQ-(uA_V4sOO`d;KDIq(&*+Y3EV80M8^ZFB+ zWb(~~S&=1>*;U%E`YQ56^Mq|L#eoN1*fR@mGKCBc^V$r1CSfcE2(=DGo0VxyD|u zD~z5QwmfxuNI9dVm^u@@ZFESlf<4gJpHAfPl+F8d6G?apk2hRyi=G(Gs(_5=bWt7H z4VwecTf?33Zp)vjBJD9VWvCaO$%sVEvY4W#Tck-{E9A0<`a@*}5htKz8~&GsWCCxX z?dutRo!slbY3h(7b#(EM6Kl6t1L-f2oR`=I4sTKg66`3h$ID{9$Q+j1RZFRDA>6Xu z=bIu3=%N(#QlZl6nZFf4+Qor3enDo3z@v3lZd%}IKgN88Sc^QGXQ+IFx!?|!Q5WAoD(p<>vw;{mqOO;$ z#?$SL{N7arOYG%cZH+pY2Km8hY_F))i7Qs8SmPECqQgvla{?j7)C^g z9*>(_gS>Cj;MidZr!D@x%VL%yGuo~%0hXGtus$DWGlpKZchei^>f=h!dob=dMuQ;U*_^G-_=3&ZL$>RQACxwBsW!0VoMoEZcvO{>i_3Kc?QlQe=jmYe_`2ZUV z5p-6XE>(4?#A$p|ObIuyFbuR?wsk!${xYf|hzZEiY81bh#HX8wxGop-{09S0D>v>t z-^J^fo%FD$&#I=ihFe1~>mA2-ZfbB0x)L zPiF=9DI!FabqKC9F|IWf1Mm<@Hyvynkn4B&2NjI%7$!2yq-My7l$l09Bj6-s z#EXc2@Txp}q`E&N;6Xg)8KlduC?i#_zNYt>?`}U^3ECM{x=6pKYcH+%)_k+9{vx)y z$@yU+my2r-_Q`ZmdQrlWVMN>6Pz5tRNeJ!bkRT`8;O&^5t8uFBdUOBQv{&S{jN6EL z0KIzNi<${IR}~juCSW_?;hV0c{X9F5Jqb1m>%9yed*V9f)2pjTw>{TxGf-flC^m=ixHZ9{8e#k$N6#Cp%=mqzV@1L7 zbMc7%hC!9;KRu6>4w(gvyecyr{M3Q9LnRv{y6r{2JqOticTIC8?_P2eTtxDj;M+V7 zKo6)CVGEroQNnj;A85D9EMS_k$+UY{LxZ6C%f8&X*XLPDlHdv=Dyph&TR%+tzswf@ zX3A|oNBNfzHwqUj;d3){qP%v8QG;CjdNS59ZU3fQzA|(Kzy_>t5=`!LeDk$)~%ambMxH+8Y5`D9!f;{zl{S-+g%QCn` z?$vksJU_gl)+PU^-G}SKdPSr2q@fC+1)ZyEH?|de@W0j-GsmLOLwXQHjhYV2wK|XL zaVb#-d}HqI2alQ9j|l3_3&lby(*4mdrFv>U>-1`W?{vl=3YzGA(7f3M;rX#DYSsAK zwjilLZ3ilZa$%qZnIK|b=KMU*M9Be=nRmG>$5Sw#^A{pb>m`-yO1IN=TOA2qeF-Nx z?9aBS%)K6NZA8zxha{bc3TWjqMp~=q%IxH5S$XEly2a3XNgW3lDX%W~<-U2~Q=Txn zBQ~W=KpZYjy>MuAZOO3x-L^UIzGJc0tpY2o&;}wa=(2uP^&50nVDf-nEa|{LYMM7RlRF3 z!iCT-jGcoFtF7}Y9_O3y#rVF$?;TEuB3Q)EucwZ?MxhnIMHk4!dQ5_f)(`(dKVcjT zt{ifR6&5OOfid9*3hJFFJD1+L*<^JR_A+2Bcpja5WVa|4ZYs)#9<&gmkTGv+iymRY!`1>PQE*1|>=8D)#Uo&2kp~c3%Zfp*aB3DyKdaBKLLWh~LZw9O-J*5}ho+LlwGK z^L*SUMV8=Smy3o4DY9HtDh+Dkgs8g45v0BRzg&$;7jyw@8 z#6B*UKfaFK^A(7Z8fN0zrqaw&75CgHpaq>d^iJSsVMx)W4U#0hN<(HkWWd>XT4~OB zdC(9)2JWOxC0evvp8wZvf#Ziw%rKmxMn{7Xyn2s{)E zTUv>O&LL_vqBcx{p4HkSx2qg4#++~QD>1Hw72im#Em^k^BO=hZ$9Jyopt*MaYVosk z&0PcxhIbED0pGb}_3;a*#zNYe-m@5e&Tv*KsvZyko^ioerd6k%`)foO0{~){Bf$D~ zn(}&ZYA`&ObEGwZ)0%I~D5D&AmDRp~Vd7SoNcwzA!x! zH~^sUmfft&5lZP;s-1?N+$70L2UhZ%Azg_KJI3pu9oO}VjcnNqujRZ;-VX6_c%%#y z3=g@gOOWjO-jp@grQ5QW1PotK}A)RsKEg*jz2$lnw}ZuO4_5?o)gzRCV) zBm0dFbg~BIDmv=P3qPS4T2Py=aK3+QWw@11eL6cerz^ zHYd#G&^EO+`L&cH{dH?eE_t`^VzyVN5fYqQHK`_{sUXwIS-gu4|J(4Yj~rYVP?;8u=1)K(jI~qBw$J(K&KPK zgdN_VLW=P31KP^Ym#n$7FbRT!9Xvb9pfkTrP4hA^f2@qTwQ5&`a7Hj?caAo!Te=&! zgk*!>Oebm#A=?x!dil%G+8iN8FWi89wnvEz#T;`+_NQRy3UIhEvB6$tLBw5ud?Uj? z?I+*qT!)9ah)pj<#Thpu7A9*mIB^z3xWZPCIrmyNJfFwA?&DppenId143HvZvr?$* z;0g&gypOY7`90N9cd7=%Iu_cR$+?`6Yz#P;dbnStyCVZ9Y1i-yqdJ2U5t^1U|8uegB~kOm&~Ad@0B3SHxlaZ)5GDp! z5qJgz}|9f$gs={7j`a^M%%1S zlW{(B*mz;N)Zn@A?&*@sY*mD*tZpY9(~YU)XTcVW+e4 zYp{X5P8^^J%QTR!9xvsZbe_Xt2iBsSHRQ3Lq5B13n#vw8j+X~_hpjo#$eeB1@9?1G z_8@WBC6yzWCDd)f*eW}z{KLq@3)8_~)8iKVfI_^fc@O+dU@9{9wjCd8|C}H}&-3o{ zfApixXvhHVktV{$rSt?+^6m8l^@M=Zlz+_s7yJ>Ffvs0#oioWUhJfqCKuuL(CBn9P zY5P56GWN;qow7-zjx*rTHhp_>bKIZP6dr&0c4(3Ef*_5i@S#I)30tq${G&>i@Q9$o zRL#cCP)ahLww#$49R^)uBJ$Fa-7*kQvU%Agkqn|%R8jm479`QBGQ_dE{0#!BETp$V z0x2R;ERbfroT1weXU~VN{x0k1+p@Hz@*I2(hZvo`Db(vB>jO%*llNtNO=x86^gZ}| zIj-tL_Mb|$qe#&B^|H?*ET25m1df%h#&pj`C@dMIS+qU{0?vhlZFs*jc-&_}q2RA?Tg@8|B4Y53 zm|b?hvm=~sDL%8TM|YX<{ zNEe`nezQ^CR$lv9qr|Ufh3FOXYyMLRc&nNZ?KpJ0WOn!ak9YWA(7d&H>U=tT^R_Rz zvaD+Z%J%7{=PdurrT?x_{Li;vOZ!8@2Fa!T&F&>A$b}Pweb}ez>4ewP$e2`{I5-Cd4Hj{dwQ{ z-Y(r6tTO$7|39dKu)|(Nxi8!_buBETVj_lZnU(GTok#M2et`e@Lr3<&UH!Yl{7oXr z4xj-a&Q~{nsde~2wC-V?(8#z93XAHtUy;L0EjQC=+#=XqAz9G5XU4%bU<^{H0r&^aWZ-`? z>ta8aDCRJ~L3i603HkQPIb{VML$!`yDmDs_}WT;(ma|)r(FC9 zzKq@x$$i=yPEGwxFyd2s+o|7fUs9ph@y6q59!Rk>Ow!E@FzDg7;U5!!CqY zHIt&vwe_Mi@D66vdtLYjidMCYgUhhZ@42s;KXQbeix|qqW>RU}jD1X4@mIxLd8OH2 zN7`UNjctyOT4#;aK;5*F#c4K-t`FZWuO3U>S>rcI@yDABJpD({U(?)EUQNqBS(x3F zfN#Cluru3CqjXr`8VEPpVbrL|4J9+B*gQV@oZ)0Py~_kVVAw6Fx*sLalAr)jsO;3i zfX}^<&&X=jTCarGcryMBi-JepuA`zjN1&&l#RmBH^;o zOzAQdBXgnrpiRmJH$d9o?lb&_dvwAxzTA6!uj_SPG_eV^KE(>%a6O?v(!MTQ-Rz#$ zx{S5L@02F;>T3;U(q_-6h9-YfPp~u!N8jtPtm>@Deq{AYI^Y(5^^>6WvfUy)viY_USn>yuR88qSm!PZnuNE z26TlI(a5#+1qNk8}3whU3bb#@>*kZaH5QyempUP{<<%-Gtbs-Z%CVg|b*HUuDsMt|`f2 z5Lj9=nF>~#qxG*%4y=n)op!GeoZ2GUDY~7Y{x}n~xon&_WG||3)Fk(MfuByTLi`9#QcX< zguo|>L_SaGd!dC10C^^qop~+4CfeQTb9IywOFRPv41T0(SP!*R*u0cw3a&F9VAQT{ zUW#zIh@%d8qTR241XQ9xn>PT=Sx6@4A*F=R22vMu>GH~2`aqE;o)NRT3h*ja_d^_i zSk5ZgrF`A~nW;Qy!mC0*0E6w(Vn9Din9U0qXurOm@V-b_U#1L>kv)RUm)M51CS|oO zR~8M%ldey*3wj?&xanz0&S|um>wD!}EE2_#dEVbpNVm9dar$-m3T+?pZFT|l=WRah zi!%*Hf%Y(9P7 z5pOPP2!6?~A5SX@Qr=cMyPv^9IUWFaoyLi_xD+0uqF{AxWE~=;+T9&2=7Gq@Wpj=@ z1_g=6-q!1=<%+W1o^7V3ss1K?MKIg){t%J)al-Q=3i`@?@0mQjFkeNOr_J1_nr$*O zFU+*U4Sr4_UesUBrzkf0A$MjebP;;;`==eZ;~B4@T16t@0m}9#U@_DX_ISs(H!YLu zW}dCyb;z&-c5LdIYr@+|(?2I1vJx!)QSqjqtgiEj9|^32^@p@stkE9Nk>C)jvw86) ze1Ldh>`HJE(Ptcfgo++EGEW(BtnXsaKgY>v;7dH%M8JD6-)7=ZEcin(9u%&%5f#y< zkW0G5u;{c{qwG(~4QFM1)kDnk<$kAtJz2uZ(cgW2RTbv+XmTe1`wGHk4GPtb73(gXj{mDXill@?IN#x8$LF!(IH?Fc0#$Xv zl30yfwchJ|VN@5LQ;a5LV=Wp`OTLErGW`LxdqTjV?aVn=L(aTnWuH29RJ_l0F@yx- zeiK$!A$HP@)trhs^dFr?ya?%RrKlNgHQK_-gj~?C9;C(gJz(@1ox)@RZz zdtbeb{=m2!Wm_l)kRqj3Znyx|tXzD#fWo?SGF7(vkD;D)t6Qz@2*1}(kvjD!A=B&( z-KNEUZn_cOuOHi6T!*Ev8&b6BVunYB&@B6Qql`!54kPAW36)$#lT3bTy7U}!6S5mo z3)NZiSosf_b*a8;!Jv<@AR%5e@2zE9iU7ESH{lze=n+KgqnUNwZku|v+qFF`Y0&jk zKp&$pyUo{O(#rU`-F>kMmYVByZNedt{h1ELjwvdFKF+KWd625S(Ov>BHNLg@4yL7F zzg5z0FR$C#(7T_z2pTDgk^20DDGr;;PR|D zs)~H$SG@xe0p@jGaPG+)eIeKrhHd_1$cs{IkruQLt-M+l3a^Ab?n6O6o_nm>vgr^k z@mtj3!cDENH+({#Cy{^fxSY$h_A^M4Mx|k9vSwNvsyqsD{BpZ^=k;lN4_ESFl~YBZ zb9b^c!N|vCVpl@sepCD@c)SC&39lpC);Jl$hy)5g)!oD`j$x=l6J@Ys+V<4{)l8t| zd>b<%!1Gpb2>7d$IWmW9Ikn_5VzvK z_L-N);_P#qz~8D@`!&SuKf36eF~O5!?Eg$IGdZ9KPF72*1tXdnS|^`0bq^S=FVC7> zfL8b9UcEvZnY)o&Oj8{z_V2<-O#!2w624|m3n8-nic{Twy*)y4o!H$wJ+iU&B`zi= zCxIO?pm(akEGKJVD^MyDk3oG%08Cjxi>OT0$2(=*;UWv_WwdZ^{r$8)X+ltSeF*~y|=HXoGb8Kt-SmFBOy1O4O-ST$0VH!b= z&>06`my>!47}KJJ`N*q4Pu494#L8eud6I(eKam6F;w?1w@-LgZ{p93x^|6}( z7qRhO=jyU+yk_4Iq;WB~$AXi#G0c#2@;GGT~m1G zwe{G7vZ;4Nh?>u3L9E@UAVUTzDVo*CYf4^~UE?G)=p@>NC`D1H3%$VLx=bVxi@EaN z(3Cli1*&h;k@a))lA>dC=ee}T)xHo*sbU$xTh#_OCL8p0~4lC)p z-YZR1<&)yj<{c=-a;#?*+9#}nrSvD*d?fOFov)USGj%;wtMGrekwBW#jH4<^qf)4f z7jhtD`0u&OkG2EOe6Hc>$pY%^g6a*y&+Ovs-%U$G%#m8#MW0b;ils5l-Tsa++2T!u z;%C7dI2o$!)JS&A>o?0IL}RBe70m5ZEoBU+GtmLLsc8~x^nEp1z%k`y!Y=qFom!^t zkE#G;73sn=yLGGy{dP}XuGvsnSH2^*2=-k@OfURk?9&}NAZjAKaw053E>#M2D8s)F z+eY~stQ(Y)#U#DHYSBe!wg|jJ*29RmAo**V{F@x`myk_GjTd>3#+_Tq=f8AE(%pR| zb_NbVw%Pe`_g{%3%5b)(t^wNz`sX0Nluee|N*+4G3eP_FO1G%Op00kzFRz}XDA(Nc zQZ0en-!({B-bmD%&Aho?A6cnhz>*F2$i@+#yS*JQcJqs*vB!_-eNHYqm!`-m@Tx!_ zSWP1x@Mfd%padYxGT{tY#j;c}hXgJyr7;R%Q^^&3dKKE6E+gduXe?aCC9fB6qXtFT zNl>5zrKCkWX7F#FyOrc748X6S2&B&Qbmp3g=Bs>>ggY_E%hq8 zqc}z0v0%bXyF4ZAwolK*Qa_l`Z-yVIU)%&OiE2?zc|RXov|#+Wi5{(2ffwr9>NlaK z()c4XXF#`gTEi`g(CUqF5t*WWuoMdF2S%FRXI%Z5f-ijIicdJeV|!DFvJ-{+a<(i= zY4Fh%nLMOPVdpSmM&d2eK}OR;mNCd}Ok7~7!$>bq(BP7u;E$6Vi)tMNW$a7;YmD>x zRf#XN4yn(<7`8v_pBrL3qJr)lFsu!xq!7e5a2m0CuYOb-_XDmu_N@@fKv*G#p=jwu z7Sg&R5462oiz7vYWRn7U;66&ex#G$pD|=IbJf3lQ_wo06?s{UJFM zb;ZUUG}bh}mu}<@saZBhwi^)^BRHRD^!A*vefZ!<&lSCN3mqx`468@8u!deW;gKBR z+n0>0Kt{q_Y~<~eBook=ih<2sdLVd>&s`$)Qk4QxyuGU|%j|a;M3w`X!aselq0fdw zPAhGi(k+pOpA36WHBg~BJW|x7pU`%2NPl&_ryYo3CKz5AI=xd`r|lKqxp}KE6satJ zd>KFI0>)Q+yoX_DhC_3t_-qt&d$AKI_36lmxjU|wW?YD^mhT>fHT-3X^QN&EZd~E- zYM!X{pW_gZSe+7~;I~mz31OWQ=cqGE(axYX)93V_W(mI@R;Y6}a?2L>?So~+{?K6f zOMv;C{Ur!qlBzZk^xRFU?XShLwkj8hat(MpX;;&~3r3zqofrz;x3O&YUBr3bWxhH^ z!21ZG$uH^8o9q{#mj$8MQdntb2)4y)39tsO$0jCfRBaOD)%w=Lh8w<&TfgeCndX@5 zbO}PjqD=ZAet>2+;GX*UJ)-!7<9YqP5IvL(<@XCubBJb()MlSg$(dEZ2{9>;bmG%w zTsJZQ-UkFlInu%S9L`D%eQulDluRHE;q;pJk9InD{$&RJKl$3hri^;vfD=+S)Q=%W=)Gx5KQ z3M@p}5!LKaPZo^Ak!}c~3dW?uXVK}`zQ-#Y58eF@+0iqGbN)5~h9cv$j-4^%4vl|0 zU=T7UW*2+=L}3-mC)(9a?vN$GwWZBSHk8L9&?l#@T8_~we1n$u?(QzaL}f2)oP1+o zszfUcIUQr?j=A@Fn4=6#b0rK8S8k*fLscq=2DfvkrAI~}#|;i441J8`R|>bnWEYUI zQW~pb6lq6E%}z!uG+Ok2hZ5h1s1oqAvG*$;m;QbECc4U}7AiM^z+X?i|zxpjW*pNs((Ic12Q zN1QEY0b)Q9BYO*R6Ms}{$_h6*LHFooJ)GJX7bCTE1Mavc+;&J?;mCu(DgIxoGsq2y zo>ScQQGliAqp%t@bYE1xpa15uh~oXC-W7QMgNWeXnq}s}le+w35?co!!Luvr%tE7_rczpgHA0|KY!O07?I>HUkffqkgrA@d>b{)5 zv^ws5p($QY`TA*_Lm#s&-so&2Adizy-hQzhn+*NlF7)A@G1Cvz4IYiuW=*wz{|Omb z+3G!GL=vMPDf>(OHW@S3LgqQ}sI*+;@Xq;+ za0RhWfMBvn+g`ouOoBI4PNsMT1hN!XjOh`JcxAc0Umb2XZin5WdAzLBMaBE$Ux27` z4+G=fqb&;P&&kvExl`mC+<(jKXO7r^MFg+@lUdsI#q6J`{o!Us9&|$b)uI@(`C1aq z1$xlj*Fcci07*32?%X;DqfU%s@kAoKX*tu8uAH3UV{=qJnA=?R6l_x-<+n{r4YsQ7 zf&0go?$pS}EzhF1%QH780vaZ9g&&{+sgp*o5l#XGe$fjyXRhl&2 z!C0_GxTU0%n+^DGPup9-OiOm1D#Scl6Ka}K1kfB&ubIPPp&5}XF%DLXOHw7_u=Q5$ zmz8|o@UmN?s4nlqZ*BB8Mfy=J57xoBvo}DRdl%UoA)IMa`(3B5ByC z?#8&o{|@OFKm|hjX_D1ApbT;z{E>&P_hWeyP85H#9as(9RY(LrL2YZz$Aq=Bx_P>{ zvZW*9iMYa3Sjd^*R2Y!jDt=tQ>gh5K9=SOxd%msbzrSS@rbZrH1b&(SjT!;M>}xTw zgm6ZxG*t~m=x3CHyWu)ji}jL%0fZe?btaYF=*V-(ZPU7^&<)-B6V|U$90s4kY4eC% zuKT4`QL+vtp&uYHh%^-$Wmxz#?j54Ec=6{#BTV?s*`n)wL(KCMB%bn$1LwBB>b80h z>sMDOjUVWX?K}U|T8swEEOGl&T`My}?VH^CNoYx`k8n1{d{)e%Mf%V!vDy@>@_Kc#X845wxi{mI*IH+zN28z*Td<#)>ya;1X%jz6 z^Ak6DJnrWD{szwS@ZNae1HaR{R#!Yr#Ck?5kdM+kH|EhIWK+0b)O8#(Z{i_-RP;wf zaJyUgKV`@=pD)=G%p0o3gK$?$f@@tah3D(7+T0{t3PXv2&?^3AVT4ziRr}gH4>?_) z<<4_MuF`?Fi!WJl*V`K~Ej;2r`ph-H~b z+t_oJ-5Aaoc556M???A$zs<=R0e|9&(TW>j(;X zMN<(OnpogOp$(>ejnvOVs9b&4`qh@1Kjd*2GZO({QvBI^*{VVw$0GyzVpAGtGx4Ms z^tzjN?Omb*AX*>l+jZaHg1pWw6$aQ7XH9N6a>XZLPX|T_rue$E9oV=KD(dd#oQ)%c z{CbT7#LLHre8*JOAB#wfO+!HVE?lPP=8={Fq}cDb~^=y9FR=WO_Mq zU$?u)%{=1kU>xl2l1cb(elm>Ec7|0hYnA)PhBypXidnCAhsdwlcbbw_j6#azW70XY zT?(sAQh;-K(1y@>g?-T?;IrLLek;)>%%2mEfUu2~XnltPzjJ6EtXxoXhjavl37VYT z8$4l>_|`pM&9}p0oH{gPO)MM1D0oU-SRneHkrx*{Zq#i0OR=^Eyq8>5`CNnilU7Z; zbLvdcC=}8$!Aa|eDQCLf>h9oigc$}Woqt1Hj72`zalB7W`$$ClfaGThrWPOFKdH&U z7Acjad@^eep&eAqsM|%~zN`kz24a+JbjDJ@t+!v$D3vVY3o=M{LQK!|7~$nmB#huEa`K zbP6hf_}u$I@ZMjg4SO^4%@}DvihHjGXpqw$I{=V6J(Q_zvChz)Z%&)0rqRa1%ss3o zEpLAR_#6a4RZL;G-gfO}62S(@y}t}wTwYsGytV8R=i*KHa!O1t;3fRKMbp^lk$AS( z8b*rEPgGiNv6vRVWJY%fNa(~ro@ANGm1AqKX1crZ9SXQCamnv1$!sdgFj4qdfn0C~48WCSn_y-&2tq9v1WVE!1pFad-J zp;MPA_O@0Ibu3(Mi63~$+vo?u;%_8EcPhw^j#GB)9&-cTVq|v8gW+ovzau*F)ERd951oEbIz8DS_oIwvWOt+3lxIu4hnMXf`EPW~xOQ4j0 zWTFlWR@H0t-7QP6&|{mi8RwaJ-M~z6s8}Kl*z#hf1BS4z^rx<(s0z12KCAwWCLps_ z1TV%+@_G2|u871Lj7+Yt4)tDNrq&W^yV4p?tC_m-ZG6_$GtV2_xrXB`evbm%KyuC% zfr<^EelgXEWsYv+ZB@t7fX9C>EBW_76gZG?tWem6IIXv-^>J>T%`$U%yZxFr8oPrr z2C*nn*0;L3g|9xSIwr_7FGD^*E&V_y6Q{r%Y1gCPIYAY0FKTd(mPC}zSF$=T-qrr> zrHh@r^%YBkE57|J*qYs-QS0hp*(th>5I#wy&BKj3i>J7}U6SDxu$`?*=Ap@-lN8XN z_jjr*fDh~)a{HX`k;%&4;KjWI)CGrYhZ}R+Hkl!BI=olbHHb3W-bLN>n0=P95Pe%? z9Rf&D`0>4r#3w6*a<9!k?EXKLy=72b-PSIe5E3M~I}J1t2u^T!clY4I-Ccsa6B-Bs zf3M3G zz2ap4e`w6Rx=hJbB{g@cf_E&CLhZ%S=-7q6n)Li}nQYLr5-Ie!e9B?LCDTkh=^mJJ zygA~M(9%Q`;gckVekT2YX$exYPl9UPyD_I&g**wkjOcYUAbMa|&sc>!Y%ak;mcONJi5p z?*w=?zQ;DeVbFUWYC&VjiD_Vc6WHU37K}F=PRl%d${WTLP7pCYDrZKV^YzpdSOP{ALvwW|FoaFSTysG7rqZ{6*_Ade56dVd^ z$7TKCbS@KQ>M83e`ogGR?WXw=O?wM8>F6PVWuY5Ay6xAiz&7f`|4|*@*0pU#*KMwuI*{}Fl_b6DwkF^;8OMo+wr)2~$-Uw0Y>w{! z%t7{hrdmN@Q+);uKWdFJpGI0i>|pAX<+=SjsIG|@b8&CzvgenmsYpBuh>tTkXB28nR$Y)sa9j7kN?O)+?y~jZLah zp644;$^`ks`FPxJevE5xe9Y2EA1$*Er=ExHUKb-xb~o`KXak{6g2IrP*3Yb+SN5_8 zP*J-$QO91cuV7mKk3<4oDH9KT3lfMu38W2jIQr;s=7z=%Sgl8}<1!kz?ps@Y2+i>O@Qh-f+<2lIOr?8T^d02Ki6i{U zzr%lk`R5;k1mtlvIx}W-tQ#WMNFLpzBvM`4`58Zi2sU28(Py~ClykY{=OR%ykL6p& zha4jB@-r4K#gs_{unB9^g$bu+b^4tD)alBo!m^OS@SQpeuyWFC3pYRkc1hR5z&VFu zuA?NLDr;cSdw12Z_3j5%klrJoQImoRAz%DFY#B=MhH?V+R}L3bDb;p(0XO-;pg;`g zUB}+rA{9d_umVmT?c^e-%1dTP_CNt?>syx~JnWRDa?E6fLhg1Z)K=~`zM1G4k7Cm} zyu_4xM^}E4dGK`k{+GgaL7(96aB`B)4tL9vLthMbNyx)yZU9M_R()32nbcSdzakKa zWLV^v;b!QgdwKSI#EaKTP+cK(XQH)2(k`w`+aG?XEM8Tt&+k;9Z;S71x4#eQndwNL zEVyN}M$*QZI40;08-7#7HZDA&Yko{wFOV!WFz})$vZ8J$f17pd_}WNsfjuO@GE~da z=1p=;p|k1N*W?EQvSi47RL--&XS93yRr8>L=;yOn+*yZLM-a9^bQqm}Odli85`^JnyZn+?-GXk%w zt*e_xvirt_gfmzvpEiO=-cTc(t1V`G)g@160y`5P3%^TPD2&#Loy96JKJ_KG08Rn-#ZtmOuxoUaKb zip55E#ViTBrc0OSvpF)IY6r?a#|1zCJOCsRO8C(~o;6lruZHt@2@I8af?zAMh25{_ zBnoHF321{N4pj8fE+5{#P1*i*Q>`i?EiY4K-kW;ZbMwmvctaXhcfOyg=C3PTHzBg! znt-5aM--9qde&M#yt!lnJNlaNq#Mt8q8b83F4afni!fq*V2S=qb*+HsM3+3{8y#>a zw4c``@9wHSz&h?j;9OCJvs!T+ zBZ-;KMPH_ECyMmROAe5eDHpCsYaU84SKqeBW2OZhGA^K_tP>g4l6FNs3##TB9c&_u zKE~+itmOXv#@ovR+V_FBs?;Mg>OzdOGur;0Koa{f>k%4?6-jK^E6<*<>0ojU zdb3fz4_WYFhcW3jFT6l{h0nGJtNA_;<%P5I|JD|2pCg*}2-xg2{w%&G)ndibsC#ui z{1fVr@GO=GsIOb}PbvnwT0HxK0J;^@VSlfnp!b9RsSlJg@cBsd-epz)?R#yJ1YeHGM(^Pn24&+hc7g5FQl~;k3Ni zG0rNXkj0!A2jg+s-!r7K)7dkmT&nmhh`00i*Y#y?6c=<16-f}6-+96SIj5gKoJTN^ z@Gm(S1Stl~|E(1#=^8bu zTiNtBnZTEv)VYOmM3cx0!0%r>`T=fl95$+BPaR10w`NMp1ODSy$=Ls~dsT$R2=`Bf z38xe?qKV(HeP2w=wFwhu>lq|i4vZZS8Vpl)%@@-Ahf??- z%j9w+JRVGV?tNY3bXe2Pk`zUGA94FZ1bG}cyh)I?&waxZYl)15B^hf35C67vz8X6m<+RC@|qYiQ}fjBkK`C zE|KnwcEoe}rK^3|1ABkc}w_Ek-+t&<64I-34m83kVY6(xFvFUo?Z`;A# z;otttCi|zq2^=}m{y~C99fI-5k>C!WMq&XH99!TKorDP(t}N!90O+IH24)4czz|*U zk%i~fI56=34W-{_+rK*s0z9_RSfbQ@tGWCylCKLcT}1xtk?;@qn)O+s_Jt;--LOpF zPUMx^6{K?ad6a` zsJ-^iI_<}!sRlIRG?mFCI^&Q%N@0e5|sNL{WfnR^T|WQ$;) zDxrWpqFNDD(&Wq>I5~pntByb79JC6vA|ydhk~kt46C92Tev2#ih?#tnuOa+?@oCPj_rjqRJ5z zAQ~j;xG{-65KsRxjBGTPopm^yqYlBsY3Gkx0|7pzR(wc~6^rRC;S$BVry%+n`fJ}i z0nejgQBiT}_|A^a)CJVM3M-6P7#c=L$#nv8T@o?rDhHBy{3dbRL#Z6{>V}5qI}Oi4 zXvMUHL?4wuh=#Phm_eLrS}2aJ>&XJ$58YR)Yzm?>Ipq*>5mUsk|KvGePs%;F>Q?NO z%nqKBigWi10psZSK9WYp)mli83*OTy*kY;5f(Qn<#cOOA;lfFphz4JIRmFZP&Sp9x z;xHRCAm?#CNtrS4Zz4JafoCDD}YxI~Yczz_l!2d`8+~RIbRihvq}N>rrUL{H_g;$zjZja+%}X-z91Z zPW-+Xd9qpjI>M+#Nr&)08a0k$4VO1432#JIHDtmMdsviz=#{&e^N1jNs_Sg|04C$I zTECsYHuMS2v1&G79I2FR9k{*|24NVVCzqfn@Mw%W8yo@#xP!omduKg9H-S|G#X|Rm z{c2+*L6-dN=DzA-6kuk_aQ0_*bO=or*?g??DPa7}vNiw+hxxe(pT#X^N-H(CVi--A z=`183&+7oEmi`GMyS^`d2u1Y?X>N%CVGR6S>+|R9bEg|bxZ~~46zZD%z$TGLcANc# z?DW~~t=rL5avp`Cn%ZS+kT0|I+H3qXyfO;gadJ_#$!+#&ANWhm?rLY<+;q7!C*s5Kb8_;^mL$y}WvFC%J=Yy78NFU0bYf>GkVJ_is`J(?!R% zdbSFU2(Ax~Er>x#(|-x&3%}9(rTQpA?FN5V)LHeh9^*r{!y0R>r0s?FtU6F(VW>^ zn8dli3-`Zx0J!N6)1ve4l@`K#)YO}@j0|I``@N|O-=y?QoFB(*d4?-X+h~wVfcu`D z&=VOjjlG%VqP(<|gwH-N-pcG56n@x%U~`JH!bpll$dI~0v{d)<9roQjX&^rYlbe2Z zs|n!p*74&}rJvi5mzz4pO~IJ1cIH>PZkbuE<^?2fap#w7NdF$HnQ$hEC+alsPaNsw zyWA7N%#(}!=?Dk^sk>IT2*cq7Ut#a?`6|2}jD{;2xA_E7r6@8Qipktp34&xr=j{$% z7L0t0^mR>267^dqfPIf)K$WxVEIwPRPB|fVci|n4&!P34$tyxITl7}#S1(98Gg;u7 zgb@&wrx=MLQa7Ts#gM?kY?2?0|NOcQ8^3qUyhX|RK~frv@sCs11ZcZlw|W%K;*G6v zs1G0;5E?BtS6xW?3@KCZX<}Y92PJLkWti4I(So*8;dOT1Xq?G{riMY|46qtX3>Uv_vd*qT!>+^Fbu z*{v6-R=8_qoZDIf{QCX^imr@$n)&Eu^T*F=!~`axY-Pb3?Jc!j22C{K^o$+z$*W19 ze{0*~Y|#`Ky&4;^w9)?unhl5wdzHCG>T^>A;dK$$Ke)w$$J$wc43ArQpVCRjwfZ3* zT&vgMxa-f#9V*%vQW?&e{isN_VK;QsewUCx&&=&w=mgAqDH2a1;25N0q#{wSH0C(_l&#?UFb?r$%2=k1xdy_!)CyxEZSKrk-v;8W zC|>URh8w;+HM&goN@bzjsSU3&M)E$a^NBkILkp2y4lYcAF)7)}07C*B$RS3>E}PM4 zv`YI^Ipgj1zFDzalQufV@Pan=1-b>3qk0Ay7jO zqSU4?1KLu;4}ReUM}QcTKew_X#}qIQ&-PDY`&i!NsA3h|>(CCgp8j9JQm2RT53 zvS5)`F&Z>jF5WF(j&W9Hg#My&%2^e(3jOsa8h!JtX@!29lzcY7acAN3LVgg1k8~+f zz&AKzs|m$h&<)tFK7mSiNDrP*<~ZdIB8TfxIt6vP4waL@ z{4J19Ct&y?#KQiHIamb&*nFN03`mRB5CWgpr; zp`$SaS7}?KH+H^E)4}N*Y=zoI!jSDy`-&`XAMR0KD+zx;f7PO-D%Nj6bo5vLk|eb} zEgVMmZn`3Wd)E0VuJ^&3tGk9&XI05oCX85mH%9`Xg~#eaQbn>HrJ=I75MCrW@ufF! z(+nhD-jj7&DVNLAh8=insZ#>(i*9s1 zZCC4KM-{1UdUQ3zlH>(?7ph@+2#X)bFB zgBYYf&-7u5N|ReLqwuL|I=*BRFgK4ce3pwOh*1*HTsU`PTMdPHp@m)NJ7a!SFnd0r z3_al&J$OVI8>E4DC8<);b}b%EpP}8dC6m4rMb2kO$pIs=9Z(p`Y3q3c>#z6A=2 z^QcTN3XKU;n`q?39%EG@+Jhgy9dR(KYli*7L3m?-ERQm7`6r~`oc1^$$30C9_aNqrqVdL`qh-~sNT?-J&gRx zbveI&MVZzcLhAEn`3yGFu_MEQY=MeT0hR{JBTM`trrDiME0iBhAOSGpEwKn8hz5!Q zkMe5gH!ClxYcDB^Q4&bGH}0qU3Dj;3_qaJEb6ckf7=BRDwDj>GHDZr3{a>Q$h7hj6 zv-G{uY!08jC$}|=RRN-KBaP-3)cfHxy>EVNXDtcEmfoZuX!q{|^Nbg6GMh#?jcuA3 zE_X((9<&XhB6HpeR)8UVghQ2ft!4Dpk*gQvY4v1%O~5ui-IM&<5SSp5nCU>wJv zD1LHcYkf0ap(8^j{52Rcs5P!f_j1zaAEv0v7_ZG?!U4EJ*=0$z+(Gx11}_oZ|G7y5 zSL}6lvCk+FdC1OCc1gT@du&C@gp|VdEAAPdTB~r>XTYaBCISKERJv9#w(5I)k3}7? zNSlpu;Y@TJT+N7K5(Gqe4lR-Tl2`CUf0If7YJK#Vt%4?n}b8C{T60VHbr!(yU{o0b#k=%JC<~AD48A^Zp4&xOI`Br{=EY{xZ!-F*(Cgj znflfDoNO5;{@yw<_wXIXmhZwa;pnR7mDcY!^ZXunZZVK&-WRu@8qu%zh zH#nbHLE3zkBny8qBMF;w4%5LPnAawPtI$Um`QoOsKN;5o=@@E&h>3h>DCv{DZbFhI zmf_l62X)s5Xf09^OHSz5m#_99Ll)y3@0_Xo6%K=hxWKphw8FyC*^k+>YXS<~wH7o> zZpSIv;!hStCyz2E(~?=l%(iRvhv1DN$zfWpX80s(96}=kW-{~~ zBKyq-fV<^J9*0(ND{!xU@phLz$4ppo8N{`Bm@OXg=r(NecxN-rDKgk_J6i6jF(+R| z82mTCPo!)sA~+M-4Nda-mF@eD$KOX!IR@G#yZUzrL$R3;`DEEX#w=zb zK5fI!#UUWQ%;Ugzq>K>c#_Aao`2!N}_*wdI{m0<79t`2yKwg&ZOFJUdMjf(yF#lVI zT?6df&z4uO!H%D!H259)M`^9ef2ro^cwCn@cu|B_>Iz#)*wqTCy1XqtPmWyI#ZKNmd3p1 z0xC?HR;yS1h2Yoe8#k!g)kaFwbbI2aeEmQOPDB8ORoUhIc_jt+KDA6x@>kB}?Et@g z1pUC1ZD*r?qqEjS8xQP|%+D1!wIh>10@&Tl$3RfAP6h8Fo>kha4h6!daa>20kVDiM z>wufpghABZmR+LQUBjgV{7;0PV;et7qd>-|chCew_dSa9Z(!aK@(rF6u|U~E{j3;D_z53tgG&1&?i@*dBlZBoee11j@F1!bMkI4e zYslVlZorce$*3{>%xR9n4(slKJADYq$MGsOYfy5~H-@xeEV#!b^_o&4q3(&VD7w(^nCR(o!6LM@*Q#6_CRZ1;^V1<%5a}@f*9Q)?A{I# zAV{&+<-z6M4`S_d2B5B8k!xUBg17fGIfeDl{(O@!{cbMv0LZyl$@XPoZWTS`Z3FUg zC7r@il)Y8P5DUoptZyL$99Pde+IR%BgE;D15tR;2!MsK(bmzTawhFNqIr;)wd6+7k zP{xqPL`v*LqX)Z1J-Z?DcaCu!m#MZwnv8f)a^GZ+il*4%3;bDg)8M#7&xXZ-x;b$p z-7U3xF%lI-<_RybT+IBsC4x=N8{VuPRQMt_Oow2@?SsKm41?5t^l(x5F&gEpj-QB1 zAnHK`u&A2hWQ{H&x}-GfS226(s?%p>H7;Xu{jn0X5uCq>6s}U1!NCs3ICR&hJDC6M z4zVt@s}|2P?F7y|qeD5kqZg7>8_2TrCk&3&puc9}9r-UZK08Ld8(EU=QpkOkEk0hi z#7x2Ox%-bXPH#TpTVz(}7V#@p|A|)QEx$gEevZDGiKW;fg5=sYPmi&MFPLQulM`W6 z;t6jd^&^tDK|?5-v9j$F-hTlrRa(;$PQSM3XDJ4?JdB3^toT6-pZrnMu~4Ic%8YRh zVJ1lA;vJ-Og}aXV3F$OPO0n^5M)KX~HL*Qz1hBLJtxr`Qpw(M3F|8(b7b<=AfddwCaE9ez&oH~;m|MN*YxWlA*>NKY3$oH9;Y3xk*~ zq;dLuCvoTQH?`I)G> zaAZ)Dj>B>E_|FH2Ii~;>^hmd6S{cF;vjReh-Ja6tGwvLymq}cP zW_jnOdb2#jiS&ZdsgUZO+nZkZZFDa#IBkGXP2IRx5JO$rd6zBxjMy#x_j^e*x4;<4 z?k~o?0>{IbU5_}Mi{l5Qw-~F{-t2dfbDzjLAbplVt=hNKM-n@}?t7IX-w@dG32 zXuTHHrc?@e0w=%W4q!4t#qRUEpoj`+dt`stogERf{te@ls`PZ+2pl?srwRXLejcT zTL=G9D7qhh=j>7i|0&)_saHgZ%Hd+$7pet!H^6y?UZPZiRNBr`4y*x1#I_I*ViZ%Mc*E{@q zw76?_Ue`x4irySqJ~uAl$i&Z6s9>5_inwiQF<}MqA2{?yPdNpTiH+HQW2)U=>6uX{ zR#_>HnN|W4`5zC{ns`gp!pRO!=4&(%!2gWEFaRSBsm6LFZG?XzFcIxMZEgS_fw6GE)NE!VLoz_1l>@KR);B?W2j*e z9n63d=VDAYFTxSYr%}|O`7DyROG{nh9zm~+cH$?8lqsbJM|NnashfA=qz|fm2HMEO zxNtmz_a*|Snw8${~hrd=T%9Fz@^vW%KR%-JG4kTh6DErohspGDP>xWotPI0*> zLJe1Lle@#T?_Qop7% zOC8+C{@z+2xcD28;l^_DlDSmVJMT0}6Z;2bXfM0`P7T(|)lJg=HKuZO&RXF2^<-)V zhM=Xrpfv|&UC=_T`=z$&C`R>3QiDwpSb~;G4sw(20KfP4#3SchC;le#;i{R;fiIiN zuBoHe|N0Dza}g24!Qs2D@Omm7{W z({76`g;wh$J!mgS5=-?!;(`LO@{Kxbo zf9`h`deSW!ad_gqkM^hwYdiDo+&5B%mGEHIy9WQ~-b~Y8;O5^DsC2%b=6BRBmHXW^ zUcwzEI|o;={0E|xZQUP_k;28iC#!Cpw{34aldxMReBWc26$Gpz9dczF1 zJ4>ak&OQ*}ZMmh|S;;mTg?cW7;?GH(YE%@*)9T#QiTY|NI)Vp7Wcz+`r`$V|vK*0z zlO_+Qx;ECO;m-Kff`(H~pS2#x`+Az8I?y8-o(0OvryRbvZC&%VW}-h@U%sN>J!OeC>vo0`xP5(4N{~!G6%#H}U#@~4Cy~6u~ybqDD``;eI79V!sn#+Zo zuH$AheL%~ z|H;o<^OcpKytjLFOiUF!G0SE$EjLdZXIGP=!8dKcQ&%0ed3 zyVK!ZgxwiZeM<8*#$pg02qOZsjO2=eDDk_!z1_qHrEBbLZy-i!UH>`yXN@!dzuA#kd5b~saQmWkXC}sGM{tr=c~gn_s^+o#0AxB zMqZ?XVHg@)oEF#2s*{$l^ASU=s>3Xio`jPl@1kw9OYgUf*NC?bvr4x#&S9-5j4f; z`Is?;=r0OT#NJz(b^IgwgZ4BVLcjL?4t9p69t8IMNYc`8pW!eU-bSp%O=sCHtr677 z;2)T^(%j>}2X-S(Omcg=R zz{pv~mkI_Ohz3MG!%n}tcZ;U}sMTDE6jG&X1Qk)Zr|NsQfoJVC56gL*XoS=vPO*^a zC!*DRybdzQsC60Eez!Xibm%g;IGz6woQngL*MM!g>jivC@zSjGMB4kk2#Llfh&I{( zR<3Drf0WP_FJU>}v%60I@p$3)U2rmPI3&LM7u40cQ@}`}!HGa(Fiyx$PzYRcXvi8l z>G*ql2p7H}2-?`oh0bH7N{uJK`>wJ}uQ6#Jmk7(GO0UVcI(*JHxntqCb3f(4IFoeK zQnVqn?YsAU_Dq2JGuf%a5b;L?QtH>POh|&j&jamCbz;PA5FSr(66e^B_8*}&;b z6kNPXic%mjE>o&P!`w#$=kzx!WYVHF3E@LeB_3_DEWHsBc8c_FSoSp=qU`0KL0a`0 z4#ROEOu=?T&B(yFf!hZXBrJJ^a}PHMGb-|snfQ`Sfx}w4o2%AxFQ*pok*TGtS*Ibb$s!An3AaUTk0aC2zMGf(9Q$~Z zVW1A>NZgP{9grTmxKYA)6Gh(V4m7?~_e_90N}*PtSg#B{4PwF3I~ncOI=s=kbzVlr zpC=uC#1x)^T<(pDP#R|=sP&@R-#VXeLS7d;&<|DzO-T&cJ+g$hoT~EGor8Mik%_+#^{KSbzct;afeGW$Na;?%TmMlim zBG)n>5x(apkSwA;tM9N1U78jwxNu4_hh~@3iRkc4Qt+m^K6}vo(@*3+pT6gr8Uq0@ zhTTjWgQF&0>E;YYbnvS&F`r;AkE;N$qnS^Kz93O8O(zNJLTK=Yud6xHr7&V|vw#-f z8F4bL^MGmVb?E9f;exT+OU$|lJ#665mF1Q>_sG|m=Pj`V!MCelys#laI@rofEHh@F zXeGIWFbei6lnVCO>3yav~+W41ae?Rh*a zw(hX?DpW?JJY-XwStKTc@g;aQcfM~TX7d#JqcaAy5)-65TcpOCB+2F{OHheYYwL&3*>RfAg{Z{!$2C;p*8)}A zy|G13xODMET-7|AC6{<=?>Vi~Me&->Mg9O3f?j;nwQR`YSF}-o(h2in{m*8KbM4m7 z+&G+0+(juo<|u#{Rjdj-#KV_${!b0z&R~!RG0N-O@CbaQz0Vq?8*F*G11#KIfJYQU zsYt1wybQOj=j|V|74F)2gekMZirhYY@&TC_FXa!F*_u$_ZPF?r6j3A$@8RTCfv1kg z$zqcNe_xbt2&(%-Jlsgjuvbcq;oQPbYi*=y^TjN*w?npI$3GRS)$?tqE%E12a1m?N zn?L8Pw=&fs*AV+^>YrG=el(`e%eSPQq9~+1X48gQ67Vn@6buG0oYFVJC#gVucdrsD zE$w!0Mibmy@lt}Htat}aQ(^Z`{*}>NHnI@D2g7DF_Je$ zfciRo$~h*-`HQyvkjC1xB8ktwKITQ4WDcH7kvJ%;RKKm`Sk^WR*Y{bM$Xp=&Gt!ix zG5)FdUAQ-FD2@5>rNkC%tL+w!6R{MCj4a+Tt8jWe&rr|f_-jF?Jri}$a~GPWs_Dh- zs6qV)QlE!t6A7O+_o9mJ&P$2v*nx5nX6v4?wcfPKI)N+$FHV-Z-v~D5(V1L!MT(jS zMVpv$Jw9O(z$~o4Nrb=e&UdEp_nBV*3?R^=@(Yx#cY!h#X|+UfHTzzw4**FHm>WTJ z1DTVNR=!7bKyjyb(gTk0GL5XiTGJ*fCu@#Z1A(VJe$km9^muC7=DZgMYp6aYP@tZQBqMN-ja{UK5-nC2sM_Pqt`-awGzR(R|O zoBTRPp99pEV-D$_kU3*b`le32aK4N>TZu0vc%8LssCLYsJ=dUVuP)_3C!5lH5Z@88 zs%l9$L#qY&h;c#`#pEEXtggnq)Efh~t;?a{+RAM6FL|`dkZgK>Kk%uR593-*3o`)i z+g&)zZOQma9;uVdnuoH}>sC7~-t6*4oDPCxtml8L6?fl=H8GvUYq}8%2lbjidKG<{ zz?=DTH+jJPuZR2pqmP^{}tIyaB75C#dFO)75PILM+x*uRGr&xz>^qNfXZgaupEHE1s zB&kPf*D_mCEA;k_L;=6K&3)|J=@vJ8BEF$^Ih*VRzM=X^WCvU@3zB%u+mHQeyF0oh z^6>bjSyl#A%$ai8EAHE6L;uKk$1J9hSpCZjU@ugKTXY}1D|`4=Mx(#5t=CBWRJD+D znr#rybSNoFY)E6Ulky`NSGafFqLSK~)a1FZpN9Xw z1~@17povI2u7|ET+J8~b4{+I%IQ=STXff+#ALneo+F3i^ zJ-*)Lk^oVUHmBn{M1@7M`~fYuzM_t2>q=zVghY>A@rp0+gYuL3>MC>_EX&_tZui+p zHyga^Em%x^np^q5$S>Zcwg zM1!`7Z*}UP z+3OEPt9pxd%(sDj$V(S%%U|K2{9Dn_mD2?L{GRzbz!Zkw!%K6nTG!`hQq+GY zldba9qiMw#*H*Zie;#3S*sjKSUHwo*2pB_~0U>UWohllCf0MkOXS1Jppo%Ik`JP|H zn*>oX-hV946tE;s@Bl^78MLS)8d15)52x(8Ko92HWMAe1+4Zov#}fHl2nnRe#4bPV@%PA2$3n}34HGF4(xxzblT;>fAlE-#6cYn<>TaLUGCO%&_#mYm1$tp%2L>TFhg+vRd zTC)`7|oXk zcSd6tuSYNE+iZ_VvZ#aT5g@5Fp^G1mCQ!7T3Y2-CRh8AVu@=kZQ<#rp$Y}LR6218+ z(Z@@{ry}j-h?_36m8HGNdXh*!ncQG{MLVlxi0ulj#)uC(-kU1kga0@Z?kH%_e`gS66i*ert#i= zhmSxu38ABXXf6FY13qi{`TgzgO83%p-1SxM8mK7B1dyJg?S4HbRd%voI zKx;7zjjzLF%B=7iHf-*@;NNIzzh!F8uBxDLh{&UiL0)ZzUTU$QKH)J+I&bpyVlQ7d zKM!Xd*GA>($1pFQ-@+njA*FURXFkD*%qxohf|qPnO}yOU|8zRJAIo9AK&zp|uJ%Lt zmNaR>J;e7_c&Zy^d{GU7qoPCi<~WlVO$k(WJcOm>ghg3s%-(hkqWSo zNen$b4q#pb;_dP`CNpk77!A2iTDaeQ4CEcOc|MkS^!j{sX7WgAH+)9}YEMq|tZAVp z^c+;U{RjGa90t6}pnA=Mi#LMc>LZ@N!7xWaT2+5WeSRIntEg^tKx4PHf4wgmUkG1% ziA%YLf{&Fb{?bB;u32fAVc{0^%|W1aHNpQ&E_Q%(l;Bv?iEQQKL<67e=BM-+)G&2- z%wo>pHVatAVB$=(i>U#D&Db_%^g!&*KJn4-K35%HOeLowKi(jak$ST%dw+7(IOo5; zO}Z)5NfW`$xnMF|HgOw>ngnj|`mS+&3<2%ud-Dj2!dfT&8LW0zhOYKa>LVk=wjU{I zb04GdM^h5Rs#QL27@J@AA_EM@MRk_Ggu%Dj-q%467?b#kZ(^pnYf6TQGZ$sh<3ztW z36|aiviBG#T@8Q)LlxW3HMS6YiuBw~#`hw;M!hasMjOQcpzC@RqXb*@*0Hl>jQ_Yl z&;;4HSpenWi_rp19(FO)Z?UY_VL=y@Fl=sW@z{)Dt^SPRn*5+Dtz6IgkeAQBRiq}Z z&@Oyk#pm0L3+tLA)AVtLn=5aUEWcgmI?`z=$8T(Q@#!PbRYJy|bOgB?h)^Z#=COxk zCab@IIFw#SwyD%B)slmhEK1yxAT!IE>awAVF!Ry?#g|%sA76h=h}6d{jNkc{0Dw6{ zEzF*P`E9z^l>^G>K0q(~=PIh8``W0XwRT8PkMB5l>+b$JXuN`rb=1J^AjJ1RQ;F4{ zuh$+IfOR23aZG?93=~u5AZHflQNi~TrP4Ma3Wh|9l6Iso&$3Z$92kDMoE8=k_d1Wh zUB}}!ob`w%@w@Z&c=$Ru;&fyCl1lmD`3Z}pm8p8Z?SA`B;%J7Sc{{h+T%7_= zd3u9h*aUsw7cYpzpZG^1mjHdYwSd~@kBqlogHp);#%W|}{@ubzg|l%y<_w$%djx$i zxTMIR)VA-W`gp>Lou9SUNkkzyps#WM1HJ*Xr!{qy+_c&ZorbswdsMfWbB*xW_Kab6 zuKD1P+2<6SKCz?HQ1M`P2QJy0B zg~MCC6Dsf=_sILRQCGZDb>8Ctq{iQC$uZzu^(e#>5(9fl;(N8yRLXzlNT7clFDG!H z<3gSsXLLs;Jilg=aIj_!Z!@NrO}+#rPH6V+y0ZhLj}yhx4c}E6=jYM4;b4qBd4e^! zyVkjhIJ!HVoe+;p+fL}cMbyZR`MNj?Ir5+Bl)dLur9OrP5Wt6;y<(e{4*?Fy`YdP5 zr9rfxrBAJN_qKNcdlxA_WDlEORkB#E>;n>UcgO~?wn}o1{O&A`MCW$nUo3JlBiJI+mgFxDRU%Z87cOpWy>$Sn? ze!JFaoVulpk$^uLvEfhm7Nf5NOVi^z6BT)2nazrpxU$WG&F(?u5OV5!kDQmpXA~_o z>pPdvajL}IhX$E&!*C*~=*m!(s8aPGmQVG&dqlb4)bTj#@XAMiR##Q|cbyA}@2_^5 z4Na2CiXwzJFxKgj-~5H$N5-xXCIHndL=XcRMk)zIa&jvgqVA#$Bc)ANu|o?3%$*Wo zF-q7U{fD%ibVELeH1eUeB=>47uW}>FU#+jh$Zx|Ox=Sa{C^e0#gQnbAeoPa`De5ARswO00b?Yf`&W2Xm-X?y|Wb3=Z|G=FdPvmi)$+V$ynb@+uSsc=C8SRf9b54sbWo zBuhW3I>W>FC#*XSna6|Q6^FpS-EqpuGJ!3&n*f}K=zY_lHb3xc?JTAaXMhU9T8Fc2z%g+nXcj2fm2m znKtDfAMmMe)x8msv+U1*ucbbZFZl);4+A1^{kCk+;*1)BN*^SskbY=;v&W{7f_%7} zAFb2bDh0wkuFO9FHmjf*I7ZLniT_ltsreYyBYMK42RdrSIJR_)hk@qdBgGq zND%biMxTwpb#+`%o4%o<_UN8-bue>A>-=VqV=G>{-8(erTHtc8y5M26{yBG3WkoIw z)nIAM%9DE*U!IO4jnO!e@%TK2vx`4uLuHe-DJW^w$1d8V4|lXv`R+5Rod(P$`^#@> zTv91EW*2h#uYo}$V;Ps}tAxNHP8xL!j(8U-v;$4W`NFd*IE;1HL$%ouPsD((VNDK3 z$aRykfu1sqAAr+VZwQHuy*&iv;0wBeInol=hd9QZqY*DZ$2KT+$oAHVkK|0pT~;D2 zVa6Z=u-M0Q^BJ_BP?9cYs#b?y+DO0DQt`WfcKUCtzx^~cZD#%*68ytE$HuQ}e@K@kgO%PV@Bs zlJS6XlDTC#R;f^=m--iF`v29<1&D&alUYl`RX_yV7y zvrcY>X-5F7Oc6XH_eTAl4SW|Wolc8-=a@m;VP_5mu6rPVS64ELOm_pnr~5 zN`>x6Il>v4n4?dzny{Qfo@)UjD7+wXvgki^Ujsw!B9LN`0Mel(8LVsQNg`nF^zB!m z*n8Xr#2x93GddboU5NGd3SfKGNP&zt4rM|XbW_>>S;mvc*@36T>auJdEO>AU?(PI9xI=JvClK7- z-CcsaLvVL@cemi~es`+6zP^2{y1MT#9yo`y<*dEdTyxIx4v>&tSNnL)s8H09&`wUz z7`dy{Xnu6g=2i$KKqW})JXJUJ86AW)+Hg^_5bfXTWt zn)W^-KZOQeF9E{N|KafeQo6_&$k&;|r;o~FUX2A*I*}|Ulff!h#)};!|9SNM^GW>I zy9E5^1LyPS5*3$JmLgKWdIUB`s*C@NJl21IS$};Za)fsTpZ<{P0n^8Cu#m7T{`G%T z)c-I3^Pk>AU_hu#9G$hz){-nH(LisY3rN-S3=9#O8iw0|gAx6-1fLt)aHW~!{&+BaO?Jv2U~v-*v(;b7wwdG@#1 zqEiFh{nViBvO5)6oHz~h?Ax~!VwMXWl>Yf?`s-Z9IKZoW4K2ihn@)#kFN=in<8z$A z`(OWI=?E_J524?vr_5c9$n7zEy@DGl6O%-SYjy{)3Jb$PV8qMty02KE0myu%7pCWY zQ>`^+ngAz2pyn?AL&9kD4%2kxbK8|j zt!npM*QGW#MF60Zr}w%nUuf(w6ia${`(?f6EB>n2X0-WwyA}wH26D@tJ?jn7% z2l$f63BcvU>3SpP zp|m9qTf;Pz8QmcIQwhH#4m1})i<GUst zAKKU{6!QUnG<=A5LNVXHQu^@+?n@PSG(hT^&8Fhj}lTk z{yc<#*EsS*4`OZBL+LyTT0JG}^>ifFVY8;XzH+}9Tmqs<4NHBe40Z?gt9^L;m9yU8 z#ryw4A@dgkCl3Mqr5Zd5ha%;Ip9@7C`41?I+GJaK)lt`{-;VXX?jU)?p-faKj&5i( z{#WRvQNQ5k1wc}r?t?)abxv5oq6Tfi1XZF^k)A=Hd3@}(tLy<`1%z*3)?NzU*i`1r zHb^kG45?HKNCNer3DOGYSOQeaRq;M8yG}Q|pa4Av2>|{?Tq1!Y(HQOedW44d=a=}= zPRg52!lpKl9}Ny$W!Jz|FPS1wx`x-G_8-Gw3k{J^UzE&Lwy>U1MD@9;Otv6iXs7Kv zeubn7{d&YFTpp@FCa0)_Nh$yyk~)bWCdV$Bio9X2%y?qC@OCZxdCyO;=bPvA9e#Xg zCttBvZi$RbBiTCO#@u?_#bCEl_hU)(Y7aKv1vY7TIU+URCGMkiZ?tL6@8JdB$kV`fU4HPSN{I?D+KXc4q8$M{|e-%=aI_lEcK&H7-fF+Ha9 zOl$J^+tg#JO~!9zh06tDh-B;SDYr0x0geHHfXu>|6zyY5xoNKJbhRllhwDirIQWBP z+lm>Pa|S*1pS91&k2m3yg?exY_Vx-O=nJp1t2>N(Xm$9$AYW}XhE@2t@$j6yd>{(w zr8>F#MGohi(nWJ1p&4X47IofI80Ic5neYrdISzL2vUq8=YlC+`^7qdf`;oAjE=$dL z6*f3wEHoe0|GTNp3W{Ck(*9QC&@ucXIKWiES@qEVuf?p9fUj^0sF@9~;JXtc0L3_< zxP`=N>Dcx8?mW-5+H(edRQfEnLX0GhQma;sa3=OLhtF*fcMo~V%-K%J^ z46)FuNTN5Ty(qewY*CTJ%oeZTG{@1BRCZEHFasB+ElQ~ z{xOzDvt9zv<6>Qi7jjP`DL%6U%j^mVK&VAt#a0Vwt6Yn~=S_g!V?wfC!;Hp>dOqFK zXH!XznXwI;zIm$2zPp8QL(Rxl?N9HGFxj06G~HMHk<3+GCm&9CyPK-0&rZ~hl0U7| zFVz@1tYRybDn=)LY^A5p)}JZ2b6eQ`Y@52?|c9?E3pE%mf2U2w{+>Mrdu8K&jOIax`B-czZmb*ueV&K7O4ronr$g zY6leizN1RkpDz*@B35Txi}C9{S*Gh7qnt0-sCeQtYgcp~CVwW>z-zsirbHlxQdhLE zg?ruBV6Uu9KD{gdDT(gIo5Ew)p7PCI=6=O!R_A><;}sIokpy%4?Op<4%t$TwzQoCD zow~@EcrBMb8Y?%(bOq&riR0t0)Yg(SACnWtP1Hgn;3mF2UQ5J1Iqc+ZMgFjMh7a&N z17*maD^dqs%dxdAZWcqTA@&wZv>}`W2Oo-=cV`b7ish@)xR;(iDU^F1WGnopd-X?& z5O|&NdNZfHWubIDd6Ct0k|57PelPBq)2cTk>-nI=q&rUVUN>@Bbj9wG?LxCPZ!XVA zrIUIAAVRq3E68luZy&l5;GCN>PxvwYO=T;V0Cg8C92Eim>$y0}bl1uiN}T26kpqQY zB=qkA1{#md1B>Cic#Jt#cF7DvY}?y1)>%d?l(TevkY8Yk-VYQk4tR*MRYWLZ1!$$#t$%$N3B?uL$U8^mgP%}Q@0aC#b6^wF>nw{@A{FJm+G{PB z=n}@SUy-B~SeReAla!vvXB4g@8pRwc+863SxPx#TJ53tqMnxrjSE=5j{RbGF5SJH6 z?tX|6H$C8fyCcToNhI>Mis(!$Qs)b@D(DLsiIsUrr^g<@tq~Mm21@gJmSVADMhkAg zTf66)IujBViK45x)oXojPIJz`34b@4L4&n&|1Z{mQ3HpuxFcuD+6beReKm|2w-R0zSt_WKks- zs82M*C+{#!BZ1#EPKOKufb6u_q-ZtZ%?ThT$d{2U#fV@NE3733;5kRB6RG`V`SQOt zdbbhuH`Xw9{`3zYA`p6ExI$o`lKdG>iM`dD&TSx_ra&>pdoyxwwAN1xrAH*jEUAsp zu6po7k{uN3tW##ar8^Wu+)^g$k_e%f=&UyTJe$I>6yZ*LJ+U42iy!UV=M?~90nfhQ zBhwzsY%;O!Sxh7vnfW2xup@!HFR_cDBpyt>05dJT<<4IMP;23hg9)c-`+5cg= z+5>d>HIuNNa#@RcV!u`r#$C7sG$YlgdB5--8#e2Opw;{dF(^vDH#{rIjzDjR;*xrqoi4Qxm2W>orc2~oI5HTt-H4N zImG0o#`g*%T0I0#ZWk!T`z}Lf!m$aZ0WcKo1e`#6eau{yjTb(k(fP2bfZk&?Uoz<% zK0tD&Dh_w#o!jT9)GBF|5`GsFhPvAbsj_If8@}NnfF-J(NMGY5f>SfF14;z16on_P zeFVh|BgK=8@PWdYMlaP@y7)a8DnMu%rz}gy>3EX&hdbuLK9~4DrUrE-k4Fj1^xaln z9|!@TF=G<|(~$2^p=JrxB&w$NST+9FUEBqh&$jir!d`bZQpdZ6@je0|Xc5%&t#KD`#(X(cAz&I! zSi1yRJ0#H z6Y=EQB}HER$yfv1jo&PG-LvmmdCbB2ibg@F&r`kQ?boudrLd=SpU=V+hx91{R~cN z`)mSX8|EidawvruxtLE0NK|=>g5Q5$Di{y$6#a-1AdGw|N2A(ye_W$4K+rpg;3gm< z=`T{)e^dV|>#n9{7R%AR-Aa zC1SrO^WAD3ltL&Xp$Rq->RD7L0w^|k^7IyGjv?feQz^@dhinymU)PV0Ki(?_Jk1_B zJsIh#y11?H(<5b#l=#YCK<|4v5Lb}h=$%V)3tv^T;A#Q8Qd1CQIa?|#k^xFmwDI zc#`aI>Om>HtA}OT3DkT{4{5IY#Pl!fE0o(+fbRaKOZ#A*X8WPh?eTPK3@93tauVzD z(?52gotNut{CHdZv4}J@zqOY4qCo+4nkKVBV= z7F7jD6XmS`VG2dUgPyXx`|kEa2(ax^@;|zeFeaSMRwST^`)q}f@eLUfqKarjleC^c z@jM382w-L&TK^OkP}}#4x_3k!nG|c`FS|4(SAs3AIg!bY9 z2x@|&C=ehiEQi>4+9A(WgzgP<4ib<0WsChJbpJSH=$;5{@{9$FYyA~cd;Nex9e*M# z4sd&sk;O!+#lCWHShm-WcxDtj0Ju!M7DscFK>`gVsD=xiU?NJCQOnFK{Ttji{mm~+8{6un@bVfCW zuhbm0*>96|We-o7Zp-*0Zd$?U&QpE5dcxPczkwNSzryiJ_O9EDKJE7 zMq|HF&dLBa!2pdOR{q{$(Q2zjp)92@p~%(#2)RbXIg_*i=k90F9!oVutUf$xVu15H z1X`#$Tld|KsdC<*NzrS^r1}VGyOgBJ}OhfN`QZ$xk zpA;9X#s=iqDitK6`jy46m`(D@X3KDGVp3F)A1`~mGi-wUw~&A}Z7|`__Lnmgl;+>1LO$(K~kp2 z5z>I?vxII2x9y9NR1x;G=f7p~4K_ki_>k;qbCoy!ec*L|^Y64|zYoQTAPk=@7J>D% zn@SG|%1nCk@re|K`%&X^{E1i+ATP*KDm43>FSd^PmuD${g(jjjY6p}t0t!ODd6z?O zR-6GNP2DNu)%cREW|E)fIou#hu(sRGMIS6?{Go7NMe7S)D*v58lnv+ z+}RHvzn0-EeTE?z4I>ZpHyi)8#XAViF0tYMxa5pG07rYhWuime@iKj0ESg?XmEfhn zjMmJ1=FwsG4iaZ1oyy6_Fvv!tGWx+M%i|cGz+{vebGb)E?G`X9nCE~)i)AVGYJClD zaLC{3kQ`vWy0*&wR+LHkK9*?Kh;SkVSE{){nwdU~HY~t#D8f!ra5!7R0!6|$8-B8X znTCj%;9l1X^}bC>qwH+Xn~r}Z)Q%Z~2m-aF&|yjYr^9?Z?IYO?^DwbRQBq2+U4+#=H=(X#J9XnqK1049vYO@ zYPR1F*HnYRkPyGUi25>S%$NPf{mhuB%U=wOyiZm{>B5BEY#CTJqVW9hQU(n~pyR+A z_QOY^N3Z$RySoe#p{2=kCF-#GA5+pMDQH+yc`Sg^-OFA$XEI@c12uuBSFMH{pG=H} zh!h$rQmnSzF)mgqEU1Ik(<&K6Ekcx?%d*Y4CHpdB<@HKUNC=T1m=sAQYRpsdpuS*W z-Kj#Ou^hrJQ2de()gardiX?iNFM-Z>40OK3^PFj#d1j5zUYbow}?jtIsh>Q^7($7-W8L1{^yqhSW_KVUT8_Y?v+z)TIm`s^85 zG_Er%!Y=#nS6Pb%C-l;MW};{+2VDlpqw={~hUB$X(f~4$WtUi`FUJ3fkLjZzVYzzC z6rx!5k|K*U-LvqzjB@*WeV7MLIkcksNxiYhbg-4O_PREG!Ts+?iIK|@v$#shFn{~A zRTmu@ht&1kbz>r@SHgQh70Xa=)MU5+B|G|)PxRxSQ^#P7>;olM6mp0I-gEGz2jq@F zcXgzlxWJDo)vHpEj*5TL2KHAf+EDXPc!VHlolw~y`E36HlM=+eDq@E5UZ}7!I`Hw@L4qj-R~k+ z?Nn5t1Al@fuz9}zz(Iv)8uD;*tc#Ucn$9QDs4ug&ri)X_eCDN8Dae~_@;H)8R^a3$ z0k+yy3tKm za>(b&LJ45^X)1{7<11rE8d)8H0Gv+3Bs#4wX6yb{$R^uehF+?LG6DW=LKpvftWS>X zuoV)xa7Z=CyJgEPC0k9ZJ=5_TpT=>F^erv_7uO0?bY5SzgddtFi)20Lg$VtrT=V4HS`uYYdf`A+XFS?y)-}4RfZUlO)y1DF~ z?U9l&s7_+j}A^gY73a=BZLqiPzD z)vb=lVzoNLwZZPCl9$uzn&@%EN!D~9tilR{#>zIUoo_u#UQb8i*tS(gy_rtEhx6M-)lNJo zLw&(Fv9(K{UiY3~o02XaMb7%VP_fUEeC0}$I99kV=|pDh92K}BVR zTVzMjWrhcDBT8;rGpC2ibQX^OpZ)EAW6ssG_cjxw*q0qriwlizSnm3Tn)BLA>HqQw0?vs9iN~ zyOLU51*tj6vsU{sn~{o3&6f_EPxBy_m`x33A!FWh`uA3;DDI^Ir* z^P?B^wi2@qtGcCn7suznR@cmhJI6<9aitjrcq;oHCjcplsk8veIRg)`&%%OF_PLEX zCYfEt2U|U&UoyqvhGNO{108-$2|7~x9g8$D!6udwyzmbv(nx1|U1e}K#44*6H1?5% zAJ*)bI+5tBuzb@lmb6~D*w6EdKaSFIby8Y%zi@;lTYjh^O^lF=T*{)Moh?yLc>#O* z&Wa-L%G_kUo24yPa*+$tiO%ckl}SDy0X!DuD;ISsIpEt!5{*XC@yZdB@T9{; zxJmKKViefS`ZN(@{*53YLQ^4E0%ADfD|H;KV{!V%FHBH#-sgH)0}Pd~2DkX}k8V~h zg~B7s)16znXnNV=e$8eBkH1g3)Rr>6c|7lF)jLdKUm5jEXrK6d1{TLtS<6gJ_Ie~- z0HSAi=Q&Ej;(Aydba-~+@*Fh^l#pa%WkG)FdcuyHiJE@f{^1Z(Rcu=u{Ydyn_+;O55H^u&!P{28NIs+`ISUdel`aE?k>2eD& zEUmhF^Cv3HhPNhFo>6ZW(i0{yo!ulYl>0rB8WxH=E;G^?Ii`VQ2?Djj5{#>qqPQIa z4D`6_xhzXwcj2A43=y!Pi26Bt#6wO77jR3}T2)hntB-p*pEB#RZBX8`r&jSy#Zx(1 z8hTiYwQ2W_3VS%X3Jg^^zjK+;t4h5FhRgRhy|~yaRN{B!XMhDVLECV){BD+}ZQ@bu z>U^M+`Rkb-S(+Z{&ZkzK{R;W1Fb2#^`BjmiXfz&*6VOj{oIH6{-(AG>p=xTy}FTeAw^WbUA&~t*K(H=M8%h;Gy z+&J%BYA7v2uhSD0jj*QP9wH3_A78}qFmaDDevhl9++j=JU z))y>$u>%L=*ZM&eTCW!YY^6FM~ zCSG_K2>cU9GQ6&sCZ&GCpYK!99-C78yUJzLzaE=M%+1Sxg{(2s(JpoW*$+bl60=w9|oRv>R(z2nHD&Df;>2N8b%u<=L`yp zPIKJp3m#0`j;wm=!-d#bCf;2U<4*W15NtcP(uPSxn-d|Uy)t>)>+t3$2c7XW4pat# zem6`UJxM`rknuH>>#7jwp^fUsne>p8@lK5Ozx!4gVL_hJJQm4K@It=rHo(I;fO3a# zKdd;*j6?im;>CdCyFA)AIkDCPcenjKEF=Td*L#u!>ZQK9-aFM7(vFcJ%52*AjM5t= z13jI`n1D)gw`E2~Hh9Rq|GnP}7CKQu{_^Z(5Jt0wyHekNYLhCei2iYrv%4lSSqks+ zV`@2<(+p5Cfu7fOr;VvX+@YZ*z@pVRa!;MNY9@`^RI5!_%ZT1h>qEm`(A}c6D}dwi zLZgxAXeJ6hk<=yZThPyMy=nRCp~IN}K7GhySJrR2Z#<^at86nrbsT}6?9ywHoIH)^ zDn$YLA;t{0MWjTnE;d?p^aGjRzgb&^|Ew)I4r*7a4V+jKGbnh0S+-PvmYBbf=?O^C zxFxg?j;RA-7@f)rmXxJnr#xomt2x~G9PygHir~7%CcViW6#fZyc8eA>RE~S7y!`G@ z;m4V|N+FxnDyE|k;=^D2TpSfZs0pnjt}a_>zame%$9Pc#cQP;%YalV!a&j!SA%V%Y z@8_-g5Fx3?x1qzZT`?RU5x(IOJXuv`vqx8AEMA*t+n&JlQ{h;pV^+!}rwFWBmzZi= z7qox1VE%0t-3;K{>{CBXtFcBFFuCRDNx#W zZAbK$=X9z#aa3m8?u!zA0|7x|`Waom-T8AQS2R1G*DAUhVOqhRjn1D)2ss2+c{+4q z7j{^j&2p{24QXC@RJFY7D*^dbsCT@IP~%7vU2(8FAp(A}K`-LOc|xuET7ki{BjfVz z!gW~tuGGI?>w#1EDH0}-_7zCzp@_sc7YKS6K7H0#J2Ch4_b4yz7>J@gxg>^h!xXro z@b4DDmtV{c`jX?+pqfZ7Uh%isfSwGPJ-&D{GSfAo|F<{ipCb(^0>lNn@F^`=%RwtH zXYOr1e05Lge~f~E_h9|gYlzf{zsRG1At7_cY&cp+lXIU4j?n*ivCY2>c>emMJ_P6; zc&uuSp?KckPf2NMX>2Q3Z6=c%0-LaCya^>qTnYO zRkh05g-0$XxNs*#6kT4}FXba;`(J(R-%h6r2EQMkg$#3h*_6YqWjr< zN3fyZWKk3W4YM&Awdi8?#9@4kI}EOH=+N)@NkhbXFPYI|L}4Y|^#30RN){xjXwpTN z00yKc;fE`z_|=>P$AD-}4DeAxL~=`6K|B7~IR2F&L>U+mr4DxK7lj z*d_GkT^UKV%RY)2TdlPVLT?Y`dV70+pLnkOv2b{O-ZGUd8a3O(Tp%O*>SiB$XYc&n zz3vw{Q_%()Z^FXi_G$`;uurJ+U=4gP-%q#l03`WI(z@#16RS#)_3OL3{~ZQ zKO%7AFp0fnGHblA_J)j9K2??Ly!{@?u)kY{2%r~R5Nx8CPGJh5Y}HCgYQStP338qo z&~eBMA|#wW%bnjnRh?0DNf|Cm^1CW# z=`yf#Ky#v6hm~))W(J6Zr|Q$)1~)b`J@J?CQ$|hQ6F=jN*eC3(4aJhlH8zIc^%gUK zx!rg_IG94Qe?HS`8Z z{z0SMd3%fb`MSf1TV|u$14FCbJzzTTQy#!Wla29xEF&2)T?Cv~r$(D#4*_aBYCJO+ zi`DexDLY6^^67C}I|I6o5Qna|x2;&G@^Yz4#pW&MBvg;MWyAdmuNYtrkuC6eZM~$- zwtjc?a@O{|WrN2qG$50f6M4EK$E{6_iuCst(K*yR)2rEBi!$;Gp;JYe{~i^qC#9Ob z`~4SF99|I5W6z_3nJo1cZsOKATdY*XO{#2Y5^)q#T~hN#{>;UA2=P(^#2Likp57QY z1iTU}YX5|kg9JXZu5D+-e7?7rn27GfYpaIG*n(HCq=Jcz$~PcRlLC^yIc<=iq zGmAlIOnu=o7@J1oxFGjNGsdiM``B?i!zutn&_Ylbznrf<&?sbCC1@j6+u6W2Ij!y= zEC5o&>DiDOlj3#+vd*c5805ZCMATAXa2EpmQia%FnQ};B6)g8lyc5qK*Lw)@nP?%V z@`X%jMjz;>$qlx}4!4EP4L&F!G(&&czVG;sfMSa^U;3?bw!ANNY&AY^h|otm-Us9o zRJH2XTLO(bv^gg|2p0lQvL=wdj3tV<~lP!Qi&7V>2*8?2#`aqg8aTiVf?Fia%e2&DP1j^AI&k2|%Bq7vDOGGPn#w)akA$`+=*;g|&58hOmqEU{T4#FRH`Glk!&i#t`4b_dEp zqQ)@dBnp7w{FF6as1MU+^Vd}E_eUz0ObV3}@N^ERj3I72N{z(Pct%0a zN|0vjL#EeRw_iU~{n(q+L)@t6%L+^OMq=^rlPY@6b@q=Qi<&+C*wjwGItMQx%e#G5 zwoaxMJrX}N=s$~lS*can=X+423V}y-Y2iP{c2yXd6#V-*xf}Tmr=Od9V&K? z@wLokw7X7<>6lrD*HCQ5RB2Oe`MEr5@LLV~Z$VRMn6LLW(rs9*+fX6FCNcPnN7m|{ zoID8@KY=pw<^!!y$G~wSqq?q--Y&jZvDVCa`z>bxkE_&xi+oKoc_l9bri4e!>!z&= z1^OBb(y5wZwPm@P+?9IGBNMhX`LvnyYg)|?*t(YM^Ej?aL(U%7Ajrdt8-W=O$pbRA zC?E3Ww%Jpy>6{Twd%v=eJWkkP!y=Qn8l^l1@76?8b(B*ppPZ#J2E3+co!NTt&2jlW zn5sb+-CeSFS;p0^cStaW4h<8jxVdz(8J1!kNTw0CAB3c8j1P$vqKnaBk0=6k%d{6Z zTZ~!tZR!)iHLG*ngr>Xk0dsY%UtvTz=E;3e%X^y6(&Qi#ve`RgnHyl$?Vc-ZigBWZ z*u!=texEKaCHm#<47NAz1)C(BDyE9jnd49=v1gvhk#&I0aKh$V$B$bVjYVjHPA{Z{ zZ%O)@V4GI8S)Otebi3~b*Ub)tKG&UJYI-DtMSwN8Sts(MTTGL$C9p#_jIM+`A&CvM zu{7wHEc!yd+K_ADT0+w8;^LkD&-pONXQRkiog9?)+`j(!t z6}N+pnLHT9sDb#)#=^^#1{aoVoPG~Mk?{ObsR}!`JCI9MbSPf;LI^Z!92bbZlv<8J zmqd1s0@7wLw-v8G^ic*;&qCpvgFqJbb(1bZ ztz_u}L?4+*i?o996IkG)XWJ4U!&GFa4aE636AT6ALqbGGSJ`WgTQFij0>44LSv2XH z2&22PFRhOXo`DPMxDjh<{}^mVS3ncak>e+>2ddrKlhdkPVlteZF`X|dsO5>5C8de& z#MmuGgs$&&E!{q%vRG?eGOJi2Wy8v$mGli^#c710j@xNVo)c(;sJ{A83Z}+nBpb?d z!t~>Qip$*gGFm=QZ|XfvhF5k7K&OJy0>zwkHr>*XMsQpcG2@=x9L-}kf}yCRGLL?b1Hn9wkNFYni#wcFo2QnV>SD78 zTg!2ycscue7zX`JjuG_|vJhh1R4pM0FYP|Pb`C(Fo040Xa}4?h*Hbbw;$T(+UG%92 zASeCo2qwQXuXu16AIXd>m;nswD2P)dJvx-^9B*T^AeFdAtH6HKQ72YbL&O5P_m#7J zBWl#*Oq$+hI(2rRjeD2YPH)`zBxiCrg7c37`uUb)X6X7ZSU3EGU`M>WY(_SqEpJ?& zYtnkWQBGCoOJ00xW8dF9qT;(zWc1`r-eUJ^fhs5GfT_1pH0Y!6LHPpKHC=?E4DoMf zT?W9nWS!qFah$OqdZ(`t=;D4Yle+QF%5Zoni{Ny6fmEg4wz8UNe?5WO zVW-wama894IRKo>Z)OlqPgmCgD>AXBy2hRgX6ZB@K`)tS72zPq5A$N1!y>T5D8tXP z_3_?cSj%)oPb;SHBSe`uay}u1!4}m3j!XHSov4a2PIWCP$#)yA78vJ6l10H^94+cw zAhlL&Tf5DazG{aNXm zoOYjZ*`4EkE42*nDNPlB%0l8ep=55kelhy(CFRKe?Y@zID3+2~1Fr~&5@pHwh~`M2 zt)hbqxP_i;7)*LuOw`}8W=r!|+bAyJ-f`INh3Yf{B^?Wa-0tT2$sygBfpd6ePXZBG zq<$!}Z<)e?C^aX(^?4Md+OkJ^-6L&mJ~2l-iBc_mGjyxRNqsrKMtMDe^*3A#rc0@d z!is@xV2+1ogH5RdhElz^rS$0CR@{3^UkfZkjcwV7BsosjmNxI>J(l|Bgj62a{V^yH z-&B?6wmO$*X-i2f*>o(WlkSw)_8URtBf@TV+|+{y8~<+Wo&t*-wbc9Yq&ChVwKEr~ z5`lLRVK>J!Hikr7V7Uyg$UQ2iv+r3II zY7xWcU%&LjvRN$Jgu8=PHk-SQ&9O!9YbGqjCj2lZJ%9O@#LCjPQq3`@_A5COkE{5} zSoNciuK+Bnitzy1_ppg7)2Gc+6(ue!9Q^L)u&S}?%biBEQxT&o@KYy3M?$dtFRLb) zeNtQqNkRtwGR9%}QN<2n3kMy-l1*c4lF&^Z7Ecl$!XnK5Aywrz?qP0fOeTu_lNhel z{BjCjHJDbsO z7k7pZ{GACZ^N4Eeu2$~57ty-Um28%}7=^TqWYP?fnuB(SYh}L%(n`V4M<>!4!6vfb zjry$J%{J}?v5WhMRi_o&!^H)$I|7}q!1lSN-U6O`33K~xq8XGBB6dM`?9Rr=!e7_E zo}b{YmUP*kfMhIW@Os7IU9D2l$Nm0=1f`5jpgi#AYz(FWmO60E+KHd|bJ_DD(iAqy zc|9S^D*0ie!|VkNwvD64D7!j8w6tk33YVv$hCr{NwJb8XED_|0sGYWv!3P2{x|-MJ zoR;gDSdK-+^WDPDDIIgd;8bejQA_XS@ToZ>70qW|WPXX&cj1KG6Qs@UjcdW>LpRSa(k$DnhI!cq}bXxv6U zj=b0!{@9DxqS^}@GBu59##io;%BhndIW1c|o%MNJ!n+oG6AZ`FhKxBJdJ-+tk{T6r zR0%b#XI09ev)4v;egzuBl92yLPKXg5G%A|D86no#Wqi6UR?4IV>n@`?3FdqgD8S7T9vE?*JtjK;M_m((HJ z=R-{TNDdT413u)XzDqnKyT}?0nryE{C4_i6evTSSP&l$3)fcwZO5aC6XW!=N-lEf{8H^n!T zs>zQaHss>dy|sQ-t348)CuwC}D2ITT<}|+7x9m)>7v+E+-nHjXa$#ZY1HN$alVbx~)XCbdn?Q=0TD5J& zRcd7Ie3^U<##H2V=-lz#HW4~q?dm4P8J0DhcI{8dF6YwTxi~h1`Y-}1lts4K8`T2;qZ4=(`Ko)r+AM(10-rD{d)7U z-#>8U5=34ZyAnwddBd;1o=eOOR}ql)>usG8&=dR^8uf>xaqsQ}V+cfxat0~8*lT{L zr@wgZ%R`Cwv8}oVrHDu>Q_o#avFdo4tzR_BkMJQvYbgS96vjqoEM%w!IXhCHx>_7h zfIHy%91tPo+YU;?{h&Bt$%u$?X#v02_efmEU8kQSvX3EJNjMt+hE1;~VgJ_8LfmGY3Kbo)vk!#X2PC{TgF1V2TxIILXREe3Px??Q1AoSy3DD z45tG%n8uL|XBaPKeuU-HSDB2c*G@0k5Xf$04({n-QKz8c5--8XrMew zwjx_vcs^iKu_E)m8kTf+3LU6$OH3&pvsKUi^qjrRogX%D^CX9YlMT$po2^imQ)^uw ze&s;D`e|R*^YgI7UeziJ*r%Jh8y{y!I$c&P*@r%JgcEPqFxf2~In??-SD&{(WR{;! z>fKH$xfqQnOCwcHio99ZBJekX*baomnV{;S8E9B=3=S{uTH$$B=z~@y;;lxSb~SJr zi)}!0**BaoNj{XSHj@~&C-Fy6>XjFBoY&6l*QY~rpczC6hbuLB`ccv@D1}1+7L?g# zq24D4MT=AClLG*OzoqZK8QZ&2{D2$&CkR7qim5E+z-5GZ2W1|y>b_b_U41=Qb3dSa*=kXGys$-yKi-A@%I;Ou4qsq!JbE61N}wBsRv?p1o=}yS;(loFZSMaRP-SZA2nnu_UsmNyq7$Iy*+>j~#EuhXJn$Ad z;quh>e!=*&!ydvacu-~!YhGzrz3ej__AUAAY*m}<>d_)Tf*!GiWk%^*i>ZHTGeD z`AQ5~wD;hm(*;yNOM3~M7)G#|!Fxu@bcmIb!H@dZvhdup_%1=RhO*xdknYqf&OM0p z`nqfUg)*cML%hJE$J!3I|4`w0&LuXcU4HI7a$^-8A{)hQGN^kmC9*yXuEHt;EO~l7 z@C$SVzC<1bOxXzUF>G0SxiIr~vDa9tN1c3gZ~CJt8T;PR;U^`i$I6TB{*HKd=%v2! z)YcmiSJ1(~78iZ1OS^h2llU(@nC_Pbc4K(_yd1E<4w5e)eOmP{kVu)f#0A6dBuIXT z^690Gw^jI4F!aF;@%9RrN+9`DtpTdKn*pL9TG;gCbXA`EMv`0zxfIpRyoKSDCs^pV zr85{cPNfE9`9Q+@ih0Rj1xK7suvWqNJn?x0XlYh+@o+n;DD7n!Y`{I!2_vvt z^Js*1r_};IPV_M%&=GkroWe0YdhSUNxVA(o27z!yI_tRgVpB@j5l6!Qgtb%uK}p&3 z{`C+tUsl+e2Kjp!rSWw@00+%@&oo55%HRZoRFSD_2U#kMMG;w#>X!iBm``+Y$d|t2 z=X4vz5R{sg<8iB99g%YA^jWpO@??D)E`7V30_;A z6k9@{KH(PA2=Yx;k|LcmM1%uCReNsbw;%j!o-ch)p$A*=KHxA|(PUX=5I*3c+x6xS zA7LX94L+A`)GE)0v!7_TVB$!9<@Cr6rf!T(XGwSUPet5gkt9{!b!M)OVS4=>Pu&6!Nn%Bd~FY+eWLwT0KeWdP6E>r z$?O=ie{iJ67RpOim!mULSQDBCw9CH!EwV~XK2I0qh|Q3M8ZzTdERYGNrJo?P{#>lC zR3*D#(@6{3ky%g)7=j?^mF;*Stsj3Gf{)@Oi8mS|~oq>Fa_7_`s1SkP@ zI-9oOa8*i;n#XQBhUnES)K0q9w>7R}2>U!{I)jSqkPX25OmTxOo>txLGUxLz5Fc5hJ)oFh!J?aA+A?!zE<-R*vyF-57{p#Gq;e~NN^sY zQYH6T?BN)jN!D#erDZPRTX%@VljE9J_A9X4YqMVO3YMA@HMU4X1f}}*<5)Yi-NWK9 zT~r8A^0;m{dyWnDW&`|XpE-&!0vH~<6Znd^q;x?(F6L^zuZAQ*QHXD z!=)rcr-=CUfehYax3Zr@_z0al+M`#to498t*fD#sqbfdR@W-Fry{fR*Y{eDiXMHml z9>f5T?I~02vFt{G=bCch8THiRY+Z8wZe*Ub(~mT)5nlC64FB_p_<%DT5Bk!U?WowY zK30<&z%A5&n9Wc7;9k(~Vz)#p~%3CrdGG)Shf+1R(!o3T$vat7t9j z54bQs%8taSz-_7S`<11+6>8!RmhN>X)A9Pqc6+kgWeLfWVWXmL%?~aNgZg7}>J2Rl zVe;(51f|qG$W{}0RNMu;>gUwXW!bQT%Idm|fD(kmn{Qm{?!qTuBF}H&^J*}naCdii`)+35d$YT< zvpe7ZOVhWz@2yj(PSsD!nwvlV?k*eTX?+e!iE{~LmG#6H6RiLbaz<4DNH~UAeEi)d z@D*Awd#(E$(}(@GOO^}{#fhY}0!dv{$U5ihx4kd;k!y>pV>2oAWu13wYBM#A$^z^o zwU_MDO5wL(2V5fu&J?NQ?dN-an-@Y@K4@!>x9U08#^2SBO#5#(X%GA`E7X<b#dKmaFo}Q zjZ@rQv|%H9_+AxMTeDCihShcqG@FcB%HeR5ksa7$@H0WJ066FheQ0E8(aXd-{w&R6 z7lQ&nZRxK}95=V95u5G+_Zs0uFQs^cyW~565(59b{ukiX6!>;koOS)6h%j1xLnnjaw2(^s@oMq+QTazlPA(fZft7`?+DpI2Hr1#BVhw zs^x~v4^K_BpMqIb;0##iE9jqe4$(}y-jvWDTnj|rlviH2K}h;N{IHkcIHWzf*f_#n zfQrPdH1uNtsr&l$KWrDA%AXVZ$8t2UKQ~?`XFexRVG!}bK!?<`Agcuyjnfl-3J|3Nk4WcoXRTN`u^}li( z8xTd{b2l-rrQNCY_oK&lm01vAqkX(N;R&29=nQ#NJb!eM)g>~$0lDP1wCUeNW#*#+ zi&myh_yGn(g=^f$hN=&CdG4!W>_#(`&qe#m2WnPcnK9XfO6|iiuVL@s3ZGeoFS%>% z(LSXs+Ot{>awLSp-w3swpyIv3=V%Z?*W=39_!OT~yK;suYnv6hNM zh9J!2pzxmcZq)py;Z)eb*ZW0_cpI|bpJIr9=*{)6|LzhUOOvf&#Hg&_Ek2(-fS-({^y1k1cOtb>0Oex(6EL46@O@(auZ z!c$h-TW=7Wa0Nz$5dWrQ#F>?6t=BT5`OZrZ7Py%H0X5p&G#au_4H*@cyW6}=eNK~} zkaNt@lusoE)FtiU62O#d-h9@`;Tq+np+d!UiR1_)psq~^bKy(+lb^G(rC@n=FLZST z%Tt1*wMz^~b?9_0BLT|u9*5w!%b*T1aq_I_gHKp0F~7RK#xudndl*apmHi%u&iMzJ;nLTG95b9VIs zLku=Yve#0+jeAHNKaxOXh^13zQU5iAmAL|J~e81A_spu^GuufJAPLs@8hHr)f z(N7F22-@R#`9iI~%MMQo_#qfd&<@Q%Blp+i6SN;-EWp=KP3bl)J6+%}VOtm#V=Qxc zn6t1y;w%b34M+b&H}#UG{m1*%yg)7 z??|7Wr11HCtR`?;g>o3N&yzkra=4Zkn;I@+L)Y+Cv zWBNYCiGQTJQ2saKvA3$sM#Xpqb5(t-AphnlE3nH18Mk$Wrk`m+cvQ>yM$Vm36dKt- z*fC!zGzcG{iTeW>=z6bI1`^KMHl4G{LZlL155yh-I*TG=;_VbIQ|Op>7SCwRverXm zo2OS=6@y3f-PYI+8y*+@G+*{nAVm78SsYQUU%J2gV9bB6Gu3=V;3ToT=O9gP+w?<*={mO+>Sg-jk|KtyM6?~ zaoZ)jzvCW)(e4=0SU#a+@p4kXMwx?+_n1a%_e(u|0UBZ`iuwf#UlA_7@igT=e?&)dVfO>x9X zx;?kY_`kwRF9;CneBtr6B+yuxGMTMvHQe5lO5U@sxkYLv>N*6d(l3Hw)X7Wc)nrmCcPkrejKC+)!55yX{m0`VyG-XY7mn52qNPDaGJA zn%S4f@(&p-DSG_Kl{X5Tn{h1bT{6xaS&qM-I~(l+zR7xoXG%tOQ$Oo8EhVp=9b3?< zuMtn+*1sbU?z>6;@DcMw6r&eeEA*8rslloZxZ5IE%LG`=1jj}bwbhkA^Ug3O151sz zB45)OdLu5M%(jmvwhLx9iV(zNG!EV-KzC%eL6jQhERxol4(zCu5du zQH-PL7~7#Hj8YZMKuEVl!F3?|sTlcclUfCts1LtiYMF z6-Wu?#tiRiWfjknSZ=Ou=)r;9J3$bv2BM0lJ*rmtGg96B=XVBg29haafW_v`!M%Am zB<}oi)0!o`O72}nGE=6Jk!o)@q{_Fq4O#G(!6xk%=0CSlH(hgFLPO!`F|^tbu&LvP zgs(W)MsZwykUa`SZ|uUg^U9mf^h*&elG31e;8c9a!Ha3}3p$sXN)|eNps6w3Z?|9V z5X&Q+B6_J37iAGkb#%U<$XAHL&x9^PmkhU#=zoJcV;_BvlBNIB;VNhKO7=(781WGi z5nSwuib<^Uk96{0@Qo7k6)|=by+;PU&{vpo(x6ILeBA2Wp$fL8Th&%v0?0G}QX0ZN zh`pGCQA)g--u7@5#-%QoaXqCO9o=^!SgP6-_(eV9ttGi6^D#Kgr)|&gPDi~cdo?Ri zI_uvKzmx@Oy-(I$V?kQbi}ZAk0&g{itQdOFwcaam`!y*TBJl?r^{Dpk$JnZyp@1jD zQK~_)A@&t17eHnEVI$_&oWsuA5<2BJgWmo-e6N1MnbByK?vm`9)^bw2IhY&$Yn?Gg zij`$1YRiIRNcEXvSqH@MuT~zU2{55v#hc=0{|^ba&gky4N|>g2r-qk#tA(>)H2^Ol zRw@y4v`4#V&13DJ@HI8FiQ8Y}D9thr{88^UEvMSW?czIC@6q_Ie7&yTw4DmGon)KY zC#Fb-29I%X5)}suxfu@5h_~8dUK2JJSYof^GGq;st8CejSaq$DlYRM47yYf6to9Li z0iy-qIqa~8slj>^4Wg<+H}D28{K3*p>k6_@X}ywYg&df~3Hi^P2U49Y7`=5a zppJDA?%1Gxz%YVcg@VkZa42F|jTpDil|=fo#5xAUZ@&N5{Zp(ZNr(_J;r_1fkoEe6 z;*kSwDIsEmcy-+AkT{p!HMjCCpCC-DjlX7*Y>y)1U z;^4Em|EWZsDLAhZx_2rfozf!oT!pJ{VpJ^*Yn_ktfai*(vD0F|f65d*?{aq=>lw$) zBa$FxrDu#v1tgmWVCW&tF%LeV;*b*?-)E0ci`8?)2@xz2$+k|5WN}fGIU?}Y$Z#VB zt=N`%Xgg0!e*?-?8d2K3H0TF4MCAmTO7I-NHX=)=~p7+P2u&3S}be25_b8Wb4)GfW20!BVRqwK!P6|3Q2dvnSK^t~-zbsIs$?j9@W zu&;amoUVfTh=pfoZBZLGzU}V}PMy$zLbbh3i@V8HY~W>inwP8?$AO9{x@O{V9{e*{ z^ny_hmMOfT1&1hQziq7*$s$>209^^2E2!X{Q{508R^{Xqj5aioVLLS_;_KQAZ=$GBV~))&eX_aJ9W1Awlc9aGraWNG9p!ksW6~*rM=e&F@}4-r`OFgH9}=Q2k}X%_ z7BZhv59^iWnZwJ_XtWBpNz!DSsA>6VPxi1i6b`Z-k3y<8FeTAq=elbp2w!D&n8B2y zCKF5b8&D`XI=Ed38$JBIu~_9^r?K2#S7CBYDg+N8EmsD^3qHT&*shdt+FrOe8OJ*} z<$L@N@r&~)8V1}3>VOLEJr2Z9-g-4o6L|{~lRetAL>mE7p;|`Apd=frBF;Q=Sg|FR zMLB?{JGqcnqvCV%CU^<;d4V-3Ku^4GdEsIo4+P^f_dKmJ&M$cg#av3!KJQOTEUYF; z{N=q|(0l5!o9;g7o>0B~)Se@-n^A~UC*|vjvw8H>q<|`rNM`RFo7+{riwN{*Hk=fQ z-2Uz2Sy`?X|A^B`pmu8o&K=69=XUNZody892O2A?Pu|J#_Oha<3{sM@Ypz>1zC_YtaE6*xjUv(JLOQ#f&hzW_-|P_c3FVh5Fc zhKwNz?HW3GQPGrzl1iu7QT3yQ>VWcjr~g!{`vlJ`B{K8^>9GF}jf$aLOP+19-s?Ng zTf6J!PF0cxU8vT#qCyS>`lu=n08z5{rEG&+W2dm@r zX=`5Zj~@|6*b4$_@JyS|el)Trk;_iF^``~kFvGe8+Yft$m_|%!xMnMd! z1;R=vV0uX-Ox5u>cAOId(wT&8j;6BSsO2TEba&tzy5K?~Da|?1CSa)MlyV!h2>_;x z8yPB6+q9wfz|^Asq#YgFv=K!eAiy$+tad%_PAtjq*NnJnADKIJQ?PLS3qPUuTehJL zO$m^K^FhDyoJLT|iuR7{#YfCE?;k+fbPh?Vws{~m7>!ML&mvP2-!|Y(TI?guYLM4q zVS#q)`vsOfG=nJ&kbwb_^H?D$6(T;TBgS??B+?)Tg5EMl>QFBI?djs9T@9*Q?Rk(P z%~*QV54W<@P3Ys*Ny7=6l~TCL>dz)CoK1YO=fRy`ZdsAKYcYg|AI>Y+zu){feMDqzuC zQLjylo}+0?j)N_H`xZLp;Z8bsQ1tdI>8y62C80$dU$__HX8FM6H^R*unA2#69qHZ4 zWu&H<$XYKaFw{={OoI|p%)V{^3+eWF&b5607>No*Saig>B#*OS4D9YV*t1dZVYKef zzVtLP$?Rs8%=KL#Vx)le5CdlLNRr$AW91h2NuS+6|*k`^iX4{w#VQoU{vmA8S zb#Im;Dwv~k`lNq62S!$=j$&O%hu|hQfE1TK;N0|k)77T)r_*vNAEjC_0&3Mp1+c3c%#-$OMjHw+4;fY zson8B3mAr9)dz{6chk^r55){A8QCZ6?1P>9F%o}_34y6Rq_yn%-NsA!0*kf|h@oT+ zcR^l!A+Lcmj#$?`LTUo@x_%Euty;3$9LG>UxGK+YVaqbH1R*iqiC&`ZbyeV4J(^sX z_?+9P7_6uA*?XuUC=}97lV#mSrNj#C*~R|TWN)TMVx2J?4!fJAyT}VR&r=Tq&NW#9 zf!{KcTjm4w)d%C(NXVMQLixN6q0N9II4lkwN`tZJugAGln{rbh$n#~Cehd*TW#}gG zco2;>((v<-OwA)&$Vc|FXqid^sLuI)@EnaDnx{lY_s<=vckU+w<1D}V8>C~2QWaa* zCu-%3PfbMPZbrtpX8{hEh$xJ|xX~zLrMJa)SMOYaeR8G?@IWhkz?^zyernMTFp+Rj z^zvAi{q?Th9Da)vgogj zYnJEm(4d{$r3{FlqTW}Grs#NQIi$CC(JUG5(rI(AGUf{4kS^cEDYeouT_f&K9#xRx$85-~2)ZKiNp?ftlrjyQiy{ef2};Gx26=wX|EI*C;Urd)|5T{?}s zpx1~#1TRCZ^6s5cMNbv9ydkA70jd}x)iZjmudB19Rk(&)8mIerhl|lm09{vThwl-J zcTP)VI5b54E^yY23-k@feNE4TiG^t%PLHa-B&pY(L{ya~`LliklQa!`A`M-4hz;xT zDq*iwowIs%RG&6RhITV-g7vu*ry**!9t!h!Js(t2jJ=e)OInvmcj3#qH-qk>(%wwH zvQROABFi@SIRH~#=)LsT;H>Sf$BLKzRSp2y#>-C(!O0%(%$D-?PS(aYKd8WTVSE^j zT;lvLI+$w>rCva@WhvXhB8WGt$ND6tf5G0(x*~&qhsSiB1>Y32i$|qYUQn09Vt;>} zNI_S;3HKcKR!=LuA(D>ixoWg6DQDg#(4|6W=<~^H1OJ!rdK{sTlQ!x>$YcuQ#<6ig2O`$(j+>!Qt;X%c zbKhomj2QztQH*BRuQG+Q8Xw3_qH0@aPVL$>7T*>i0deovk4e?x8|Xy6^38hs6;Nvh zFl345iP*lZG{p}+*ZztWY>x;jV>Api@n#59!g;jLiw2igrAjW&US=#2N8d1N)9BbI(_2DDN*S; zO1JzaXn6kD&8l`bV*gtrkBrREyv+*5n6q)LMHxT~d)&Mv$yz~w@Xe({D32-AIRS2j z7;ZH#iR0)IrRz#)6xX#@qKMtSv)4oXU>xnJZCgx{v|v*J^T(1jw&0|5&UEiMvHG2k z2MP9*MV-p)PYIVIr!^I&eJcBhzee?9kRDvkzswKQcPB(= zVW;cP$O|#jJWh+BMS9#t?js&CrY@I`07q*`*dGaWT8e%*(mcjO(^Sebo5Fp&Eze;t zjgGH6xR=Md+5VT8iKm2WhUrBM-nwRNGqPvPa9CWLVJHli{I13|)CFC>exVGbA1x99 z7sQdvvigG*o7CBZGs7V?J!(X=@Qd%rkv{YVz4f^6!4{BqsWzy8LpBHjEa)5DwmI|r zMtbv^kYN89x3`!tdIh=kvmf5IRY&koX#rK?8B4Y!3)$E}-YyPU`YMI4EH-Y5z(k&% z`Hliaq$hxoX#WI`Uhc2vUvGQcDra`rcP$_Mai&F3Jem0$cHyoD*ONmE-E=nXi5}VZ z8^bfx)$I@!g6rAXj|wF+d?u?WL?0j=h$2$%BIJDbSSJAzOB_{fzKf*zCt6xFUAgWO zXISS8M_G!TkPj67N^m~L?G@u!eH9*@g<_dGP+D7?w>rC@hY?tGV$$f1nj+$+fZ?ct z(3qMD|1(c5?ppn#l!%W%%w4&^jrHCSYw^mW(|sben%3tHdCH?q*3U8J;`P z3Zj#cmTh9@txsQ$Ki%y=mQ#G9j`cXW3?b}z8f+S7$nxWV2YcJQ9Lv{yCleQUK24RN zEY3z9?=1rkMha-T$ipTBMAMRuUP2*TCAm-fx`Ala+HiPG>FAG+0Vz-0{y5|e+8eDZ z>ptv>`$P^NVVh~ZYG2s`G$?}RghXSM4=4?w(ZFR$+pbQE(B>-MFc|b=7g%?x_Dkcm zDdl1wu|D{cEsf@W>vBPgjZ}H_yjf0BGAX|1mzFmkpEAq(pVij~Sd?G4$f_ zbaQ@t7~){Q(D%G*+m@WK?XIj?PQ`c6>k1#Pp~@)Fq!}Mt?mHUQ{lu8|xqExX>Xf7J zuB-)MVVkdfIGq*Rd(YyF0ayHYD9a zrY7Qd!o8Ss4;f;DJ||g2qIcI-Nm;!t%Y`C5Y8;ywxQ6DB&sS5R#w1H5Yi)uZX-yfm zo?O~3oK;Vno5~}+HIZs(B-{{vA~u|4UT>p{!c3lT zuz4_&7>76Tq|QUduBR02y@gJkjva zzvpw6^ zl7%tSzFAhzkZa9cvRJ`5M|;?&Ydy?&%gw>FAp`b!018WTxFYcVw({9G)$G;z#&~MY zV~N~w$P^bvB8#|31)_Tu*p`Z0Va&-EzA3LJ&Q}f$zoJn>@C;%`$Mj(N5y+y6Ue-@a(ABkZPv@+Z^fikU46H&3;3OQ|} z6tdTHfCa!fY~`-21htjl86>S=YVBH=!kR8GZ&#Aq9CH%)QF=o&a(51#;5TK5p~vwo z^$sH}+s0!T5+<8T|l{nuJ}IqpL~#ys})UEYuXS8aR*(xkiM&6=j)uYJFG@ zK$__)xw5~TA-iySKZw3*0QEV*`wgUoT)3%uJx|JPB$3GaDIGiwF_x>Qe1pal1R=i+1|IL5u6)shy;=K zJ*W3Ag}u~I5s0GctBmofTpS=>Ebnf$+=@w*GNy|DG(YtD5g3QhH@KfT!Mz1}Ji{D` zi8pa7RVlK{MP|nr-5MnDNP}f&bd`+{rYPblq#V~vm%6|y1__*l^=Zj|Ds6Oic7&y{ zKqj6-@4w@Nj^|uj&+BUB(Cq*i%ui7eCXB9FM5A7k_NxP8f2lO@^d?1c5=~DSP{`$ z%2|~;SlKtNTa9IaGi)vYQ53NHIu)SWvf>A`1`F=q%!3gPX#N0*E_&xD|MCutf`-G*#*&{ZVIZ z8bb^KI5-?1Vi`UfD4$Nx zwiE`)$mEp12^x$6h%%f#dd+xA&M^Ij6%*q(T{FGp(+x=t$#vTw)(vQBdBLFhX+I;g z62&$;4I3qtUO{ua7N!L9!ua`5tUtT5!WlSF@0+*s&h1Z_BEmg2FrnlVs@mEnlcS@T zhCgcv>N$S2T|<4sX*`T+!FgP4=@;Som7!-A+EB!CUfaCX6XXi4vcTCvjCr$Hf2Y#G zd7vGyk=|tGU1cz8R@c#auA%h6j)+660i%S)3ND{-$AK;~*JaiK+EPFyQ-@YZ_gpUI z7&Drn^l522FDzztv&NYT(7ErIbTzAeUy@H%wDB_;9{O)mC%k6D_)9AeW~1J@8h;Aw z1o}g@Pf@+N(a6;BNCXAD=}d$ytI86n1d7E`=8a{4|F#P%nR1W!`NS)`FP5pmqRMK8 zjw^0r9@VA6x&-(kLpQ;R4|r^)sUe(QHE+6W6zKHyNV=46NwmSvd_F_}%0LOqT=I<9 z1t31)*h-SaFiW9#;wAAkE2aPnDy)}rd=@*xSZ^sx1iMQO2(B+@Y{ zUX3brXh_on*q>Set?xoE4F#{W-i7d&rJv`&+I&DSbCuUT*$6q}QmL^K!sT0%{R(6| zAevfVEJ|xGqk0ymFAWz3Hd*#5X^XcF0KEA@%R?hWn9>7X^>dX+1YJaWY+J7*fOrWV zb7H?WOb4GBm^p5W^A`|NhI()}+%Z{+Pw)sR&||I@hnfJXpEj@5dl#&6w^`;%pWP1u zR@A(2l;2woZCG#{1HmKJn#r2p5ud7^M)jd7I4lqmk6@+a+7pbErK`dfH|cKbLh4bUGi z7Flna9`gG%$TeGJaFIdOgm1Jq&Z5F`0!1P+6gW_I!clh`gh1YNp>I&hhE`VWh@xTXhA_J!V<dcFZcKKrraX*RrX@PwK~PXoM#W38G_gL;}b%4gFteZ{J+H&bdHy5nMkD$+7lx`iTUCq zQh;I=gVpDcpT@f|!`l#ODg`OMFDm}NVIhL=&y6Sp4C`Z?RE8E?33|rQmA+ygcZgtA z*S`YF!)kwMo3C}vSWYyAB*ZqQQGaBT89n-%bNsy03Pp?_y2wALF%u$;|Ls~>kKOJL zqZ|n&11M)uNS|Pj2lJJh#Kkg0BbG5$83?GDSnYC8EHZ|N@9H1n;gAn;WW#t9`d^^D z2>zveriG74<{F`OG>3?uKXM_|JSL0%er%IoDbP<&WsfLZ1mT{}uk$Xj4XLGxTf{l8 zBvI%M45RVDMmJoYa13ppD^IN9X54RmIbOT-1u2NGw5D6=eAnmAhr(rPGck6#i4w6* zQ7$@!KQKxEL4xSd+xySjRAWrw))~9QVk>`r%ReLapVhhk+kfFC!UrLbVTeKff4=XJ zi=~?az^My$^m6?#f2Pd8gtz|N&-<@`9D}-Zg-32ceDUyzC6?{%7uuMf)Un&V(SU)4 zy*&8lEc$=CtT#G@H#t#cu4u9!x0y;>Fr)!lq-eVT5`wd+sRK^tIjqv;GbF(nA@s$U z|J(1@^9dk9&mw86S}Z6g_coD?4LXSU9WoI&mXFmi`g`@D@88R=I34s0wOH+y>iI?qgOrM#}6u)ZJu&9Dg_bP5!IP z7x4d|p!{+yi%IVM!qSgN0r;_do%I@|bxkO0WlKC@I0zE)32$)}*Zg4YMtv7x}axarBY7df2 zcb6_YlJh+|p&}w8ZlAhDX<8-F{5+obj0C1w{}A};Wn*OYJhx$YegOELfK%39T6}p_ zTZWdOt07$~w{5uLsD`M~m{w+H>U^Pd%=h1HiGm0%m{xvois+cOw)aeF;Kb;E8+iRM z3&9&B*eh{6Fbjfc0Qq;b>UVHpBi)sZJYL=*>E0A=vR#gel%WeNd zsM9+!sGW%@@>8i&{6Rd8xJ2Di)+dS>`KElj@rJcxyN##q#Gu&RKNwQHh*sXb#(R3n zO~w@F`u-31mkHz~O{V}}JVev-0ft06S%J$wy7cqY`RynB7YH>ZJ`9x%43=}e+9^bF z|BGFNI{fmv7BDp29a>G{fN*R*M|?1aTwYC>!L&)*&}qCt+woxL8lzPYcBd`Y7})Q_@#ftfWW#~AyLs*qTpG9NmX|ZzCJ7$ZsXqpoe zs@Vy{-s>fQ3A@V~n!#8Cu9kaMyw*Aws&t*X>f>yP?_k>Lkz3IaXuH%~%E zN|o5tB}!rt5Z^%SO67~)=bE|1K`8RxZhTj0eJPyIj5s)H>vulo>Xpw9oI&V_(p&+D z07*LQ5kXxINi2yF!eA(RfB`1sg?9M5OLoR`MSKLa^~h;{;?y3Ch3beG*E{pe?pR97 zjQQMAEU(X_f%u1_j_40H29LB4h4QZA38Z0!r20eAQStQ7Z!Ls*@x@YEk+w&Z z!r-yF`I~NWDu^PNw5tRoxCQnYQ7|$~jM|t#1(k|6tqbABWG7?Z6lU*gqA&*@y+1kBB8aud7ArI}t z_}ws-Oqy7n;IO*GSZHvi`#=$^)u7L2zk^-6Ua@+@#oN;4Ax)7UDJmTCsMe5B$+c$% zK14zUd7TY92mis*zACDBEM zY5R`NxO(DH>C__`mWS=lA>*hNmlWw6{#G&n@0%S1l(#WSHg!1uYh1`q!BwH0 z+)}+Yg;?j^Q-aqG4v#>e^K6AwW&nd~-0j&T5>@(NWuNz+pmxW^hrtKI$67qO0bL=p z^6xz%zwr?ao?r6Awd&+^{T}R#sKA5ZK@zy7$t+nwX+3%J40&Z>pUQfy)%bS`pupE8 zw>RF3kzcqT3T;``A?#PDd0cPsvV*t97fY+ zK7_a8+pVmr{qy6E`Tl5H)4|d_4;UC&Z0vFuFE25)wSbS*aQFOPyggQ(oaU$_GAX4q z)vV=`LIkOy1hX)o#}(J6y}RZQUT%Arvoi*QNMo5T@_(o<{OhINZS{Lm+XOhWNNXZn z)Ow6nPF`&`Nqw7BKBc_qFKxR0wl?K_<>iPK@>d~U3E@4W<|qps5gfLVa&gLJ4rUAa z{BC`gF0-4}Yz6>&a(>=dXy!(ct!qYHvYDH?D6!bN6 zx#jLL!0~>6B0n4WRpb(+h4XTvRr+EI&AzVomA1^_7w=x4HXmf4?#_<^3h3(F&c1Li z*ZpmFX7ep1cRX6fvpPWR5zAX}wTr=ZretcpI)VaUlXG#~>&;`97`@srl~zM8jb^(f zUQ~a36wg{g@H%$Y(Q2$@K2V%wSgrHtBAO1HUGw?V%R6%9Sm3%nY2o=JJTv*AnSakF< zPDOkny^C$dzaAt1T4#@hLh}z>bONhcaJD`jo8A8W(UB+HbvgPD<}dpj(lp6?yW;1} zBH#mSNS@@kOzfeXl}5Ypu|#TU_6_z!v&O&5+a~LSUgsdF22a$vO)qgtBqQ5T8Vm3$ zg27?&lb9BoSjWcL5-&V(86R zT&y|Rh3PM?%?(#M2Z?}gsCWi#=`wSq)LL|&L^+?s>@|Xl4A?z5C)h!YYg1%p{XX7SZ7?9%(&$#;DSU7J+CenPFG}I7h;6A^w0ytRpeHTUd5Ss^-4Mpe zw%XQj|5fnM8ufoJQgk7~$3l6*oxW(jSMpTK?1W#%Td|OYu+>+Jz~Qt{Z;VLcBQRsv z`s-?e79hD?$u9t5&*otPOM1x@lrQ?S%D>wRRhottX0mfF z3}^T2j0lB-f4M$z669+tePQxSKOP1w0Q!c}woQ%Ow%7EFa+}q+;O{T8wkL0Jt_#`o zrEt>Q%sFmkmQ|svAOdyg_vP(~iMa-3g=3?pS9g<06`VqP6C zB{x!3<}+6ofqBbPs$R`EJ?X(?Uqke3j~6g)&IZ~ZvXkGhr}F?++M3s2NG3BC>F^s@ zP!}@!lA|<}tnR$DFn?!d{gt@?N+18}>9sQn;S+j;7Oi#AxEV$C;@_X=il_TMxLxF* zmnrWa-s0wKh)5UNop5_3AH-1=y_^Ja=GM8sk4W@rhS>MQn9!rlSeKsXDK8(8{rj>6 zgb*_4i?5U30PZrt0kU+(SiGUyC}+rQT<4*r!4B~CdDyx9{5cevOkA`gzEXeQL_C(B zAWt$q7L7(th-J7O-qzO4@!}`rJ7bgSY>GH?b(x09uXW$3G#YHeY-WS^49P@hsB5h5O}^}k z5038Q!+WJ#9Snbc&{OgB@O;ya5#9X48ksOx{Vu5$QqCw z21_c`otF#eGjGGIGN@N`JdsJBN~g)3!;MDy_gV%{`B3#U?B0U9sKsqzV;iX%Z7!Fe z?J=2p&cpLor-MIa2K!&ioo61EG~-itbNHg0uSgX;oa9u<2oS;*96+?bm{Uw6tNal! z&O&c!B^#g5K7>8GV!~m6R;8GUQdS|_Z{Ld2m7Jg#Pq|f{0Oq?^cZHN@z@ep(yD2lN z&gml@?m5TvL{l-0rf=L0!U<0%#p`I^+ninsIWa)Lcn|R48IP3J`?fU)EzVX>lZ3Il ze!{7f4MKe&kL{Iu3J?yER5&LrEpJwsEbIx+my84(*XxW;3T|FIJ(Y&I+|9Z%=K*Sj zW-8AW{NKV0m_yD77ng6YT_Uxuo)5>kvty;HE4=LJt>!F0!x9=LfxsDIh`CWjh2amr z?WS*UI;u_NeyfI3VmzasxbGo5t?o&<9yEC;O3lS#FEh3~7$w!P^R)|2mDa}Pw?elf zRb0+#(@j>rbtg?dKE5btTHAB#i?%7Qyy38{=Yvbb1W7Ch{s$e@S0<;eQ@fob=S8*e z5%=W6g#s4El#nzLBQ&agxum zaaJ8B#!-o)h$LI04BupexZKYA&1^#f$T=waqY4Js)34li;&$U>CmdEPX*&Z+0$R~I z|0!eq%cBBNOm66(o`>N4+yJM7l>EA5r8lrSvJm&fr1I&?dUbq;#-lz6eZTX|;g{1- z`A_qV6vhZ?+|oQ@X?z3`xa?An6U5N_x0Zk**GrPLsUvPpI&SloHO4EJxQ^LEI{!Tv zg23HV)&thL;5d5M(AVf)JrJ+v1CQ%07_QLtPXq$!EEHrHSdy!i5IZ3xBoMXA8(4=* zWd&4OZX~P&O93GTM83S==2?C#0{l>sejxBy=hGbvLl!kdhnUEIwy~I_SPsXNX4~D` z%XHgz?ZK}2>qxn*kEK1+(D!6OH64${isPuM5fkYo=9~w))FaMQUt$xaov54<}_4F zV=A@bd6n&X;#98hPAGnke4^3WJ;AJgh1RX`>2w>cc2Wb;I+__H_o|MMP+4#J#m5Q5 zR|J>xX8YE4HUYcIyqBYo`SMLO4;9b1ayE=YmyexI0FRBwDk7Eo>;McrqRwUmCnv&Y zd!T#zlB9q*#YH(tEP=IqjN&F*Zl!oP1+OnO$3CU@*DMitrZ&7U@qdtN`|r1lzdw97 zJg{3_(K5Yx*y@xAC3~W;6k4H5r*jgI;ptTgJB(Bn-$Ty_w)=S4wWMjPaK8s_OGarDc^_vK-~_C z1J|7VD)z=EKrx5|UAlUg&T!NSMsclzzKqzfC0)VJc2x1<(Ea_o&v4*5PKsCt9cxCC zKDGmeUy)+?Su$E;`D#rZVC^Q>Poy~>4f>yc)}OEOj`FoLdkbQ%JvbXuBw^hNZNU59~y}mwg=hzS?oT)#6{ON9cSJJ;{e73**-%Awgo*+&X(V7A{ zjW0a60v8bSL+nxPED3E80zMQBZ2lXx#PqA1m^eJP@v7&{D`f(PyR@XN$f8fwmhZ-h zMoAn-SMQsT{?SY4ttCJl-VD7lS2bLG-V!cD`k~zP{Sd`Q;U9PYAH#ruo*vkI0#An~ zZgo1MkETp5iwNS79&@{qXUG4tyH1d+pu&K8KkWOdUQ3$YhBBW0bD`9vl11+7F7@TA zZ(ztHMRXu-RPp6QYOz)>`X8G1|MRirpS}uy0uka`<&!WY6tZF03*gzd7t&@}l)_x7 z=)Y6CD2#$uQuBcc>%_82cENM^ku7x#$8tAqa;Wv+yVw7<{9{7|8v~ZEyf@1c8}FSh zh4Y0>xx>g0ft-cd?ktO)l6i4h77NED1^9ojeEjFlz)7UN8WQ<**2pzjEqNw~8%Oom z%nu?v#v5#|@f@bH;q zF102IOKXXCZ&N%^Jzw>{;K5|$}-BP)_vc;-ESH_;i zY71lJ1q6iLU>w!ezTZBoC&PHT+qUk%SIhm^Pqa_~RRMk8kN9}(&fotZUvJqJR~K#T z26uP21b2cv1PKlyxD(u63wI}Ya0u@1?(V_ey|5~rTkk$+-w*f0{RP$9s*FGM&QIrGi^y=BTOhcA1AZe!AzNy=j~`0%y(v z)WF~>6wd7jY?WU7O{>)`d9n*0)@H2)e3@*`YCf()o ztsgP!DDsn5_ty3cNsTg7G;7q-t=_^R??EB&(%mW9)Bh_BITJu4n6kyaU~bhajuf3W z`?&HO30P@WWV?-!k&(wkHY&}q2t49){O1$}T9^2gV-N#tv3remSQT8uCNzImhCqrP|}!7 zqLCsOTgCO;&*Rn={L`-NgKm{f`;kL+C-YCb&W{TTGd+hxZhUvxM00^XYwh&`8&2-$3IiknRExeD-|MgG| znsXt{vpgKKYpax0GIL`S6Uc+Mt+L(WLrgU~Z|CsF34GZ}QY}Z#1>B>jFsf3^Pwcb0 zG_s+12?c--Co{Adu?(`>x8@@ubJNo+?3$56QZuqnMFv zY&YZEn6^g9a#mDq^giC2ka~#*nz!35j4*jKW^4G{!Ie{8U>HixE*f6ImsEeA*B z`>O@xGM z%O#QHRVmtJwYr#Va`4BdVQ-U`R=?n~12j9m>2tc1PxD_@K%c%m|C%x&6SsQ1i6iA^ z^YhqAUB`*j*anO_G z>y%RU3^gn^>z9hG{7F>AQAsE-=ttgw^LT&WO8tsdf1=j5_U$CL`N1)+lk2jE#qH#b zJIkw}qDE6NIiqH=Yn%c7(63JKrg8Nz)Gl~)_Icx~;i7M6K2gFxan{QblOX5AV^9eo zGj*}q4P~4HTOnKv%g2ZH4>PYh96WwHME?8M;%X}o`9NwsXFzGaydirBV+7j;I!hJx zdvufPSV7P*Wr#R3f4IwYtpIB+qHogc83`^H%etj6cDz5P&X!7%lO&_U@h4P@Dan@& z1X2miE2?U z$GcbkSqLg(O2)=QDal}=v`788Ac?9}%Xq%;)Mp9PC|A!ZS1%Xyx;rX@SOLm11I_qbzVDg2+8l$_6Obf&lpoXN!oq(HAs@bu6A&OE44~6sG+E9^Amh{T zc=)~l0-itil&Oz7wpY0z_}7o6+H9sYq2e$&STDs0u=8IZlr6+KV2T^(;0$fow-4l@ z$3sk~w$j;-+H1A zk<^lUGdb;P41xgJ7Na?5WDCympX7z-JuK_)s;6pSN~M4OjDPwAFzl_hJ2!VdSoyw` z%I&bhF4>(SycO{Kwkn_ENBp|O&$|v(-bphAu@I;*LHFxIVC|kCR=D$Op%3#_rB^gA zKdfDwV8+PyRBL3?5_mm$Y(DmEdAH3{Dz}Hk1Dv=|gf)8UG8?0ud?Twdxx~5k1x(u4 z>GXDFrw&=fy@fye3D@)c&-mwlwo?TK=6JI8AE-WFxqM~M;V+%HAa-b~ zJRBSx8{n%qWD+SG`G9VTzqjg$g19N# z{;%b!7YmAjT-FuZ@=Ppi*2GUVFe5S)IYb3YqnwVm=&za4yZ1U=MpCyr$NHX+#BW8a zvRv9tt|*bcOFx0^*Z*o&CRmAEIMpWPxbff#TYU-=|3G&Nq4C{fR+R~FZaw`!b|X7> zd9GUYaE1u+Fsq;h=R#YVPvnH%FHgK?+%Ldju*z9Vg=+$xm=@{F$wH0g;ERK5DT)+3 zGBR{HZGo9j-&0tN85Yv~g-eEFNnPC^0|;=3H$xa*PeInvjZrr)kTjr&tfOHVn~ST? z8UF7l93#1g5txXcLDu8W1{aDbZqLBBUUG~{xwrNvME?wi+JnG;A~fy z!uFQ6Z~!lUqb4EVHhoa@js$HpoXTY2WBN}Dgvx92+rS~uK+vAid<&3L=YKK9Vs=CdS{mSa&%eqNw}`KAFymP-Tley_xrg&O}nat~M4 z5DZhIN&A6$!24d&{UXiVihR_Rq^#Vy*`Kd&Vbq(C>)-;ki(D8XzpN+`Ns_1Ro`>58 z^ZYjZQ=t?*SRPN2paYDt)z1$8<7Y@PTF$9Vx;n;2&3@kH;gF_&oJp1ZQ1z#o%_+qw zDI{dwI9}5Z$;&J}{WL95k#FX>x+Sm2_q@pB@^75R6v={1O;?3bbAb9@^w(<5a7Ip| zn)1E@LR=v4X$JE zFsfI(11BwBZWp(If9nK}CN9*njA|_RX%)>eY%zQ$z3GzdRYtBamo`n?D}}te>c+<{ z?ovH8X2iQTMJr}3hV)n}CTw~9nI7=TSs|Vz1<2f1)uls6L2QwnhR1eGEujYfU050Np|GOK*795HeSfJW-|aeOn?pJJpi9sTO9n*y+GBq zO6EU&CoUcsbr9#3RN|F^r#F?l{-eDztHNxkW2gZVLoy|~2%%kBeI_w63+v51Q#SN3 zs3(5yL+okzrcZP?@~!A9m`b4}Q)m6Wb2~#G{(mME8@-60lnLyNJMn~?35r+O0?t`M zo`EkQd^D^1-)^%BtCT!mU2lNL43UJ*TMwJf2(^_cz(?dlw{UzHJ1fsT`NR+r|7XMv zN5p_r!=g^RxrL`)O}kCSxw_-zXwL+`>a^ZF**ovhn&r#G?hjSi+5po2adhSl>mmW% zPem(gj-xWUj4ij)6Yj14S-sU?TP|0mEKF7p-L&|cY_}q=&fH0u4oN%A6kd&+oOWi7 z4-cUX5Ezr0Bt_o^a*R&jH}>CF5BCkEH2O?tQItiCRl+zO`t}a3U(i9;vl~W3(awJT zN!`&|ynp?&byzo9Y5agIq8}PFKVz%3^67QEt+Ul|uPj-JJ}$j#)JREzJ4m?&VA2eIL=R03Ia&BIZ9sICO#@Z0V~J zlIiuM)jf9DZqoId@_fn|S?b4#iW-X7z9XoUKWTCeVrktC%yXZT^#)#btP~VR3@m&K z?kSm8H>Ou&AASnHQ*EF{I|=mhRukFckwa!$v6$2?txSM{2`=@!B*xXQisC@(iyjbY z&I&!)AG)`I2Wdvja2>P$QvO1+lz?p@0x!JlrMgPB&`4&~79ly(Yj-whN|$WL$}ImI zn{6(E*TAuL@WO>`*SB``6Tkawh<-+(FE{o{Ay=YJFERMN$@y80pKvPJ~`wU{5lRUA~72s^Q``L>Na zfOmFtQYJ&SrP5XvSG`X;QRulo7wA~*c_seKUwsRhPvv`yz zyu{(`z3<1@R|Lp^l~=t5L#vjq&KH95xw5$jBl*5J_Ou787)} zGFJcSV=8BG$Y?JPIqOTW1aw@rF8Ots#(*I;%H7_Hs@xtA!4^lmtNl5qHSFbiB!p#j zbfN9$Z>sx=sZCDFfH7|+i^Bto%6D=sX|CLF`Cw?p$J?W%AXGn|1v3?Ki+kF6r5v$Z zv!$+t>av>x-&@o)G5RpHgj{t*T!fU%9=oNZ%$7lOK)fx8$Lrx)@s*7H7fQd_b6T#U zyuN)r$zny7JB8m4IS6$z?me3)bL$<5W9Ah89K^G(4Mh7y;{n}r%Wb3H)PnSfuV7*S zjo`>#S~N+-{*YjMuMVf=q|e7^oo!%GbS*K(hNl(v@R#z5vFXEe?1m_u3WRlkS+>Is zXE)#dhOqjQYD!|Rd|(E1ZA1&6NQdtiTx;0)$M3@~Fg?TNeUW=1yu*lg;=`+W?A>6t zjy^uKt$2Oa!c-rVww^8`9NlB+sm{@D=;=uEwB%8K1wNfq1XLhagmjBWc6Ew-y*#5R z3vR$rv1qVwt*?-%y*}Nk=ZtVzUei=as~EmZH@&{T7%Kc0?&qe#5FY+a>*@cPDfwi( zRrdp{1YXFIm)qn^E0fbt4b9U|vW8oh0!V#7z@pNdAahk+??I<)aI==bbERL zeyZHj8rcRTf&5^W&we5D2jJ~iKViYT@$~7| zE{MQ=MYmrjU*bMIpw}`|Q72hp9@}QWq_NNIJ7AXn2{uUk*U~tnu*4VNhy9umKNx@w z7wF$Y_CQ0Q1nzFs?>40Z@`qg~lKyV3%QPn(NZNB={uaIoo1}*eAiSxr0kUuh*;`Ni zD10N8WX=~JB!s*mSrbO)6sFwAH*4NkE|RPCbtu}L zecC6;AEb3Uq4$hK+G!dM)RT$1o{}R8_JcKj#u3`0A0fB1?`cXR22;A~BY;d+G9-y4 zDr4TJI@wan;y=XrP|%T&{Fb>_t(Ml%Tmwe<(+fjk4;$irGMwcv+b+dql_Qq;>4#nX z>pU7aeLz1@!v`4#TpSZx*;9voiS{N))%7iJb63G;MIW4ZdhMR22rlXL0nM2ENy8UQ zMZT+?;|ucaGjs-i?s>`w3Z8P0X_EQ7FQMq&oH(%Tv;iZ8hC`FSUfY3^7u;7A-BRQ~ z-51I3*B_g$Zy(YA`W$nVt+xG1aW>ujB@q9laZ3tkgFUn&3Ef#p<@;Gy1xQ~$bn#Lz zP{PrGUoa7{y|Thb?!o$3YC_YQzRVF19dqAsKg;g$46Xc?GG5HF8e%KH=ba&g2l)pG z$L&@$(o&XmzHaQJ6QmejD`?Tl@A~y>)(PYocKUM1w|O`V=7=q==qvCG* zw8xV-7x2hhqgh?R(8&|p#@?yozIziVxX0N4M!Bep8z0Y+>o5b41`KJ<5{5Ei*{Smb zxICN6KmE^0ZPXdow(u0Sr4Kh3j^^8!e;_dV?%4F%l&f-y#$vTG%i4@FbG8%2Elq@Z{h%k5yu#6u-$R&k-36 zx`AY|-R?gR)s_4P zsg5YA#zr`+hY%=F8H9)T{`K8X#Bu!-$)2u~VuG^I`6a3>LHH+Avg*^=IX-L*qMjVe zkg57N)1X`04hN-Q)UX>;;PSZ?o;o$8&sc*|fa4``(AZnqiKRQsGaimGtJ+coqK0pl zW{%SM4KyciyvOaYRA-F7#MS3Z8lQvp`_)Q-Hkcj1^4dPB9w*Nad z+u+4sXeZ4xXSgAzXP20=;dW@HQ5@fSm0$DySSg6Ru%(6Po!$2>9-Xo)AbprHVjJHIj>z2 z%PXri035C6DQ*RGp7N%^Iv*{X%OQ>+Cr59%s}Da;*y`z@O@Q+O-pcGeNl~KCn2DyU zr4-i|Z0LC1ywLH5uvM&`=1Q4kEWWJO#>+6&<4DK{;0opB;zTz{2Ri#Q>;nXzV{W}w z*cJIz665!~dWSqR@pHzIhF@dWDg594$G!g|F!e>_G7kO?toj;GP!@)E2rPBA0)%LKovU^F@d8&wNnF;@uKkJ>u`}YUt=hnMxht3tGpuR2-w-STR4mDhy z-1l9ehSuMp+j{!&p1|I&3w(p*(BIhk?U<>bQ&a2`d^eQ0ChebMXAn45&@{%2^u8Ar zDPRtm6#NHM*wgX#r;!2F;4fqG95aV!1qZbSiRYjB#v^?wXv)cw`ajS4vEsQ+FSo8~ zM(gY4(%u!^J1D5b^c6F*Ne_$z-sca`)&XxrC6_3RDhL0LI9d0HvIaUMx~|r%Hq5Vn z$RQ_K=RGdKVmFql;3gYG6II67Iz|dSE`d$y&w7nJ5Yj|js{-XsSq4Oiig;5vZSG64 z+$+8?Q~HmR7tPYTS$p8PU2Y_9Yi8A747BjyU#2}}dc4vevFORkJa+AMjEzKtQ8Hi~ z(ziEB*n}j3$k1Pmi;&G$<%gZ6*u`~`hwQoS4R7pgRqPw5rDO?&WT2UX#9N{GrBEtI zW9?9rKW2nE0=&T|<0u~uKSxPIT2K96SQe8dRZgW2R&6s7Z`0_!5+j3v=6lSgHYyrf zCeTKr27C`c#r}rmP3q(+z#`qD#=rUEweF*%pt(K9sl-!`E^9&~MT9Lq>MF>|?ZJ(6 zLliv|cxWV9a|jsQnauMeiEYKs)9FF6#-K-=VLN}txh28s&@2DoTgMAxQdkW3sNCw> zhQD$ShbDvl933pMpI5?^%%Tuki!LaybS!9&gQGm|Yq_DOcAP<*bB3e~^A8jtWi%1o zK0-|J9K6iUiqZ20T$Cj;HqP2t=Cuy$gjS{s4hODvjqahlS9_y5#D0mpVl+H)R{|zN z|BrJ+w~FQ}ofV|dlpnEVyoo(ia<8#1M;4Rv6B?C8Gu=;#A{6h{y1&yiIM2UkghJhN z{lItt;IvhDPoxe}el-?~eBVE(7%Ao0!6E%KoIRP<5%HZ?@$xNINfRLOBD7L=&o~Ehh zBpUkHL@>3~asm$5V(<4?oE96M0O8kLwz)=T%w-U;S`a-Vw0JIg3kk+cSC{jpxApvJ zlf+hfTL(DwDO=GM(Q_>Xm;}fyQH?8uvK@{FG&$SA5R`H!eZpy z#HPNu_$Vp0~f1`-KAtaB5Na9PPw99^n-#C^5VB7Ovirl%DX7p!&-6z{U{_~Dhhiv=cGrR_;TruN9v;PRzVhJo=W1Q4-@8c&5YcE z%`Eh}!jC5NR!SQiJ930IB}uLYc3s^iXK`J7m-_&I`=B%oOGfWr1!T8%9{_mToQZ0UXZJ9+ z9S!EVU5m|38ByJTo0?9WxDg9oSqVU_5-6r zL6)0JA5V)F*(M%DHPQ%y69*Ka0RDTqM`=OQ`2SJRdA~y2BYq~vsinI;A$#ZU`Iwme z(zw6FVXaok8G1{t<37R7dVWS`YgXrmaVhM~c?mk2$lW|lc|n5yFoT^oR8U8*FR0uJ z&9XQ|K>RWtv_EHIhri2*&~iIhchh)!<|jdJCWl*+Y^1RxHFE0*?PhKN!!lhlZSW~u z$R(9}{PtTwvgR7 z)Uxp(FdL!$Xg)B_<%_q+qCZl=(co1aC_NqtBZkPK2g4C%6O?egzbxZ^#Dams%%A6K z`)bzk+QZZNZnuCli*CZJYvkh;%x7OMDyBC{3k^^rC>{lS$8FGm7hC7k@R5DESZkZZ zzn1DI5iE8Wt~6B29vlb8yc*R;H3$S%HS7{WNBOb9t(*sla;6jXHQ8t#1baLUqBzhO zgsZmMfXFFd0>0LzAW^EQNkY9d`(#`FJ{sP5L^sNSE23mBH{Pv)L(!#_4_Ea z(5kc{HEKgs#$s71A4^O4u9Xm6kFw>~NJpl%xJ%|Tl#kP<3e3f&C+yAo_r(v7=Y#O5{Ml+iJ`WCv@ZBbP=VyW*SqRs=29kY(q?Ko9_IMKg zJPz%vk?}Lq4A}RgjOY>mvyO)OXUo{vjU*IE50TiW-JGg*6hd#Y@!bJFV3iyp_lpgA zho0xGHz%>ZIX6NC3pTAv<|(7T)es~?9V58cwS@S`9Dha(@n=52UBv@oP(rYj0wSWv zweQ#8evc0r&%o^EMe2jg3oAHSY?jhYL{(U(ak~q%QTh`mV2jZy@^dI23=JfH%X96J zCz)eL=%1mna7NF7YGW~f=eD2icN71%h(fi*lfVF_- zFjUQN_{=IW%7#+9=LEkb{;KZ4L2eOp-VVT(uMmzi>D}ba8&VFE0iG`&Gy57o(F`MW zWQ8xVYs<;TLW(kQ!twI55CN*B22(3`xk_I@aouROEM-{Z z#q8i`kGmo$j2AQWB0rx?_+efbHrne=0g{Uk3BGre91x|i7Ml%llGH`NOwoppcK4j= z17Ca>>SFU;B$@#ruOT%qpZuWOe|!<6(5ou96Dhdk72IN9w{NtF7p2TC%!PA80;JIv z!vVEqTlk;f&HbwuB@e93eIr~U9KXNIK|mHmzZb5a4|Cg_?PZbo+2g5Z4xmaPhtwAy zLeKXynWa~_kRH*GoaxIe6YJ5OFSGHI|8>~iZ2ATjJ+;FldaY0`nOA@P4M|pUA9jRh zM7O>90UKtW!{em5`&6E7Pmf(K7a`vFHE3RX7<+w!N>_xJV6*sp6lfSi(rDJVb$#z1A-3sE3p}ulm6?~PX|os z`xWarOi!5^Yy*VF@+0n1V$c{mxu|5e{ymhgzLOzDp4mi>ADbXu$hEb~2CRp=g}Pdb zKd+k0r0?ACOFvv&YW&WAYx zF0C(K@4~KwY1UJUK8OQ^rfl(v?0!&I`1|&TL+g5%ia9g`p1s*d3T78F4f~tzO!7(s zam^SZj+LQ-8xh=}CZi2}pH;a*Qrf%uKxz_@aW=}nb1MEE}%$4F{3x$tzzedev2+>;1uf(}}h+0H{`h ztnA0Qrl(&5lz6F+6?DbFWkRH{7$DdtwU&WSWvt!c8IDCj%7bT0x;;WN;@vwnhM``8 z#yK_W3qfMr@G~VrF_L!pB#UtPCH-cV0T=?Dwh1O>zGyPRKV*N=YoGKEl<0U{jz+Ex z`Ib&RT6RK+_ix7?UD4@Qy?vhe_>4o_n8gPifTCBpB!K&iY&A0sU+dk}7-dU8?>@)~ z0&YTdL8$rUO(kZyKjXm3W;DGwq)$J%YX+~u7`kdI%^W^HhU#@x7k+Vob#M$sU-3b~ zKd_P3a4*%BMQ}h6)PmZj6cP{P4ezoIjS7Wt#Zlf1HT3*B>m0h?2C-r=p>P#u`ggXZ zRw`t+Se7Z3`;jnsj1{G%ASA0{F1jop?!vRNpM{M1Q@ZR3D`xP^VEIQmkuePC5F71o z)t42{tD9NvwI!hA&#paioSB+01*<90hh&<1S|V96jZ#Y?GhD+OqEhTF@BRMXs^A~( zlO6%ZCPPU|M34>K0xEu~{ZhsR<%ISCYb-BzG>#gGS4SI9*#q$;%0Y!o`TNRSf@82D zE0ApFqPw%rXAV&0(mSVzH&7USz7(zG#{K3lt?_Of=)u4M5cD-MS~mKByf{ zclAy!1jY;Y*y-(3U!bh^SFJghcb0^1%@~brG$@bEM<_rB(=)3t$l5*9VC7(jW~!~g zP6@Wc@QtjMF}i#DiF7SMGuJ1GU@vtRZ0cvRH~q!z@-S<9Qe+%<%w@_c$9!GhFsr4A z^Mm54ol!KdjauW+%&N}#^rb_+;U_hQy@6{JsmvZ&>;pai`hmyKG$n>0SJTnegY zbTK5bRc>VFgB|YF4&qU( zM>C3N`L1UXyU#=#Z(M&`a9EK{$C6Bxdf`bM(s8HBi34Le4(;(V>2N~!=|7@3DRD7W3`Zg4<5>qh$gFF%o`oaiuO=J+KL7R6(WzY@!p!a0`eN&sm~9 zHvGzFa1*d{%6q2(7Q-$LZNuOTGj$L(>1T9l)!u*^nIecpvk`|+F$Ez|O93DTncbHpOlKy<}`SGF;5|*_njtxBbCH%bM zHWCbKhYb$Q*=%RuU3A*$+Uj4~9)FS0u0oC|O2FP7sxmm^=qll-M~usCxi)fe$-X>* z&L&!8do}JxgpS1La#6|tH(3KYn43TPTPMd|>`XWfzk_^{)EdaaMi;1(C?TI7q>MTP zYH1Mdtn?bh4A_5tLc+9c^pau1~$<>bs#<6N!F8nlqoz$00G*cc*x3*-;nuhRXx>+m(Ke__qr@Qms<(DToK zr!zl=0~cZtRh2d?jKnCv>>BGWP?P;Auy1B41lIem$l~H*KFxP3?wEj0x9V9wgmNzE zefQt=WinQPNSGm$jb=KR33FqNaOLi%q?k^y%&dVz!P0h?!0w1>Hb%}e2;P?aeOyIg1l%f_l+{#He+vJ80A?Llk2XW#AIL!_FY$(zDG#Pa>Sfo>_q+-KK6w2R5nSjW% zdky?~hn!N5xjYuW*5b~Lc5QENINhQ&5~^!sZ*PzdWk+47Gxt(DvwX91okf_(3X=?@ zF3ryx;(WajLnH80E#X*9C?PKKzu7BTl=RwrqW&BbJtX`scBkP%!e|I1?+aSx!p^wR zZ^`!^(tbNag2h_L&`_S%9yk0DBS+c<%4@+6_xz6+t4bYPSSPc!tfz5rG!82O7X5V& z*-HF?$m{72G+Fc)pyi#|A5HWFJ5ZZ1L-?xAe|ibv-CuMr-6@Hb)vEVziMX=J-j7$O z@ED;B2ue!X8Ic}w4adT2d{-{DR&6dt4C@8NRLvr-U&QNzifm(HHJqvs!D>KYxMFHd z^-(ZhgPxaVjqU@o%nQe=7I|X)ecMq#`G*V~iMeILYNnkA;Zpp4R*e=6Sso9Yz0v51 zpS4_P(4mn!+bG|;_W08FX5nUlEwFnj27j~oyuzF>ZG6d(?XWFn zy_7hQ)QGC^P+piQT{^XfoEsj$(GUd@_;Z?6cVa);>2PQmnWypjI5KFJQWg~(+`ND) zRwd90iSSOk&5^O`gueGyBsuv)IctA(d#n>oX5WE-S=lROWz-aIi)|B4M#u>YpT#nOF`q%rcFa;-pLCITVkdQ?HXZ|g9jB=K=KtH-(UdKa*( zpGW3Qs}}f4yGky^#l08|u;cCA+(7~DK~a|q1|qPTepnTg{~@Eu*?-Zo;&mkwPnPz~ z>v};iO$c2Zh!Tl6Y_L<9Tx~e3|HEx7XPb?%Ry<#{5?wA1sX80Z0H=FdkxeNbmU9Kq zD#fqfe}W6H24G~L>Q8OH4riwB?{{=z((6r$$9j3LH{W(of(+@CQjUX46g`_}O$GJM zF{ymNBxK3yMhBFjX$IX85C2GT+jx&57u@>E>4s{z!lWP&_Q+}I-bUV^BU8BI^XcDD zS1l|z7`6{~R`{{G?7WZXr*q{+tH$gUrna0O;x6gu9~i<@R+W{Z8_Ol(w*g3;`?4Td zcn4&{f2!s&tFg(I0smsNjEZ+amUJ80!2sG(m_;LC~Sp< zV5>S#!+*=J#tyOR>*vqS-kY?b%2c^aosy)Vt~wPxTSwLd(tcGErR@_0+g%(XiW)tT z!OQ6QzQ!7%K6<0Fw=e#{8%~52u)lI77O3PBh@`|lFXVlC4n(N|%qd{w{9m_zEfvI8 zZSpyu@-4RYI`Z>gO!y+B_zt`@rN1oulEnnrwM{xrjkN)s=;A8C6UTGOFBWSfz#8(m zui_2}Xd>vo=P|?skuBl64InfC*N;Y86Cw|+j#FP{fa!{|!Rjgn>!& z{KI{!imtfz9(x3PSVBqzh1tOvz>_ub_KPqF*sv#TB`)MWXz3rQZ)(G&pOra7mF)L% zPLVyi#X}yxu1Ux53JLVaTDNEN({zj$1zbV5w=9z}^3-GD8}VX5ziuT1Q$=8NXaQlVK0yI)~QGmE-e#Dh7v6VXTf8jOP{OmKh2snWAf8!YuD(T7qSiX>nDW~jY&Q0I6PoJ z?U97+ser3W<~z0V*z7w>rkQx(gS3z|AG|wvZi!kGU8;2vIdG#X{O0Z>Y16 z*ke&v`yu(of4-KVFN5vNE31(Y_tGIbo7;rA@J_S?cyAoW^|uC4hmB68p_rx_R2h+h zOSfVSur^kvy7AYyvvY+T7OVX)M0Z&YMhqQhY*rZjra~4QBChx8+3Dr+xqIF&kt0IG z%_Nu8WTZORCEM@nu-&H$%u+pepEpj=xjGC%Wy-Um95>Om4u}Xy@ew>mCTnv2QHB_lHWjCRHaP&2&G!xa@b+6B+s~ z@ovtjlseJshTHBKFh@hx3o+s5uQW?354|~ukX4SRy6zRNay6wnQ@ia;y~v^rSgXSAbi84 z2?Q^t9R=DEj*TA5nmO%66FrI@e)%NBtQt5~d3pNyxBcnW;m7CnitWnsaE)b&ou6o1 z4#t$6R^zC6!vt^4{geFR^Fvv1A+&`7UqhaQ-G@@rFMBY_&FAV~Ks}lL5&DfvlkmJ-big&@pkbPTd>b6q5!qu>c>9Zrv9}MSIW8ii}BV zFDUNy;hlBq^fLdIfIZZG`0HF?Ub!&Exla%*!nLI(9oCr!%Gr}N`Fe^4b=&`C4hNt? z&A?)dfB&Domn1}^dR0c|{eyawQ|v~gDSX<*tclvuldL8#s&Ba-1j_ok%RS}`r}xjx z>uwC4y&4Gw+mJMu21HluZRsJJ_iWQS>d&yW^8~~Ki4{PAn(1HI1y+B z9j@pzRxYR3=#=39ZCZlGKTd7nE@;3tVKUAV?2TqvVw5ReKzs`bHKt!_P^%P5OL6YC zMl}W)@z1Verb-_Ne&@yKyQj_+u?G=2o#iXI<98y&Bl91l%!78T3gLB~NK*cd+OUNq zJGm!a)1vgCYnm7FZJ-TIv3Eif!nwhOz|)6Ns-Qyi78WtnPB;eI;x0-lRAT)ua=0dU zKPUUE-$#z7hjeDmYoG;%^(FLsh`@A1MWcD#t}w>a$&Y6W98<=h^d;|(WcYu1>^Ae6 zSMwr*AO~AY`bVDx(%}$vgK8}>VAebbKQ!hvcD<(SCGqwfZ2UK3hXm_?4o7|o=dv16 zDGnUeEWXGaq9o_yLO2G^*Beu;M_jC~`4@=SzzGK&Tz7}=`$owKe8XJ3w_-c%U6uXV z=O))79jVs4Z}yIEq6v~f0|HK>@zpirtEhcQSlZb|-yr=X{vKP_47+q+e{M5%wLued zM~PwCS*9vdbbEaQ!FTaEN6^>0ob_jU3|hfPRUmATl!u*gET(3HFsY1g$7C4vr+iG` zFZ{2cDg(+DiI{PWS1#*Q=B<2O|i$^jLV7UBup$oGAh`NhP+F! zyRP`vihm42;1q%!ze)bce&|80!Hnfy77z!ymV$Hyil#|1IggcA8f3dV&HZZ2!jNyf z6HtQO6XMRmiy{$7i8`N0M*(^y4CVhdxK;XwZZ%sXfFgv>qFWaR-{3*jp_ZF3LrCbU z9(~9j*DmbR{cpW{wcdL|Cb#95MWc!|UvC5aYeq}@nun54;YjPm&hv)ijjNkK#Nm7+ zKUVS$er|q=Pdsht!ol3s2-H37deV^pZ64Z0f*I#EFi=&@Gj#8`@5OsHC3yI5*e+q% z9SAOZG0M{IXWgWl-qzC9=oZW8w%_~3t>LvFTJlri*gs>F?PZ>hFKuk|y&ER{1O=oM zJo{T&wQ>CUC$D@=-L>hiQ}`E z@#~_plq)lQ$+eesd+j$~MSAaSU!V{aG(Mui6rYedX!bv{{b958^=NVR}tp-8hZO00^W=IY~(Iv7%H4wee{HL zR$PbSZqQH*sT}$8wi?X}PUcf8meLX4K4>sDOO!ia0T0>6o_%oWi($i zQYyV$%&%(}GBPSo8@K!*17Av=xYsiuTA6Is-3mkho9`_K$xbsziX?Su#dy{m(T@7x z8OFZaY*BNI;6q2Yv``;I_E~nMB`6*0l=Qc`M1VutJ~18jRhR)J*zfyNKiY@=9Yb@Q z0V7jnu!SUqP^cnQq4ti>;)`=hLdF<*V=99<9IAmV_6p5t-2#Vt^Djas=-Y;Kew$Oq zWOU7c$mTVI5=fCAf9MB;PsC*>PZ}s2 zHHC2YRg7YozVE=rbC2&KpWaMsvNIeocbuV*5fp4#$7ch1FQWxY>!W{}dCe7ss=tjJ zQikLWt_->Hq<1M%-Vak$ehNAyNFMv?6tG}Ci$_WT23v7Dz zS$;bXSR+l`QSbNxKDa(OtNy@*a^;nHb2V92^uEAnB=JpH1F1*CO7a@#?4g1;IgK^< z&N4h4R>pM-faV`;PnMCD;XRr)eqWelHiOz_-vonQTIuG4R{|0=S9%8RiidkI zS`crSzBdaE^s^_kd9`M5`s`4?@tJ4crVp^NE>#*V8CbaGe;f>1ZQzV!V#1$sst!|R z^hd`~I!TnFRs0H3B_08<3=CEnyxNoetEj3ErzW`kH>|kM5HLdW)OuA&YH9cYjtf!o zEX)>Lj|Q;`F~_iSB_eGLY%s{E)7R`3k-Ru#W{W}hLDOvw&^CYT@862o!w@?Qu%Kvt z3RiQ3_;1yNz$olqegN4G1=&M zgUOCUd5fP8v8O8CpAC9*#-gXWTQB=WWKn8gzcO~lE<+5oDkqmKP4U}(__PU&dmfH| zgoEFt$h^cm^5X~PHfakl;l*(-v2p1M_>)o3Xx5+>seCEc-LEvZt-n;e5W>JZcffq1 zd?scd)ZB0GwdAn$6>(VaiOc$lctt69M!j^$DWat z^?fVEZGslDjU_$#(yfQq=_NokByXm-BwBqrKvWFb5?BDnvNY899o}bG5&r zFx%Oz$-23+bmDP3kzma*p=B5C(+k0q?!UK^6bG!8!nh#5kZbzT3FM+DUeWjQZ*9V^ z@*~Y>72KsP7F6(6E+Sg*5GuGPCOAs6Y_)jesBQvjsi{}G5y{sqb&3q zFyb^TcXd2Vo8Kd;8&Efq1s82a4t}Fl`OiN%I?YO%;e;v7tx+{z{g6Ggj&mE<;zx7` z6JscjJh)Oq8ZSOKy_c!i?OoN6`T)Cc37Ma#)P0tfrEDqav09ChWMDV<@j?xCq8#=k zEEJ5+0L^+%X=Ama19jC${n~Al90r+z)&S@*nj!v;~zTUol&R0>~(4g0lkbr&f0cBRf^5( z4r~)1`9GX3s=1+?h9KDn# z;&T>LSsk*W82!GV6V~rGUkdm-w`w-x|IW%Q=t&70nW2}D=vU|TJ*EG@3Ms}sb<8+) z&fV0JJK+IMqg3Kg#tKK3+U{i&cXVV4%q_elQpQMkmH9D8H~ihF76_o0q!ia|asN}h>Z7WdXWyR&qT0iNaW&eN zel3J+;>*XAI-J%T-C=17w~HLr%1*Wh7vhAo$?DJ(P7;5Pu-3@$2M=D8K4Co^m?pJ; zp8}URyin4BV1lY6A7CYiMIW~JPELoqkNG6Ry7_Yr;00s0^x8k)S>dc)r8?^jXO3<9 zz)R>zw3KbSJ{=7Qa~>VQ(COxCyS~OBS#D}ReCLT!%0`$uz=Ux2yb(I#8P_5=HO78a z)qjrv^q95!RA0wVIs7)Yzeh8oboV#kYc->mT0k{%j(G|D5| zmm_@D|Ac)xl!j3VYnbj)S{$9b`a2cN;G`ZJIj^b=dx=4h6Uht~%%adZ-&M<@`PB!} zKe7PahkH|uvi1Yal9XL5^rMfq?PMxivt! z=UsK^nA@8}6^Ejm0yn<4@zQO?PA(B~LbFxFFQ|$})gjmG(5?l)N$ceGe!yeVOeej2?cL|@9({WCeaeTbQ56|EBXY)s?}t?K7c2$3g8Ls=q@~;L z1FP6SKJHS-4SAeQM7ApomA*Y)3kb<1jfRfO?DD%5lg3~`o~V9YtNb~N4I64m5Xb91 zSQNRY3{N-S_82jQ1J8X|HFYaR7HHxlcbqz@9}k5Vr$?|wpwRuZEXodxUPb%p5Q~nz z|M>#TQm1#sP)SaguTA-GDNYU&-qM*|`!Wd}j|;fr;n3k}4a3~By+A}yAzD%0$$MiZ z=O)x1CP$@mJ(OGHTSOnHawtK+gi-8jA!+hvD7M2+=Lj5xUM5WC3SI~KP@^HJr}ObP z*`dC~3|vvk`A2+H-CzdY%l9`L9aWy`DH?@pB|=0qK~7q@26q`*XHQ-{;fB=9^4A+n zzYYYrUwl7bb>W;9L-8Zy%HYL;!xbTx!Mvjs0K%KBmeMK_wB*%pF&A2AW;p&LIuu-N_bMEh zh4+vFwn~l`Ti%a2S=I3^Jmi)oPY<`HrT03I*Wdgw>ROwe6hly=mL~c- zHXp4Jb@OO172Z7~8B}?(Ex$*<8o-ab+0eqer-OJql?!} zA0E+Ig*yZ6~2j4P%VjeKjzH)jO01awr z8$AiBR>t!10c0?3J%fU=uB*d`Q2L}#hF37Yug|r7(oMrdCpO6KS}txMT1S6})ta%orrNf_SdwW3cMl`| zfF!8s^u5F?@AvU>VcT9vEz$O#gNe${8mUGZx};zv;q1EJcMWazxSPQw)Vk;R#dRhF zqBg{RU6_+-TG;yDx(d#)voy{vcS0GF{D65=D`WD^dMhnN*TK+`5|mhOC1Es`;r*R6 zB%XhZTuRpevwKjHALMC!Di=$c+zqN_`ssLC+$_zzefo^;x^C9re2q0VK)-v2*C9%+ zc^w}Aq|XJ~;w@I@$0GipI+ghPM@_ZnQ~J*eNOj)`IfR?e9(7BRdMz;@kh2Z zDUGPAB8h_?rk!7GmmaqYp*VKuT3rgYM$A`UfWuyWSPllLTYLDyt|PVN26F`D0kcHHJ(u!ICk!~Xx62{XNN~5r!m=!G zB{HEAOb!tdVy;7zb8>vcE)KT3*ug%kd%ij|Q=w_+eQ{ z&RU%2uS7~}XUhKiAJVT+R#rOUbK)CQ5{cN;0&Pa6IqQFuKvTq<|1RpY^T#YXVI*U| zYMa1RO`gt5XQ{^2qX}BDyv`?Xdmb}l?YNS6PB~bhO}8)@>6ds5sDuqmmoYNt^KiNM z2|I!Kfr;<&iZC7oRE6RwYZ*r;0#Z(W(Q7vNX#HmhzIA9X`xB8o$`1E!S}TfPes)HC z!=j}-UK&cy?!6ii85k?Uc!fS44?KvLsVgxHXP7%)mIETUl{FVG>r8#|&_rMCm`0x3 z^rleS;Bz~wCyF)%Gy-243Wmch%LY44&L*O_%p$<#KEGd<+0(kw%}DrY81o-ApaIiA zdH?O2DZoW-Koj8Ejo|Gvh_Mc8Pdv$w!O`*p&D;mR!TR*v(zT$7)`{R2KmvV5Ph<|N zE^1Ly7Y2?eb*)s}k_Nq1aiHCc4YZ*Ul&kPGVFDkb?H9cE# z#@-6!3OR{o05>Ef9QCWh`?y?7)ddk*^l@#i|EKSWxK{a;-UikhWLafPZLo=PR2wpy zP`E$(o_qE_*XSD7rfO1TYNo%3k{qX$#@exuZ0HX}gssN-XCt(1F~yyU6;b1AD#mv8$kwFyV;L$iaj z_N0-P4l2nZ#UbHhr5tIOMhw`SO^TNdUH*E4EA|scc1I#ehA@qe!{4C5GtGvc_PPm5yiiJgg-M}nlD}b zjwrTw@+54OJWG!QZ!V!CQlQtj5atEJGb;7lO#aF+j*x*(xk|J$iOTV{ql;)q7A|-ZOb`Z(7~78AWKOT*WJoj zs<@D=hvWHi*t6e58nhgr8QhSNdp8`;7knT`w1^J=;aA^F6GxqPKk>XIUH*|l`p$&{ zvrz#Z1=%kxo13Co{I&TxltMiQG5v>+0JOi4&$@~f8nTEQOOcTJ9d1tT(p^bF z%ch0ca+WK|a=wvAo@|osBsrf`H4=Y?& zhPw1uVb*(@4p%gq)o#ZAFkYW*E?ehsJeIreh&bqg?nL9Q_|A#z-c^%ScW7wxr5dmT z=$)4)tUPWQv^~ScMWQgv3zJ?jv*&}b(5iir6&i(>T`ImSde(dqHg{Jx{r(<4ZD%;% z#)-Y#hQh2hTI73ldq~ZDma#5K0zDN%{UpN3tcH%Y5e{B8>Ko+B>No1C5>>S3e&XtJ z|2j0UQ;=mrd2UfqvLcoTWoa{G6T8)p`qw870u-YH1EzOM!zF9grAOzIUKj0zU2)8Uhy_zefGpOAbb04xvE=_UC;EbaKJ^J?+v3_*D{FO5qvWwblf zo*>bUDCsG-KHeN?#-)BqoZW+PF~oAK7uXm2a>WOkwrYPdtLom(MWml{`j6OPDbVsMHOv)OwBG`4dK}GH_@Mdpg&z z4iJk%pT)przo)O5`)1qK4D_isYq5SjgV$Snce@B<-FA*m^%vw*M*uiXIhVn1`t%TU zvYd;NiTS;w!xMcjgRC$T6%{Wag1So8lDNJ~@YK#2GVFtRPsR?gs*-t8h3f4FaK9)m zd9FRb8(bH@;MLo4&?AIV(q#VDAh@H4eR_s}=G9I)3`czzQ{(GR57SXgzuDInV)EA6 zJ!F;(8)Rv-*SDDHHo)|T3##C~qHUgDt1wK3!vHsw<32icf>tsAtX7TS$ zcK{tVs6PT{;%#iCCuDfaTTecBWp)w-ufE8px`HPZ= zsJo8>q8JQcowM%okOl)s`t!m0NAM`RkgC%AG&)%k>50kd%9#=^1U$h4_3wDbShrBl zvLXY-Y%d7Aua~+uZ2(Znu{|RXufR0--Ox)zCHL-YVI29uC``vt0cOAdyG~S_enQf& z(7j!em?~pJh#{&HGk-tQk7Z8~cF|6;H2xx0|KP0?^b^Sx^FuY|%RlC@qc8Qc+UHOg ze^d?FWU~mtL_X(o;hQ|zRz^M#^p1Dkr~Q@Y+$MD+s+4f2v?eWfi>Q!qD};gfg*;(a zrNC2Tch;N*8)*f3iEYD!%YIF>#%T?FC;O*H^3*Y9b`>03GLANHG*Lhia5Ph>S3+>R z7>>I2DaD_e= z`~9fra=9O;sv0uqN0z2o|JDw~~pMP=z|KCXczi6Jz=P;m*v~#2#-MRZ7t2%`i>=PS* zFANvKTU@S+4<+xj0Q@n?2M5w;QwaY57T^2J_Wp;NKFG?My!i_){Y5iDM;1+kS zl!fz?{P5qDU-;MT|AjSfga8+T5G$vsLjT7q`uCClS1|5>n)Y9x5qv>`85tQNq5sE2 zt3vZJpDRasE!S!-dA;Ty^43@TzD(hAnb(X42UBse|NXt!e1GODix&BkZ^sQU!Knr( z2DO^t?BJ2j+uI=*5)z8D3n}i5YE;F-3#YfAoH2@x&|NbG4Rz2{v zHz=k+z3l`d4PSXp%r17oDb1N$E2oePaB zf=e9@nD#CLQvXcVAHH|;4>0ti;^N}Cn3x>&n&9AI|Mt8*5^*W1g5gB^>3C{o1?;?O z161Qnm=FWbpql&c+5t!xLg{p#xXy;cu`g)&VpXW179udBnJeoS5dbaeB1sK9LX7Ni z{uu%Hg4A-kDm~{GKM#OLCbiE?4t=St1mL5LP3{3pXf>3kUJY|nWF_~+`ftxc1)~|# zK;?J7nIiQxOK$(vrQ(r>kqgreTFebLpar^VP${A~1K@gW98RR!8=(eKVt;svkEX{UY&MGuvtMP)(o=sAPuvk6>P_sk-Pg;Pp#kg< zwlENjIHF1}&ke38RHR#HRMb0^$(#?k6c`#mhJw%wLI{P5)qFP1)MM3nDSW1INMbrV zcnM>-qaI^%LMj1iIkie7NXwcK2)6bXHu+ ze*;6o{UETzq>~+o3epTen%gj@7T6+_Dp+@a0Db^k?llV8L5wKTx{GI;^@PrMF9KC} zW2VZ5xT$o>5*^(DCuJRHsdvNhe6%SxWM^3RVnPp&oU@)|158n&T6p%op=07|;+D@c zCTpySxAu&W-`D+M@HT_ua@AH(;(8|VnFd{U*n9y0_|@)|f3bg6zC^h+hVYCoeX-=K z^tY7)N$h*r?f=S){`YO_uic6c85trNUS>NAFmnTXi1W`7^zip~7`9|?-(o%Mrzx>u zy>P}d6`-#w`(w&7h&nPl=Gy2ZFv{S=qeiY`x`=@R1ObL!+D zTI}KPe6)bivie`}pAMfGBy?CMkXDwyTJQACjYeZ!q zAMV;`zL08)7ig_m>vxG)PzmVip|-MJ>tm3WxNHT^lnN{JKNydwc4WKWPILT1l-n*# zm%w|t4}GiV$t?|6=cq4y^>~^96pBm_%UsH1<|AA0NAzdPWFenC9WBZ<>ZAXVTq`!2 z`6KA>!h(ZyD<)*%bWtM`Yz@UrN53!_Yodz&p>Hls<(piNu<;X2W)1#LsJpXJM>HVz zqpP2Ux!?pscK*=ovgRyR2kglm)DS7|y6>g!s7QU78Fh2bRTP6J-jC_hxi2_TL?NBv zv?LriI19hLxVf^#>zp2v5Tol1jJSk&4&N`NY#+$e!oHis`Ee{tx%oB(Yoc5)Txpc! z`0ez$jC!~8{qOSM9?dW9QyBH>(8v$}a8uD6i~CPBO{m>?z-G2K+tYI6O#!{)9 zvIE!a%fq;WuW`iPnrkw$_&ZzqQlqax`tQ-xFRhnA|iR6@HDaVxc z`d}g4>R?`JXXg+fM(bQ5W~It()Ya_wJkQin`xOL zD~%-KPI`{@8OIlYKK>urGq|Fi5Ku)XlSF1q5BQv6J?Wu^{m`82ysy0M{{G2a)(k)O zt6*SA#x6(nkroDtS&c~|i)x-*>C{^zZf)mr{ig>rd3Z<}bV-@%#t2I#)$8O3QFUjs zCBM082JM9ds#sGw`P8^mz72B3Ra84W6*SOD`9bM?k6G(Fi}uN)&Mx1;(lf!-pO8xXhG!0g=Rc{f4QN_z*IG@B9X>PS_HR%A`w+V zW)$t;^<oYeNG`f`e$mA7PhsPRmwYD#SG-fFuV5il7_ z(<}fwsa7(1*#6L$A|VVm`v5E&QMKdfJ--*m7v~%s(GCuw(0LdUegYd|;oHCG({@7!*-C(h(dOk6GDF9wUkCY3p6@Ofbso7rQ{v7yBOWC0Xn=;n%(9^p|al`jos zC?Zb7OLK{jrhcv2Eqf5*e(a2pH2pjy**b8%iTLY@qNa zVf))Kpo(Dj;N^J)8(VHktDoy!F)~^yU9&f|=$AiQf zLkV=Ife6l-4RLAwQ1|Rn0#R0kXdESnoYQi|8WPVB@Csa2A>B7d zj=UD&8<2PkHS5g+4cNw}o&Hg?609G2OyL~bPmB;7V>6Y0u85j1aD>X9BPi=xlL1Rj z5fl@J400Dw1ZeXTC1Nrp2*{=>ELKsTQ{9+9zLXDq!K15m2RsC?iI|;IN*bCt?vLy$ zx?6N;{<~}#xTBz$r)5&v{>V=pd;kp9cg>KI>${V5qF^2w!qF5U$2c{%@>Imvx_H<$ zy5uCc;R_W%hvmfb!Pf#VPnZ)*w6Z^Lw4K(OeZKALtMa*EEHPe3EOnUuNfV+~1 zrD+J|JT$8y-sT#BDn~yZFg$2~YKxjKDVFnP5Z0dkfhb*+T^g&LWNXTvL3Z`Jr^Qed zsq6jgAvzUbeUM1W1oL3o=Xag&1X1JExBGYrC>eqsPZvahbXUUZi32&|@kp@zWXQA6 zXXboye`By5+uo2r=OUb9UszlY$CHA1i7_w+odFzr849b-eHUx3vM(jqpU#%Nyb=?xigWf-lffHgikEehf(%JW`>>* z4VFDUvm-~?nPBbac}rklp7AxC{jvR3#N;R*spyFNdA!8o2%|HXjHexFs&(LS z!xxhiBWHX!hUo8s6Wty_lkVh7E70 z!6oQm2XTsCL*7;1`618g5|0&-Ol9}j*%J^(1}TBm%*_LKJ6oHpfl$R;FuxA$y2}T;^B`Ej=W3);$`(4EH4Nmq+Nw z%jV2@mQ09;E4!l9H{&yQuw1ITTOX2Z5@d*MG}p6M7CsajbfGfNW^VU7d7s7-dfIxWH~m;NpL<8jwj}!Zm+|flxMY1$u>3Sn|9GHt zRfqf4>KWARkaxe;Z+i8cf@~cf z9ODF`c+Wn5IFi;v2?l08%hTbgj9zW&`+}O&xm`6=|Rm>9HX- zJ~N}3BjHE&Jxn1?pLh_3%}-R}swb_zJ-LUcH5+!Hy2766gg91l-BMDv=p1mU{kkcp zB1sb{3Gt+4@ZBnP%;plXW(kI|GlYj?Zn<~{B$)Z{^>7I{C~VqfIiVi@lsk% z2Q95f+x444aE5KVTeXn)1N*o?m_}s>DLhGlX8SW{du&~L$hf1M90kD-wFC<3(QYak z6i3Qv9FWqt6ioWU*QgBKLR1rvOIfwpPXeaLa3ay8G&PyV$v>Fcm_uk|NTxJV94O-8 zsLV;A7H)nxQpVt1(wd&rLJ;to9$^xESRXI*4$}#Y0%HuMhccy8ChL-mBS=49u8w@w ztcw9!rS@(YCf0Sjw6&srq2N-)%?{3E3c3i92Y8JJh+)(xArl&Y8SX41DEwH8u>#1q z-vC(3|NE5kuenhMeS#$s-XX_}w@Z~%>E1^`!j%PZzXElwdN6zJzatpWcm9^3&!WOW?kuf>6AdprS;09la%jLv!NE^{e7@cS)&a z66F+&mA*UIWwa+CL4BUg_i#46seiI3qGk8=X0A{~rH1Gl{Z$D7cb>(tWePHgw!yTc zL^&I&DlZXXsbMq_KzI#>NGA(!yp7wG+I8=Nl6WDSLk)y=gtLZ@@>@JW+qu@__xyK7 z#J}fK1KFquZ)DLHeG)>zAzuQ(pZjeIp zZpMxhAyAhlpBS%PvY<1kslmDtATDxBUIZmF&E+c4$@${_n(}R`QjA})X*O{aZyCi+ z2)@M-OuNffo_sOHk?CHaic3i;p@{~)V`rY5Besem|9g-6FYm0u5r)-_Bz#CRPi)Lm zTw9ZS^?YIjNTC6PYxuqakzZI?x=bs@F8Br2(Qs#G>8|tc8wQQA$IvXH3SJ|Sx=G$E zsn2Dy2;Pp==Qwa)OfIu<>wu@TY~yGOevB)ZOz);z`q>JCf->Zy7x~vx`Fru;dt@LB z5R62ePy{^H^+$fN9u#Czg6hb#{0DMGl_4D@N5$!OcaNdW@nkk#$`sCz4H#%fDTzhA z(-BsM4;OBdd*Gn-FCPzPniUX)mVJh^AfVuqJhdSHUOe_+;XfTraKfl0A@MF)2$s(f z!j}Wq7aXQ8m%7s?akS|Ckkm|hO~(;C!U~ zI-1Ya)Rc-GFv?L|^(|8CTHkMz!?o;iET`V@vKHE{QZ`U?W!p7h1)i9IVj}qtRp^e7^TH z&1TJFe%bf;V4VE*Q&~G~J5d`S?;QB^E{1BY735E~X2M@2%2Sju+hQPl{AhAC`rtM) z7-t+OjaWg=J^Im5kA?*zK97`#JNHGW^QZ+8fMXQqeHxpW-WUP@@NOujeB4F%)lkCR z>fzN}-AZg2LBW!=^#9%qoP`J`tb7F3@jB__qAyc}A@z&ws~0atcYkr;z*T~fL6?{i zDNz+S_7J0@^YQV{d+gS%*7$g0epD=@aMU6T{OiRfw5DCzylT-OJn}1vAyLwVDo`N84Yk zq`5NlG}B|V>`GF}=G+u~cIlsFn} zze^%lEcO9Yc=@dorp;tQ{7=3Rm&emrJRnGR{8Y18w{?+CYHBfD-DEOm2T)OFGg~a; zzB%v+onv;oTYb5{ebUDmtoRmGcReovX_pq!g4_u>aEnd)SSQPt)yucn#7MiW3tr=I ziHNwtHa`k=I{Ck5Nn2CN{dJFzhY^L+#(k=xu+`>xu z9>7Pc7YpV7Bq0BmB>8kFGM#Lo=ecEpm zlk==4vP?1Wu3OW6LoseX>;%AL9R%-bXV1(iP{}u;dwex(=s%yEmh_4{A+)NmKUw4CedAfv5bcJxruE^do<$>~x!_C~n}+-bG`=D71nEB{x6@vU$C>(O;`HI+=JJSKG6hjl7fe z!l=LsyF=Ae(cE6tZ_4&JF?`PpTv~(PRUqJOa@*o%I#@MZlZmyWR&TP&gs2R@SZ5)1 zqF$fHURyGqa+6vlQXgS9Imc$P(G^exXgSYhTT)YL6oCohvx(O~>Re1baAl0~Ww=~E zC>KkOnw8Pe9#9s&X!$@CRX-FdR+G_P86r_Y7a$iYm%gjrdYr1&=TNJ3#hv}7o=Qah zkp?F@Wakjtx2o0XhDw1+4qaRs|E1-s@3@9Rnb?VdlJ@~=Gb16A`zdhur8zEz#Z>fX zDog$crFqGxEBX?RN{Cqa>aK%xBdXp`+L==O3Ujw>WAn z`GWNIU{9=u3&Obq+tpb3ltfuG_OT2*g&Z$f4CXoPztUyINTua%$Dtoi*6K%8|B(xu zF8*Rn@uOdZAawJLF)|T{si=ScogwvWQf}q-ty`v?7}<|H%h|NCYB`6)u!SLZEK&Y8 zWaJ1fk1MW{zL2LMavOBHAlRFmX#65WAJ6)=lDOg75`~<@GJwG^(9;gHJAf$99D^xwrPr8}A}9A1~%FlQH%T zC>|0qmuSyT=i;69l71?zUw!fKYB)KZs3WyptV+kE*A_}&tjY220IMH=2ijJ?N_ggM zW9+O-Vj$ZELCv>I#`W_ey@|Ink+z+ z@;r$~D;!Ggt7Y6bxxJ*Yq0oToK3=y3_%LHrU8T z#_YU1)|TgvHNarCKvAH-BkxdyHR*4OpygXi9#J4FXmnPe_rB(XL7 z6PLcs>7JGfd)_Bw7h+Mxz0`dc(HZFe=S!x8iMOM`(*F0*V57XOL5%saa{BlQ%Qi3a zKsAicq>4KI{lPr5c(XyZ!8)Zt1?Q#C&M{>lSFc;{8f3x8mYy7%XlF1;!|ScepVxW@ z=8BF$)RB9o_;6#^cGw#%Zf%~;j*}rckn;+JMp1IrWx-CXQWfL*Vi{N^s0U+pP@ytO z)bc~lpOIJXnnArhPN~%Tu%8N4ZR1xYq zi}l{KcQavF9km^()1~z93jh_v;%}DDg?C>Bg0A##+=ZwnH_Bdp{ihl|%(0#4(hn!k zV@MCW$J+`xT<>I*sF!<#&Ty1yLq5Zc*}0Vziv_qh#$NCakJwRw3< ze}2%NvIcY$3+B^LrF8fZlst8^3mDM!$^(`MPIR?Sx<`MbxyK^C-#2G=&VVznUDd1S zLQitL#g*ZxF;^(n8@F~`a&ZIEA^Ji z&1g^Z6$qKEmgeRs2=G3?J)S_RG3zEf?8$SK_Vq+n!f5?jrrP^^nxl2a@7ri_`*Q(} zkMGP>t%rK1+RC}eLRZSTQ)cV0s@uh-Gne6APjX#R_c)%cE7>FF2t zYzbAVyS&jz4*9#4#Fe=ryMNj=Z-zjJFoABbPq(P#816;ILj?mmUBeX-P{8B|=6KWf z2xB0wfexH~b>TVO^)x1J*sYavS{i=J{&?8Se5+7QoCyo9A!O^jg&==+c*rV~F@hYL zkvD|-(!<6ibe#D~v%Qi|y)ofW{M)+q*2^(=85}&I=x$WgRDA}~cWRpAvlm-Dc}BD2 zSz*t%0Tqs{I3>FE*}_W+igyLPMc=WPGs~mw?2B@-M)14ac0XEP1x7N(MvkPHaek$! z^1}IhkfSu3_`GcV7}1os;sAtynThtLbAdY^Q^WCk@2076O zvUY%u;OtbyyfqzQgUOSM(8UQnmZyGJb1nOlQk%e@v4>OOO1(8&gN>$eWZvSl<~hQ5 zA_z499zD^u@%G&F(2C-YHATeah¥P89gy;p_C;Y@g4Vj}TzT+6>uwI&rlpXWBD7 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 QKzpy%3Og!{MTHU8KqvzT-M)Unk*!O5=-WTgk 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 z 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 diff --git a/agents/doc/demo.ipynb b/agents/doc/demo.ipynb deleted file mode 100644 index cf6dc8d1..00000000 --- a/agents/doc/demo.ipynb +++ /dev/null @@ -1,1085 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Agents on Kubeflow 🤓" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this tutorial we will be training a reinforcement learning agent from the [tensorflow/agents](https://github.com/tensorflow/agents) project on Kubernetes using [Kubeflow](https://github.com/google/kubeflow). The agent will be learning to operate a simulated robotic arm." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Setup" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This demo assumes you've followed the setup steps provided in the README file.\n", - "\n", - "Firstly we need to provide the path on our filesystem where the examples can be found, the namespace in which to run jobs (and in which NFS is deployed, and the ID and mount path for our NFS volume." - ] - }, - { - "cell_type": "code", - "execution_count": 117, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "EXAMPLES_ROOT=\"/home/jovyan/kubeflow-examples\" # Your examples root here if different\n", - "NAMESPACE=\"kubeflow\"\n", - "APP_NAME=\"agents\"\n", - "PROJECT=\"kubeflow-rl\" # Your gcloud project here!\n", - "NFS_CLAIM_ID=\"nfs-1\"\n", - "NFS_MOUNT_PATH=\"/mnt/nfs-1\"" - ] - }, - { - "cell_type": "code", - "execution_count": 118, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import os\n", - "APP_ROOT=os.path.join(EXAMPLES_ROOT, \"agents\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Configure ksonnet" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Ksonnet is a tool to simplify configuration management for Kubernetes deployments which extends to making it easier to specify and re-configure distributed TensorFlow training jobs on Kubeflow. This example ships with a Ksonnet workspace in the app subdirectory. In order to use it first we'll need to register our Kubernetes cluster by running `ks env set default` from the root of the Ksonnet app." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "os.chdir(os.path.join(APP_ROOT, \"app\"))\n", - "!ks env add default\n", - "# Did the above fail? That means you already have a default environment.\n", - "# Try running `ks env set default` instead!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For more information on Ksonnet check out their documentation [here](ksonnet.io)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Building training image" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Currently in order to train our model on Kubeflow we'll need to bundle our local workspace into a Docker container. We can perform such a build using Google Container Builder. Running this command requires that the current workspace has been authenticated with the Google Cloud Platform. In the future this will not be required." - ] - }, - { - "cell_type": "code", - "execution_count": 120, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import datetime\n", - "import uuid\n", - "\n", - "def gen_trainer_tag(project, app_name, registry_target=\"gcr.io\"):\n", - " now=datetime.datetime.now()\n", - " build_id=now.strftime(\"%m%d-%H%M\") + \"-\" + uuid.uuid4().hex[0:4]\n", - " return \"%s/%s/%s:%s\" % (registry_target, project, app_name, build_id)\n", - "\n", - "TRAINER_TAG = gen_trainer_tag(PROJECT, APP_NAME)" - ] - }, - { - "cell_type": "code", - "execution_count": 121, - "metadata": {}, - "outputs": [], - "source": [ - "LAST_CACHE_FROM=\"tensorflow/tensorflow:1.4.1\"" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'/tmp/tmp_dzp1ks3/build.yaml'" - ] - }, - "execution_count": 122, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import yaml\n", - "import logging\n", - "import tempfile\n", - "\n", - "def _generate_gcb_config(trainer_tag, build_dir, cache_from=LAST_CACHE_FROM):\n", - " if not os.path.exists(build_dir):\n", - " raise ValueError(\"Can't find provided build directory: %s\" % build_dir)\n", - " os.chdir(build_dir)\n", - " \n", - " build_config = {\n", - " \"steps\": [\n", - " {\n", - " \"name\": \"gcr.io/cloud-builders/docker\",\n", - " \"args\": [\n", - " \"pull\", cache_from\n", - " ]\n", - " },\n", - " {\n", - " \"name\": \"gcr.io/cloud-builders/docker\",\n", - " \"args\": [\n", - " \"build\",\n", - " \"--cache-from\",\n", - " cache_from,\n", - " \"-t\", trainer_tag,\n", - " \".\"\n", - " ]\n", - " }\n", - " ],\n", - " \"images\": [trainer_tag]\n", - " }\n", - " \n", - " d = tempfile.mkdtemp()\n", - " \n", - " output_config_path = os.path.join(d, \"build.yaml\")\n", - " if build_dir is not None:\n", - " output_config_path = os.path.join(build_dir, output_config_path)\n", - " with open(output_config_path, \"w\") as f:\n", - " f.write(yaml.dump(build_config))\n", - "\n", - " logging.info(\"Generated build config: %s\" % output_config_path)\n", - " return output_config_path\n", - " \n", - "BUILD_CONFIG_PATH = _generate_gcb_config(TRAINER_TAG, APP_ROOT, LAST_CACHE_FROM)\n", - "BUILD_CONFIG_PATH" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "os.chdir(APP_ROOT)\n", - "!gcloud container builds submit --config {BUILD_CONFIG_PATH} .\n", - "# This is still slow because GCB doesn't cache images, has to pull multi-GB image every time" - ] - }, - { - "cell_type": "code", - "execution_count": 124, - "metadata": {}, - "outputs": [], - "source": [ - "# Only run this cell if the build above was successful!\n", - "LAST_CACHE_FROM=TRAINER_TAG" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The time to build this image is rather long on account of the time it takes to pip install pybullet and the lack of caching from previous builds. Hang tight as we're working on a much faster method to ship workspaces to speed up this process." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Training" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The objective of the training phase is to learn the parameterization of our model that confers a high level of performance on the robot arm control task (picking up blocks). Here we'll launch and monitor such a job." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Launching the TFJob" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In local jargon a Study is simply collection of (probably related) Experiments which are themselves simply sets of parameters used for separate training runs. Here we'll run a study of the repeatability of training runs performed with identical parameter sets. As you can imaging there is a lot of room for expressing and carrying out more interesting structured studies." - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo\n" - ] - } - ], - "source": [ - "study = {\"name\": \"replicated-kuka-demo\",\n", - " \"experiments\": [{\"name\": \"kuka\",\n", - " \"image\": TRAINER_TAG,\n", - " \"env\": \"KukaBulletEnv-v0\",\n", - " \"num_replicas\": 4}]\n", - " }\n", - "\n", - "STUDY_LOGS_ROOT = \"/mnt/nfs-1/train_dirs/studies/{0}\".format(study[\"name\"])\n", - "os.makedirs(STUDY_LOGS_ROOT, exist_ok=True)\n", - "\n", - "print(STUDY_LOGS_ROOT)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we'll use [ksonnet](https://ksonnet.io/) to run a TFJob for each experiment in our study. Here when `ks param set` is called a parameter is written to the corresponding section of app/components/params.libsonnet. Note that parameters set from previous runs do carry over from previous usages of components.\n", - "\n", - "A YAML form of the configuration for any component can be displayed using `ks show {environment e.g. default} -c {component name e.g. train}`. Jobs are submitted via `ks apply {environment} -c {component name}`." - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Preparing study: replicated-kuka-demo...\n", - "Preparing experiment: kuka\n", - "\u001b[34mINFO \u001b[0mParameter 'image' successfully set to '\"gcr.io/kubeflow-rl/agents:0405-1658-39bf\"' for component 'train'\n", - "\u001b[34mINFO \u001b[0mParameter 'env' successfully set to '\"KukaBulletEnv-v0\"' for component 'train'\n", - "\u001b[34mINFO \u001b[0mParameter 'namespace' successfully set to '\"kubeflow\"' for component 'train'\n", - "\u001b[34mINFO \u001b[0mParameter 'algorithm' successfully set to '\"agents.ppo.PPOAlgorithm\"' for component 'train'\n", - "\u001b[34mINFO \u001b[0mParameter 'network' successfully set to '\"agents.scripts.networks.feed_forward_gaussian\"' for component 'train'\n", - "\u001b[34mINFO \u001b[0mParameter 'run_mode' successfully set to '\"train\"' for component 'train'\n", - "\u001b[34mINFO \u001b[0mParameter 'num_cpu' successfully set to '30' for component 'train'\n", - "\u001b[34mINFO \u001b[0mParameter 'num_agents' successfully set to '30' for component 'train'\n", - "\u001b[34mINFO \u001b[0mParameter 'steps' successfully set to '15e6' for component 'train'\n", - "\u001b[34mINFO \u001b[0mParameter 'update_every' successfully set to '60' for component 'train'\n", - "\u001b[34mINFO \u001b[0mParameter 'eval_episodes' successfully set to '25' for component 'train'\n", - "\u001b[34mINFO \u001b[0mParameter 'name' successfully set to '\"kuka-0405-1707-5ed3\"' for component 'train'\n", - "\u001b[34mINFO \u001b[0mParameter 'log_dir' successfully set to '\"/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-5ed3\"' for component 'train'\n", - "Preparing replica 1 of [{'log_dir': '/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-5ed3'}] for experiment kuka\n", - "\u001b[34mINFO \u001b[0mUpdating tfjobs kubeflow.kuka-0405-1707-5ed3\n", - "\u001b[34mINFO \u001b[0mCreating non-existent tfjobs kubeflow.kuka-0405-1707-5ed3\n", - "\u001b[34mINFO \u001b[0mParameter 'name' successfully set to '\"kuka-0405-1707-ae54\"' for component 'train'\n", - "\u001b[34mINFO \u001b[0mParameter 'log_dir' successfully set to '\"/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-ae54\"' for component 'train'\n", - "Preparing replica 2 of [{'log_dir': '/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-5ed3'}, {'log_dir': '/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-ae54'}] for experiment kuka\n", - "\u001b[34mINFO \u001b[0mUpdating tfjobs kubeflow.kuka-0405-1707-ae54\n", - "\u001b[34mINFO \u001b[0mCreating non-existent tfjobs kubeflow.kuka-0405-1707-ae54\n", - "\u001b[34mINFO \u001b[0mParameter 'name' successfully set to '\"kuka-0405-1707-e6f1\"' for component 'train'\n", - "\u001b[34mINFO \u001b[0mParameter 'log_dir' successfully set to '\"/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-e6f1\"' for component 'train'\n", - "Preparing replica 3 of [{'log_dir': '/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-5ed3'}, {'log_dir': '/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-ae54'}, {'log_dir': '/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-e6f1'}] for experiment kuka\n", - "\u001b[34mINFO \u001b[0mUpdating tfjobs kubeflow.kuka-0405-1707-e6f1\n", - "\u001b[34mINFO \u001b[0mCreating non-existent tfjobs kubeflow.kuka-0405-1707-e6f1\n", - "\u001b[34mINFO \u001b[0mParameter 'name' successfully set to '\"kuka-0405-1707-545d\"' for component 'train'\n", - "\u001b[34mINFO \u001b[0mParameter 'log_dir' successfully set to '\"/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-545d\"' for component 'train'\n", - "Preparing replica 4 of [{'log_dir': '/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-5ed3'}, {'log_dir': '/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-ae54'}, {'log_dir': '/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-e6f1'}, {'log_dir': '/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-545d'}] for experiment kuka\n", - "\u001b[34mINFO \u001b[0mUpdating tfjobs kubeflow.kuka-0405-1707-545d\n", - "\u001b[34mINFO \u001b[0mCreating non-existent tfjobs kubeflow.kuka-0405-1707-545d\n" - ] - } - ], - "source": [ - "import datetime\n", - "import uuid\n", - "import pprint\n", - "\n", - "os.chdir(os.path.join(APP_ROOT, \"app\"))\n", - "\n", - "print(\"Preparing study: %s...\" % study[\"name\"])\n", - "\n", - "for experiment in study[\"experiments\"]:\n", - " \n", - " print(\"Preparing experiment: %s\" % experiment[\"name\"])\n", - " \n", - " # Get and set the job container image for this experiment\n", - " IMAGE = experiment[\"image\"]\n", - " !ks param set train image {IMAGE}\n", - "\n", - " # Set the gym learning environment on which to train\n", - " ENVIRONMENT = experiment[\"env\"]\n", - " !ks param set train env {ENVIRONMENT}\n", - " \n", - " !ks param set train namespace {NAMESPACE}\n", - "\n", - " # Set the algorithm and network part to use for policy and value networks\n", - " !ks param set train algorithm \"agents.ppo.PPOAlgorithm\"\n", - " !ks param set train network \"agents.scripts.networks.feed_forward_gaussian\"\n", - "\n", - " # Run in training mode with 30 CPU and 30 agents for 20M steps\n", - " !ks param set train run_mode train\n", - " !ks param set train num_cpu 30\n", - " !ks param set train num_agents 30\n", - " !ks param set train steps 15e6\n", - "\n", - " !ks param set train update_every 60\n", - " !ks param set train eval_episodes 25\n", - "\n", - " for replica_id in range(experiment[\"num_replicas\"]):\n", - "\n", - " # Construct a unique name for the training job based on experiment[\"name\"]\n", - " now=datetime.datetime.now()\n", - " JOB_SALT=now.strftime(\"%m%d-%H%M\") + \"-\" + uuid.uuid4().hex[0:4]\n", - " BASE_NAME = experiment[\"name\"]\n", - " TRAIN_JOB_NAME=BASE_NAME + \"-\" + JOB_SALT\n", - " !ks param set train name {TRAIN_JOB_NAME}\n", - "\n", - " # Construct a log dir path for this experiment\n", - " LOG_DIR=\"{0}/{1}\".format(STUDY_LOGS_ROOT, TRAIN_JOB_NAME)\n", - " !ks param set train log_dir {LOG_DIR}\n", - "\n", - " if \"replicas\" not in experiment:\n", - " experiment[\"replicas\"] = []\n", - " experiment[\"replicas\"].append({\"log_dir\": LOG_DIR})\n", - " \n", - " print(\"Preparing replica %s of %s for experiment %s\" % (replica_id + 1, experiment[\"replicas\"], experiment[\"name\"]))\n", - " !ks apply default -c train" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following shows our updated study config with the log directories to which each of our experiments will be writing TensorBoard logs." - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'experiments': [{'env': 'KukaBulletEnv-v0',\n", - " 'image': 'gcr.io/kubeflow-rl/agents:0405-1658-39bf',\n", - " 'name': 'kuka',\n", - " 'num_replicas': 4,\n", - " 'replicas': [{'log_dir': '/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-5ed3'},\n", - " {'log_dir': '/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-ae54'},\n", - " {'log_dir': '/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-e6f1'},\n", - " {'log_dir': '/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-545d'}]}],\n", - " 'name': 'replicated-kuka-demo'}" - ] - }, - "execution_count": 137, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "study" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Monitoring training" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "With the following we can list the TFJobs that are currently running in {NAMESPACE} and verify that the above has created the jobs we expected." - ] - }, - { - "cell_type": "code", - "execution_count": 138, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME AGE\n", - "kuka-0405-1707-545d 4s\n", - "kuka-0405-1707-5ed3 12s\n", - "kuka-0405-1707-ae54 10s\n", - "kuka-0405-1707-e6f1 6s\n" - ] - } - ], - "source": [ - "!kubectl get tfjobs -n {NAMESPACE}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can display the IDs and status of all pods in the namespace of our training jobs via the following:" - ] - }, - { - "cell_type": "code", - "execution_count": 148, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-56c8966c67-9pvbm 2/2 Running 0 36d\n", - "ambassador-56c8966c67-mvqjc 2/2 Running 0 31d\n", - "ambassador-56c8966c67-sch5s 2/2 Running 0 36d\n", - "argo-ui-5d7fbb58d4-m6lmm 1/1 Running 0 31d\n", - "jupyter-cwbeitel 1/1 Running 0 16d\n", - "kuka-0405-1707-545d-master-b1pj-0-26qj4 1/1 Running 0 1m\n", - "kuka-0405-1707-5ed3-master-oa84-0-td6bq 1/1 Running 0 1m\n", - "kuka-0405-1707-ae54-master-h5wu-0-j8zv2 1/1 Running 0 1m\n", - "kuka-0405-1707-e6f1-master-wg99-0-9jjz4 1/1 Running 0 1m\n", - "nfs-1-provisioner-7497d85d76-j9492 1/1 Running 0 31d\n", - "nfs-2-provisioner-59bf96c5d4-g22wx 1/1 Running 0 31d\n", - "tf-hub-0 1/1 Running 0 36d\n", - "tf-job-operator-5c497d644d-rd5j9 1/1 Running 6 31d\n", - "workflow-controller-7d8f4bc5df-xjtw8 1/1 Running 0 36d\n" - ] - } - ], - "source": [ - "!kubectl get pods -n {NAMESPACE} --show-all" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following can be used to print logs from the last TFJob submitted above:" - ] - }, - { - "cell_type": "code", - "execution_count": 149, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'kuka-0405-1707-545d'" - ] - }, - "execution_count": 149, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "TRAIN_JOB_NAME" - ] - }, - { - "cell_type": "code", - "execution_count": 150, - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "'kuka-0405-1707-545d-master-b1pj-0-26qj4'\n", - "/usr/local/lib/python2.7/dist-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", - " from ._conv import register_converters as _register_converters\n", - "INFO:tensorflow:Start a new run and write summaries and checkpoints to /mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-545d.\n", - "{'algorithm': ,\n", - " 'debug': True,\n", - " 'discount': 0.995,\n", - " 'env': 'KukaBulletEnv-v0',\n", - " 'env_processes': True,\n", - " 'eval_episodes': 25,\n", - " 'hparam_set_id': 'pybullet_kuka_ff',\n", - " 'init_logstd': -1,\n", - " 'init_mean_factor': 0.1,\n", - " 'init_output_factor': 0.1,\n", - " 'init_std': 0.35,\n", - " 'kl_cutoff_coef': 1000,\n", - " 'kl_cutoff_factor': 2,\n", - " 'kl_init_penalty': 1,\n", - " 'kl_target': 0.01,\n", - " 'learning_rate': 0.0001,\n", - " 'log_device_placement': False,\n", - " 'logdir': '/mnt/nfs-1/train_dirs/studies/replicated-kuka-demo/kuka-0405-1707-545d',\n", - " 'max_length': 1000,\n", - " 'network': ,\n", - " 'normalize_ranges': True,\n", - " 'num_agents': 30,\n", - " 'num_gpus': 0,\n", - " 'optimizer': ,\n", - " 'policy_layers': (200, 100),\n", - " 'render_out_dir': None,\n", - " 'render_secs': 600,\n", - " 'run_base_tag': '0e90193e',\n", - " 'run_mode': 'train',\n", - " 'save_checkpoint_secs': 600,\n", - " 'steps': 15000000,\n", - " 'update_epochs': 25,\n", - " 'update_every': 60,\n", - " 'use_gpu': False,\n", - " 'value_layers': (200, 100),\n", - " 'weight_summaries': {'all': '.*',\n", - " 'policy': '.*/policy/.*',\n", - " 'value': '.*/value/.*'}}\n", - "INFO:tensorflow:Graph contains 44607 trainable variables.\n", - "2018-04-05 17:07:48.368737: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA\n", - "INFO:tensorflow:\n", - "--------------------------------------------------\n", - "Phase train (phase step 0, global step 0).\n", - "2018-04-05 17:07:52.639292: I tensorflow/core/kernels/logging_ops.cc:79] return and value: [-0.322072715][0.0247094277]\n", - "2018-04-05 17:07:52.639757: I tensorflow/core/kernels/logging_ops.cc:79] normalized advantage: [4.529953e-06]\n", - "2018-04-05 17:07:56.642998: I tensorflow/core/kernels/logging_ops.cc:79] value loss: [0.598414481]\n", - "2018-04-05 17:07:56.642998: I tensorflow/core/kernels/logging_ops.cc:79] policy loss: [0.245057404]\n", - "2018-04-05 17:07:56.643401: I tensorflow/core/kernels/logging_ops.cc:79] current penalty: [1]\n", - "2018-04-05 17:07:56.667916: I tensorflow/core/kernels/logging_ops.cc:79] kl change: [0.000576514052]\n", - "2018-04-05 17:07:56.668041: I tensorflow/core/kernels/logging_ops.cc:79] decrease penalty [0]\n", - "2018-04-05 17:08:01.188702: I tensorflow/core/kernels/logging_ops.cc:79] return and value: [-0.112732142][-0.122791454]\n", - "2018-04-05 17:08:01.188830: I tensorflow/core/kernels/logging_ops.cc:79] normalized advantage: [-4.44787338e-06]\n", - "2018-04-05 17:08:05.169252: I tensorflow/core/kernels/logging_ops.cc:79] policy loss: [0.0643984899]\n", - "2018-04-05 17:08:05.169253: I tensorflow/core/kernels/logging_ops.cc:79] value loss: [0.631897569]\n", - "2018-04-05 17:08:05.169620: I tensorflow/core/kernels/logging_ops.cc:79] current penalty: [0.666666687]\n", - "2018-04-05 17:08:05.196198: I tensorflow/core/kernels/logging_ops.cc:79] kl change: [0.00174093829]\n", - "2018-04-05 17:08:05.196311: I tensorflow/core/kernels/logging_ops.cc:79] decrease penalty [0]\n", - "2018-04-05 17:08:10.431437: I tensorflow/core/kernels/logging_ops.cc:79] return and value: [-0.0636681393][-0.17371732]\n", - "2018-04-05 17:08:10.431553: I tensorflow/core/kernels/logging_ops.cc:79] normalized advantage: [2.87914918e-05]\n", - "2018-04-05 17:08:14.490344: I tensorflow/core/kernels/logging_ops.cc:79] policy loss: [0.018688973]\n", - "2018-04-05 17:08:14.490361: I tensorflow/core/kernels/logging_ops.cc:79] value loss: [0.676567554]\n", - "2018-04-05 17:08:14.493676: I tensorflow/core/kernels/logging_ops.cc:79] current penalty: [0.444444448]\n", - "2018-04-05 17:08:14.518774: I tensorflow/core/kernels/logging_ops.cc:79] kl change: [0.00242574792]\n", - "2018-04-05 17:08:14.518928: I tensorflow/core/kernels/logging_ops.cc:79] decrease penalty [0]\n", - "2018-04-05 17:08:20.096456: I tensorflow/core/kernels/logging_ops.cc:79] return and value: [-0.132051274][-0.186460227]\n", - "2018-04-05 17:08:20.096586: I tensorflow/core/kernels/logging_ops.cc:79] normalized advantage: [-3.82823964e-06]\n", - "2018-04-05 17:08:24.128271: I tensorflow/core/kernels/logging_ops.cc:79] value loss: [0.489235461]\n", - "2018-04-05 17:08:24.128271: I tensorflow/core/kernels/logging_ops.cc:79] policy loss: [0.0739461407]\n", - "2018-04-05 17:08:24.133808: I tensorflow/core/kernels/logging_ops.cc:79] current penalty: [0.296296299]\n", - "2018-04-05 17:08:24.157936: I tensorflow/core/kernels/logging_ops.cc:79] kl change: [0.00183598453]\n", - "2018-04-05 17:08:24.158047: I tensorflow/core/kernels/logging_ops.cc:79] decrease penalty [0]\n" - ] - } - ], - "source": [ - "import subprocess\n", - "master_pod = subprocess.check_output([\"kubectl\", \"-n\", NAMESPACE, \"get\", \"pods\", \"--selector=tf_job_name=\" + TRAIN_JOB_NAME,\n", - " \"-o\", \"jsonpath='{.items[*].metadata.name}'\"]).decode(\"utf-8\")\n", - "print(master_pod)\n", - "!kubectl logs -n {NAMESPACE} {master_pod}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Awesome! It looks like our training job started up just fine. Next we'll want to be able to look at things with TensorBoard." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Launching tensorboard" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If you're running this demo in `gcr.io/kubeflow/tensorflow-notebook-cpu` or any other environment with the TensorHub extension installed then you're only a few clicks away from monitoring your job with TensorBoard.\n", - "\n", - "But first we need to know that this extension is configured to run the command `tensorboard --logdir /home/jovyan` so in order for our logs on NFS to occur (at least symbollically) with in this tree we'll need to create a symbolic link as follows:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!ln -s {NFS_MOUNT_PATH}/train_dirs /home/jovyan/logs" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we're ready to open TensorBoard. This can be done from the \"New\" dropdown on `http://localhost:8000/user/{your-username}/tree` by selecting \"Tensorboard\" which will open TensorBoard in a new tab. Note that you may need to grant permission for this through your pop-up blocker if you have one." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For reference below we have a plot of the mean_score variable with respect to number of training steps for a study parameterized as above." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![](tboard_mean_score.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As you can see there is variability both between and within replicas but some still seem to reach stably high performance." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Rendering" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's take a look and see what our agent looks like when it's performing the robotic-arm-control-picking-up-blocks task. This will involve running render jobs in batch that will use parameters from the most recent checkpoint to restore a version of the model and then capture video sequences as the task is performed." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Initiating render jobs\n", - "\n", - "Here we'll create a render job for each of the experiments in our study. This will generate multiple MP4 videos of the agent performing the task for each replica run with renders landing in ${LOG_DIR}/render/[some_unique_subdir_name]." - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[34mINFO \u001b[0mParameter 'name' successfully set to '\"render-0319-2043-cccf\"' for component 'render'\n", - "\u001b[34mINFO \u001b[0mParameter 'log_dir' successfully set to '\"/mnt/nfs-1/train_dirs/kubeflow-rl/studies/replicated-kuka-demo-1/kuka-0319-1734-9cff\"' for component 'render'\n", - "\u001b[34mINFO \u001b[0mParameter 'image' successfully set to '\"gcr.io/kubeflow-rl/agents:0319-1806-6614\"' for component 'render'\n", - "\u001b[34mINFO \u001b[0mUpdating tfjobs kubeflow.render-0319-2043-cccf\n", - "\u001b[34mINFO \u001b[0mCreating non-existent tfjobs kubeflow.render-0319-2043-cccf\n", - "\u001b[34mINFO \u001b[0mParameter 'name' successfully set to '\"render-0319-2043-a832\"' for component 'render'\n", - "\u001b[34mINFO \u001b[0mParameter 'log_dir' successfully set to '\"/mnt/nfs-1/train_dirs/kubeflow-rl/studies/replicated-kuka-demo-1/kuka-0319-1734-6554\"' for component 'render'\n", - "\u001b[34mINFO \u001b[0mParameter 'image' successfully set to '\"gcr.io/kubeflow-rl/agents:0319-1806-6614\"' for component 'render'\n", - "\u001b[34mINFO \u001b[0mUpdating tfjobs kubeflow.render-0319-2043-a832\n", - "\u001b[34mINFO \u001b[0mCreating non-existent tfjobs kubeflow.render-0319-2043-a832\n", - "\u001b[34mINFO \u001b[0mParameter 'name' successfully set to '\"render-0319-2043-49f7\"' for component 'render'\n", - "\u001b[34mINFO \u001b[0mParameter 'log_dir' successfully set to '\"/mnt/nfs-1/train_dirs/kubeflow-rl/studies/replicated-kuka-demo-1/kuka-0319-1735-f24e\"' for component 'render'\n", - "\u001b[34mINFO \u001b[0mParameter 'image' successfully set to '\"gcr.io/kubeflow-rl/agents:0319-1806-6614\"' for component 'render'\n", - "\u001b[34mINFO \u001b[0mUpdating tfjobs kubeflow.render-0319-2043-49f7\n", - "\u001b[34mINFO \u001b[0mCreating non-existent tfjobs kubeflow.render-0319-2043-49f7\n", - "\u001b[34mINFO \u001b[0mParameter 'name' successfully set to '\"render-0319-2043-47e6\"' for component 'render'\n", - "\u001b[34mINFO \u001b[0mParameter 'log_dir' successfully set to '\"/mnt/nfs-1/train_dirs/kubeflow-rl/studies/replicated-kuka-demo-1/kuka-0319-1735-222e\"' for component 'render'\n", - "\u001b[34mINFO \u001b[0mParameter 'image' successfully set to '\"gcr.io/kubeflow-rl/agents:0319-1806-6614\"' for component 'render'\n", - "\u001b[34mINFO \u001b[0mUpdating tfjobs kubeflow.render-0319-2043-47e6\n", - "\u001b[34mINFO \u001b[0mCreating non-existent tfjobs kubeflow.render-0319-2043-47e6\n" - ] - } - ], - "source": [ - "import datetime\n", - "import uuid\n", - "import os\n", - "\n", - "os.chdir(os.path.join(APP_ROOT, \"app\"))\n", - "\n", - "for experiment in study[\"experiments\"]:\n", - " for replica in experiment[\"replicas\"]:\n", - " \n", - " LOG_DIR = replica[\"log_dir\"]\n", - " IMAGE = experiment[\"image\"]\n", - " \n", - " now=datetime.datetime.now()\n", - "\n", - " JOB_SALT=now.strftime(\"%m%d-%H%M\") + \"-\" + uuid.uuid4().hex[0:4]\n", - " RENDER_JOB_NAME=\"render-\" + JOB_SALT\n", - " !ks param set render name {RENDER_JOB_NAME}\n", - "\n", - " !ks param set render log_dir {LOG_DIR}\n", - " !ks param set render image {IMAGE}\n", - " \n", - " !ks apply default -c render" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "It will take about 15min for each render to run. We can see whether the renders are complete by checking the third column in the following:" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME DESIRED SUCCESSFUL AGE\n", - "kuka-0319-1734-6554-master-a43s-0 1 0 14m\n", - "kuka-0319-1734-9cff-master-dbpf-0 1 0 14m\n", - "kuka-0319-1735-222e-master-raq6-0 1 0 13m\n", - "kuka-0319-1735-f24e-master-gx11-0 1 0 14m\n", - "render-0319-1748-3227-master-rncq-0 1 0 41s\n", - "render-0319-1748-7e6f-master-kv1m-0 1 0 34s\n", - "render-0319-1748-9983-master-bdrg-0 1 0 36s\n", - "render-0319-1748-d6d4-master-r8g6-0 1 0 39s\n" - ] - } - ], - "source": [ - "!kubectl get jobs -n {NAMESPACE} --show-all" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "First let's get the GCS path of the directory containing renders for an experiment of interest. For a reminder, here's the structure of our study:" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'experiments': [{'env': 'KukaBulletEnv-v0',\n", - " 'image': 'gcr.io/kubeflow-rl/agents:0319-1806-6614',\n", - " 'name': 'kuka',\n", - " 'num_replicas': 4,\n", - " 'replicas': [{'log_dir': '/mnt/nfs-1/train_dirs/kubeflow-rl/studies/replicated-kuka-demo-1/kuka-0319-1734-9cff'},\n", - " {'log_dir': '/mnt/nfs-1/train_dirs/kubeflow-rl/studies/replicated-kuka-demo-1/kuka-0319-1734-6554'},\n", - " {'log_dir': '/mnt/nfs-1/train_dirs/kubeflow-rl/studies/replicated-kuka-demo-1/kuka-0319-1735-f24e'},\n", - " {'log_dir': '/mnt/nfs-1/train_dirs/kubeflow-rl/studies/replicated-kuka-demo-1/kuka-0319-1735-222e'}]}],\n", - " 'name': 'replicated-kuka-demo-1'}" - ] - }, - "execution_count": 82, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "study" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's take a look at the renders for the first replica of the first experiment. If we've run multiple renders each render job will be stored in a separate subdirectory of render/ named according to the render ID, e.g.:" - ] - }, - { - "cell_type": "code", - "execution_count": 188, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0319-1815-77cc\t0319-2043-c21d\n" - ] - } - ], - "source": [ - "kuka_experiment_logdir = study[\"experiments\"][0][\"replicas\"][0][\"log_dir\"]\n", - "!ls {kuka_experiment_logdir}/render" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "When OpenAI Gym writes renders to disk it includes a file manifest and some basic statistics. We'll use the following functions to load and display these for all of the renders that have been performed for the log dir we have chosen." - ] - }, - { - "cell_type": "code", - "execution_count": 186, - "metadata": {}, - "outputs": [], - "source": [ - "import pprint\n", - "def load_gym_metadata_for_render_path(path):\n", - " \"\"\"Load render manifest and stats from render output path.\n", - " \n", - " path: a path to which renders and metadata was written using an OpenAI Gym monitor call.\n", - " \n", - " \"\"\"\n", - " manifest = None\n", - " stats = None\n", - " counter = 0\n", - " files = os.listdir(path)\n", - " for filename in files:\n", - " file_path = os.path.join(path, filename)\n", - " if \"manifest\" in filename:\n", - " with open(file_path, \"r\") as f:\n", - " manifest = json.loads(f.readline())\n", - " elif \"episode_batch\" in filename:\n", - " with open(file_path, \"r\") as f:\n", - " stats = json.loads(f.readline())\n", - " stats[\"readable_timestamp\"] = datetime.datetime.fromtimestamp(\n", - " float(stats[\"initial_reset_timestamp\"])).strftime('%Y-%m-%d %H:%M:%S')\n", - " \n", - " return manifest, stats" - ] - }, - { - "cell_type": "code", - "execution_count": 187, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'0319-1815-77cc': {'manifest': {'env_info': {'env_id': 'KukaBulletEnv-v0',\n", - " 'gym_version': '0.9.4'},\n", - " 'stats': 'openaigym.episode_batch.0.45.stats.json',\n", - " 'videos': [['openaigym.video.0.45.video000000.mp4',\n", - " 'openaigym.video.0.45.video000000.meta.json'],\n", - " ['openaigym.video.0.45.video000001.mp4',\n", - " 'openaigym.video.0.45.video000001.meta.json'],\n", - " ['openaigym.video.0.45.video000002.mp4',\n", - " 'openaigym.video.0.45.video000002.meta.json'],\n", - " ['openaigym.video.0.45.video000003.mp4',\n", - " 'openaigym.video.0.45.video000003.meta.json'],\n", - " ['openaigym.video.0.45.video000004.mp4',\n", - " 'openaigym.video.0.45.video000004.meta.json'],\n", - " ['openaigym.video.0.45.video000005.mp4',\n", - " 'openaigym.video.0.45.video000005.meta.json']]},\n", - " 'stats': {'episode_lengths': [198, 199, 199, 199, 200],\n", - " 'episode_rewards': [-941.2689749679664,\n", - " -939.333099645894,\n", - " -925.3936405428902,\n", - " -920.6183247825004,\n", - " -940.2925663953266],\n", - " 'episode_types': ['t', 't', 't', 't', 't', 't'],\n", - " 'initial_reset_timestamp': 1521483337.954766,\n", - " 'readable_timestamp': '2018-03-19 18:15:37',\n", - " 'timestamps': [1521483434.4448,\n", - " 1521483532.085795,\n", - " 1521483628.837687,\n", - " 1521483726.584196,\n", - " 1521483825.303928]}},\n", - " '0319-2043-c21d': {'manifest': {'env_info': {'env_id': 'KukaBulletEnv-v0',\n", - " 'gym_version': '0.9.4'},\n", - " 'stats': 'openaigym.episode_batch.0.44.stats.json',\n", - " 'videos': [['openaigym.video.0.44.video000000.mp4',\n", - " 'openaigym.video.0.44.video000000.meta.json'],\n", - " ['openaigym.video.0.44.video000001.mp4',\n", - " 'openaigym.video.0.44.video000001.meta.json'],\n", - " ['openaigym.video.0.44.video000002.mp4',\n", - " 'openaigym.video.0.44.video000002.meta.json'],\n", - " ['openaigym.video.0.44.video000003.mp4',\n", - " 'openaigym.video.0.44.video000003.meta.json'],\n", - " ['openaigym.video.0.44.video000004.mp4',\n", - " 'openaigym.video.0.44.video000004.meta.json']]},\n", - " 'stats': {'episode_lengths': [202, 201, 198, 202],\n", - " 'episode_rewards': [-898.8354846838023,\n", - " -884.6022196284799,\n", - " -946.5015700164948,\n", - " -874.5368365146066],\n", - " 'episode_types': ['t', 't', 't', 't', 't'],\n", - " 'initial_reset_timestamp': 1521492234.784211,\n", - " 'readable_timestamp': '2018-03-19 20:43:54',\n", - " 'timestamps': [1521492325.675906,\n", - " 1521492416.316332,\n", - " 1521492505.737932,\n", - " 1521492597.085779]}}}\n" - ] - } - ], - "source": [ - "def list_renders(logdir):\n", - " renders = {}\n", - " for _, render_ids, _ in os.walk(os.path.join(renders_root)):\n", - " for render_id in render_ids:\n", - " render_dir = os.path.join(renders_root, render_id)\n", - " manifest, stats = load_gym_metadata_for_render_path(render_dir)\n", - " renders[render_id] = {\n", - " \"manifest\": manifest,\n", - " \"stats\": stats\n", - " }\n", - "\n", - " return renders\n", - "\n", - "renders = list_renders(kuka_experiment_logdir)\n", - "pprint.pprint(renders)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Inspecting the result" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Lastly we'll pick one of the renders above to display inline in the notebook by providing a render ID and filename (ending in mp4). This file path will then be passed to a snippet that will load and display the content of the video as an HTML widget." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def get_render_path(log_dir, render_id, filename):\n", - " return os.path.join(log_dir, \"render\", render_id, filename)\n", - "\n", - "render_path = get_render_path(kuka_experiment_logdir, \"0319-2043-c21d\", \"openaigym.video.0.44.video000000.mp4\")" - ] - }, - { - "cell_type": "code", - "execution_count": 191, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 191, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import io\n", - "import base64\n", - "from IPython.display import HTML\n", - "\n", - "video = io.open(render_path, 'rb').read()\n", - "encoded = base64.b64encode(video)\n", - "HTML(data=''''''.format(encoded.decode('ascii')))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Great job! 🎉🎉🎉" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Well that concludes this demonstration. If you have suggestions on how to make it better please feel free to [open an issue](https://github.com/kubeflow/examples) and let us know your feedback.\n", - "\n", - "If this is your first time working with these technologies you might be interested in some suggestions of good next steps. Here are some ideas:\n", - "- Try training with some other learning environments (from the ID fields [here](https://github.com/bulletphysics/bullet3/blob/master/examples/pybullet/gym/pybullet_envs/__init__.py)) and tweet your results! E.g.\n", - " - RacecarBulletEnv-v0\n", - " - MinitaurBulletDuckEnv-v0\n", - " - HalfCheetahBulletEnv-v0\n", - "- Take a shot at implementing your own gym learning environment and repeat the above." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/agents/doc/jhub-spawn.png b/agents/doc/jhub-spawn.png deleted file mode 100644 index 1cd08c32c780c141bb16adbcf9f9c60b7fd667e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82986 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

U)K#CxiOPv%R)Ua`^Zc@^Fm+~s!780 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

rdMfs>qnJ#ji;lGHk%i+q_-@P5(7D*Ke`u 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�^@aGPh zsP)aVwp3Ck2i*g<<#Xs2U|*)yrW^kwp5fYKJ%)&=Bu7w7Y5q(rV;mu&Y~ZrjEVz;~ zA(+h{P@01`))8=yEs@^GX@CdSHGH{7Z%lZ~?@V3MG+r8D49qfn$;s1;9!!(l#6Jn( zjcfZ>lj-~-PZR8p%fyhqJ(rdd)s&^ z*<)sXiR$n1Z+FrDDkeQFtUP?p(wo~DTRQlsHJH1XVn@v|o8HR@0qD~taDa4Fs2-IE zHec`iZTMxQ^Nge}g3<+Lib2|-QYIDq{bxv$T#!O~&C0 z69ag@IpjlGhu)u2MEh>)tKK4Lno+KF54eRAdB)Kqhm==ryA3*mC69#mzC7}W-#??R ziV$^uXGZH~*v!mBm%FN$Z3S5yN977u`^nei8Qnywg|KtqOfgA3x!r4t?{&HetJH_o z2&v^YW+3Q$&Qf@6{39tv#GOlg83Rq3aWoInOe@3Dhot_wzGbKEJPQnD|6bmLG8G5x}_GrGIlvP+Ow|?(7A8nBMd6KtH*(8$hdF zch7Di{&yq44@}$ke}7WLSu7Kc{@!JSr0l*LwVm%p-AbeLq1R1lEf4h-d!GTLV-~z5 zwM*GyGmme`aq^TYc;dW7bV>b+l#FbLTCib%$9H+Hb(g>=8~!P|BF)}7Tl>ne&D7_m zsZGR9Od#fUxlO(T(g;?$%3wFDW}3w= zza?gXup3W^FM>tlKB{l0e~ZQ1gJrafz40W+8&s=z4}|ppImYSL?~|>{S!5K2l%*%Uy}mX^w&ylL5k`x_1oIx zzxLD?l>GvVt+V(SQ2YXlEqvHEe0~ANFQE9Zwe|}regVb*S3pq(-`$q^s8id1zvnLC O@8%8d>!{x?gZ>BfPcUNu diff --git a/agents/doc/render.mp4 b/agents/doc/render.mp4 deleted file mode 100644 index 7cfb7874a384866ee241fe2f028a28123ddba8d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217431 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�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

Dy&zh|y$p?4gQ)DptOSVGjg`7it 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

&7Okc#8ECd#Jc#i2HZnX*&m)CPjsrF!Lp-$- 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

+bDI#H ziOYxj_U&(f{YP4fdw0aeZI^`Fh|%uMhql0_>T5;I{w?-Zn5eZ`b43VE{b)x__RtSS zA9Si!erIQ!!>fan;rHLa82;&pSHtrI*}Azm?CjoF8MQGITb1i22~Q=-4;%PMB=#GJ z3{k==Cvo69k|JG>%fyP8DXs+>ttug&2!$e1RKxk;@?y zoHHE4ccZ_8s?k=W;t<@#lQ2q$2}zg9tKCSD%8I1o5)jw_jvO70DBZJg1L ztgj=0MdV9VUx;M#y`l(+j~SSM^+qrEoep>IJy7#h+XPqllnCl&bSf8<*D1py?`8Q# z*-PcWOu!A}7wx%W@w2!~JTURUGYN5Bjk-;ri5GwoDTm4op z2!x|iAVi&sIuI6CFyvj|#y!^9_UVaU$_qgnucP15!Y%)zHM$ic68YIKH*)+wD6rwW zp$x3}di;IQ_tCF^?`HD#3iz2&fAAH!+l#W}$R!L=aOjglckf|efE9sot=BXwC&UDkKIWxUcp%oNb3H9nVt8dvlS#K?g zhBq*{S#-yUK*`{y5E*Xd#0uoGz;Hu=wc%Mq0*Ab-gp25UEmx6s8O^)NyE@m^DKE41 z>UjKDdPiUSJPO0bH_|#sTwwL1J@EZn-TUi;taGkekvOA5=my8D`)cwML%8W-=EOHY z@#cWS>?5SG!!HO9SKOvi!5VFL$BD|vT8MMZ1;?Y{1c47Q#B0x&z!PIc_wh# zo|aTlP%`DkexetK zjHhlgX6^2<{pdHt?ajNx+4FxI4%M#CoI}DGOz!d=(m80Pu~d3K-CY!!I9C_$}4q z%&%0*Yyt%+*vhy>lmKLi(Af@VB?wS(BwX22R|s&hxGxeFcxVkH?h<||fHv`pLT=^_ zPx_J%j8I}C6#%ZQwMBE`E4E~1Y|jWBvYd_Epf-EB1e+}zgK9B-lkeSJqf4e@$>cfkP|s{f`-i;Y zI@}XrPd5nq!kREedj*{{$?Sojya%ey(1*}wqAwYXMPCybc017kj0v_h&at_p{Hb0h zx}zP-)Orq1^rzS5u1+7#5$XhaN1Eg|@H*{(GCU9}Z-i}@!yPw(4Wg1e=c9>_C+OP;Nic`=V2TaWZPx8icFgX7c{xY3U5q{=dQBF*vo65YdQ z*{-AiMrhy7Un6uG*x1IoD(*ldg4h6BECh zyak|#4vSXxVdDRcH+U3l(VX$)1Q!n~z(OjLNmXqtI=*EAiSv?umfI4qyI#sD|09WC z1gu9^#bm6j;X@bM;zE8u@c@4d7{G&(ex8tqOLlm2S4mIgYEqj?-BYz8^gVcR-*1~g zd-i-dIMBAQ4il*Xl1%$gImb2>`&BT>b8iV{(P4_R_I)R=OS&AU5)itQ%QKqkEC8Wn z@C3$~ouoYJ-k2w-3o~&pbu7I}jSb_K!kIYOxFou2gzy$5RauI+6ilW=#U`kHP}?R6 znAq0Q72Zmq60O@2JQf8-$gCJd)Lr253!IMugJ%+oj<$pUBBn(#Bo>n^Ys15b_lAG@ zmw!6^`d5G8Rk(VFH$8OmLvF|ppOl`8p}&3@{d*NTK@-Pl^I1XVJ0#IcxwzD`YmnMx~oSsrjPVpTz?Oj zaz{X4dbmIlkH$~oSISAM+F`o%N*oswUBQ;{ThwW%Rfia)A&@8KSO?r0ZOxRBOs^G2 zLS$4NQb=4Q0>QCKXo(P3xIRWuPga>Qv(ADzM3kn7tuQJCuZ|>&KpAR_K}pk4FkKRg z4*?~Xm@wL2se+1DL_p&(CM-jT^0B2R;RFW@p=e2)j)cL%x(E}l1C8aDoK%w(Xj4GG zB5<||*mZ&#lc87KtQdi$Vk(Q3?s|J&FHCTr-kt*0VB(LzAO7!u|Gy5;pT8J>{g;0; z+}hof6mH?w7y7;v38TE!`q85D6AIINA5HfvMZG<%@H6bgd0=w8AT@DG%v#Z1V8(i) zdYe_3D;deSGBxnEjkOf6i#l8FD9f@0{=)9syaqaZQGvxN>+VIum z``U%*Wcc=n*Z#yA<1K5NfbtlQ@3mM36>V(vZM5@AkJFw7s^JIC$TO$DJP+s`bD9ah zjz{ui9jm6@sJ<$Xg@%SGS|Q>Y60}Dj)QD#zptKGy4L~QG?m-F88NwfH#F5`KAX`3;E zyv`6Ka9F|=#Td^Xz$7s!cT%(Z?lN6r6J=lK5_=|MX-oI=0H< zTb5oWn-jM@h`3ftCN9HCR8F-a;zhqh&HGReL5fsL+}z3E=meQKgv(NN0;K*>XnH!P+I@1vhb~1mxkhd zvTYc4wzndbm_JQ9~n=i_Z8~sC0&z0TUQ&D_C{` zM3qo6gETD&#rVMDuE-Qw2eL= zA>lC5j^sZ70NepfC$axBEkKYrxQtSo5EvaZAB2T3J*A8|f6#N@`LQaVy00JGm^^;; zVEFZ~e>MC@TPJ_>)kA%wk{Zjy2knhtCr7!+JMoSOrTR~T2ntgTqgYQDF+ zW~fV2zrzbfCmNVI9G>e(f5bIvUEfXH-q6cLr&`Uftyz-6}kKJ z&6;+S&_wQrU+lnVNLRbzT0^_lwS&K9i^|rDi(;`Xg}<5jYSP2rvU;=(ZeQ_ymVq0h zgD+Q|i9Ni)zIG%}&S1EqE>7YWeaUq7m9nOC%vD@b}0&qcI<5! z1t6PiaL6j+uw%84il$6}*%RLawDOoJ{8;oA_o^!0#}vwb#E1$-a9+OPU3@tU6bfZ@ z^L~OA)%i3kz*ji>q;w|t|}S2g9}|Zr>jK ziSX+4n84+nSqyT~w;(@@1_`xeDJ+mL;V%PpBD>^eTptCGJ?~q*k7DQ-r)1jRtKLOT z9di_$K9}^pb~?$51OzC$r)mM_Eu=hS9bQ4Zi2e_3?e0x$HsZ(!w8 z(UT_RQ8aB^S74T%GR}*F^*n3`zlyMqd``|D_$VHr0(W&YlhbM~U;=zEN7gsHx@UDP z33{&E+|V}4dWm&dXM99sBN{MgGAdpoj>5QodE5q`u7JMx3IIp$n(MwUsDMtb>bU3R z7vq7dXkSW!s?J`e{xW{Ip-;bPp@qg4hPA_Cd*?v$nqE59mdb2PPTOIufM*web`!0o z^iX=Oo2QX_WSNo8w~73>=8*SN%{#@tShcKm`7uw#wmF~7uk zp4*Vz?Ec1a_#F6kLvXIIfpHXqqL3Hak9S0IX}+@6AJ4oS(sW}haIvS(S=omB z?7Gf><xe)D_*69^z5u@dE_s*%e8#(sljuB(BV(zA(Ya{3?V398+$-xbh9#Ar;HKPoH72cXCxVh!sXo~k+G&%D z)+O+{6g|KU3!)0#VzY=S-PGV$Ni-9cs4GdD(AdYaH_$Z_O+%9pa}{qqr#7IITh?SO z!jP2m92HMu5T@U_>Q+4F3pf(0ERN0YgZZpMSv)}){T}&%bJZmuKiZHdW}T;9oelTz z-x>b1zx*?O_x4v_g}ccXKvge&lBP1y6`}N0{;F~Cl~1Q!C9~olTWx5BK^4F3lhl4# zmBCHlz8SpeQCXh%D1jJW$!-xYPhTKK@E=|4ljTIVEBi> z)gZ>f8#R^uKB3wqD{`3;hIMnBZC*6xq!*L?9rr54Dsx9OFHV(=MXL9axhO01h%9xz zc)Z7123Ir{FN!KS*AOmgy_{ecgbM=y)MsD!QZEXc1tK%^D8cfSh0M4R6JpI9*1%yJ zvXe~U+Y$cGh6WeR*Y?IsBEtfY)e2n{W0?a|TS=R)WOOl9g{ySM9oa`rmNli4e3Ydi z&Lzmyi!4Rh#U{^l-GQB)NLMCmn|8s}OCof8n>rs{cHIBbPwBVw_RuTg2Uh5+4e~G- zo+Q2~Otb~z73{xAqH)MrA-ds6oQF5jhdq?)n<(mswe-uA9^35c4A}Y9Zu-^=0vgU8 zSKzoj@}s^OWzsQKoL7%I`|rblbxkwn?18BV>dG^Po}a6FN?hrlS}?bZxTlL}BJj~z z=pMKk+tB^ox(3kwJjK1pN?E5|xg*BuHoTqk(;r?8XIkOz#Z9{BV}S)-If^gI*iu~dUzsQZ?rd4MZ^)l6{@qJSl z>+7+U%a$~QNidP7DFFRgar=5-gXH?g?TeRu<5sJd1V2-w)8=?i$AASk!%Ic0fsNE8 zu$y4&h^V&$-ago(9x$grnFqS_q!Y(}_8WILhohroZ}-cM%c&j~;!3NtFF;(RIm__s z$3S}Kq8Ng)QbF~|1Mj-1$G|ODZ2m5jZBeTaA^fDYSK^B3@ZeD8IMWJ4l}Ef-i7X6pdr}JD0_bj2lq8c*uW z6t$2`n+@&LJ=uBio~BP@AwLEicq8`h@LGcqth{}xm3#+EpYq~@a9met__UY}U9Yxp z-yOE}w(R!(yBf$~_1~-EnaX_n{2$e}UTBao+ZNx&r46{=r|!Pcq_1nX#azII!VA!8 z#XCia?adE00j;7`jDnsv6b8gqHUJ}$#pvKzEtEP-Srn2>sLEH1DIwDss<29NB~lKY zf!A>X2cUEyv1}-LzzEKFyar~zcnnKg(%9is)A5zuJ}$nB+cmTRova4xWCAN)4gcN= zEL;`J@@1S&TCgjqMp>ZG3xT73j#R;^7OTF?{k00JS0hy3=*fI$_MZ>Wzx&;AN8f)R z9{oZen2Por_XCoJxY2}EFJOa>`p&cM+VCd3I2QoQ8u9^Dm&QpfWuYn+F6mvcZ^Arh z-p2!Y)<5|?yv&gk03d5S_m{pqHl@5wUTc><;ZuY?E?SZS+U!GcG3~Jrq>^#v}14D+pdpl}#>;A6imSW!x(&Vzx z6-Rb#IRUSH#TR)B4(O&5FXEWuN=L<0?40}gc;Mn1bYA_4+CLrNImc&+P`?xX6*K^1 zT#<2jYtVtQ=p8-lGl#?kF86guhkUDD3p4aCH!E@1y<4Znc|6&oFKYuTpvx%Y8jDyg zb3K+}-F1R(zYfDq)7pT=(%iI?PbW`HY(9*Or!K1;x=3H9v&UC@Q3g&cd8982C8MV) z-bGx&p$(mFz|*9fh!vO$?I8$vLVSNl+f3?ija9a+y#3*szMb*PjfVO8%J6qKhH?d!`hr$0Ln@BrYz`Q#jOB6Y3>W|D)gN;maU@-tm=Yn5!9yk!Y2 z}Skx&j^qEv;fWz{1VC&Y6jrHN~-8=5+p6i>qC-Si;f#tj2SBS@* z7J!Trq6sQqwD4_Z8qeEIv|gY=A9jY1kYr{H!ws#>tz6J#kW!z<%J=caCq3d_(#%2OSwkaSK%ECqvMPMV1y&sXAJ4)>u<3>CV$y9wmNYhZu_a~!f(<-UE6%hd z5G#H#$}xQVmio-f_uk#xs!!1dxZ-aJ&wv@B2F{#Walq%F zB1B2cI@M;j=~w+d*4E-LwDOkU;n9h2`eNcX>O3vVDZa_BStGV^(Wc77oyWuQ$A3Bu zcW&Pre)oUsTkb!c=%o~V!72}YcdV7XjB3b3b`84AM~fbCO&o!qy$jkAcv(vHZfvXR zt}Ct16E@?4#-D0JOO^j*qTvY`qx+bp_ zb%=6JQ)6Q3X>yewGhqW|Dp`udDiZRC5HV>Rc?j$J4UfH+%r+y_LeXSHZU+Ni!Sp(y z&vJDzOaxVCXh%Acl`dG$kz4XFj^B&96TMmvHeV$~ox_V`Iq4_3F7f#S!lq6FT|88W z&-5+a|M0&Iw_m>=e)%u|%i+%MEz#0T=|0qLT@roLB(WJm8lgz@fy74%y|(u|UspGm zVx!kyZ9W+JKb9S%#-CBjb&v99J=9s~PeJ%TYDK{#$5B5Bj0kAayo(3NR`o92GtcaS z58;8R*UOR%Uhy(TT-AWnYpAbOTcdsO494^1sdo5!eReQ>f2tQ*5B1H#M|ZRh-?rM* zMKZ6^!u;U0%B~qUd*D-fV4?mxOMPE}H}iyBsK<0Uw4Zo^n_fdZpa{tBC%ZfA!=ndx z{SD8j`X=tFCZlLhx*c;E?^yGGBjNOV(f=f1j%E*h;T}-4pfl2ewnuD;vTp|sISkKU zywL)Sx5NEA8mD8|E(ONhqUF${B3=9zWf+uAT4d(q?19hF1JUcmwZB@zXl7u?e5Hyq z+6#RODW(H_>!$vSkw;+l39a3ojp50ods@77F#Mn$BK#Rat;zHvD2*M!$D*rfkEQ35 z7zHvBD@i(>XL8}^_>+0y#wKvNA6h)mt^fvdQ01dSom14HE$m_pQ^*MRNH5DPzNE@* z++dZAz^y!Hjiu?0)fZs?JZYq~6#Ky`CvVvnd0#94_|C0fe)Y$uU+7z>`?}HdYeybb zLnCtaOFcl!BXvI+CXd4oBdIWfY&>T7p{O9JbYWM)3OC0$M*x17MW^7tefFQxudIwqCO$k#^^AXsg|LWyXPg2|4Z9R@2H$k2B> zH33E0&NMN{>f)dYQ-jN-HeD={VbYjh({4sHWmDcd@t+9+L{PTL5+sWOIS)g? z14cIG5jzP!;AIbT7K3pKC(VO9H$QyWb$3_Wi$8cU{OXr~F#O`1J8o_~aJ;2nsP^d{ zfvD;*E{kreO1}XY&>3&yUf_f~Wg?`fQC6To-T*8RA$k z7@c^VV_sI^+QM}LcW`6qReaJrcOWj&#A`YL_I<98jfp0u)?%KvthI>XTuBKJM8OQQakq_ z>H4)k+`9K<*x0!%dbTo0nl4mk9wpm`axx};z|dam>U7wWMYnYLn@r*YtIEUF3x&K% zjkBz&2g2jAeV0xGF4sw+e~BspUVRULdYjy7-K(ytF8k$!Y%jEdkTjKkm0Vp?Q{h!u zW}4Xp@9%+kt+1sz8c60QnS{|OxMx#aQm0NEa!=2*q|(QFi~O}-s@vVWc` zzA1eu!mZ&*Tf%ONXG?=ByW3jW;xWj0iQZ$MIj*T2!sa!LKCe+XDjU*r@0D;nAN9YN zteN@e;Q@6nRb!U=8RH5Y?x?;ba%w?66ZH>r-{&de1tfY}Qs1@_jJTSzMif8OqFw2HNM(T1hO5XQH?L=ca5x?Q==`OIsVihV1JMsv!Uvm z1+Ee+7*)G&cuH|p6~WCzT+C+3o3MCHK|%stu}68q(~czqCCF=RiIB0;%*Mt>LkVnH zRC?UNm`u||?7H^uf2%ZQV9}A_6nfjUl|G>dcr|4lyLBsUMXM(zJ~{@9{CK_sYrkOf~j-L-;O4SzW!PR zt-4|1dk}1??7Gg<8eL$0zv5Wb%6jrv59!E_I!vt-j!9X=m`zfW2~;lL=y4P@Oz4_U zM*{V@nV0sl-LO|5X1%ivbi`6RaiLRxm?wGbY@I57-bz{JSXT$}R=UZT@X*0gOif|t zF+?HSxbS5nvD$_wvq@qrO3^Lb#;uIQ7H^@9uS`42#x%x<*iYO=YJyC6*@=M4t2m%G4FNqU{auba4J_t4KtVdMX()0DW ztE8hWP?iM&ag7O}kt1D69knjwil*YCC?4lI0BCgx>hJ`{WD20eG_Rcbh=taHyni|e zh9QAO$|`#DDG4ThjEBTWc145HI9P$7WH{lmk<;g+@xe)RBxzI*gQFE*%aq#kHa zl9&lx9z&QHF>mTANwy;o6SYlOPqC1;8D*8?CZMMS*wHBG6&JFdz)-j8Acq@O|Pg`44e@2~Tm3~|uz-tf?eia_+8)rMZIlQgylz%b& z>Q6U^yAK`?zx$8>et7f!;jp7`;%=H(Td}j9vIY+0T|t`?CO4}(nAg~|EvC^Z53ho? z7+(+rjcW(w5$ay7al@bBbJz=PItvM&Os)Q|b@P5mLyNwg|f5CV0x>g=z!Dh(h3SO2!c=KY|qQ4T& zom;#5Htqw(JlO;dRKkc@ZltPPJJ-x(fgGKv?tU+*6dr{5n9$NPLn5E{K4p&$2rAKOu$suAoTY66ZGw_~m_# z15pRlt-H=Vy_uMVd4ovJa(^$cK z4NIp8cr!aL(mcdNtRQ7;tkBi+(o;W>a3N=c3K`m4e|JZ3ZtJa`BVGKp)vALHu<@B! z2SC%*!iw`>!Cwhx;9B@zKmYhEBXsgslCyh^VsjyUZSi1EW53zqb@I8sUcWw{A{-a+F zzxu;p>W$DHx3!{;l7y{!+RYv3+G3}NR5$WZ(aSj~VNyJrnq&nK&UGZDa-=4ji}Rs> z*GV@d9*tPpq?d`b0{6APd;3Z&aQSwI-h0(gf8t>!JN+8$a7W!|s#;qv3wNsP$%f=@ z>RPk8tIut2?`o20ZMgUHrD)ZzUj2SJK72N;>8+);Gp%};6o%ye(gg-7U?FxzuF7K6 zXMG5(s{|@XnjTTK{=PJQIpOsQX~#Od%U%dbxT3fs9;G-1VG&qvmkIWE1VdP03E(O= z!xFIyADmY{PDM=1QRQ`$lvAr_l<+V`$08I035`zhlHbQbTk|M{c_*SqUQ~2CCi*MW z$Enw#l)r+#=NJ`37zLi<7jjKrRyNcS_((^T?@W`o!?1I@IUH&w?#qLtVPku5IQi|L z=nD!*9%%HI>AnWQorWT$Ikagp^g|q0X)vq`^dXdXGC8jkRhemaO^_YqoV*baM0@2N z=r7NOtEB57XMxtNKFTjBs>jgz;LY<|fg7}8%KM(G_vOD4hs;7|58Q|c+7-;wsN1xp zsN+iMKGyw=o^^n^{Xx?@y5ItAoyOoZ_jpf>q_< zVdJ9Ud!0^JRb6vgQB=M~c|c2YYd)5fP%6BtXlnpAB5)zGxTAfz9l0Z-lEWr`X0J48 z%^MEiJ^j(Kw}#N*^%39O#CT28c{Nksw8fyVl}SXrm4^?Y4Y4sWmlP2hgU-wBI@*%2~xcob9^9_-r~%; zRm^~&Dl?h}W1dOX8}5e`F_NoU*JOZNa5MSAUD`#&mcfCDfiY!F=2$mNgwj>twtaB# zo;!hO&z=nj`i3)N`E>^+F#`26K>uY5Kz9VTUpAmZhiC$1LT8yf$_3@t5G27M5He)D z*r28T#e)XbMT1gWEmb?uXG^IDy z6fon8qSq+*$GKyRtj*!}?c2j2{NkJ8&;R_-hTr`0H-d$}4SfWO>p2sjp(AXqa~={) z{xn8UT02E7<$9_<-4hCK!vjy9*V9kDF;3bS6B8)S3q;y2LVvUYUgkK_DqOY|S3~iO zBz7Mn5rdT$tI`;uwnbx7V6v7s_~a$QwB5Sih~3zGF#N$k`?KNBoxS1P|7RFpe0L!E z`{7f)zeMl>0j0a*URCc$!>gQ)C;>}^ zjo=*izAJCUUoiJ-ueJ ztBKnUwZC=USFCSndvmo{`VxA^=u^}R<+pI%SofORg+%Es@XBHo^1AVj3cFl+f7OAS zve|?iuSb{L^7Ep=^LRUJQ#jq%C!c|uxK%&Hq%Hjfzo@l&zx&>GrN6rVyu3e`_EUPG zzk>GZi)`vEd!O!k7U9vp{Nh8RxJTw*D?;4IaWChw3HksJqU*kn`#ismyC}bSd$`hd zy*vlKKs{$?4}3xoyn7`b?~$q%F+Qra+6uceJ$dqQ*xo%HzJK~`I6OX#`zxzc1Jpei z&5EYz7tHk#^zN2?Lif$8XAiuO2izC+HGh2eKrF3-&%t;CS9x};eEReUy$HTDeDy@% zn%>-r{s|FkkmDFjc5(>0Fwho@;Ho@DUvUapDof$#c=o_~9vJJ~Sa;8(4R}?v;4FTg z)s@!2hvhmE#;Dgr(+U5?SdYHnlsCqEqA03Prvz^XiqhqkR6%6S%|1 zmS{But{c10`|fTV*B45;Wit$hgUY{xxfRXRjX zF!(7imkAFW$kesPYywyLCIXx(qZF^u(ddf|8p{Jyi7pPPk7kkoTyG|Y55G3N<=Dcs zJMh+!{E=?L$&O{WAcMLCHX%oql~{k&v)J~R=5(r6@!P{g-SGU8R^L8(^3`zbw!RsA z@K!J7Xr-IV8Rt2MnBk|zake6a(x|JQ+C&#shdC$N8{emU@`Ouh$ZZKc=O5JWk3?~* zH^dM1rt9Is8?~1sLDU9xo$xkb2%zqInnxK4pdN-4N`s%2=cI`yE-zefw7Pxw_HcLi z5A^1rwp!+86tTbfPA^To=Gt;7f7SI&tO~w1pf}TK3O$OY0}Ous979;Ocy?ts2%?O! z-K7FxzmBC@qyb~OkdkgbP`;BlN|>fhq62>KJ%=nC#5HCitP*RV=XqHmAMINfbpdXL zmKC5yUF3_b;#II7w@QW`(j+ZYoW~EmLSNi~>sSOr_IP+eMY~zVl*BHE#Ij0Yha=g6 zyQGQ8bG|s|w8ss-NVug{Ry&%=UE6;#y!`#|hOON@!`|2H!{*-RaI8Md6S!=v&I=gk z)1hKZ9S@88M$E*lR{rzoExu>&((t%`cd(mI+OB4V{FR1ATM2Ep!^uW?(`Nk4<;lZ# zt*u9+PMFFqiyuI^fuzIc39fb_tNTRAbN+(tm?F9 zL%bHpgniD;9{6}3sCt@l-()VR^^h@U!SkWVE{OHV%0WIW!%MO|+J)%0UYk46I07$0 z?CV>Dyew|9$|J)+UZ~Cc@YZxco&#o0vj;wz2dMwkW~O#%AP5o~p%BPFa_X;WPaA7| z#)|Ql(_vdy3?^EL$dpY>85=vRcSK(PjBO`qY@nIFg44XZ$!UIw77DtU%5KcfV zYij{{Sn8{x`xcP=7@MS>MBo#Rx7b@(&;5s5fxEeRV8p4$_8I>^(U_;j76aH!hq@jS zGAG9%nt04IUynh%^d7RyLYosw1Xd70I`G}n7tfy$FJ8U?r$AW09*zz*a4i_Cm)6u1 zd4fP>yaAyZCczj!%ZBAnhz5l|WQJTN7{5?1bS}rxr77rf&c^sAv&j*tZW5!Ivd1by zE@ddzR=$9Ina3)&N*6wB9*FW5@CHkdO3q)Lhsdq#Lb|o32@g#oZf^T;`QY#Qn| zoeKXZ0xGSc7$pw2C1Gw0$!A_{6V(Ds$^?$yEIVz_Gi!=fPUBSh*)DlQey|{9>kr@G zxpPMY7_r;H;ag4OsuSY@41Jj0LMlgI*%D|$C_g*`Y{*v5Z-v4MZ5rUq<&ZTH^!iK} z@TfZ_aa9bR;0yfWnJLic3|jON`ACA2tqKKIT*-^bR^d7r{ve>Or41u5M4D?VY~p9d ziC^F|5AtBp&mznm=@1ym@KK~;@ak*T8zyT>Z_+OHJ!(uiIXW5k?%y5$`Jeo!!*756 zE7#!{FEx29INv@RwCYqZUP}oziS{LV%DTQ*A(W3`uUEzlKw;|Ln+Us0P< zneZLCuz{Bjcqn@Q{H4ClzOQm0YtkCqH8{=yA8k!#Dt}JQ6cDScG@gJJeS98ZM{u@j z*&1%^Ch?DUwuZa%-{1f3nkJFd7LT9l9TD}7^0R#!R~ zVi^|qp~39LD4U6tH!d$M5e0RSat$f(hFmy&K2m{oEhudIMB_Av3Zg}}>xL4pcff>q zHCF7)a?+cYbTpPmXUoMG*Kn9pMkL{o>{8^6VI!R+$cQq%=}$n}7)&}MpSnR^L~npb zrOKBq^H`u$ji!~w;0bjSj#1GzT>vszw{6EL0T)F97HkDruvH8txr>V#as@{^6nF$C zE@?O~oK>G6*~}ovrY3N=Pc_~3?7QLb{*Qk*ywYIeZ+34DceZa2hwMN>|F7+pG!i1t zu(0X0qU8hSTNPRzT0j>4dH9|j(M8|GZ#tc>4Y7;mDZekmZ`z1io;(oFjw23N9n`&< zU2mWc`X|q=9NUC5dAqKc5`xH-(MP4MaBE16^d(2DxCZ?t;%4;hfvbDqy7eyV`?CBV zzL-uOis~N9FXgF^IMN%4Km7Q@6HJdEZx4HW+Q!oNWwbXv3;D(jZN1E8?K5Qdz)!~m z)#kWcs!*`=@&zZZ`y@3Ev8lOeoIuZsYEOECbVtSROpo==&TYN){=LR<-n>2*O}sQg zKUU))+>9@3?lsNn*#lp!2eR=IwKiZ_An1C0&!-21b&VqeJ<&_%Km7Q;7D?S69zA|C z>}}n4+pF=TtNSW+1bv^rx`fVZF|`t0N5D+`v-N=Loc^QMyiff@LP+t^gFD&3NP)*_ zs=vx{jN+ipFmCzy;ho|By*oY=ulEmz@4x$A_k}F7z%I!MQ=1+WPU?H;FFTA+T|qk^ zKcxpYU%ZUj`S&qm9F&P07FSuF_qu%{AJxDZhPod6GIwMm_ellj@ruKU7zk zyp49G2^JB!7P+D^DamB>w(HGZO?Wa1bEt1U$2W1YOaIn|Y-!91W1E38?#M(ozNjD* zliqO3g4qty24bQBUKvdrvvtvCur73>SSVzPgh#1U(v$}{Xnra?J4E9PCUt`c+?wC$ zLoIL1idFunT(s3N2%bJ5)}ibNFXcSYA&+yFr`z)4I)hCjYdlR#NrSmm8fFT7iLp}? zMxIRJ75jE2T>v>E)44hXD#a_4`Kf{eDz;HmEIG>70%S$k!?7{*Y^y{PVyC|irh>VOAxJ;2?RRt?|K^*ohp)bR;%$`Q92{!Z z!iiR&YgYw({<%R2q+lTUAsV>+mtz|E5-h+Z#UrYJ7Gp~RxIC=&bPx;>3IGRe>)t!_*PVEXKE~UZgD(1!b1xVS*1LT|E!K-f0$Hh$~Ok3 zGwTUj{HCJD+x#O{N#HtcavkguT?gXYoU|b8By=E>=|MwHlC)IqXqU2#>!T;+%U*Zh1wm3w&C4T`CtUAhwLRH+@1(?V+K>(NGVK&F|SLuWeB~jic-7w3s z+<@CJ9SKSED=v=&c|kh@hzSsOG7WpzL&-{Y=ZOWLB#NuHu~IQ6aCx0#U*E!guFrb# z&FWhZo@n*0zW)O-#9aUYKmbWZK~#S0$#ACojzbNKoVbI&+|bg~98xTaC_gQLE4#$j z5ScK4Q?iJC&%A_RCi;Wwe^2wjIQFIU!TlX)ASQ6RI5A^l4PhX_fSEnTC(>+hY6*sX3>*?q#^?V`}k7R7{ z^yb*){Pk0%=r=8QY2R@buT7ytcu5`uNQ0a=7?HX&g`XHou ze1mZry%?_hEkD5s#mlej>%0`F=OK-&FrmAtJi9t=>RF2y%S(&9yk%80WcI)p?tysr zbVE?XqCG@gh*sutM*$iCi_gMrsXb{~$(df>6E!^;-oU&tvj<#%RfQGCzToO^QT=BCpXYWDb|~q_gFt?6Jx=+>clA%PfRG-FdJ7G^t>`5^ zt-^&GDD8~Ymii}l+}zv*pY2q5+Felgb$^<6ku1#&^WhVFVDoqX^z=qd@PuS9N$0() zE+;*zL7e`ctWOuc7^4oFFRP>lsIp~!qN+t0rH2+PHa1C3RujPmGk1_$3yq~JFEI~4 zOwvAl^l;eQ)i(w8$AJI+dv~>(@3tEUWoA;2$)}p+<*ipHa$~DiaUn=e$P>4oRH`)a zR$`fsWmzhvZ66eAa5PY5OeeVIib@R|4>fx6ActV-$sYujG5TkDxJeI`&n=Tv5l+YP z4&G*0vq0SNyPl{XoQjBfLnd(F?C)!GC|(X=u>DlXLp^OXak--vf*OVmnFyvL_}ojl z($OjeXGV%^Jx}UfLhL8EvxX%6Lr%QQPg9J_k)VI8fN18u~y>lXd9Dn z^~TPd*RlPugrhKp!!LR0D_BlGI}aQbShGQ!Y3T!HbkcZ&hnZ*n69SyN$iS=gkFwV8k33m8T%w# zJSW;t{nXzR4jnx=X-mj9>UNkV0@pZ{pyhIETSJH7oKR$T`FS)Vl4nAPjYz_TpTjm1 zk@5+4e*5d;7hgZowSC81;~(q0MyEQrZ0o~hB@g5*+@@M8sbcQ~sH;;z@{eO5l zyngje@=kQEq0P{?nE2-0ShS`0MOYUU_F41$)NY>_>WE0&by9T) z?-Rn`%DWz!EHNPUZ@DCt4>6G@oB5C=z={xT$-DypKA=UZlqHMN#8Q5jHH|b4*mI2T zWlqv1Te0Ei@HfR>qLG|r(&V9iaPgLbAzT6g5j)%(`W{TMZH|~L}*4Jz>EAx{Y!-;1k?yvOJ zBNoOJcyXNZ6U)^-AmcUc;Iyq7+eoi z0GqS32R>^L)bo*zjLPm-Lz15|euC1_056a;uCVEG6^(uJ2@Q?aZKzEh=wSVeWSbTkL1C4%am)pmX?i9@u>T>hK1%$EohGtq7g22&H=H%;(7;ua9FDFsg2NlCC{w zh%7)lnnf|mc83!kfs{shf;g+BaIVxyJ8xh-qyNv_TJZ+zwoTG zWAK?lXwfp5ubVU!ukj$Hm}y@c%qHKL(I0P-^X-|?hY^A2p~*Leln*c=V=OMSF}O#& z?ErMKI5^QULme=8iVahAc{#CP3nrp3GGsmM%O>|+x73%>$N8zVG%Aai1Ox}g2_@!P zS-z*9Qi}*oK=Mh}hY#-!fB1*r=*{R8Z*}!jTb+7BR`t;JM{#`1l|f@Tk*Qy$0Xc9d zBxPLK_49lr^;dzk^N)*i@44eAcL>5{^wjWXt>|-kpjC@iM*+bxPnj+d0xuU6}7YsZrj^n{AY=?GT zGVDLNA*KaOA223yp}{BQkF+iN3FVSsEDyMTV}P3TMs+0b5~hByl2JWWYrI=%c*GAxt5?q!fATdDL~gq)&g)k*hFTU63)(GLC>r zs>fmD#hvmCIPI*t!W zZ%For9<=lV`f#e1xEp(V;bh~kSLHtY{vR#(*|+~N9KL!kr-@E>I{3oG#5htEtghDy zyz)t7!v0YB9`^Clz4o$j70edlT=^QjX`P@2#1+GQNmH^~NemBfv`a?_^*L+T8Nn>4 zbd-Rp(h=L>MYuW+nPF+M1T4#vY&~wN46>}sij_gz`J-fr5nfaK`mc-tO?D=Vv*5{Y zLSJevBcUR4HP6`cNH?Z;NuZfPT-GROp@mBwm95x()5A(s0*MM=F_225o&J)y*6F`l z&3ODqgB}0y_ru!m!{O^+{i)mJ>zBvFOHJU?2ZqhT*~`MJkQ-$pKZe4LkfH`s_K-f` zw^K~d1K$S?rTU{P{h%fKOof-D&oeLTAGHKZY8uZ~@r=l>C?~_+wOhmEodg z2Xg|qUXJIPhOX&M<7@g_r`iy^-koTiPLof1VS=%=7?FwRm}no2ZK&L8n;t)M-Hb2>LeP1Z}enA1WE}WTltZU*hz>?ig%`=iUR?Elqy0}5*0|;k-vZuk8(sm z5~Zx4c9bP_AEtGQtQ)U4jZWM44zT}<8JEgRb6BK958iTz};InQZC@ zU;ov=P@Q`){BQsEKWJ6xfwubH@*8M;JD1h5tOR65cLc?xtJ2wG6be8E<|3{71;kZW ziEf@TWf&_KS5nc+Qp9p2B@~l1q)*r$NR8mpqeotO{{7RZ!<#p{p-OhKL?EwVIV9W` z6@?W*9MBOC#xtS^kg|dTpxLEEINC`$G#HXhnk+1`ZdJ;Af?V|ASp6P9e4*}#@@U4K z32Wf2EGA|PiPx{CNAIv4>wALO?of85#ulN6b}ZW*3y~Zy3eM>#$=bspPNO^v!C>nQ zoPC=#_-~n`v@Hm#tkCwZ;{cY7-e*OAetf>3k~6hclF(WHv!4t|6}Bqy#s#>v5Z5Z` zl2LIA=%V1Nav4D;bsH{{!Urn0w)aXO)rDJkZ|Qrte>^;S^4M>B?jPtg0-luDK(aWg z_wZ3h&NM$4kfZ8YT@Ld#Y7nhnMas{&toKoA(5HD`sjo8Mb>^)--%`GYD4R9;~wJ9!>@QT{E5x|K@-E?}mSTv+r%qL#6b}hBdY&a~ld-uH{v4dexxI+k(OG!Wq4U!ij!yK#A?=fgHr<`Z&4V3<^d=M8cwU5t#ZlR$2;IE}BQA>){E(D*NHPTH3Pcfn zfOukUs{XhZe1JlI)*?smPJG`g1bAQdbfg#HMORVkpSn!l^$Q8=)1qchr9c;Z`}Y_TJI(`=>9o<^GY{9W5~0W5|nK z8B$s*&d&Jis%OgC1E0hL=QX5&`+n*IyQ;qXrF+vAB>FACFz%K^UnQCPXA*Z?pQ~W; z2P+6;ca#_#jKS|{Raj6z5v3IolN~j6bnp}ciegLdIhsB2*?NF_OMT7fMnBv3#!{X2 zSW-PvprRo##=omw2p>OwsBw*buf#o3zZI|j={ZJij!!~)*j@7d$vHJ5zD3=}7xLk+ zHJ{R*_EdH;UZP(lnDes-uHb?3>G}%9U8RdlypC=#k&E7;h_Ww|SlR%M>@6#8lRoa` zcs*8gUf%Tx3ZDOC4(dR=#6JD;$6@m&b7Jf?yE8oUid?o`mL{5@WO*)2?I}KU12E#;kgf996m2O0X@IMz>C;KS0+g7a zY!o#>XU0yeGZdb%M|3c%N|>2)t1n!IyDUbQeHh+`d~~UF`$DREr@BWP+k63KPkLWO znOxC6^t)@r*I(~wi;yR-b6(}Ay2zU|Nc7DJ7fQ<;FTimf7F;qI0HY|ZI>iW9hQ>{i zfC?T62SK3C==+u72=Qu*)93&KR2o^JNUdILphh1atY{8LclgaZ$-g_KC;0pddg=GxcK7@CAD#t^R2c! zwqJNFNw95RITAUm<bAo;cOoELVO=)9|~8d-%4{6s6@qg_&mnBq_iPz=9i zq;Ay|<@p&}*cO`%MupK*I0zXFKjMtI_(0`Ob)h{Zt*IR|=*>$>?EY|TcYU~XcSqa% z-_i?6+rsh3%2$}NfS=l~ogWr8!NQQ{Z)#gA4s`Mo(PrpZb&IG@a_z0IS7*AW?a8OQ zUi^{d{P6S#pVMc*|Nn-gSGrlmr;^UfU|zPs9!oD%(D9QDDnR_JJSw3I)p_lDC9*G? zFw3<7U+9(vLyoS}S$XWKP_V_g@Q!JJN{n`Mrj*ygr>fzg6IBvJMZWl&jO6R#=&5}0 zQx5=!JaAQxPyhgYlN#9qD~6y*xZmqYM_Li23dbONn=R%Y59lVeaz%Fa(Zm>2=&-$V z5r;>c@c`wNMu`j;vZytPC>Zw(+md^%4xDebF@gK^_y06(pQ!J?_06!hrAb`wDYUH; zk7ZopLZ*$fI?e@t;YYBlz&Ia}!XyZMmM0`Bllh{kIAklA*T;h2Xgr!@%g?jrMs?1@ zIuD$4@;MQ%Ac|x^IhnJ)Zc|PSLte5@$zRn2HfMhuH%^ z84t9IJMBp>t;VYV(9m>AA%=l)+6+gK^#Yv-w>5@vtj{qWYYbg;xOyhyRXO@H`Zb=D z^mqiD_$-t5r3^YOOh+*oN15?Go7xDU zmy2=74SiaUvC4yC|B&rsX*EnQ>63J3R6nNY3i>ZbMHtO_~Ge>g+v_ zq)6v@_Q0YC`s+Fm=v{SMB)vkuxL4Q22F*mvyB#Rk8d&sWv>X;S?jLB(Q}Yw+o&z}6 z!m$mF9qg!EI`ubl@2DeVkr_Mft%=_KAf_-$p zYioF{Z{6P2;PjO1gPgLvu4ecid?yx!0Z z<(cwFNx4X1(R?X!mR&> zAgYMozTMIdi6~u3&E&UXxT&Dt9BC`=n8*q(QJZP2$V03CT-LazQf8hK&U8WcI}6BB zq5O?o={Pe!CvOp{0BFqM&Y>x3qBx4I8APQ*tEB(k_Jw%m{^WJpA@Z{UL6{^Of9>&)EJ@yHLX?eOYbm1Rql z(tHm9%TK)mlbb|Nh{}LW>_@Tk1k9S2DF7}nWc)J31XlqSClL@!)4?E^T-IWbs~B|e z5-huCEM>qJg*M`r=s8!U;~bCI!z2-VsELHBC{y|kY@3v|6J6whMe!vFno(uZ7sRrJ zk0Nx0MWDFsDjH&b$U4Xg<>=aP z1P77F$&9qQoRpZr+d3!9%D}Hajy%CW@-~9jCd$T25cI`Y5)%Ug9eR}fv zRuMKOMOaNxq37_mAHi?n2lItY(XwTQ!?fwJ9SWPGgXC%UUVT&TtSbNCKQNHUIcL?X z)$X-wC#q%w7(GS;$V?!CRQuW8)%ENCUOC+7EpYMrWumav_1EQ5-W`KGoF!_}+37V! z>doFjK#S#UFbD_>G_ghb>ZL|5q-*!VcjeFi*}p3H?%yx}%U}L?}#_ zsg@az=KPtgLQRDO2`)n#ka3{$IPZ&uhrV#aa?VEiK?zHCna1p&L)TctlnW2Uxm`?G z|Ktf$mSo=BaZU2jI1SV{U0fl!ws7Y3`7+fjynF=-3q@O+sT12t7GN{tdd#ghlVDi8FRj8XbMDlXS2 z|0R!Z%9y_8{>hgr<$Spkgl|hfdHP)2yl!b6@lY$?^>Vn{8iU+h7d7xEWlam_)b=;8FC~CqFX$jPmga{d%+0m|q4kI;w-~x`9BrW)TM!_k28Wc}_quFBDQ6VjT3@^A~!#Pvhg- znRah`tE_82Y*Vopa&axQ0+ohAJ0v5@u(>iacwvH|i_CQVTprN-VxQB|%VgIR>=Mo6 z$@lmy_TsQm4DbhS<7jt3&{JJwAi!_r@BmXMZ`ZZq{+_mH;CmJ2;#{kSwlsOWtrfUi zbub@0f)@*rKW{1UA2+m8+l=rKu!N^CiN8MUKdtX#xTp0f)g!4RJ%SsuCN)?R5gR{v zut)XjMWI*~%OLs2EyynyJNVGoA?Uo({9^AiI?rHTc zleqEySX~4-2`1*CmZ2!@Y$}{U5)}Mm!d59VEkq{EW28Vso^+pUj7t*8f;QtIAs4SH z%yj+IWa;)=xu=QS!~HF#wf(v#bHe!A5vU*`frg*DGY*;aI)*k`OI-PoW7@_}TjIw< z6n+FD$j*M*|J7Fct**JxpM0-wX{Ee+^1CwAH#*}zc1WSsHQ5b-H2sj`ad8EIR|u;H zDrEh5f%DrYab;SRti~?iyuGqjaC^E#jrl|(T&w5VX>>$gvekcJ1jP1u11n%2w=8ew zDkx8pjj>V4#(Eb+x;w2(RuZe6KiGt7N1skQV1#B7JdR4#z85}pq{z)shzDcdAo92 zHq^||&t8_(=X#@dWxH%2Jkm8z4`ka1ygOFgn-bv_B!yfF%mIB=Ait_gQWSR~3vMdG zGmnmrY%ZD9bKogEd0_IusX4D;T$gfLzs=&(Ad;GMj14MuRIG?Chnmv#A$W)!1ln+#l1jxG(b06xsfq ziF+o4Lem%<_h_aJbTCcF$phbn2l`4oU$bc+wS5^C_^9!W!Rysi?efLg2IE0zXQ#>w ztB09$tw%XNyHKpF8Ep$+psIfW5iqpJ*iA@>a0-(L?z#tBBj{U$B4jRytE zbo{g)So^R3>;LAz{j?(Iq}B5|Km))rQrV^Ugnc?VN04NRF1v~b$iP+%NwI=9-r(V# z9Q~Bv&_vFLI{(AH?eg=-56Z*)Z27pUi^Hbh^5L79>$+Gl!OI1tw~zGvuPVMa`VjhS zg)Jb$x&Zf@n61lv&%{Mf@H_dV$l;GXYguv^cjS?{kf(>{WBBG_*X8M?64%!~cWUej zr#k1A1`v6IgUMLV53#m0RF&nos{QK^4)5!m4?E@6t2gEKn~W1D!=5g^hLE8{%zVBMUkg={$0w#}JhOR72eoxm2$l#B1z(Ed3gyv^rT#(LW* z$g`w_K${dI+HskgRh?;)8<^pV%(zMl*$GVDP0c$Ki>D(r``8X7Qb&qRx`-2+@jSIF zZz8ikh!u<5&Rzw}+8!1fO{^r-e(zfMn zS-#`Rd)IXlW<4CFq_nwMvY4=pcHHA=8$-VJwSrw&MjJSPkci>=BjqKLJtv7=(`LG6 zt>}&Ky>kC>$KSkN*Yz!~TZ*f1kidD0>ta}#(#EkVYYD=8sXgMr!;^3)bjbGK;FV}Y zTUGz!XFt={&WGAk`DuCe;+gymKa@-`XZxyl$+x4riyQ^0mxpDTWw7Pk9}TUl7Bo^0 z32*Q&@BXbSHciC=O5DI#38_J%i;%SmzgLjrF4@u~dN|anqv1>wRE^fKkexb=tMH@? z;bBL@TI@v4DI!&Ki*`4BQiSe-fqW$*m1KZ29TYzHFaa7(U$?>!gAdyoYidGpCmvA| z5(w?QvZPU*WF+#eb?8wt@qJ9%KLd4eT!9iwmNI#@h^}L9QEKZK>Of}t@m-wNbv=l& zg{F3!SY6W~hzQb~QZPjSaATq&g8fEYOpw@5?Ge`M^!_t%@ztsd0YI&-^J5%)cR0Y6_p&1Dvf-EV2{FIc#B+Y0x2o9Z7Q=n<~9n;@*hi ztLW%MOx}R$(M4|&u*#9iTPAY(PT&0lZ7rvZ!TFg4=*k2I1M6FIg>s%%l3 zHyHipQcZVDgl^vv0^=8x2yx?wKe|xaZsXaG>l;gseM8O@MNR~6OtDzJcj1#GZrjO) zMJw5`nZ9qPK0?NT5x! ztxFI_U!^B(l2H9~<3iu+?MijPsM=}_kuH{TM!5=xNNs4@q%mm9|5C=SB()9g&@AlCny|nY-zII#K6BIvT zPuQ}cpc5Vx2~Zp-*fzu=aTTO&vt6mMzUpzlW6fk0kyK4b1;ivN8I?gaES@JvE6fqHZJ^#X7w$u$ohsiIQov=gR-@^ zSN=2k>)BIQ;$D?EPk*m(;%d7VZ7IL1a_|Q?x}xS{L+VG+IHZNPZ5i1>Fk)OrIwJVk z%o4p(DhZ~Jb#*4;wy9=%_QaHyq=X{a|S5ws$c zb!576oN4;LN~^dvA<_a5sG1u`^X}+$N^<9?6c+3$dC&pg{UthU+PWbHMut%HL)=L*j!_3}9V*UKX9Uquob?*mBALIf`PUV$svy6$B){iRqda8F*8 z(-(ix1)T5K>yrUo<9E3JFrXjz0+;?SZnQuoBA#Dwx9dizs>jqk0=7(;7)PXy`4isA zKS|>ANc|+HO+v2ofU42BZd^w=!6y$)9(X?w&_~lN4t+H*G45zvJXS89dgYSviS9bk z1ihcWiF)$DH|~LK12l_l1cvF5H=4DGLCTX3#2gvRnU%96tzc4~MIo!2xZPgA)XT&1 z{ACfokq_ZMS`ewY_lgD?cvKB{dDaAI3X=!E2@gb#&bk~erZ+q>0Rx|qq$Ljcn%d2Z zK5e+hvx}Zt{8FmM?@zRCIb)u@oOH%YT-uSuq=d>|MI*mqLhW>%Ja8vHa9us`8%K=W z(O_a_t;WN3;k#5jI?}evgyb{4ZXfQ>F6J|Q0%4lg+o@Xj8UJJAmgz~bh{ZmP$zoBbnsTFs$gt4%l_O<+W3ub z?e$Hi(-^mIrq;FE_Ru#~Ou#T%yUBNM^>!SqmQe2%yBgN2|DMDdCTpU4V%?Vx?M5<6 zEcIzc^-7JxBV=+&BoMxJtSrg-rOWX7^;IV5K9=|LO0_@BZ*a+b5st%`$yVTpj3@CJ<9*)WE9D zontDd&Z^@C#;RZa#|#P&7jZ+gLffc+?y@zI8zW+LBl#B1A^6ga2;QOfrCU*(YHuIF{JmD0| zh94=)xZr7fH4Od1(yn>t0Nn}ZyuCXh%+f>}JpnvpP6RKJWIn;I6Pjg217Dl)M40~5 zRND!!erYq3nm96jn9qZ2#LiegsnkKbg^nLQHxzMG5s02=SF3IREq~9+iLk zFaLFU{P=PC-~Xq-D8D~e&!Kj7MO(xk+8+WPur+lKut-&SZ)TEYY}`D*kPQ^RNb+Uz zP2xxN5USi+-xG%_qgvdQ%U89011QPalw(i5szWL znoN)B1Dbl0h8RhP*TZ~$OCjxh}Z2+?P*p0!Wu6l zifBWBm!~hv`O6KxAg1e_e%tzf{nqNHuJyvHt@^e>*D(r&IM-v0cRI=$(yKCKZh62k zOReogB0};l`6seF?}4lj^X=!(7knz<mZvXXm6@J3 z){$Z)#su-H0kjVeI`mUc5M0Cqk9^&+brKd)n{Y0pai&IC`XjqqpxQ+ zBHHjW4L4ad;U*8oC;M|4OZBb-T7!e)8f?dG+>4b7rONYq#2m4-Pe_ zrt29E%QugVNg~6e5W0kEB+vP-rKP&N=g1$uMBH_J0wX@{8476}b=yNdQHq>zew2v1 z6N8LF8!(MgX@&&?#Tx9^!drdoc0=C>jBf<)c{%E(YrFt-u3eQkDapC{Ddd z`x0S6pUMGj2;s3TV3y3fRJOyv5zvFeO- zYgu^KbYLq+-qzXP-uC1s?d3}4VbYT}gI%FHG_(hn$c9BWAZ&|?+hB8=_GtUk$U$bx zuA*85ML45@>@o%|Y?21Ihe_O|;k@7ttgT9=a$OfER&37v0e8LCC%^H1Ty%%oVOLt0 z(i}?|HIZ_l7kW={jEKoVCA`iT7eYU@H5y}J97Ol&25k(M*T9)We+O*+S_dQ9v^ddn zb5sykTner9jYA32E?G@CNF!Pl+YF$+ID~HkPR%9sM*{>&`pBoQYJq`li_PTi!-x0F zgSzsT33xbB=kr(cI2{KkRF|(pKx>r_a zx|z~sjLOEh+cz}ZbY`UOFd1wZffi9?Y51^M8^*!9pa-wVUt8#V3 zOJrB&MA!1G^{uk8|DddG?MR4TB-13WUkvd>7lOHcMq!q>Qv|4n4w|4FW3#5n8!0E` zPsamM^M`6hy`%KeMq3pe2uAh(r{kxoq>~5U!von~YFkQ9Uhs?YkQLp3ZIqWh{`fgD z8OSHKFJCnSaG)6|rqtwtyY7Kn?|m^^Yy(3R1INUX#tQW8!#6qEs(f9mZx8i(n@z!Z z5DE#|$P`xry=1Fuls#s;{N451_N|sLYc%$cYwX9AsFSL3x|F->m%e%Vn{m>Ova6XT zy_!^xPd4?uGt)P5wfI6S;bUMQuK1asgT;2TmzrqmrI-mgdEjn%AnJIIh%oxY^(#h~ zlopy#0h}LSl+_b<`y;RM|BZ89$=3CWfOYR^d!;rvT$#kgz(qD64`OBJZg}l$D+Mp> ze}a%5;wL;=h*B+Lr4E7p?dg1DLMZhq22Z8Y&y`V?hLwYBqTk+HD~}%Rl|y}3iO(v< z%B85HOxZAj!$ht_#>jFAI!}DKSf8+LRl`CQMeM*~LkH-RX=i8G+yj{%<|Y|~CHT*w zW9bBb!^!N1q6k^c&t0IVM|I9=#o1?hQbm6DZ9O;eE84nhrnfWI8NN9>E3aRl7A9=J z|KVkM@$#)!d}^!Lja_eTRajxCiJDcdsP(+4SBXYxco662#TscJ(lJ!sXe+ERWvVu) zIC8@E!$?S&T+zg2`~`?f*-KX9BH!B#2MY!AUo;r6KxMW2rY1QrG_lEt&%ISKlel6b zSRZypwzk>Gq%HnNh1zIL;97$j+`g+Hsr^_Jh9ix1N)36-Cnkf|6G+MCNnAuoqJC?d z1iO;{OF581?_7n;ST^6**k9S#MA>?IEtRKQCT%;#&PruMSkc>pZ4r=9JqX*<0L6LU zvJ5_Pz@uDH1}aKj#W`ApbXY2ZLal`j(JXR8hX!aQOA3uU$(`{)b7M;7P90uZOIxNt(9P1S;@zzcUDpo%E%z-wz<5jLs-mw0@s?cm z?~Mv?i)>1oP(vuN>!7EDVy6MMofX;3%N^b$Uigi}hvgsrlYg%5toO_R_V53q9KCt1 zatg09!OtfQ!mHWx@j}&kTN7`fi+Ur1;RMypN9wqa-Fj34iYQIdOykU^nE}fjah&_C z-(yV8q0fbpRQ{b0Ts9qYR+>v)bHO5lWfl;IVb?JE0cXpO3N zJFml7Mp~Nid92kA2LvKRaa9|*3I~`;(^bx-MSA*cus3z5Oi`nQ1Ja24kivRc)!L(+ z=8*gyfKn$d_O!IfNe3(uAppMy-5?M@aOKx)VrBE{#1^fo&pSO^Ehn$FYsU6Lxj6fE z*|DpQ~K_Ez;#9k*9je5|CP@g zjR(NxRgip-BR_@71Cs~lJkUB>CE{Q0MoHgf(3eZjl*0x&1jG$NPbAs zb7*~`o}Jkuqz+`JE@aMy0X2u1vXcjXL=P-f)DN*`QHZO%pLH}gAT&GZu_BkzO&SNS zMZ+QG@q>MhNv@YC&tH|JV-2S2!G_iFG&A_P1ZMMgv%bMRx9WT#yn${)O&<8RJwO|B z3sW)FNPHyEHO_a7Uc5w`^T?bgb7z;Y^peD^{Oqw_1lM9N*u1NyIg(Q%QtXgGya+;1 zWTxZCdf=;Ef$KtXp8Ip{9+(Q(6}eUh>dLAnR+tppSl731*ENW>c3KX0SIfcPmIl1J zNn$J1xHW>F0XcWn2(;J~oN?%3;-`Z-PHZ0h@d&Lwn0xd-b;b9In=6hCU8{p)CyGywUbm&)$^hFW#1Cil01H zhp0*2RlQBNs+G5^t9rOrbzNJF@2|2AbG#{?C#}lPLJ1#za8>5Jl%yqwzW(auEk=Ri z=7xuR=CwRQ>GlLBIACM4*sE}LGZdxNQ6yfey0zt1xY&5YOtZd2ktMc}CMa_fD0#yq zt1%^vozEv9NtAa0ZVws7T)~9 zDTOX$3LIs&Rt%}G(>D2*bzQsEc3f-PQDUpy+u!yITtCXxa~nE4LE^_NLkP)3{=-vI#(|%9 zMdiLyTlSEI>n}SG@P;h!iRrxT?3evt{z>^0bvVzTJr#&=;{L9jy?rHo-G*KLi1`JH z@^GYeS_H?B3JY?oOL{MTl!7_t^poYM68lPoit~jW6){e>`IV`(t=cxZLI~*kuS341 zLf+?~(xr-IYk1g0@kpiBalj@;HEH%to5myoX>b?}Z)OKz?wE2D9Ay}ES-uXgIwDH> zNk1>$wPKOTwtKIv>z;U( z2QVJZ7|d5Hf6WNNtPjLoFdSIL*`GspjykgNED^Pob^`vCJrK1dzWXjew958V_Q_QC z$pg3aKzH-K@3uM(?kixrQ1tqN@Tz zrZTFBq4{rw-FY1QpfdGq$vHyRANvJx~`fod1u zSlz15^5SwP(G1Hnn42vFO&AaZydDTA?amP#j}h1tG*KgXa2L*Phxchr7Ce?zYk8eV zK@{vvu3j=JQ)gAIQOvZt4Sf%HcX!8abEd*Eu^9pB;SWzxV2K4*v~ZpGORWyz)fN zl$4*b5E2R+2);?P;+(@Q42pS?K$M)XRh?hxTHPZJsShMle#XEEjbLdufZ|Cb0?-|! zd~;Gd{JWEsiuC6K&smDEpTTD6J~7&{-X@hu(#4 z#9W6psIjU^+?Du%4P9N?fBcK`XaDTawXOAo^4I_2FU$AGS}k~~w`RF>Wb%o(Y<(Un zP)a9#UHFKy!`jZ{N66_+Yf_Xzbe0w-U}&-XWXd5LX#mk88QL4I@i`1}ROj4UJUJMrn?L2Bh`03JsO3|U9nqsF%4MuDr*_EQRPWf}XdiC&WEivoJE51~~_ zmPJ`0&?IJ*Phi?n=~8AxD}i)u=Q__C5QI|Vi_0Ue$UQEzvsdNxXwG)D}eWvRYs%kUFy^1y-z=rf}BaUaGnYFn+$(dflRE&q@TcFVfE zVAlkgJn(ILfR+*$9InC62~e+gY7Rix{Cuc($MwN5Gga#30hXa}e^Z-EuT1eB^gvc` zH-pS@1cZq(Wvf# z?xl#1W=c*Txa%IsHbBfz<2!yJ=6+GFQV(`+ks52=+0>4k_Yd@<`$l=D1u`tYU|EI^ z{6~z4)~sur7AU|R35_7K({b{^UG_k&_F4P6EOEWlz@5ez89CvlBaIXA@{zKq8mjx@ z$;&C+mGc~(#U(MX9Vmr@7wz3<-IR|r~0!b=k5EH zNt$z4+cj=% zsv@!7>8XA(u@o}lQkPF=5MI+wS5m5j)4aG8n|=8 z5sc&vqLtN)Z8h*v4(AblhE!&ytIq(W--ts$Q27BGww$K?^=FKn!*C)ugZg~2CIs~c ztzHVbU==T(JeH3%VeL}lQ|HlZRBlnrvy)8w)|rB}2mJ^7AqfI+9a! z&>3DC8eb+XAFCCTMhsD>01247#|i`nTmPznAgzKBS>c2D0SC-V1)7HjZaBJjQ>hiw zjA$D$>)hx^-+xalZ|@x*dJ;YfO`l9n(=v@ctT7Bmd~|A2rps03lJ+VICNkBltgG#A zsZ56l+gg3QukZS9QFB!+T?cDOi)k?gpD(A#C)R*Zc0g*DB+{~60A60uE0iWO)6zkvZBGm!{CHe#niNTVK0gk;f)d5h!Ep&J5}lkWV~d!ocdRspnWgBzeXr?hzG$ zI9dwr3cJX=y@@fNH9}!iLAGU-CPUsqi7ZTl=3=uq`i|9fp({m2zbKkc1+4RV=ts13 z^l2Z`hactTWeDvep$pc<$@4OM{`cif_Z2g}oV2R9Yp?Xcb;T>R+zhB!iLwngl1jZ4 zJByVR4JW#Hh2&XAcO5SEE#sMBU$Y11&)nh}hJwC`-CXuIclG?Hmy+~J0D@boSm-~8 zuqb1|O{vKPKXDIaQ*kqK>uL^(mIF-tp{R}R>BZY~JqI40={Z%;ssyfyzHfxsHv$Gv zhsgs!2@k}bbS>)Kr6$K;0y}DG2ARCxSVx-ifvfWNEib0VGbw0xP}*QeFUDVVZw736 zs0gAtTb9#L(8&Woq6e<6#~*4FmAnVA>#TrV>qEcv$bbq%*uvJ(sKM%2xbbC2ky8j2EWVz06+jqL_t&svcW3Orlu0l z-}c3B6S^y;eSp;OoRzp|+SyABOZZ3tb8qZ0$~?x3<~ee~S&UCco2so<{O@+_Kr*@_ zi?K-=iTDYZgicUY17%p5 z!vL>-^vO)KY;CNR2ZuY_E?FxJR3g4_$-pW<|qg1(A$bTuJ);DF-{?12IfV&TSB7Pz0jK& zMF(lUpw3fLo)$WhgQvk-KqG5B0+a68A}wJ0sxdjyPlJ%|IYSm8WK!eUD%5LVxPj0_ zACtE~Jk?go&tH4R?OT2O_EcMY@Mh-8nO4T=qu@-`(&2G_=_JMK;8m%@F>y#hJKuw5 zf(qA+2ey&|`@%}Q55t%s1cOn;36A40tB8n*e-QP#7bFKyPGtu zah{cq>zd@;*7ruyeRjr#wZ47nb{c*)k9cF^luo|>tWz?PYtbQp@G}Jsm=)Kw{84sBG)KD`hr~5|hKsj|+HCyL(XM3ys=2!am?c;~qx{7)U zZ5}$K777B<=M1(&3VIt-UpsRyS4`l>7nF9jo%f@Mhk7|_M{k*~YeEJd4*IFggEV_2 z1=bjB>YYP1?i)IE2tnI-|3T%~KVk3jFUx=aU;cSHy!Sxg#Qn>1 z^!9C{%tLp@*Ed|=%CoG57N&#EsC3l5noRUUZ2AT0=LDcpC2*ue`XUX<*oN0k(oj16 zgEEM$Z(Id|)SXG#9{ozf$9{mc1v@F|@T3fZqsX8l@^^H3uHw5#`{n+g)`YL?nQc^)YwgJf@RRq}2i(ZnxK~f z^=XmE47Nr?1QT(W&n#kUI45&@KppWD1i9esUh*o_idI_7rgLE){ghyV)2^ zSuMxMv+~0a&-EFLlk)TL9+VBesKotoY@wX@X)s6oBsB^>$p|rJCJ)>t4`d_D3ZMDB zBV-h=J}-e1*_Fol8S}aHOGw%kP!mae+gfz7dQUI!pX-IyH)WRW^Z+$IYWr~C2UTrjN?m%cEy*+`s|8=a(s|rmqm;Uiot$2km#>c1 z7FWtT3nw*a5ickOZEdOu&Y=aTuRYi#4kOM=4lILcob6#1XVxfNQh(VvZBm@c&tSl( zo4~C`rpxAS9`cJ632{l2P&F!(l-u9w(jYwpaO+w%z{Vz-m_1Q6XmJO=^eLy;2;(?l(NML=xKXaE>ZOskN(g(zI0F?Fib7iw`@%vi zbI6!X_z4Ks^%&=1TnNixJy9ox((Vdvv5zcfwy ztYy~&*LUgxt8EoLK#xo^ih=q~8x$!QZ`}wl0uOkL&s*GKm#L%F$caf=R^o0%8x?Hz zT<_*+OJz@zVpEk%JM1TKnWT=knTDWWfyhOOM1=-O11QKzc z>^Eh}**cuB#Nbcr5IDs;SI`iesFoQ)8osB`Z|kHy3%boAMQ3b7Q*i)N)h3EO*o^Y&n;?CK>6m)+O3D037Go_U$% zQ|9~F_Wrb-v!Tvaey+Jx2H~QrQ?uzu=~C)Bo48l{Chl`HzSc@ye-qc{ zN3RNhY$pxL@^ZPPpfV_3)hA>W_w=ND))C<+&xAH?b0xR)lx{}o+zaL`Wgw;hw9jxr z0swQnQ6+GDF`(k4!2NTjoi9dDj{@XH7-WTw39tH;t!e^+K?;pMvT?MrNEg1dqo=Lx z3;dNe&Y>9QZAmreuLsiz5wU<4LamDsZAWSQi#DeE7(}L_Rt`bT(YQhm2np)TG0?s{ zWfLK*3EN0oKSvdwBmwI!4?_5igOvoa4>e;52Y3au&02wbbyU{$Hu}ohsXtYJw7y#| zR`o*2#-U!o+SOZ+(8~kW3Bg@uAetm0L=O3YzWX?D-n%&_iaX(ftUOr(vLX$I-h!=%Tmd=3^&0h58Pc3)LuKU04gYLK~P;VxCXB4xocZv zCEK$tJ;S`UBY^u}!?b{UDJGc?lLzjw2jZT4v4H(`B-6AbT2-{C-~rOz7I6>H?rCas z=Ne47m}wU_;dk|NG54H2*RAU1cLrGoSz$wMt(M0jwKl+%m^|3r!;6@Vzda3 z{t4};I<+l7|1wUgH0_HeH2&7~Hm|_1m*bfzS5MUj&pk$GE4v2OB`tiEkB0dv3pUA` zJn)rxz%8lT5_f*S5UKq{8>nqd8S;#jXplf@u4`%-n!lj60iS97?nGk?t6H$O@kXC& z(%3)WdS74Hrz16pNqa;{HYdlSqz$oDLn2DTYRP~D!H*DD4e3aYj!n)8`UNvGAjgnC zlh#i+fje(tJwbre@O))B92Zcyn zg6LutA>~xKfjvh}<0yDChOQ?IsUgyKrF@Y!T@^iw5Hb=p!VZ~hXgJq(q&P}iZG=(D z>?#I1HKlUcEb|W7uv)lf>L@!Qi{>mh#OMt77_T%aL_0Px(sm(v5DIZifP|z}Y#ee2 zRjj(@W`SFACh*=KUzWfBhbQG9e*c44-yWZ6KuT|hZR*YE)iterp#Zv}h)O=Jc!@Gw zwdy@xBRFYCttM^6B)@RCqNL9?u`IzD+eMOmWSD$qWlmU|1gvS(*^n}ydo6EsEO`uQ zTaY?m%HhddS&@^pe9PD0tTkQuC4vc%Salq} z;M<(=FyOeyR<^r(K|~HdJJ(h%N5@)SeWrejHv-vOIs9YaTUOYQ^sp}U4EZ4P0|tc>oQ)Z!9`exXyr-@1T7;RfSjK^vqRqnUf)2`b>TO^ z*2>$556hOe=w)@e&#`$#GIAD~lsiH+19a9~dPr3e?XHD6tWa~1M!75zbtJA?v^gF< zxB=SU(l>AK?`a}>Hy-$9Z>+$FHuO`=P&Vkx6!<>9O!IZHa z8Zd7aZ#t!^G;FuNwyAI8{@mZhz5n20`RjlGZ_6K#k6b*LP={4r*GWg7qXoCp4dooX z0!4(N&D?x!nF3}!kN=!`T)_DzcF0CASX!Mi_@PWe9>)QSm~0ys846sulw<0~!g&eh z0g7Xqq&nK?2x|5{JY|`3A(hG#0XBl6GYnW!#rWR=_?)S{Mr0U z*YjDT+Fe}dxi3B|>tfo}cFJc*8|CQfemP&eSJn=GRaSR&Z>^WekYzn2tQLu(zZqDw z&L^4m>(GcucR^y3t%FX`J4WWV zfvmSbu5Gj!w;Ffq*?xFF(F>@T>zY*J`7Fjuz+TtNlJmzc&7^(uz{h#uy88WIQk#(Z zR*@|zuUZi54pWo31nxVv>!iOO$o7*zfBZnZ1?t;OzW?WW4tfQ(Ri}nSVgmm`$9Y>n zNXW!AdEmV~P;2xY5776hk8W0jBy;Luuq1(DOh|(SYHgZQVy;MSYNiDm+gn%VXOFhM zJK)o&Ps>~F4#=g@mqXFQZFx>s9f{=GDM)$-AYG_D9b{QDpRt$WCfMYGPwoM#Wv$q) zeqXDkQn)H-O$DawkYGS^aRz|c9$EK~9;@OLgPMcWCGJXNbf?jy1XV^Jl)z1=O( z)2(TTuQbRbPF5K@($2AY)uu79=D^*q-7RJR(!iUF@(FCw9QnL6-cMtru8Ce+pSIIY z6HxSeCci%&>UcT99&{2}q%~=)PI+gSnfwj?R$Va;wJK?ctrFDXG7!h0H*0-j3=~c( zRp%km0Sizy78*f%vW{a&zLQ`e?Ng!edgiclj0ZMYhqRyyxs}!}3o89;+GVAT_FS! z&S(CX?diEzwrES_D}6Ba`HQ#Z$+Ndwb$hJITvlhUmQ7wZ;Crh2?%awd{Z_OsF>z|m zv+nZS5P3~XSg~fKq>Ghnm-;c88+1BSKVda;7Vi}kzE(+D!v~(&2q>;S;Z=&+kD zmA&#-S+HiEVSlc{O-kA*%stg^9na!`SA*&hQb~4yLRj0tH`S^IZ4T zPV11@|5oUpr~ygnd1=3)u^u5QsildjpJe z@K;RU%e1`UPIojwT6roSn*5Paj}ZCF2hJslMD!__Gf&`NDV|+zs%^a}v)3=m`kU9~ zYWuis^8L}aS2-nxIb-Byo;0EQBQl~4J8O0n*>8qagGSgXb2mJ&SU(oa)t~=NQ*U_D zus(yRokbs(wI=Ey_gb`r2rZF-C2{aW`OfCLgnI%_9{6YvjBfHjTH37z46Q?{meEy0 zO~Spl8d8Ayh8eFgLC4EXx|X<+iO~PihQ^AUz%h7~TgEpcm@<t1!@A{*@VIpIOaoMVGXy; zd5S52_dW2=3iMfA(3-`&)XzN_4dhfI64zV2 zh<-7o5s8U>NDnRECey7wCO$jOV(M;{#hP{o4Y{zAD69@WrmG!EWin-8(}v1p-gqbl zZ&M_|k`*HhKR5uF|F8;t*n!uwJ85!6x8aS^sz+!bH z=T&D)zJ@+-2q{B7iClcJ)#br2u_AY8XUAz);Lh~JXU(8$McU$WCl)25=HFx#+W!Cu z$rZWlj!E4(IG^I>>@Aa#Z&eK*S|)i88>S8NoX2lH?~osXM`jF|ISsv_xpeU4xy$kr z@9plEUwh^4eXqjhyUclxs#AT=4YSmdF>`wQY=ZWGZ4w_)Ua??9wA=K2lrmni(u0)n z>Un%DdYQ#XRLkGLn0OkS*TL8G+P z@(7U+0|cqriu_6=+Dh~%m>XwGsXV8^(x*yik%BJ#9PKB(kZe6&7Chx=euz5-1MuCc zs;tSyD2J@oWUwx*8O~Es^~dM}hn@;rb2Z^g=-=gT2TAC3hIc|6Y}rqcCPW`a8w)o4 z8udw44>|gAeIu=&pW0^eq)9-Mvba}>4hG3{LAa!w!;G>?;~3pakWM=xHf{tTM3}bH zBwxhUchzPDQqDE4wDJpjI&T-3CuQy8MBi|KTV87G^0W2(<^K9s+1}U=o!B!fG38Hz z&9X37U2y61(`0=ib9+bwp?XOL}GFYWNjsS7nMb`v7TaGu|W`{j9g z@5-mHuf_rIGI+xOR6L-nd3~+q-c48&WF77ulblf1^a5Gje}QF;g=bMe?dbliuo~Ad zxNmAaK`Y=jmJ^e^+=GhGFT3-E#N&`O2*#`Wc`s|k`yS$g`Mz8e{p5j<^guL>h2~+Y z%c08@(vD2sSX#?#g#*n^J?(OoDhxxCXq0asu5s4`jXh@e0Ne&Gliv?hf_1S>6fA=YL+b zC9Kf66nuRWh?sW30yf4m^^Syg;k?wm$dT?d`7F+b7hK-Ir*^1?mmX))eJ9sOB>88P zLOWMt1}+>6KOaoW!J%240FQZO+iheG`*{<22Y~ILTen6~Q^lea-lv!;C3(mraSSI{ ze@u!wP&J@bVRf_Ni7G0Iwt8FB1k;>x+b%ND%_OgQ7+~W;1F7-s z0hC-HYS|PS)6hzgZZ|m%(KC1HDyM^7pX_Dzd~@kO+X)+$p*~5Ol!GdEgc?`-oy#IM zF9=%k;V+6D!|81NyDDF@jS~K5vK-u+8ZO@)jD5~KqZX1`Mq+L_A>e$H(D~IlX2Q}F zjl?DZE_|>=8aB+VK+3_75R<5i4T$FKG<86KxfO3v>u4K-UkfU|Eh4y3r=#^Kp9+kV zX62z-wQW&{xWJ=dYrqj~yIJx*tt@|p5ooRDsyf0FWzuTdz?+;avL_}%D{nYF3`2}V6cD@7)PXW- zsdTxq;#B4#2YV_7{`Fv)U{-;1>=#Y>D{UJjh1fl@%IW}433ptwcU6M`)Gr|Bq1U!u zK|VT$*#U}^ZR;)1#qeRw(t(DgQe%OlOP*nHtDsClrgbOu=J30 zm8_?Bk*b7Ryaf@I(V=G?Q3+vO5VT{0N6h#OK*qfw!D^N&G%8m`;NP&BIy;1cbAS!0 zVCGzIZf%r%_YTY9;i36C&n=8}CL%3rRJTaHizj8@AW9^bqBz|j)NvhK*JSOM-b^~! z-7E)MdAp-6l-JkP&$+J)O0JR3F9^GZ+FKIcVEFr?+*QQMZs$I`2qd}Z)<8yV$*$7) zZ5Xv9eG~UU+pzzs9;Ti?c_PZIa`f!`GCO{)V)9Z1ep8`wp5&8nzNk5Ys*|1i1`a9# zWl>@Bbh=D-Vw7c!t1u$*WQ%FMxF;L~GGv0x&~U-g_=InDve5`QBIprgREj5ts)gil z03{3)mFx0g?@(k2kOPeq&JW3&8UV(_5%occ5N~!4z+G*U5)#pH)k6%w;R>j}9eUHI zhng=SPuwD7_aoN-74mNbHavkuAKmY};fomu z*^vwizhut%jmC%AzWl9L;<6HHXIsy&+QF;cx4I3Af!$Do(a|9J_NgZG_AC?SSuqHj%o8fjd=YH%WQ z)Mipte`uhLApii}H*(DrRR4T3;8Kg3Xop2}OXufW)TUi@Vc6c%_@DOwWyB(`xxo{{ zq=UhA@d@hKkq%Znf+VKKVhEbx?9)&r{~XsR&QhYd1F$1LvGiV?T^In0MxitA$rjV$ zo_Tnh>*(NM0)(3wY4Hj|_$eqqooG+WGKi$f#LF{%$8e*3_xPT+#N5-sHXX3O z0m=}S=y+??C*His=_(xAE`&V-)I{265*K7Zcx75+$O_a6yG^q3SK{WZmJmW|{YOKX z7aBO130XB8V#(;|Kstx)qIgNuzjPRvRDXQePQKbwBk+9)G|1#76}I{2LN*dRZB=suDkE}4MQ#XE zX8DaJZe1uX=OKK=iSPMbV+6q?NfYsvX33c-k07CHmpM4i#Bgi@?J1kESF~Z*z!Q3h ze5Q!QH_h0F>fy%L!#t%-aG3WoaA;}oNmD6-MzTBl?buognEb@|Y$xp+sxgGTA@xV+z#JW*X7 z$MKR)bgal4yb*eayw&QE@XUW%@4ZVK=h&0DltiZ5+G?_Sb)c&tZQ5F%N>bs8SDXsr zLpJ>rF~v^>k+CF_rl$~KBHNi$9W`TV8GJ`bz~A;1wVu@Yi8Hd9vm8&>0TE#g}?ye)gC zm(n(r&^uSL`a@LJnWl%kmyG-=Odh!214Atw(@>8x)XM4XB0cSmwxLLIU;mQ-U2(7L zU9=N^^1$8kK(?mnwzHiLG1maLvwQI1KpUZ~YashvKfN@+rsrwDb&M~d|B!aq^G$8= z?$oNOB=6$^w>BMEQ+uUxA?{7r_1Ty+O&UFU^0J(rZj_&Ycc^E*O*eFg^Qot;CpCB5nPHQ^&Y$v>EwZL-2#(?*}H*k3FicwJn-=z z`1m?kD{qa)77gPRV>rYEL(C@73VDW8PPT6hQhoFO`spy7zu$0_DXk?|S=~QaMk2#>b+LW*Zxm+E+ zDQanzR?&??dcr_cv2yi74RBT4@~v&}m9n|*heW=4=*e7c^AB>JHKjc$&vcmhSnHAp}1C`@FJ36+5MvB5+8%kr8Fq*#p<|B8x1LmdZr(G>j9~&q*{F zBfs}A=&&QCaBSy_j15r2|B@XuuP(n!z`(y?G2pGbt~@$eiOZ^RwoY2to3$G=P3r4q z1GZJ>cdm5WK|E{=h(&}bhtGEaL`3Z#JYp*I27NU)sqHb>aL&JTLe+9KqFW`zamkkGM&K!WENAuNwP<=0Qlrl~}mo9kMss;!2#`j&L_nebVk%u(r6 z@|THIX)SzHTFc_{s9mWN@VyqUe_C+s$y+9HuP(J4g0{AIy%n$9Y?Tphx;mrD{rVDp z$w_na9s4ZOm#|+!^^^J_e-~Fbb*#j__orLsw`xPLwT<$sUW|D4!|(k~TsJ^nvuF>| z8{y9kAw6@%*FpxSp8Q8lQ{SVN+hz{35i>I%b)loNwZT=%my}oZLK-h&mQ_ocvLmkA zp{hgkg^6KT!r-|!ErjJ% z0wO2-gwlBq6U=q{QU&05p{>hj+UjVgL5&Ly9+Ey2!-fjFp_m<5Vkexz68FDkueHp` z5jG&xaq_^t2eMWsoO~a;JZ-GY_Eb}P^1$SQTY7*C0vEmEO6e_>cXl+PG~4jl3)i<8 zIMefBUMQ!=cS{FPWRnLLJ>YhvwiNA&_Q&MxWjWIBCwu~KXImfXRM^z+ORUJvd*;08 zwR_Fh4!Iz{BlOMu9i$U_^1z++K;AR@I>tb&7Kmw#c6)nW&o~-6(8X?5FEE|X*fsH@ zoM>>DT@qPH#?F%-?{jnYNSfekca}BZ{^s*{(wkGECJ(%y2h_geY8O{BMrhc!{6bro zGETdxg?D_Gka159lk5JI@5C$NcFTbl7ZM_;BTbErLMCHgCtwL5azpB_w$ix?+$?7G z(op`I>fwF5Ckz>Z<*1t%|1pH5(+FC>My0`PPvC0&c30oJee_`8dt|Ez)g;J@R^jTz z)`{CVdv&l*ooSO1A}zm-TnUNxpiu(dM1;=t1`Es>sa)bamPYw8iIB?$Bkao9#&Myj z<%5nN_jaCUBcqGa)upz;(+8sqgZxawdPEW{@v{PsW>7p!Ab$o07>dHLd5oUh(t$X*gCg$GZCi-}jQMm&5_e)j9%mYs)>b#nFE z6JM0~1SEs?B5aibWAaxUvKsT6eoTt`vMO4p0x89sF2q}!?Z8dv`Y`>B;^zba@->0R zAKqxIT~od;-c}A$AtL0)tukd`I#{2vEqYP1==(m#hE8;nY29;;6j6)XIins zR?0J7@YDV)X7p4x-k^+Cm%{nMdC+E^lwGKtG_2;xhf0ybKR(z|ro%$Y$wPLm0*#gh zWi5!4l{wN?FwgHM>csn*9w?5i0kWXQY~V-{`n4p8P`b<`w_g zc^POstMQbU_aMScfjsw{>B6XA&h5t3<(ue0D{=pcR^mQ<{9XC0|M4%%_kXMHUd^ob z=WAZXfU2gs*off}ghT$TOVP$uhwU0UivB15qmAJ^o9R~zKz3e~X+i}5x3ek3BnlATO%SZf7~Kolq?6(Q|U5OLZB zMZ$x+<^^nYnNC{r4MzQ`oE2vE_1wpO6!$cn{>@gmG=a-cc_wvzL!vgSu7|#t9dWp` z!7mFZd%@DGcZwztG!Li}Qg;ZgVn%j2b`^G1r+`z5Q^3G6r6vzd9(W%Q)N7U7QnpFm zbE$t{(=~2gyPoj*j&;2-$IHiFEl9^dg~gd|ZQ`Eb!i6fQ|FTun)dElG%0OQ51u%IpQ z?M{9yLh*Q})~;>p+qe%O>}gnftvrA6%Adfy)R;QEL9(+TbY3u{*yF9Eb|;}zm^?6f z;6@M7;$r-O`53N$%$ZzjKIN?zX8@ULfu?pIWDHj?GhJ#v$5%<3pMGv-ql+03ka0bA z;)X*|-azn;qvj@XvosWYzJrQ<42y;H23ICu#7Q|o1z|wiw=bMD@>>3@hlWjcup3%o zqnBayJ(f*p)rI|)2&L@DuTAzL-hV(cwH60Pi7C7go2|}?YUlJ#xvD}z|+9KYM z?FN}Do6AQT8Ct{M@C|U6*LcB&47GxD5z`cu7Lq2HScMDil_qZA{{4R}Z=U~9^-AP?K!yXc&z21( z$8-b(f)|I6%1+Vu)=r+6jlKP{!US#|OsuWiJX|O*bwjJE3-M{J{w(Dj9M1n4q}OIbv%<20{ZQ1legkAcOH;cZInN}3YXQbDCEBpLq&<^LIpW8EfyywbxLJ-MH7_C6mXnl zGf)uuPUV7z+8Pw-5DqeU9kPe0+3M4pQzX1)CL}W*zd)HwD&jF;#Uy)A*qB?Q$JR8s zfjQ1SJ`fn26@%q1ArcpQ(SdY4OfiVhs#}$XZIqn`CO)Nkla{yr0c`E9Doc#nkoVQ98(6BWDDNT2C@hC8&Vw=207$8%eaE2Htnqt zMact%beGR$_8pmrbS_XLp9|AO>w*M*8`|=1Z)aOK-}lRd`}fL$_QYxBOgWsxnjUaK zZcv)MpD>PAmI8a-U}#C&c|u(hH!*wLS_wgY(oGF^4(-pm5R!#51y!H}q?)fRrh4X^ za&a!OnQ3d~=u`YhpT^9sp1Gjs{Anfbt|saKRQ=tHXU~1vdiDK3l=IgwTsNY6A`uyc z!N1}6A^#1y$tCcac3&Lj$@)Y2vNV}?3{VNbY*Xue(p7=>o5^%=SCKqbCUPQFL}nHD z5YpDw;YS3}V+(PRHp)J4IUOMM8!En`Mkh(unSm}+O}G=G)kiuGF?YS6?V-MKxg?}) zRlru4Dx2;z#H*k0G}KqcrvRdC8sioV1R;l`FOxMNb#lOs@={vWN9=r*F6k1V5*i#@ z(+@F1@RudP$S;73!=U7MPos9k>yk4jYc+{mHnz+9?m^km%XL@UErokF?zemfEDJwm z4Yab5-<2JWQa*L_^+G4ivvywz@Q z+}Les2dT2cOW)cBg$E!vKE?G?nfGzrm)<5oHg|Qs4ckOBdEicYAe)P~aitOIy5~t* zA$VblmnN>%?q;)XmHSGIb2Nd=0I(PO;0h7?!H}4Iwkk5DGY@VGlLsab*aK=FL(9;8 zr^ds9usbU&aW7ektI-JNpZM(L=9cEN1Yu5)@pF%Tf=7yOM%{D~oXw83g6~rS0`J41 zyocVo^feQ>eL2%(8TYs@jl-%FJ)~rh4}(9zG!3E?5rflfn&{Zw+V%kao@U;86O>8Z zEuFxal#4SEA~PLvYK@bZIdExXJgAs@I0)PG_w*?v<64l+c5?e_+0af@o=#ulQ*Xo! zPVm!Eng*{aD{!_zW_pnc+L#nW5P3zObCi6xO=i`teMsfj&ELgat(g73e6Q~WzIpb8 zCvlOnqE!{E8~T=_CPVqY#_8KvnxH)``joI&c&!PB?lm+omL(`{kyWZuJ3$^jtMNbsz5M##zNUh z(-Xd)z+Ep7zWZhQ?LYc2%F3f(hz{#CsK_L)gb`CDA`3Dy7s_ zCSWf)r^-VQ&gZt9z~#+Z`m{BDyVMO98l}7nTRcqWZf@v19NJ}oaHbWx7t~Sv(;%h9 zgAO=huKpw{!0skkg9>^d*B` z(G+qnfGB3dk@losl0JA#_2SX}1AQ)F+Yj$o>XU6hyh>CTHc6vIBOF1$x(r=fT(9dH z#crQ#U-f+Ij5l02a-7R>mv?aZvw!jD`d-_E@>l=Ee_y_Tqt4lVBrPqyj6X9ZtST80 zN$^$0X>A&n<^uP`EG3J7lNhd4#I&)BbVUhnj+Q$()x2)b*-i|p2NNruqDWRn9jfPO z>3889p%PW3^&~uCQ7^*!#AMtyekmuanxI_rF;+iy{SHx05k?kWjyNjJ=LM;J6=Ql}nGY_GolN7Q34V)6STMKp znFw}*35n=&*2=klXS&BaUD+w;t2aJ=Fb~UPSXtf4Vo)y^VF*1T3q{ zB$D#l2UbuIX)1XAs@k4nO8*o+KxN3VP%-*i(x;PQiYE_D9{BVg$VN$<(^IiN)xo!L zA87@|#)bydet1(Zcyn33_(GHY^u|mQClB0l55%2ae}#**?qiuGQs!9S2J}kY^Ud`dkKMbz*cTXL{`qsMC|aOVq*bASy_^6mXRnQ8C@SdbahS;mh^+)cmv!fM-{a$mn4 zO=_?nho83t)|m=T3knc^%TRgKhzQed+^e&ra{TOjt(g6P%j;)< z)HcY+Vv(=)Ex|Rds_+D^WHN!vYF$=)FWh0ZO;Lj!J52+op&)cP}-v2FE15N=YijbtJ?mCkU8^8{Vm<{sC1=-?Nsa^v%` zUAStqec_WKm_knIMQ%7Y{R7CUU=42#Mh-;R$x8}~LxD!}1K4cEW+qsffVFSUqIG@p zskg%RguKqHj6sgsnY>jde)6G~ZC!ctcChtoRsQ2#!J&Uv<$7D?YRpV+A-35@R{fzt z|G1CfC_n)KrV~cpfUuG^TqHOnb4+s-%d*KMPK7u|l#mKbW@qPMiMwT-$6|B5{sL9)d!vn+9f@Qu)T$nS?-O|MOA`8!lC2RY`4vwNufs6B~Pt3f9B`= zOeOft&7M{w&1TvSZS}2ad2WF=uA_~0>dbM<6ebVc!UJ(X826RjN2x)n{m_JHi!oYL zpL_Ju|4d_g8k8$r8obt^k|vebH6Evz{;jDtJTu=y^+Ymx;3w~a+F0UYiYFOg(_-ul z=kQDeOl?f_5gUx}igtFcxd=TkpPXK5Ja}fRpz{UMGJf)|og6TE;06!S@(7++h|8Wb zYJoy%v@WiJL87$a8ec!xmZw}3H#WDuP)^I}ycmidDb}<=4_R%T2VTn}k90Yc__n8{ zx}ZzYNza|S_IDFWKecLZaC~IsSt@jf-R5b6uFRU1N(8M3V^Fe|_xhxSB8Ydn1e$C5 z%P|rMMG6o$p)8Virob(xd&F*pV%6@T>iQ?6S^%m|jY))$+7i!Gs5N9)9VwOUczV5g z{k#>AoAk)6YM&cHrm$hS&mP7Y)r8lYV3~Q^YSoJmsPHLIAcIkIV`bE;yIG>Kz4y|j zF{n{RYc6w`9U+ga)DkSSx_L~XU#qGvP7%?O)5A*uOm4=j*~-yk(}H?8Z>BvuqZ zGrEOk<@695?Bva zP>^+j$d-c1fCCt<}VjNi08bX(WD8 zK%^5(|5<_w5D%n>lF$NUY!oN{mAhA`);L#6=CFLVCJQ4T#*AAYfZs&ARswKBo zy3s(Vjtn4C^}p%*i=g%bRinl)1#yWm?F~wXH$g>BSpal@wT7X3Sv7hVp6^bwhH}qF zhGalP{^##IYPXf{ZdipO2>VX%)7BiLl4xNEjpw{wEb19$_gQ)2sF(WhVC{ zoP;#_RAgogSCs}LIpdfd9i@7Gyxk*sf3frBudB5_2@l0ug^6d^C&osA$2jksQei>w zA+8QqcGe{6I~8aD{kfbjU|F@(;Zna5@8aCdaMJ@W*|N&4iu0t`_nAV;A(%HWzzE&{ zgH|%M)3B)r+3atZ?MW`a3&BVE+pf=bC5zi<@!NdoEBpRyqitXJyim6w2PEmozn5@r z(wrAj|FeokQTW0i%^6LULK>Q1It-!q-1c`QkKQ&=5Qb_y@xdNo;+Hs*XODf(ySWkd zL^yt9O2VZ;#AhPx2y80@yCcuQ_;93D%1fjLChY+`1F!8J&35lMwEYs`h@jNBpHro9 z4u&f4JXuYLIPf7hn_TFvGH_UD`oB-G!1mD&ji+E!j_mQmVVP~miK2{m(%GbI@Q|9O z0_j+N)%@t|fj7@1Ak|HR_^@*^;Oz#(=*hOxI@9?{Ea(+yn&?sSQRNIi=R%w>+j(B# z)2e!H)WmEFQu_KoLirzQ^CTxQ^QuSnjx2ZScaC{g0O4Qb^)^B5BJ>f!`Eqi3O-p;d zt2sylm^-kMrc848o9^d4XxV8nFkvuVi(3{Iae1ae4sw~DHzdJgUlplwTs+UhtzjOL z)2|;fhx>MdU7gs$(m}EWPj3YBt4Ed2Ir8U}xM4U*a%`S8p~U){lwpZ34XUHAFBta^ z2cplqaIRQsx3}q{L~nP14m?uA0djsHdkTavx2*`$9u}h7FN{ljs@;Es^N~UQ0LEsh z7wY0VwH-bWodvy~9NXOskVmGSYw-6>$8Kx97MSHaW`kXTaYi>&x7}D z&$ZOP@xZrBCA2`I6oIg;fs)ZksI|trh>I4JnFl99#QGC654iiac(YOQtZ(slUlIMV zZ{6EM#@)=eB8S0PtY6m?4W%&uhJ;hQ=|=|l=*o0LpBe4T!h}AOn?%NrV;Y1Oe&ofG zmOvAI9``up+fMU+etuluXm5U|ndhoP%k*U?(a8{5TlPeEH#kq*GIDmEXgxDkg!~&P zVsEney18;E*m!cYi&ZKBTjQ5KswXapg7ro0yvjPTL?AWUNz5`A45aJEk$YH?l!>+| zxPCsabtr{9RLN)pMpw&h{kzac3)MQT965&YVtAD1GuW@#$ko(1)Pic^xg{nX$%kD; zN6^(ZAML6sIX8E?^k6-g=HusHO!POU+3)|dvFJyDV0urFM@@HQ-IC~L)pOd2xi#xXWoVvw<;=l%a@ z0XT0^?u?Vn1E7Yt_f4)P0}d5bA%{s?N!q0;M)sImNrY1lqCm_#Dcz3^le3eDvqca* zcbc7F5{yls+eWO*)<9zrMX0>&KlTxE0+{*{6tS{i8{KS6OLa7F?(`!u~w!gC3zwz0Lz^W)k;;E@?n<@`fW1$6nr@*djX5GI>Y$*c+ET=@L< z64=^EG&^Q+l8%K{R|T<{>cG_=8H>tV_l@tfwQZ`cZze}uzVy@u*S1?&(Edsq0wbPGU6e@-IaHFG=&LoaH zW_O|P-Z^EvYGI^*m_+V%DXYVfxM%tZX4(RPb*-49l$ z0M{e?CY;NgH{vJPB`zj=1r+RNy!X%8X3=fstRHo4JP9s0UH1fLi@bU;c^S>)O|bUB z070WI3v1KzKHf;%T?=9D&4G2wQ`$WgZx5-~VT*1h$a=lKX1aw29a~jiQOK1*yxIz= z{2xusD9pu+ftq$n+%ueJ=&>wfNl)9miL-Vvlt)`KmHH z=H_)1yDd;bZFeXJFd;r7RP1$YAC%t^u{SesGveV$u7v}Ov+;T_+LmtuqJy*DC}Rot z&}@^+>pBg-bZynunjYy6L-foB!H*CA55oO^B%i8HLzq`ZIIF19<5N@M?VHT9_H^9= zP8^sfZYgvn!m;|I5N3c)W_~?>4f*;JM|t?Si{cp;@{unUhhF?m3_>ADsg@`3D;g3M z8@7O^jt-;lsBIo|&Dh=~UX&wry~Er7y*x#pLYNArTCymMLawsTM#h%D=EtLdXyu|0 zW#?<>hmgjnoCiT*+my?I+KbM=py4X1ik|((W{=9X*Js<&0KGR=bD1j}tEBo`IJ#9I zoy;~KDj&~>hPR7gwf*@}tEaE(v|E5g?0yGBOIc~zWu{|Pu&V-?v?#Mb)0D6zIJtP? zrzXEVODd%}#kGQOOrHoc((A=~MoLEOCA}BF9@1oZIq2dzrTt*&2ow&34)yi8zxohxN~N*^OXebQTz- z98J3mmhbf-89fD5wf*V%@XQi*qG}T|mJ-3y^pa$+;+SB|3K7G!JZ2$+YyQ6x)Fjdx zOcYCL|3}7V-3rf;@tP$RP(G{#j$|ziA8+FZ`qQ&;=dtKPbbDw8)Ps0mBocmXN7cON z5Cj7QeKg7B{RHQM$M!rlN>o94xm`djg%>WO(UZACx4Y~HQ@1R^enzp;5YZp_a2f{2 z(6WpsG*)pXZ$Mmb`|Z9u54M09#ta(N0oEHjl=#SCQjUWQR0@|n>DHzH=9B_H(;5e2KQiaaJ6e!AHq-7ygQZsNh^c`q)?iGNCmb&qyRT&p;oAL6YRfw^N&dzx^Cs8W9EK*@U$gQ0>_zB z*Xo3Ak;wskUJ=^%?J+&osjk3-`}3Oc^R}i4jpyTK^IgO3>E`dMloE~43)TsF%y!1J zCDt4aBmC2b=O`-BTe7KkAmRA9e}biGJvfkNd(K|v9^zc`@7xt1%MdISl$6y<9^&A&JblSvZW|QE*iZG) zXoMnb6r)+ZWOjq8xX4tqKPeC)O!GCkQ8_3-JtOkP_GO}d&<6t@9;>2R--TL({3hjm z?jXBzPVGxSX08o&BQaL@_gDN7shX7@9{K5+Wwr>$4=$8)2#bpg%w8v)%fG1MjPQF& z$x5}^XTS7$3c?s8B_=+Hs?fk-v7Z7&9+W6T8#+#QZlU*u%w6g+;4clI-1Y5vk9y<^ z!n;CcYbdkV+%<2~sW!IW%HnpUK_1kG970o=a+rWi5~XB3OQyk|%jZ9u_T)ZZI<6-f zFPWF(>EOID=lakN!tKZt_r0>^aN@6rXb|Mhv`NxS3s6my52>*Z9dqEdJFZP$E}A{m z)JDhTMlJ~~#NI}Yl0^7EIL2eDbw7m{F~`~HuYQuq<6e3cY%ntBLD`gki$c2F@BJ%S zH&!a|{}dJrE=#M?Cp>7<6%#4M}!J&7^ot>liWW2YI(k9e<0*4iQA zvXy;PVNYr27y7Iyp!ejb^`;#(DIylf|8?>u520)8CNG`%RrFBey*&GU^y z7d&e-5+%oh9)l!Y2+_#j_VsJ$p~1bC?sr`N?#m%XT+G&{$L??B?zP(et|3XSbQN%e zg;phZ*SpDMHZzH^)|YMbT}#tpHGf{@xow;`;e||a=Jbv-SK}Cb$}$>!R5E$qw7HB0 zk&lP7TWHko9IeKwWm(*^7fKh}#xXJQ>zz&BYuv-M~C;%Sw8`79X~5Hw@>{Ldv=y|a4UCQB;@6!m8&~_IHHQE zi!NRT*epHY}~Km_u(>opJkQ{69KE=RyluW$%(H7Q zxo8|9`KAi%+?cPZC9uw~Lf*!?IdyVE_uf!{>jI+ro_kTa!Au=0!2hS5h2OWswNNfM z0iD`WN~F^lg9iQ&rs7ab6i2kIGvJ~d$tQQ-ondtIecy+&1w|M5kDRS1p06aq+Uoba zH};9r4Kx*LXa>R?uC&Eq(x1{n4G${RMHxXesTw^Inl%9sNDUbqoaT+Zz#*>v^mC4?F#n&kZQry`MDJ z0jIrHl1a{*G+I?KItccp^rJgwa~;TP`{-V1myc?j!1i>z$MY8(&dl|N>tVvA;RyiH z>rhuC>#`)-y4Z@5$iSZ5mX>IT66nr<$o!kfEQh5PB*>Tubm)5nRswCMn%2AwF$cm-GakXs-xtBtRdootUTX7Cbx7^aKgtHNbiTmF6+t*9 zL~$-D3WQX~2QXp}zfC_qsYP2yc@T^f#ifqo#yv?pRvHqKr`-5PDXIZlW2iVe_1L;> z?_`DoT!pLOgU| ziwe}5Yt2HKuxgAJ9*d7cPL_Lo-NVl(hR{}tvsIVG_epbDwxyHs>1T-{v`r9EU6ErK z0deZIQI8gpMo?z0?1qMffi+=@=M$M#tx_BisUVaz+_1*^hOSxoR>`CW+xEj17HYKe zcSoOf{o@Uy_F!^JH;6y#O1TN0q<Tv6I=DIw z1y9B#q(M%*rBtWlgEVhv;ixrVywH<<^fxiCeDZw^P`cYFg<3GpcQbY8b^ zn3M>$&?Lutkxz^^xZrRu!sJ8Pf5zb$Y}OGuGz6okbOB}@MNu9UteU<|T5gdqk)ILq zNzE%9T5^qM&pN?$Ln?N{yPm`O{R%OHf$JUO%Yx2^mW|*3gB_vZ%BzSTt?4Zv!Q0ef zk;<`dhud}^#zIHj=jK`D`E5DiW}o2`lrGaannPi!cj8(cx)R5Vf7sqpf=;lCGT2Pv z7&f7!XV&c(30zQ)-QVg}ea+Zk?1Ai;c9<2`G^oGbl8~Tgk$GZ_3Wq1rWy)CxO<_TkF*AGb9cIqi zip2mqEvw4JSy3TlXBT2K9LTH-)ML+8bR}GjdW6f5OB3hmzZrqEZxBkq>z>98XZ|85 z`E=){mBOs)OPlES(#;x82H*8U!*mc!-`ZcFk)9ctj<=7$d3Z>?dNQB(Gv-tnj4?`( zyW>_HL}|aFzjL<^$uf59hKT;*noam^%j;o7N}Shycf@MR7i6c}uZz+G-_Qn5fo|Tz z(IFm@nU9)5S9j}D_O%${zk$41NJNZB?dFsslkj96cO))B{Ls(eQ&4Jn+FcVj)6E2*h?pa62={2SovWWE}BGkqP?Q?=X&<* z6M`uH)q5T#Cc@5lCvWU5igm9mriAY&hV?Y+G6hk@n(Ni28a4f%!%Sz!t+7g7H2dyQ z?N%vm``ILI`(Bl9i$`gVQ*PR=l) zziB8O2aEN}#ZrJyx1ytD9J_T%`Sb3hT?^RZrp@PbB@VY2ncEQ+WKYE@Pq+BGOrPH_ z%;YYH;Aw}Wu7hzT)(?f2K#VT@_{x)*_puTR3URwre&vcBJ)5vev0#SJ;FrYB>f{U! zqh7Dn(ct6f5Q%~%VEr`(mPJMHWm9Ou`SaI^bhbrtJ(qUh-FROk(QexzP{?&>L&<|< zb&V2fj)0()_fEx(Kw3XuLo`f_6oaH>GZ1krY^DH@>|K=EVykyrfX>=trIhAJ*w1L- zZ!mrAiy80`#a=XNUUct#qp{98*{8v%Ebe%k!;6iL#f*8JR((6cxTd;L`o3+lzuG{YV~}7or}mimV54~uT2qNMk`r)l>7_YW@aLOisx@`*6$1-n34+oK z%#@AR`LBPi@5x;ep;{Lm_mD-RUAcw<5OoIfUrsCiYsi^b(l%6hS`LZ>BBJbYPXuW~ zTe*41BOTrts?^l1I(;4xIXA$T*RKp7J+5)h(PJm0Aq)^z2Y73KGu=!hC~ z{Aft0M4Mpg_UN`*V|HF*x#F2stw6X=7I%eP#;YE)!{fhvS6=Ju%?HEhHXbEp+7@j? zX5YILAoF7yaQ@TgC#^aPQ631bLVm`A;DXh9M?}$RjqR()Uz1SqWtFgDY}CoZ4^8na z)PqK4ca})W5=;LK{ZvJX7$GQ*vsk^rdy`JcY7jM(Eh+iZLK_gPi*Z? z%rH;LhJmQPek=zLc7L((<*#C2AVKSBImb0K+A_V`637cO3Evh6NM_1;4LhmxeQC=D zh+*I@NMa<(TgvY1-g6$yh?+piG!y_M*b{;G_LqkjC`lgsabF(;1RJw4o+1q~*Art2 zDHc;!M$zJ6GFc_zRC~Ue(89+a76zdmv&2qV%*6De(*>6KspnU!Mo9O$CspWI0Rc9i z`7s#nj;y~}nD{g`;uP?T($QMZK7i=@J+jV=fVdXC^D#`k*c_ihwLGyIQA4=Mtfra# zr{m5MHlH{;1zNYt+)l(yS`ug#>2I}s-@y@||A0J@Z1B%s#h8}fi4G^Kt-9ItMY}>epII%f&9z^)r~&o3ZC&TSU4zzeHqJYoJ>BIAkFqFtQxvhT zGWlNSL{oLRRS|L`IYhB(*>+0p;w#>@_T#eNesg+$wDEXkzi#XCDXf<>k-v*{sJZ>l zFq1|~5?VX3805Ysf{u=?Ls^pv09#77_=zj-W8 zacp~K_fQQ*(vlr{6`yA{Qpx?iBsyJd0<%cI1zloqzWZ)%tKSz58!+}9#)d8D#XJz( zY53>@9%$~g>SwBppYDlEg)%ho4SXDe8<}Hc_8F#f74K zQYB|iPFV53Qxj{nb=HcA+H2`N&=FxF(T0+fceeVuyy{Z3ij7L)_R(P3hK%Pt(ZneV z=LwlL8VJ++UNY8{Ebnsk8^|EJFaO@a9D&lo!*e}=cKKfUNOCOI-6lnJNL{V3=$w%-td3-NlDa~UHvQFTZmFMA|pLbue`X1$Y z9?d^rYVWew6TyEw|ERwt$ea~kVM|BabIob7^*%4~ljer6LXnj*ni$DCAsifUpcg`& zBi9NQFDHCM+B5Jb1%%Nx7(Q7taKhPqBdms$=$O%2bkm%Jz&Mu1XsadWrQBgj78wh! z_w3F?z6V2vZy;%clp`9I-S}_}yT<25R)aWQ3|=!~Dai37?8Qx(a2m)ZE`b zr&XKXiD&Pf8=8yWO)4QHc2kDuU*fg8H1MATUZo$8rix3K8uysl(6I1&aaNCNdnh_t zVOf*4U99QD4}PU!cq@g1Jlvou!{BqW%f@;8c9G8hIEK;6&l84`I0o;$SBuG!=j~aC zkG-%O`v*a6OD#|%jk6?)cP@P-1xO(5;kOK-qd&1{N!&m>Y@ zQ%tAQ<#5>!nZuu?OccGrsvs^|-b9IE`jGx80n@CL3H2m%n29z+E=QG2$m#FDplFRM z;y3(Il^pZydrJDBg*=X|yy#p+PUXM)Db!n?qEuk<%uz234*GR1`ghR?v$R?4TN?^@ zHJ#74gdwtkEoC}-S~zEGKS3^1mh$m=sm~ea`f-G4PB9L!AzkHfc9}@W5&(J%M-8~` zUpY)MVthAy#Nf<7%Ibvom0Uyr(Z?b|(+K=rdRabYr(PeLRS81&+r-Tq!L{Y-^`%ea zqsx~=ix_nCB`ibqd4(wFOC|jVJ4rzz?(}jzecJ>C4YrN1{D!} z9P3n?3;N{d5sxXKPk;4&rwpx6@s=o6ge)&jAqt%j@bb*`fS;2+PT!93Z1sCs6-Xk$ z@1H<=B8b^x-Pkvu|4gxOhnl6fU~ugqkG1WG5h541-+S-c(o|zjodN*qB*7T^VwLST zo(K`E<(c zdA9nz(*9D0(mAYwCdxF|izJ^1fKTae{bhXC`>Kyh$J1Fee+x&7-%G-G*_^ME!&}6$ z4It@rMaGz|IYYrPM+Jcl=9DnLF{|%DjJ1xQ2~YloBYiTW<3>^?x%JxUop4Ii7eOPl zgkcwXZ2Ae6&3KTTbkU+__f{t|M?f1;f*>LGo1=_<7(hG5%$IW|vjO^QrQybf^WJg% z#u7gLM}W4qK^sb)R{%aZxGVWY{Le4OX2NXF@|)8)bXoc$?R@-Jn|c9j9d6ru?(_}% zLEOes!&jT-j$8BPru*s_=9X90cPvmKj6rp=r9{&SB?5*+Lf7`RJtuboMrIN#g8o=O zj}unzpi+DuHtR17{kg7UzeZt*`sZfFR1lJ^QISPD&buI-FayTiD^BgzlFUQHRuC+= z*EcD%7mL<;53$8!KO{wn(SrVuhS53ne5a|$crA|j&fdJ*oBpJzk?ZY57x2={h6+CQ z`Fz*yl??dS=zrhv)PvNn%)X#&iv=0jO)iYo==CsH6C)zx{!JQX?kW|Jv1LrQQ|@AO z`rZU{UplUVL60C|Fe)>F)VloWUlM!M{k8H$J!B6nQM*+3bU4lv7|Ybbv)RVUQiW8o zq-Yp&ff6tZoH9?qh-}d!N?_&5Fwv?&mxJh zcKp(k>#Y3V`?mAVE@3#fjr#00SSAHI+adIKif$Yqss=IT+5qCV1{HkGX`;N$=LBmp z^E7Cn|2g$%F}|pWBYwshBB_jt`y`2^k$#B!ulxR?dy9GFJ&Lv$ViqGrEJPlux*yEn zqG+zjsuTiaxa7TTuzG>;G|U2H3IplA?S(3iYrxYCmCUYr#x^l7sQqiq{pU&_T>`I% z#r@$VM!!+W%ND-agBn2YHi58e8xzOCUWMDK5%msI#v#Uaau+#gS9OepPev6iT(g7- zrm@&1k~DL1)SO6xcn>0qSb-ik#)||!K6aCeYmf^6MW)Op_{I%ZAhP_oJu)c66jXaC zM`Vb69Oa7Z9L&36e?vsLKoXbEV|+8$JLT5QNsQFKdB}_9;X;Z?tfe(nUD>S*%PPkr z+9&HH8*ThrPsVv+kjqsj^=8&nNKbMf&=QMARGYN=St@2wB2$^~h06URu2(en&&>dN z-VH7=#(mUaOVXrM?JDD0oG~Xxmlp`>*k9NbZ}S-%BEhhW9Sr@k0O<^;amLk>i#|M~vXDADR}Jw4ZFOltehn3qnh?UNNK*~5^$q_W#9OzyTP z7_c8i6Rz{P5lRy&O(C7o8IsVQ5W+)|0ioxN1io0u)gEJ!7eqL%DgpQAEHfZa`m-7O zEoq74Jjide&$?y{pF;-*jS^Rs3t(eu}w1szq%TKt0#euDT^FHe$ku zU$zi~Md+)uX`M7v{8$W7@R&PyusTnyApEF%Q|I!yy7DXCl;HGy19HyGYHxgRg(-RM zZrr@2-9U+U9W4%5_RG-Ay^37RCO@WAU#nPEHt|Jfk8b5Q1J1 zCME=60Tv96@}F$`Y5 zOIGOp+>qO%MvtV7*5>zvmkw&0s`a_y?#MJ?q9BWw{#iXQ9x;2(I7v`1X1i0eMYZshbJOMqhY`Bm@y3(4eg?%ZfExK(2oW`Z~lbef`Wl zhWvT{NONnQFgzSoxxEdth%!>(vm`UP=jok9Qx}P~WXXf#V?l7rqNInWM$#~ _0> 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 z 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%0A}4Uw@Xm1wmLU!?K%^EBHD=Y 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 ~+kf zWCmL3U0?4Au-((PHj$F9LaJbkvq`RI^BXz#$WLyjJUnaN-mmAH-peufOE6QbXWX`WTa z7jp0H{is05S<8U|f`pJuuQGt@XNq~21Rw{8kBT~A2M_pERh&KYcNjOGpKNsnQZl7* zVAn|3NfO$mdjL98XMZV4T-0}uNa2=h%nWRjmPpi9tghUJ=cktXxBFtf4y3m+(2=q+ z0yIL|aK<6@n9!`NPN}SZ(rKg4Btq+NoF<+B;VJYq#=1PL_ZC0RljlK&KB{p$a8Rpp zypa->>3rl)lXhWMHZ}BYWQaR4Wi6EJSJINSj7+xi|BD`Ge6|ex)EE))sE{A6fj6T8 zPDkFpAT5H-_Xwa<&5fqXSu3PkrtshtAG&nSSN`MT(({>jO#TY6G zP0#FRS+UwDTTg*Vv71iDCs@K99ai z-qyN4DAB2n5W~h_B`eunKo$vJUJ*DY{@tD1&EzQtgA0RFH zxnu4x1yL1OV*0vR4cj_h*sy@Kc1JPG>0~T~HUqE~lKCH$bM) z{pyxUx6mFTU0y}tDZ}ctvzvxZpK@;NXnE`&IN@`hGSO92ViT(@bMc$4{d*!=yg==Q zI&)(Ek7s){KOx+p1M*NDuc|BC*Vz9Xu4=~$`mXAtU^WzD7or=B{C-Gi9~}e z%Oc)%cf8Td;fY2~`sF;gZB}x9uI|4jMtzsZx{DLehQKK-3K)@M`KZZ5fKHw0<9wKZ zGe<*4n>g$JO0Cx9;lj_H@V!rqwl~TONtgH*Wm%oX;5CSsZS9N{|~P_qPpw>I?T8)-&nNj@eBo;~C%W!15|OcKDHzpK4-J zcRL{^@OV7fz(iL`{ql*73hM!+o`a%E_m1h4YZ!?q`D&Ic)6di4kvR2=n$kWy7&&9U z>vMB+-~Ea2`b}LdXPm7I?PBQn&S-uqDw}HvUW-C0|5016-y$x9f_Y)W z+9e47sny7mFY!n()FIv+d}ZEahnCO98!%DW&(bl?pVYCU_j_D$W;rdwE^kkOE<#@4 z3@K~+b}T&_&?n}{_~ZkSqsRvVo;8+cF~y$-VFB2_YC!*x^+L?WN8VcS1$mzIAxT3SOt-abFdgB&rQ9p!)LqYgHl0L2ZaqQ3+vr}E<hgtbZwvIAQ#-{0O1Y+p|pfPVgH zcaqkPQJ|j>1&AN0w3d^Ys&e;F9EOs^Z!isT2#~`V8V;%||0Afq>{fP=3Er`Q@I>#V%Tgi?*+l)&vNwb>D!#|UO1P6VwrEx6 zsz~hS;&KrG-L8uam;vq&8Q1gRIGOj#kmWFv9+f_%zlRvJBv!6&*me{8(NA>#r+4=8a zKuST-O!*J}r=q$k>Qg&fyB?oWr2j6*h8(V2f?W1@@=I*O+<0<@)*~=g7_s z?Zx$VHi-@Gz>}KrCj{6u{vWeLOw5bPSFNgUL#E4;rq@3JWoW~v;g_P#=D%0+J40*w zcymOM9`rMy$c)(cuuR4=`%E+08M@Miy)a^FOVp&>-^E(?N8ZPV+Ad_gU-jE+>Q*i{JMx@&YPZ~>d*&AYd%mN+l>QVl$QXJN}fpUWJRF7Lhf~>x@t7*LxMUNhl>QRkje)^FKoL?kdsmRcxKj7T2-SfET+ zCP0CI*^`~eJyyGIxEq2~Lwi_wdz2*ELT`DAOuz?P1~$S{4HGi&;00xV>N{pS$<&Co zV65)cnMgqn{B1(pfcQRpy)Cw$1xv*){ulAiiw`!V4Ub_Y6fS9M&EhzCM-)xRkO>w4 zonT;hfk1bM;|uSWxvnS4{{FT7qkCsovbHyL{F_(anAJPGxcret!?}y$B7gRib~{W)R!`v|n)d^sudl23_T&W+6U_WdQ`NV{FO`~AkqfD6H(aJ0ZZV0$Rf zS{2wV%~Q8`TDz+?JUlYGt5R7ip{q{lwREs)XaO~I8XsuZX?eaRVF@f7z27#j)^_ri zQ6z<0FJ~JEDC4IvhtusZ>t#mSV)(&eq=gS+{=hA%+|Ul&!SHLu3JK;XCnHDQ8#%g0 zM0o+dk}~5NcuE);W?{O0GzupSBHnd)K@M66>EGAoW?Fd`Um~XJa}in(hZ8eSV&wV? z@YNfvX66)=<_^}ANc6pH7mg!U0n-zsZi~0e&kzM|^#uJ^sCVtXRUdi()Ru4|FnDVX zLA zn)R2=0xiQ;-T961C93%MW^eKFcv#k__B(>qcQP|M93>}57e;Po5F;Oq7!f1&KWaj1 zapD(^3qgzghqUFXMk(3qaKxikB)7KG1+V{E2Lhh1Gt-UQDQ6H%UsTXXGs|Yk+xF$e zpn0nqM`Fko8o&qHuJD*Z$R(JKd&8u-W(VZc@o_aa_PLqRL?#q`l$ZXEf2{5m z(f!sECVHyB4cklVOSpoobSKSFyo@13hTYgNw>VN#s~unN52~>aNv}{5iy1IG$<5X@ z!|sTj)73T4S+B2q+qF$i>#qmePgq+)Jmy8NNIx1{DdfLSw+*b{X4Qtcdt!Jx#0)^Q`a{S|qjqqlU}#RkF-dx*j?b zBNmnA?z9^(coNIl6DNXd#bUAq>UT&O0leVBiJ!|lf6Z79$NlK5(7YLl*8(NKq&R{| z$8k8NMSl6e@oBU7Fl^|cjQ}maKO99c}S>ip^ z3v9|IQp2snEo5LF3TCUZ+kx1-$<@MhtxTi9la-wV_rAWJnf)Qo={!Tic0^|>g{C5n+u-lJf`#%uA@&q?kA}x{1Lb|W z$iTd4((&HtTr@U!7hzF%BTcgE=7fXHa@jt5X6|$7PP{LLMXY2y5qB*tx;JHal-`?9 zt4)!~{9Y}?eL{-}6vIO|HmS!unb%~tHd3=`TUZo}jQCEY*_cfKc6|XnsK3~5`{zoR zzu4gWR6MG|+9O%KA|=P^!6)uD)meHVH07}368-OnIFUT6w^jNAc{O7yOX4~f8<|-i zaEhcZDkorYW;FiPNs)$3#j&adF~Hp#`22>S9_Zvv4=ApQR-?wGNXVLPBM~J!QIXUy z^510R=WLb-`xRXOYcKneeu<-?TwK9hrLpum!DIy`V7jC|_eP)-vD`UT8oi%g=av;F zV$rl?WbRCKlSYE;T}>q^O0*t1$G(hcECyOQm+{Tj_O?p)OIy@7v#Rpd)i9ARvc~eZ z)ZV;dG53G?!3G}w52gEa$H+&Oa`Z29Tb(MXR_CL}SBTWqZEiFXnQGj7I-t)-4T`H-{<=XUN*4|p|jLiY|lX^!FM52cc-iZ(Po4Z`A@3bWXBb0uO5_5o{N4?fCPO zD&_Y>r6~f$7%obsg+N3$Mk!#2AfJE0KYf;Y6+r@Y$qz%zt8?f7wEzM$g@5X~T=$~K zm3tOTpE)`v8*@l)w1pgve!u>bl0hP$RphxGP_<;gGru zi)TQhoAawf<=ClZS+@tXfY06*`+v@{nF!2bh(|R{V9eadJyr^Gbair(>EgVhpnlU* z_}bB$AdGVU0bm5;8$y1cAO!G!Q_v01)4}ZNwg1fB*nNF?ES#=@U*3iQs#W<_t4wo8 zK|-_JGO=59`Jf@qCP`yW&In6f^()!JU7@Fc}S*P1l@Y<&c@X&4)K; z_YJiEhDMnuNfC8c&m7{uDp&gO=uI%2A?*4hrw!Pq)$USdNk-}$jcCm=LS!X5Om;LQ ze!6Nz(1r>Bg}|~u-SfEZW^aktoxCN@@kS^GpBU z2_^n#aMZgtSc&=cqT>oqfj&3$_hLRetcyNf$0~-F++PCH4WiPaxf6Oz_s)wG4P1M^ ztp?vBlLb@Ed8F5VW;8c~9Ex-mC_&S+d$Isk7pRV-I8333k9cip7B8}i#?y*@1YZYZ z08X$TPlN6;Myx`1W$xn!EH7mNg1xe~|9Qb5VE1SD#{<1ruE+!ZT@yx24qY5`M3tK_ z#gHMmk1>07%^7>3K1xhA-#Duh4v@9_crMFQ@#-sN0G0{CS^mD_gjBxwc}w$Yjr2lh zi^t;4P4{&#>azZ2GVypdh&%r+MqPIHig4DNKQz*VRz)%A`+FdK!-9U$*jJ08yEew~ zv-9WoySgb-+91Y%r^EmNG|%f?Voko0KV`gn2p4ZuSc+YiLejA&_~wol zk~rCHB{He884O$pr;ASZ-RD$g$$?c@8uT%dPIotW+c5S&`@G-z)|9LpK%a2yu`M+| zcHz{MUa~ubs|;7dN58{ccU5S&nfG-o$?}y%!S{M2D+)E=v4C|2scjrn4pQp^s-SBY z+lp<3UAX?Giq3r+EWnq*Lu8WOWUE}NE*EI7@gqxP<3+1;ohRi{nIpGQP2b=je%7U9 zLWn1vS=pdElB!194+cYdSr!I_D-Q_Y3RNB0B4Sjh0B{LI=xGbQ$A08IiYdSYm$<}P zyCdMZ^Pe1|4Tu`{^l{GDtKHhTA3l1rgOVKwjdGyN$XJeT_6SREnsDq~&l@kKc>=M6 zmFJ$S8L-oXcn3g9$I9TA7?S6j(|H~-=JAdh_ynFA=A-Adv=2mk^_>#2lO+C7mbv7S zVsPJcd3#zQVESsjvv*>`<^2B(1W7Qy*Cu&7V`Vb;Xw8sEfmo4DF%mklL%p6{r%S+< zA%AgIGZmO*hxRh(#kirmZ7cKd;f^ibpDw~q?d-EOKUX_MTPiA`sn1O;CDx{N6bLSf z2?{f1Q9BbP^J}?TDgGvbv6 z!EIZHY}k#29q=A9Gw}T2N6KxuUCO%U&EeT)IlG-Ty8(ky8r@27xy!*$=Q@VRf=d$b z{dscq2>W#ndx861-CD~NiQ1H_C}{kjtsN2ScG04^58S_{mLGg@6uDhqh<+61eR4Y- z>f1>Nr46FlgqaJTJ47!9A1$dBB*FVOTRmR#Yx1yx3U2Sva<@Y|Yrqm)T3fmrhp_T! zPcO>0b??^|&v|AjpL7@Y+a!`_+&7oUoqYgzfe_ptBKS`^4y`1i9iT#0Z*IeSvJ3wt z5>_sYV%NkGOA6i~kkt{7e$Y7$TgNln9Cs|iQIkLECsc$9tOS~~$Qt!TMo{s&HY!}zDt{PAPwJjt}VGVa7nJViyhH}I2S!{_2E5G@WvKapzhjOy_LTZWa zFr*cS`(hlxHaRf`GRy7$*s zK$Unk-_Uv2f+b>m>=wB&hzF8;Xg zBkV{Nj%qP+7M$1(@}u!T8*{G-ITZhkLR#Q-p+-E}IGTvpPI%}M)c$+)lX!4XV!!qo zb+$~LFV`)DLESG_;)X7cqZ1fkl#lXNnBOMaWM9O6&sVN~Z?_9}`gnb4?CQE=re5<>mifoN zxP!S|cAqBujA4#6IJtOKT%2q)$vnZV^~{)ZJeFTT@N8+dlM-xZsui5{5@v7ubh%d! zK~a${>Yl$23b%QlC8}8Qcsz^B#NoDtGX&S2SsatfqEI`cv+~s8j0F*x%^{w2$kvR+ zK2R(Si^Ob<-IHqA}^Y$=5p30gKSM0K@A~nSRV;S0nvfr526gWxURgaZ0$UjGr2g- zFwI3So|E10TG}za;=4bTM-hs)#?UhVfe94g{kEVRpm){R+G9R>Ma1T$gElG-Zzka9 zl>X=pFMNzY9bO;8Z;x$Ps}*TWYhCYiUly?5o2bDccprOyBDi0Tx1f(@DX+buc7Tke zF8bLqJyX?8dnLK#mZ_Py?c#2wgcskmP{h(hCT}%2+e{l#1N)x~c~xvE+ym0S(43?a zxvf6_W|yrYKi7o+*cHe?-e-z;uq%$Nh6Z$&kUJ+2`nmlJy|=ljsI@%OsryR}=-QI> zr-Yq%E`Y-MTF_S62ul5L0z}jL7V6I@Kp%vLM%qPQ6i$7L@-DY~<67qN-ks!mCqFcS z0KvH;GYFkwEOsd$@{GU0&N%f^|bcy=F@&+|cte#mRK}}?| z_)E|1@;;uhN}lqpVW*7G1xcw{-iWP+wTnNWN-Se?VCpm%Xe4|?>e~d8W>CF=mbvD+ z{vdDI0gRj&_$9?Nul(g_XYBo96#_iQa0$R})kL2|oEYz(4oZ_xeX^h-DqsRizkbmr zU|C@PDdE^7%P#m_1>q(h-$hX9@x{OsiHQQ*jBi`95t&ITltmIwD zj+`N=a!Fo%3(XzS{vSP673AZg^b{7RWOsz<72b(Y&V%GWN~4-KdeZqG-$u!O%0SZe zwnIQ2kbq2OqgePCDfs{3hOA2Jq};us;go0cb+_%Tson3zgX6*aZdCWE@iWrTKyH2$ zx27*d0+Rmpy}?ZToKD1y;o)`J)asUo^^+=1hFO&wE4l}NtIFh@5fAI@6R@N#2|=jn z=VIetq*(8J9HWg|!~J?5a@re=a8k&E-uY4oINqW@uQF5yNB%Z=ArYUn!DhaD4l6?% zN}H^6oY%gNJ#xfmE8(Y`@YaI1uHy;Hw@r4y%b!$Q*3Be!WBseEnr-4(Ce==J8WeSV z0aYWK*~hZa{0XEoDzW?87$9YPnHF%I;Arnyd7>rUY{TSYU;T)Aq56JI&r}6{)v3z8 znPcb3sw$;%p1AZlSFx%wirt$xvA;fA0ZQjjAskKG)KkWrS5cVoCv z2HEJz5{gHBRhGF&RDt{oNujT%25PfY&=gS@eEyJ58hL{1028(r>Cm_yVC>SA1sYX*MacOM*WE+F6}R?Zfhx3O`b7Esaey9Bb|lYoO`Fqc7H1> zHaGC9JD-W+%3Clb>@E;t@6*S>C=1s;g-l3S8?2?utd~~jj4@b{Ozk7T^0P$Q%4hRs z_Gem)S0o+(l32Zj)1Ig_vW?PL6~8jv&4kG)|8qzPfUYM;Ag2KU0`SW-5l`EP!M-x1 zI}yC31ndZ6=zII4E>x}>>ZRgTK?;)L|=WlUR$4^S6^9=UkhzEMK(&U-`4p3^!>A9r+TMw&$5ridxz?%t-N6? zt*P3shVr^Nsy-tzHBYw?0Bu18VezV*!+F9_8az-dH-kCmTH>#AV1cwRphC|cMydsV zx^AW%nX_ahRMN!86!pn)Ll9ywy+-F@fvB>kF1_Syu#RV3Q^}LVh%bw_+CzmSVw}TN z{$luEnpa3KF5|!!k`W{7i)?!<8QO|t)-;*PGKB64RHw@ECAgsWGp@H}(>J~U7qbzw zfv(#CaAFSa?lX*n&@@96R@O<2Q=Oy?Vp5>nXL$MXuN{s>w#+oG6oT{rqvU-h^C!7n;h70BI?;{cp9phxL_1H|ASxe;Em z_4#FwRBiQ({(DM1c~d9e9SttuZhMU$hN;q>4ySz27ecGv6wmCe9|q^aYaGVl%9r!N z7p*SD`<3%fL8Xp^|3+R1G|bF>*oN>N(%D&$wJ*RoH&blO$*CxB z-=iJi_0!rFdg;G8?-iU1mh+48V&4oYLEhJ5r&H*nB-W1|VJQ-n0k!&ZdE8A{V2a9v ze7~Qq&`Ku1=A)9b_YOC$Y>kM=v6j9wyDfBl>~T;cOO+TC*uAts$8nA`=d#c zI0we;RHA+4)pg9GjDpzOK3ld_vlDh`RwSwU=Rrg$OKnWB&HyDdvnB&QTS^O{N#aKO{oPW4kM9omq-;I7o!2n2 zt78Gsya2=imDe|XU)c>Em|-satMsIz1rdVaW-r6M`j5`a9Hf4`>wo)1{qrEuee%Pw`Ze7lZx$uYJn5$Ss6!KcEn&}Hk}W4EBCP51~D z1}#tA0h%?|SLWNHas;f0jw&_&{w0i1YKFdm8+SS{`}gC|(*`48pZn8TVL^v3fi*{1 z@Q#y?M?UtkH#Zm4f=X*-#21=&)|ha?7jzzqmIZrj@GdOs8F+29z1=svUvPnvSt*qx z-iM1+ct$K!S~dzZ&a%j-N$jQ6NIv*%#H|-yqFMytU8^mR-X2jJcBD>xRo`%&r|A~r zJ$(Do9zBp2#lj}fpUs;Q9gDv(iXBiuLNQcVkRa*K)(}6K#`?(_zj*QV&_i5ClhuVH zBVxuaRaVhsuh5R>-MN+5;xGEthjBc2OT*FeqD~QmLswBzSH(+)c+)Ye<$BqlZ=&8A z{SX=XaEZtM0U5rjt3*mwI&qTxSiN{?QB38C8Y^j{z;naER_e&mvDq;I>JE9UdIyxWxNGGbdVG)u3&1lTagT%;I+5T=%$t44b@)s%Uzzk+@jB%3rreDe; zw}D&7(6X;TF*pYXJbWC4J71q#%=55|haN~BBx#bC;+;+nZg2TR1wm0j?3ih|osAID z@dBh#4CIF?2Hjk@Vc~}+zTLioOItSwX>Ae{5n8nyu7^}Od~KfpVKpXF;c5A#JO3lG zg?9YyP_s@?LVaEgN*k>20OonGKIWhg$<##5`%8yLC85Xub0j@gm8JilI_vCEhsQ+= zm`rXdY0pzhUp)}Kis73}ChtC$7BeUMy>1S*NG_&2J8d(qXdE#kLdG_devrHq$^acF zsNJdNxDVSjcb)=x?r-=K&L%&RM;2cFQ+~E!?&Ds@VHjih?yjw(azpln-q4VR&tGqcoZ~C2*Lb7jw>pmg)Bh$3t zrEEfL`0>s`WKe%VWpYcz{=?kAM!^Y#?XL@A{+iC4m#;_RcI`iWO^?}X&b}7J4tA+q zPN{!5So$o;IfmJYB!E1FB+E;hLuQRf^YSvZW7faYFi@q3|K+C-AtL_9&xo)~1!^a6 znoYfP_~(b6*cHQwfYM5#1z&X(4ne*4tQeFbueCB~j$#d-4QIZaT$jx0#{bq=j66 z=9Bsz05wj+FNg&){#IOO)WfYxU4zq61Y*#`Q9QE0E zsoW-8?3h;iI^S;wcG}?x&&Trn_JmnxpGm~*MCse?-4rgWs@V;xR4o`5-ZACD-P4gg zr|B=NoDdse1E3lnd1r0_TbFd}--l!d(>8m=Y}feFpA-c{i8f~_nBo3x)uEy3_AY1R z_imP9HJzYdoYbK#1QJ6?f*{f_flluT@K;orIva~Wgt9-34b=Tn;Lv<8Nb<`B)Y?19&)ML|+Qz#1v(@Q#C)E3u z^|M3|w^~a+ZWE;YK7u|?vb>-3i11?(DP=WSWZpgjxJe&_5$0P*W9COj%GSNx=Y?Jm zcJ3?#?<}95TeUXvW!83kxrb{?U8(3!wLfe3Lwdr)6nd>8I$TTnkMG@)JNvP_IW4@a z{5%Wvdetz_*H%9TE>gI^Yb{Q;*SUN7!#qh$#ZNH2)YxL3Rb_IoyuJoy6XtMm<)Ov~ z-S)uKADdJh7sa`{u_5^2jd%euh>`LP5lt42TWPUTEbE2c3)CC7CqVY@X4v*lW8hE=hy}x{KMd+tL zUw_BOyNdD02ATng^E1hnw6H~pqriuv|gy$199*Eu$0GjQV zB$QJR7#Fws)ltXZeSZA$1z4=Yt8A?7RZIZF1mtR_SyQb5eeYK`p2s&D9Yapn_&ph2 z{rt@ImUNbahquSWu@RXGF;3r^m_yn^E*ekpn^!XhhSy8uj>yJ#CjMi!HDuyL|K?a? zVO!L|rTJX^y{%Io^0Doe+|6Tl_u>q4zXP}_)Xf_sFiQ@N{I3Dub5ih&Cm*WB9CLje zHOli?_uehjBxiMjrhxIyKuYAUHV#O)j*Yl73FAg{owV@Cq2yLa81}}aot?jI)O6;; zP4}l_D<)qqfj7FqTozI>gJ}var(+5QcJJV~5!DFBVxA==#7cyvobP&9CTT74N>fIk z;yX!pWW_c2f{UtaKqgrF#Gk{u`w4|e)8BsOeB#HC8s9Fp>&FZnKf3qn9K7-IkAj80ddMA zqKJ$%h?0usi%u_1F}R8-Swbgxt0yOEMXu#CCwM5>$G_G^ur+DR3|Yq?5MrpgQ;Ryi zh4*hmUZ{546pv~2S>U@gZFtg-UilcF$-bZ!_Ln54gVIBsy`P2w%lWYdOrv^^oLe)# zCE>wb1L5N`iRb@S3$$>8+}!V?XD#l&uG=PEM}?3)s5_+U=-MvR%H1DT_UqfOEXM>C zYdK9dOM$M;m@wP?QVumW{{4!#P!JLazO#`1Qjm1BB4C|gp$+p)I<5q|wirwA*xtUH zrW1D)q@ay7C*iG)yixzMr0}`8tLix&VIyT*LQvgRQO)YQk(OV!e~Kt`OQ*dixj7Kr z{2S;GIRbWiw$^^8t%6Qe>0X2HK3@zffo!2~(+dN!e0t7she)e&n3v*3aLemIN`Kmf>GY?%_hmv;FDPY-%e}m^eO7kYRY9t5q1Q6C?L$E600Pi6`gN)c~LPp-c zFs2#fN-l#QT6lk_MZM6DHL55vDFJ|l{e~d2ctiwT$a8Zv>^<`BU93ob%vbm*=PM7D z-iV{WMhz;FH>e9NY*$WtaJ~D^WJWAV)oLB0!-*{?0#m|lWd!{FQ*&3}Qg;zqIR02( z$I-Q2yv}0fD*Q`L*Ggv3&l-U*1$TY1T?g|Y!KVf7&C5>!&7C&J57WYXiT5OUnPvZ8 z5bS>dK!U%q`B}TvmoXr0QNCrZva#Dcucu@2^WHUxHZa)kMDqK}m49(ox{K1Zb{yZw z@@-k1p7PxU`)pfpjHl*&YlJU&{;UU|PdUhLNP2Soay=*O__RSu_;Zmw*m zR?t}P?c~4iH^v%-yyQjS{w_BhwZdF|U045DI8GF1*Ht8{z;c=_8+$xfFSAnVnSXpr zWq+_~HaG!CVI#4t{9OgT z+Fx2vyqkFqhs%&_8=v-kD2BPC5Zbc6*mpgvis^Ke&2|#y2F+N&l(rfttSrZ$&C~g> zyyuLjeYmrW3AX>l{jo#uoGP-oPK3xC+t)KytGWrm8MtgglX?2Ikbxb2t>a5^J}wj;y94(ve-4%%!w($pi0xh60Lk-Xi>rR2F0ecJ z73)a6zN^40akxNh#`t-PZ&;z^PI)JM%;tHWWY=XT)g5VV=P)vjU!&B zvRKJDrCK1dar>UuD73C3@nTg2NkrwKc8o-tiZ{)zY>xNm8}`S#VW+}@eycIrL{ZGFEZ98L|DF_B zFrfkK5$_fJ%#*f%Z|?|k)Y}Qyydw(>qk)iu#DHM^)0l^N&FzV1Mt0yi>A0o$PiKj7 z3Hm>z;-)CMGG+_Tl`UOCfIUocvl#F0JEqyiz9~Hz6Z`Y_&S@@(4F_1*_9IHWQjTt? z&q<#XGMPMOi+y<^jFa61q~+-hC=T`Vo7xXV$O zQ*#2#WG+r)h*Yhx1D`!P-CBI=^Z#oW2H(3Gc#wEM3VcuuvrqO!ysRx-7gsWf;0MOve%|T!v$vb`28h^ zWChnV`?Mi1X5*1J-(cEHaKYlbwH~jug#A?+ z1H{8Xo0z0;J_AlQ+5PT8ZeJH^i9AZ9Oh~Fk1p24G9z~%<&d4BV@5(PRDvUFq-}!Q~ zx{Gs~XjnTo9KVSr7LYD%Y);@}8WSbPy8I$Nl@(@TKx9;4pw`WaNIf50IFOX&MeZw0 z^dYw2Ty-~O-KB??z3|x|xmEg$uaPjZ3TILM@(&rk9Z?<37J_5Y@^}@&=~-50cK;@) zWr_UeKX#a&e9GU>$Lq)0@^TYEFvoW9R423MQke(z2E`eRHScfJhnP&4PmD4f*3xmYc*r-KWXRr<4HY?+w`vaxE7NhgO1D`c&EMh;)_0oQ zEJL~E|5_O-jKP4R+xpE~$&~^)EX*f$V)Ar$8s;`UoiNo;X*t<@jy**9&4(<3)O&FG;zSI0yBW7NMIoeAT3s%pOt2zL6Pxb*7>i2Hg!`wNuYY;<( z=lXg_>ue|ZDDp0IlB6+{y9Sj>EHLCRM5KW7IDF{5IW3$=GvvQ?afzZ4=r<|P(SZ+y zY(cOe_FymU4Qhys%1t=s&rHST)HCjntN(+3Y)}uQ7ybp!ri6F6G-LbA9YhC0uR}Ra z!9jz>=Ns)S0MB1!(1=<8?;a+9paMpqxB1f;Ia=z|W)b*9E>?xvLV&33v+E1lBRR zhgQ!UX3oSMx*?C432>j`PcYT|!3Zt%aPontYo9wxt+C;S#|x_j5<^E8KGZZpKjsfD z1I`Z5f;=u(<7V;NWmIOhhZ=w3Xnfw&!h1XMO@M_xi|sVV%>@@;e=2uk-}ZE2Jd@b! z;j$#BJ%yHlWy%TTiI)J6NGh7w`)K_;EL*;!A-8b@0+DL}<8TxMX93HO%={seRVr%J z0i5UwA4VTt%D3!WB(4NBAi<(78iBn^47s*hDGe7J4=uVmbSSPxh+Qp%crb&9%3Z5` zor`RdVKVY9ldLwg-B+y?g}EZ$vu|Q{9MOThU5N#88BIiV#y4<_txHD;&i$yRHqHy} zZIk;;NQA9&{QL}2IV&>(r6ZP+2i6sd|Fk(((zx}dL1v!88@DaQ%P`vpH6Ws=KEr6t z%4?4bzsZVsS3X@+6hg69sMi6_<`;_AyeJG6gQ34w#RugzWKM!Z%mLKx@1a30^}RC{ z{BW&)-k&uYyTSxi@~dzrnS^G;n;|H^D~!Dy=AWV0_-`gjd@>?T?|@rKLJsNHl^|v5 z^3Ds$95uzAX_hJv#rGB;B+MMzfl2q{ay*QH4MCt1}Jy#duG+ymuXoKlfFKX+@$&((kwVT8j+n-d)@UlfkEM{1+ zJs{1A6=&6is1`F=a-TjwTIVFLjDfJ~K>-yO_ns33vAQdLRkvhwbCdAa!Q8!+9?Zij z^7gtRP#~?zn_^?t=2TPh;a=-d2Use>8$K}^j5>-FfMDD}Dy{_e@lQfdx^AgqJ6wzD zMP@z(AXV*&dZG4K6 zM>Vvr@|=f}kp3f{MK@naSsz?A&Tr;KMx2+hMp+DIQ*s0pTbjx|x7OR27PuEyP=$qU zq}qota~AxGUYq!V0h~!5zQQ)%!pK!R|1HsZ!NW`(%PC6qMYfiZ>^dd6xMD8Pfu>8c z$JZu!y2yhM9v!g44r#hC~W2_+;e;?c`NYflK^a}oO$@#uw2u2Rf zpfn~|V8mizDjfhFG<`AhV-xs-9ko?#crP!7RZK&$K_VWgiPd8MWV206C|Y4czeD5H zR1fWxiU}i^s$7YzdOA08-9=-b>Kxg=1svhiXqC+%<7H( zaY@R5?+;SFDj#s$4!5GVZq|_ZYKX%1=J^S8jX;IjP+SyeZz^e>bI8Ico;m5lG&4!y zBH(n=vF|hy}CpvCI+;!OtDIa+43lhiZq0{EqqIYGV60f zpifBW_7A$SlcT-b-k3bd?yrI-h>ac75#6Wy7S}b7lRU#GR~iH%xODj!UqG@8M~qWk zviOst<{>L3hLr6P_JGl=D(5Ga@MJi~tW=?*Ifkj$Jq#iNyWHoA2@kL;Dv!Nm1<9pj z*DOqRHuV7+%`iI&NII#C4_e~h$ce?!DEycW(~>%qYVuHMlR;O$2VmW%6*GLXVg#iq zkjJvSx_{V}JUzk639tzzA!0LvvaOD~t=wmgmzCI7S;w4!2F~WYvA#Ql11LXnbP=|T zVyaP%594X+)afk98~c9DWe8OypiF=5N088~4RW#4N43vnO=}tp4lMt~jb`~pXdKn; z@aq0oZ!O(u@!_sP1djIL&$-ZseIt+%Ylz;}bQ{uLgW15bFtzlrHz2 z&xttsLt-!)l^0q;xfq(Kn;|KJAo|Iqj~@QUSPrwY z_34_s*+>2@C2fWlw#wOVmsI`uY9@AydgD7hstkXp%%0R6;S7V=SKmLH8hZcDrvb@7o0fO?Y76>rU{;ND zJ#)ni56O1zF;++%0OS1kklh;*@D9mq?#Qqdeu>E^1hRLiPVr}tq)!j|VzSCCL4L&w z7sj$O;dOJjsJmor#$LgNZ)LpSqrnqOWqNp2H^bhaHw*v17Iu_h4|u+$Ig&qoNmwS2 zWl~U7Y6{wsCqWiagng+j|BJ*s*q|ZC%`NSpXJC6FK{d^!+!QuU46YS97H>`WRNiH;`9 zqX%+)Q&N*X%R-ZcwDA3CgC=^F&74$(kn(1j`ZvW;Q}sP~g;ahq9YPpsAzs=zxH=Vvl86ug3i z>%RW^u(B<>q)VIde_J(MXx}UF6I-sruY6Aw(O%cHmG3Yb@Nr0ba0Q5jw^M zAZZUqThsSMSwC_9q>uj(dTEjwfiMChDY<=zT-L(Ykx4hg3J8SPyJ$nbYR!`K^Rb{< zB#nNU=?;uh>UD7)LydE0Tsx?pzj?VDV`(J!-2W-N+7f!40sniK4^L~wAdF$}MA7EQ zdGNarMU4?Z&6m5$maizQANXQ9<%azc!nNCz`)gfqq-tZ-;S^vs^dghR{eLB}5BVod zV5ZYC7-Z}|=}n3&KC@)^hX^y)Rf(<1_S-o)iXRl^r&)zKYt*JV#Cc6m%fug4g>Y%) zN%r5r|J_J>jOPD_vrbMvkwzOTr!dd9u0A}&Ob0!uiEPh^_$f^;LG39?cuACDqf7M} zjA_mOdi{-Qg?b3)UCUHr_F>OkVxly_puI+G8FO6qKkkAY#z}t?(bW4v+OV$i$wMK= zS$`#PB6;fjSAY7~fSZIvRE`Oq;aHtSoxi3?E%dkdyuN*_=W{O~0^Ah*&(|P?XbFVn z00Nn+`hoM+jvOyRIP*Z10E{3-=lp+ksL`J{4pbno`7&6{$cLeyDb6v($E1TPLPUhx zxe2~jYkPfKR!=ik=yA_@WkYMf2RcFe!Z?AuiSF>tOGmE5yWjx78>#(W@do6+HyP>! z5lPeJkPze$v|z)toF8<$Mt&hk*wf`ap+@wmwo9Ggx)D|KqV+Az?10!NmemA{dha>F!8(+Q~3=V;q`@i@h<|(|A*rsljtPu{HzF{3 zk)=N$S&1_CT$zd^JMx6Tjr`FjW67$3rYSDiZWXlPhz+{!V z5*v`L(}hd-T5MTr5@n5KZ3>=tzwQ~L+!lhe7Z>re(I!y1QWlWPokc}~i=%}u0d`Oz@R<*^BB7OT5 zW8N)wVyLNP@kV1WcsU9~-!S%E$O4r<|e1?O*m$Wo#<@d39_M3kJ*( z3kpstWILSfHeY<+;%tvS9%S?#^t3d!?#zI5dhe`gF0X0*BDUvq-m^3?t4JkC$^}%- zh-F|>e@|Bb@s?$1n88i3uRmY98Wf@u(;0$>1A)-ugiCN@y|Ew(irR8BDWy(=(e2x<8`VE?E>Ga*c-ttqB0vS$TG|h)=e`a8yA@q>4Sf z#^fh=uq$8KTujoPm=0&|4@4O$rAcpFCJdZszEVKa%;3h!B0E$?$T_}!5a!3@uVtjv zybOt{D@Hr;#+iBVH1PglHf;_0f$%V>zt6*V-vV6od++#eMd=)n$-lfkVUu5_D4TKq zRanW6QClnhzt&of5A~o3q|m#6mSiwt3a`myQ-YO78&%??C#dF7tZ`%xu)sSuV8Hky9XBRYj59q z#`&Ht8c$#Zhbc)vJmt##AsA$lHl~>7LYti;+9Fq$V z1qNrwjkYo(L6j!Z=g<7gQ8DoC*H#KT2hlq=Pf2Qo_=UspgGro2^|e>>%s#o=Y!>XD z#;)kBU3SNQ({l!&h|mQ1>DDJc4y(OqfTc5=nd}mvb{sekK-1{PW)wVgiHJikQ{H(p zjuG!?<1cq}NrcPHi;KB4qoQwipfvc9a+Fa&hQeBmpaZ#wtr&~dQnW3Xw#nYCz1ke1 z2QoJYEJajd=}$>zrQG)*^%>6>o+$Ik{FrPOE!z_>fjfy7#-q0NUB_(pNmD^3GvMFC zqVTmh^=McF!3_NIT|JEi^$*lg;3^!G=zO9nN zeN(T%c7iD(a5*HcVZq;J>){n4tWvP~IgR$zj+}tD zI-&bu_D&qxFUlH1AE!(I>{mfnbRj6Cr!$UyU!Ob<=N{BfPmv6|`R>{syFxdE#8bEY z@rt<6HCX^8AxffEl@?gy?&JqpqiORtm77fGBV?tAt@b(D`47I*j#5RTP%eYe>Ye3u&dn0g9HwzqGGg!IaevnT`e z0px$}L)37Ef!R%%t-sWO&3a=5+kI+nn$cPm$(NaPTJC=A z`uf$y|0@UJcT*{Bl<`fsG|oZg*(@W{*A}&}gJvgBBN>vb?(VwXL9bCejT!>QGFbFD z$HfYoJHfhj0(f%zYu`5eVdd@W{5E%L6q9iiRZb(-tQV)MSx0Yg>gyD5AV-&ESn2vD zk8b!mlCcqpMiMeYYxO@I!%1x3Rlt;gE~SSTT-aqorLKLt!*s|NX2Kd7Js^W_(cQYE?#W}uS( z*>lB2jGBgaoIeR;N>^TfW@?K6E#Lr_qB$K3Tb|y0C|v{kS5(=D3;C$s*PxgERd*%C z|GYxBn^hsG5=PVTz_46Z+FT2+a@$4EyW!D*$jvvcWeHQICQOvtwq>!WXeZ?5~jhGlO9FzuR9TKjbW(6RFT`@o3dZK3~{5qz?(W;sZ=NxB4lz6|Z zonR+{Jobus*;n#2aOhw>A(Q|!AuS?2PDMzgg8O<)0MP&DQtEWYvC|sDjJSh$cVam& ze_&GRU-2GcyJ`L1`e=^&(yS=NJ72!C0HHw|O{rxXCozN?eZ|3jhW1xGOwBcO`baP- z`x7Q#jC?K$Cb;kf3@o=YkNE<1`L&!*4M3RNc*Qf`0F+yKM71Uuck8qLrti-TB>o8o zRo{s}q~xRRe6Qb>>S0jWj#(}$*0LJcr$K*WTa8DV`ngQws1X_s`2Iu}y6{LL8ExgC z(7?@z<({P~EB$uc0kN$L4|~|STijt+0k5T)4E?%L@YFeu@D!y;C3EFS_Ul092+Jv; zBJ!P-aA>jv%~RVd>C#H_xNGtz*o8LWQD`G>ApnT@P@v|-nr547$U;!!#_DOLGzvw^H`FTKmbW5b>7WTs`SA@Y~tU*~|@DV_4=DlBJ#VWx+gMQokbn@=Vs3d*GY9>KZU z=n7fUg2*PE@vV?FpI5aNu(whcRCeyI3(Gx1wKpKS8p?R?gLllqZfLY8JNsMTBhQU& zE7nwd;WHasllNXZLIEe9r|iSNy}7ApM^l62MCarBAaRx(ePArkl5NIK^t=cVeL;wL zbwnk;sgixHa(bcEDyhid)t+d47ecMv8r~;2`*_AuJ8B#b^T@>X|MMfBp?7OtFY)u( zZ2W#M6bxvqxsMnDK~PhnFjAuK5_4Pmz-oJQqfHARoD-Y>`s3`F;560`J$5a9F7T?} zC)YF1r+33LF}8jOS`rHs5pX~GC0U^OSw(qADR{4FWA!>@O>`X4mAaP@@P1Tyw||-o zGqCyO4Kfcd%?Yx38TeL(Fb=I2S_=;j(-BiT`&KX5Ax-#vXqBbVQ; zWj!dXcgn11%P3Cn{YUS)?lH?yBrc6ZH7;Hwb{J5Q$mwt4^F_Dad8DrwUFhS}*>s*ij%4!0 z-*Q8OsQCUI&$3U@;$ILu9ILM!WFB!JZkRMP9qj-s1g>2T4lk&IXxD9g?~=-VKN)_V zhgI}^=O1T_F3V;!z{G9$;n-vRyk~8B-KN=L;|5{FU14*Av%9ITg6ZHRZ)RdkALTb{ zO0LGQVe{=BQnATxiDxn-3W@sFBz;y=G)kv^wJo~pQ1AUem;x7G=?4_3F+u)&r_CEp zHC?Z5{?8*r+i?ECq6yI7f5UzFo6ZO6*Nel3wLA4OCrjI9$rU(iqsgCD8K8;O}^i)Hv>YpNH#Zf1!se`!@_i`tm5Mg%X~!kk|>&rD}AZ5bj^S@<^XxRT4C&{GIrNIRiwuCr8xa6nY9G!{`gm4C;JhNO{uAR5cT<+xke?yU-{8bzv) zkMfJM;7}E~T#QL5-P*D*otVDxBd{E%;F?}`n2(KDUR|j)`46!vx(Qi|#%wvq-k1rH zKzE|)1_sv!vBAK_$MV5~e)%+Q7Yi@L%B&FH2g&j@>dc?N6%$C&qRq>z$!j1rsOrqJ zy+~<`;e6Yk=eZ5ZWawH0`Zlj^Wg+V$Do@dl5Uk=sY|8Z|WI;=V19{k%XmiWcQxFzgWRFg}C|AqmZKF3KKdcX65 zXTOiuYshsY)elq<49PMkRQd2ju?6UWvZL5jm4Bp#$&&CV@`XHpqaU{@#~ z*xJi=Dtj2GHQ^rXr-?3KihmOp)I&0mFj9%J0NS&&r9DfEsy%<~d5}+1k!u_)_6Sy$ zQWr4x6!B|%L;ksw0bhyq=;t6se?hl7Ic4rh*s9z&^Y#*Q%@C%~ydk4G@NqYnyrcK9 zvCoWbEORZs*OFl2-`m`$6_aPSCMGN6J$6qC9JjXc(}wz9+}{uX$%5tNXlJ@oG*)|M z)HpZYW5N9Ru#1krA4^D9wi*Pvb3j4;vU+Lo5vMW!aH>TAy<}Qu;5N@^U}KPp^h$r2 zxQLSoP&?nFDy=BR5+4Vp1$+EnM+R0~1S?jwH}2@at$)z4cEVDtQb`>#ZDO#a3+#BK z^vCSG8U5!y#QnAAoA3vi;?(sH<#vu-B#>M65gTb)9vy0}b!1C4Q&kf19E&41@Uivu zTo^O8?Ja(;31ZRKb<1@jzasTPNF)&-J4e$oeDdv_V7E>o9 zA<29fg?4YIZ)rt~%!Zhvk}YOb1Aox~9FCMlp(K~O487uTB;@}|fCVcvFl$FgMD{nE9ZwEFqEUnE}F_RC$6T74>PQoXiXUOs&o{N32 zU1^E#y_};?A<`|_I(E>TQJm^@lEa+ z)jx~#5$T1AAr9e#EU(JrPq9;j2e*6W5llhCf)LIlVMkke_X)2ON7_#`Kb%%=#kpvc zAP$c|WdxFfK<7aJpB000F`w4yr=z4@>CU0U+or%-PWdM%dX9$vx4QPI&GWC1IjAdV zo$DdTp3A*~0;5MSh^NHn?ua`IoU3K@))74l6~j{I%1f1M zWfMdsYEI0L&7Y`M`+c3bYwT@i?u)HBs@8e!eQA7&kwW^Cvkt?hV>kGVJ>w78+HZ_4 zX7J7@qY3)8>xz>xW`0jgku-IINq!gnIV^el`T~xw%1Rd(GWI^hTT`+9`?d0FhCA>W zOBC?Z;3cPaSI+|l^2!NW0iZz@na!J9(zLMHJad=xXj6}Uznz|(ijnbhw1hZ=Pos|F zIjXzl4IC;+dSq9Lsx+TLfna@pFSpX``FUxfNiFs0nF5p1JWGKT9&`Q&ASKa2Illxc z2is!sKAZ-&{gInnnuUrM_l5ZqMsT40T;8UP*3v#B?A+aZX2oqu!6cf{;aMfN_TxC> zf#JPWH2NLiPfZMH&NGbDq%BS^oBRjjQkRhSx+Q$&McjdDF00BP;X^pcSl@z_@UY67 z?+`qy>N7X1Mt^~z&mmnG)%a9tT31(%d287xYtmc}%5g8O73Wbhu5Y}i|ELf@R1KK4( zb=#O+&}zHCKU%p+_Gt4+@%XvNUULPnYR>>E6_8lB5c{Csq1tu8rRn4R8nEE*B{p_> ztH&7p@G7YA%f@F{9n3H`>4Dm=Zg}62uVbE);Vqg@nOO8!3RwT}2S2I7$aSJky~~LC zq*o$HS=I<(Sui^uUvYIuQ(WGmiEZK>(mSs+2jV1FUtZ>7dwZg{T-o}FBo#3h3rr0fWx}pf z9)z!tGgZw2tJ}Ot(jD+L&caR7%>~;&Befl=;{`pZ8U`$N&hMUD=J@}5g51M2{`xp5 zHXQx<4|ZdtOAlH74(=kW8)UxgRM`n%(N{ndm~D6T7JhK@wBTjiS{YRU4zTP(YtGjs z{s{irw4*y^-FWUrJNAINm)w|j3ra&@}w`$anN4- zSoK*@C9Og)3=lqj-WVd)qoWWBkRonNlB=O12-a``I_v@09Jnf1j8}ZR`ni6cb227m z%~T+;$I$0zPh)q&Hj_qSV*1p@d|=lnBG3C7E`et^*|zEF%hTq9*#Fjl|DD##ZT1jF z)&dh(XBd*ANbnTuRPS?leEvxZ6>4KhTm<&_eX|rVQm($sj zSjZW|myP9y5+xHvb9Yn}+~+GW0ac9wyzb;<7SHngIgwDdQXUZ4Ye_PFzB`~M&FnK( zdskP@h%UgYV=uYUFyK+6y@)Bpw36{X-E?0!Q;&|uusEyz#A&+sZ>BBf^P}5xqoWXL zYFHVMMDn9_#_B&j6+#fVsL{6CiDz5MbTG|oz-7{D5FjP6-g7Y^pkpP#+oP0e@A^>Z z(g&N~Y?qzp`dyi)lZB(1IXn&&OUNgZ+*@;X8cNXR;ybY!?*P~QPB*V9Hy%>TeY zc>^+KLO35~Br)M$Y_>n}s?qTM{AaZjVudMoVC^V+Q>!*kc#r8)epNC=(*S7qEr-Ms z*nzpZR)#zs0a@dno9|ZpP5l#M0~`*%QZub$h@+7u&Z@IimHz!S{)pEbxV@?uWaO*{ zKU$p_oOn`RPCw-jraB_s55sM|7b@s{$IFPOCMt`NOdk?jn z%hcH3p6Z2c1pY3$>$~5uCBK*XR6PNc6Z28j;%|+tcTe|Akb6sk-dW@ zl_}1$jbT+?aAi5;^6pgkv?n-L{Tx8!f%joR{{1{$d>D3ZIxqKgIe?vdTFxr}}En>hOw5ak&MP|i&YvvsJ?;oTaW0u9ee*Oc>M zJkZ@%ZYwOZTTUOtcqZ)o8n44~G92vk(ecumfxt)e2OcesZf^sxb>1p=917v1Nc9pr zG0$%OHv>pIUh_<#zW=&a{wYg1U)qSA570D8x;@%fCYJSa4}3~<6|adH*|o{! zpnN}d89WUJN72%~gOPRCss2)n-X!z231!*^b#ZU$wyclLk)##B3_P9EO-$Kqa94b| z7<16x`&`^slGh^g+Xta0h1x-k@KSks#EJE)rNJGt@1Mk-$asyNRKws$(iLeU0>}g| zFDtl0!*$1Z>u+fo96w*@o~!Gt1a8ZVKo15L_>7qO29&8H{Hv%Uv`ze(-$NctOsc(2 z3g^~83~fO*j@F))#US>qBchnBWZPZQG`^>hucLpp2@x_@;P?Tv#_3Rnjirc5^t(^O zo41Z(V0-;T3Z_EdwJ0GvBPQQDXIQdF3-|u%Uz-RAO?Q6E$A4o&bjAKu5`I$AftX~j zVU2(5FZNEa!!x2c$iI+Ny--iA8F=+?4!Kyv+dAv2HR^Q(hKSBvO|LvUI~Q^q%}vz( zGHA`^%mFHMnf;VC>B|8-p`)eY1qUepR`L~Yf(P)ZM93DA1LF%Lb`(zs(-f#_?^T9n_`6$#Qyj;_nJMkWEUdFGutXYaMwS$l0d zVMp%g`Z>ZWv4mEiXPxHNiNKBT|5kWNzMpNa`End~>FjFSV~lL<5(iFx__frQz@5YWlj=G1qbE%&%~mN*wI)iOm);SBhcJ zoHMb^-W8M2v{u5V!`N5O%>f-YlgB}}(M*euRVWPB}>7oF(U6kE}Z^W)o2 zEnep2KwY2SkjF+L(uk70|E%Hw{-s;q7-M3wp+c!CRTNdfwkkgVl+vURlG>uS0^bYO%UOKdYq`+#uu5Z5k^9>DM@khbEHd#w}RGWD0 z1N@gnyUG7hSxn9ZXA5+>WLW#N=a2l5(Ve44vMuB5_Wb$aCF9%LR_@Af;W)l-?%CIE zqBXj!Q!iO?{?>|@nEcvljmk%iWY|x&6elvs$46P)3|(ME!TH1^{%r!sIc%*}GtP2u#R3+r5Iggu58Wwe&K$elePc{M|`dBp0l{@I| z&C8E;b?TJmkNKN^j%EL`Vs}vGvDiO8A{!kJUEbF-8;v9PP6_*&SE&(KL3koXsX3%( z4u5r5+9(ib25Zel`R-S$)x1LNU2SUNU%b0&@19vCk8W{O%>^Uh;E@!7t}d-Sqj^a`7!xl*usXHt!cRnw0UF^ z8Wt~?JH(a4JTntJ4llbm8}|!pdKPi#9&2lBHzZ8duE&GIg&o=R;S=!d?hrFFVIJ3H z=**(mxx^O#4VNf_=`Wx~MEMA+-aTGvu^mQSrH{?25B2ys??JifAK+nZ;i`1lEhzdU ziS_A?-`yL2=VdWD*Dl-3!GSPko+rI@S25;U^Ln(U3pPvC>Gf!0 z&}GE2`J`#H%{%{1&-W_xv&Z1#NC1MhOi8^L8)BvtM^EZM0+Kq?kB5M{&M{yI&-tQS z0`f(a$E~u7wjuh?eQo|w9?1>g;lieiQXHA=kqCF>zo8U_L~+1r8@=HQ!NASyigPQw zXMB9#MYkgbPx}v9t+@c4=eYZPF zNOfR-2KrSWP!W^e0@@8ZLAAHjOZGP!pWat!D@CUfM>3>U46vB1IdLl*ueeMxs7WDl z_qzKChz!UU1?ws&E2nQA(Z!DaJwd`(Dh=6kzUYIFF!MLD}MO7%om zRHQNDn(4oghO6{vUnt!?8t*Q_nT;Bz!$onIy#llQ+qmw=0?|u35EN33%x!Rr(d-Fb z!;(Pe;++p!F7zNi$~Wao>N*hIeM;Qjl0v?@LQP0&Rw|(!{=USL`@1T+xgBgrZtG*Z zA(-UQxq!XXAnfEdfBT`oO#8!D_;5An4PZ#M-?aDaDQ&t=^hK+naE!DodSCyW&P*UwJZ39n6085xd7r60-nSENguf}CpKQ%DvCYga*4X4IZ`(K%GBusnwDPYCQr|I!HTlXPv zWVP~~$1bh8rD~r#Y6>x%RoiKC2rNrF_Sp)jkbZ*shBNv1M;Wzo})ts%oy2waPq%tS@D*ngpA%s=lt)Px|yzR{r{4mO1h zCDi;bIO!<&WoXnnqXsFn42~7Q`kzFE4QxyOv~Eki%?7FVqV)YarOH{AY@46;Pmaql z`SWI3#{cy#cOqXFfFUNBnefa6s+nAiqP1v-kIgj<8SeUHPwb>zc;mRR#$J|B+AVX#5x)ySr__%gei&DaLkWR2S%Y zJzz4eO%4|#Q)C9#m8oWUUCFDP2hx`_DDlZ>Y6-bRWeP&Rt986K4y4vR8ltjUN5HpV zQe>Y97N_NL!6NY*F|=pyx3iZBeU76N8lnkA?bn6Nfi=i+6j}hcB2!KSjW>qBqDk+s z?RANDSY&~b3U&2jWR+Lapvo!XBLDJpJ{~@+HVI#H;OOEP;L&qGkFVq5{?@#!GV8=U zx)=xD2>J^~D|fJs9+j+CXs_g7Gzv<9%*#+E!RkP_?5bSsr=r1onX9SF>gD;)r7R11 zS@w&pr!f$4mNxeklIo)%qw?3c@bsViiRwu05uH!neQk^N{7YMu=|n$c$v&Wij4wSe ztL`qI%+7ATxhnJbd1Ik$52u_DFPEO^U@={(s`aWV|@n?aICC| zdjB>ngbeHj`OFTsf8=(rdj?#grjyw!$9~7V7IH6UX<5s|AYm+KuSOPdiribZ z^%lVkdT3Z0B-%wVnj|XxLx&|2prm;B@?Sk;=R)}|YRHn3e| z60bK1(nA@Gm%8Ss?13p4&HNYK;5?#g`Br%$;{<9v&NT5n={zynuLv+?vtr6t3rkrX zNPK}hj-BMt8By%=?zcZsSRuejn^qfpefSfu|5I-|L-f|gRN_`6J*s*UF0mw!HBBzW zZY&CIK|`;~YTPvXY&An1J*=7`_U;Ra3IC_^zCqdE3~Y+N86F2knle8F*&4^D1Zc7@ zEqzxVoyCImqSM+4b#=i-OzZuRZ29^R(Ae14{Om$O0YxyZvAh!wR9$zQ`0hTIORa^@ zeA!x87~^L*`n}Wnm)3Wvt|T*tgl-T`#9uYej9D;HL)gY=G)6j7l%pMR6KuYCRKfb* zN^fBbYhG10A_Jdv%977BW24FX+J=pu*H!SQnoC{f)TeJyX9SV~v15g4`QO{O7g4`( zRNm|QPS`abc1u1UuTLf3ik0V!wLmc_z3S#DN46!`Bh2)E-)!v8{Ai)GHI)Ys1bg_V zE{qNQ4%N~6{_8%^{gP|dsm`5VeOA`_z1_#V=jYfCteiok^MdAs*tcLc-Ug-avLuDG z9LW+F;{0lZxsY0eYgHn6Zr9U^SV^B!UQ|k+1p$S7guiw&1~TuBN4WImLjvy8+Ph#b*+ZaG1p&0Ao=E+4q8D_#X=!mjgpe`d@n1f|-W^t_jwD(r$tT&?ii+6mJ2x8Bp46-~HR_8WvpC-P=kte>>ly zU_Z=~LvMH`4kqex)JZ{uzO`4UNI)ZbnLrCL4uDToBnl0ajY)%B!CM~`Fhm{5PX#{g z2=Xm9O253koQuiq*5W+2LWM4&*P*6X=4?p8Hl)Z(ktM6v{`&$C0o@-{o0$w^2}Vy@ zvP=PNiSEkIGI9^%MT=k?3CP zr#{b4DQ1z~M%ICJ6_53*n551q+anz%d}f9_^6aSl^;dkn6KRED@PXpu=N)P{b+$Fj zq365E?*gK&z(TTs(CdT!7t%SQsE9Fg2ays_=4FfFf=j_@@z5AiaUIgWH)1qG^{k;el!QM5v!L(k#o&Aa4pQD)dnTC!S1odEl1#cqP_fL_(jH14=vjaGme zfu&x7bo{6c*WO(KD!=J!LchF;*=4ErnEL;-xPJQ$B3`!M>bh%$q@u{x{}>nMa-S*m zxi((%S?pwG2&&vW+!feHM7N~Lgv|I{2ei{<_J`*)juT*Pjol36=mqfN`$oE&{^vph2r%b|bOM-ysEaV^IB+h-I_Wb@hFZY_#OeGQT`uvo&*FTBFj6 z#jR&{Y5NZNXL;!Yw)s}TMiQGHBbClA?Te8vnzV0ji@yYl z;Pi@Mo6vp-%wv}L60^LT9zQl5p9nv_CDXixRZc_$)qFps?xEAwUh0#yMU7>-V4j z-&0t)zs^#PtxdaC*t>|ZI#lB7BWT%{q1&nC7&^F^rTngsP%Kp-hM8p%s0HC@Ig1FE zNMZVOd`CkV)Oh`p17Nfj&|OA~up75w@{<7e9ozH*sFK=f8X-H9@eUayTGw9UV?&mO z=TA=>O&_1bBa1&C%YheNo{Q(Uc9ssnbn(dNnSKL)MzW(S)|o5;t_!EPl(}8UEYNeKr`Xi2k^Ar3e#Y!>8w`z3xGIh!pDyHC z2*v74UzdqG`)JFt9{M)Fl)A+5cRSdc`m_3bGJAS6E;}D~scOc8KH$>L{b^iiF3%`@ zU)rAv#B`n;kkcysO2E2zRi?UOYkBP=6VjcP4H=O~?s9&H16I*3^x;zr5|1~Uk zoJakt>mcnY*nm&8(MD4ovQA62sLlfLs)yWV)AVVsZ+Z;?Et}YXeJ*}^vCWT-mD6^y zxBtWJU~y$f-|sD;g-=;EEBxH=V%QoB@#||GV;C@krvE7DIsDKcRmc*XUEs(jno#kG z+=vtguLC}z<28YybNd=}8il6($lR~FU@{)7k^>D1)MDDy0!Gfe8}J$@s9XA&s#_Qf zfhmcqjkyfugH>MZVc$>KXQ6Swe{N=Y45o|ErmyDEjvs7H_W6-!;X3e63iZnud=n?V z{W-!qzhWY>&H0VD>+RrkuyWH>+YNK2G4gjAWG{b;M)(u=-+^0q347Yi%zjz8r|2g*=keze@baIbM$vx%;a5Z79 zlt`Yk*(gHk?sL&+*t5N<+oay4;?8zUlr^4>$=6%b7i)Df@W|= zoN4WICa`L4XT|l35gXp|4=zl#qdPus%Tmb22${b^sV{xMYN>=>w~;%@Am)Mamevyf zedJ;yv*yKAQ}&(W3wAd(NspRI+#Rt2WV!&)nAxl#cnT;PqG`W$KTdI+l`Si#3=H2? z{RHeWH-yU*yrHZSCqBL zriwO`Y()|gy>r-BG#^CvLBM_(7&iV53flr&1UxG;JZiHG$>1Sf_8hf9WjoY9ob|`)lt~6i?1RNA2x=frD|H8;7_t;-B5gO#rBeU5CCk;igmJ6)O)OZ&|!S zlWvv%K)RHh!F!4br6n`s$TYR7|5b^w)BxrxRBk7hajERe|ES~vWzD=)7o(viw|lbN zGcJiC{6|0C6N`beho-rC2)Q1wj+&yxWFd&DAEY5b)i7_bXBzEW_PPjIoQ7*zWl}M; zQl&9hLw#1IO{$G`g_V}M%|?NTy4vy)eW2QidQgLuePp$Pe@_Hfd?pM1YJotfH9-5$ zQ?DZ3_v4xxF%{V{=AmXYiH9@8t&O-+1!gORPjbjyFFi^T4xZj1gM!u;^U)fUqHC!o zr}6@(X`fhTmnqkiiR0Yo@yhOSMMgVMl(Aev`-j+$`UA7~jV3Qmq@0M*FW-nz?^3*T#4xu;&# zWt>Mv^N4TOND3wt3qKlFH)0#5LMgb~#1|AzT-DiT+k==twL5BRwlJH|Gi38d? z{V$||w(=iqUvb8$I%bv`4?Vn(e{T4SW3)VfKVoIY`5XqOUAQ++u_gF-i>O)opT6|s zD0QsN9wyfq#u*6usA!gab`so%N@_n?zpO{Fh*(qlg!L9o52C*nx(-* z)}WnRQ+#I*_+7OxWhV0j)cC(Ep)1XIiP;x}-DD6r?S^KD?QEmG@6U_KxQF(u0-aRQ z3h~5mo6wbVdW^)m^d3D4RGn4|DfC7BAu%X#Bax2PZLD-qG)KeI-AuaU>+DbQCFje{ zPB9v-^Sr#A);pe`RM-~bc1DEFcHeig%2FF`QT6^@fsD9}ie$;ha*y+Dmox{j)qoU5 zRlm7Bvd~R{<&1%`xd5K}V%dlLrjEX;F9;qkBw_P4v6nI(o;`D7W#1ozj9{t9&V8ac zwwms5Z$7ty4}UUL1VS7wN9Cq8ywN&9Vg%HqZ%_=gE9&3A54c{}(Rm$nHTxDU6Kwc) zn1d@B+cpPS$RlXtK@E_GXoIml2ioE=P<@QfepZ|Aa0 z`If@*0Rj?2$Scq(s-olkamVaO>4lue|RjYv-5e)UjbKCMBXOH#6YM zO9cx~tMMy#Zh z`w5B<7HW5fQJzgdy~l*lTVl*IT=+V@Hon@)m^%iOu*^uzFwNhG6& zE`GiHFZ@l_(nkmXno3-sKtBeCS4TzVn~MxF6xX|x*iWiu?)aI0X8s?ylbr`^uMOMSH&u$xh9I$X_GrH`$&+TVMB&yMABdw9>~;#dHF zDYS9@5QK2{y~@8kh6M=CC;YU^3D*LOZY7#3Ji|$5CYM`8dpD8k>UodRHzLa*V;GJq zkElmy29q&tGO$s2n2`*5GZ~_tD!Qq4{-S3byCj?EAg>Bc>m}VmWk}PQUqZ_4PT0V)i|-%6>;JbJD!^-) zM@O&`K1yz$yAsT%oTw6HPekOw1yX&6_0Gz}z%=^MjRoZJ(8IJTze9u+`TwB^ys>*9 z&(2-qo=t}|Z+w5>prc!akvBONm6Fd$t#=MqBigshDoWXtu%fnYH>2(25YH^RT6OD7 z%sypaEl#U^3g_o2IF{jNBCC;q10kr!C+y)3$q~4EvV}`|da*{s6Vkb;K*XkuVvBm9 z*fOJto$?E3vRvoU;U~^X%>A8le7+n%)wZ#+q705-?$E*6;3Wo+4i)NwO${{~XW(9v zt4ydM9m-GYuTL|2gbQMpOoKo9d;dojMkA0v4CKv}IZLGIkT=Ko)H|_3QY^4zdt#nV z!x_2|6XYRoh@)xmYFU+ih6MPDWLnwmHl2*J8irD$tqY^z%T>{%CL=YvMRKMw#qG(G z4Nw#hp)hJu!s$F=F#1I4c*f74^J7JoK<))ut(mw|9i&S=2yadikiLhK}twjwpB zF0kG61t<)!$_>@p$a>I$bLR`0z!&47`((*yRFI@hL5e06XI~rMmMb~N`fs&73}(Ht z*_&z$`t-E9FbCyzeD?(NW+5GVS%WDL-mz?sNbF#Uk6=BDgBSgszmSOSSn_xDpm}|1 zW$@j~=IyA~futHsSfPcAT<#zUNx6Pux%mvQ{%C$DvrzPbQaCY1Gon31-maIqF>0#K zSzO0rG@IzGg_>Q=L~CCkagNpLh}KU2mv8W!I5%#%%mfEXSezsjIL&h_^<3PXXKK4K z9dK&Y4j9#LhU$h2XvvSa3MXHFk5veD_ zr~6&EG_WDJq`Qq2oDO=JJjqTu1V&D|00`*5FaTFyl9_ZLdk@{EGK^2qQ6hw4Zx|pS z58bT?AXT~^$aD>3*vKBPRS(D8QIV~Y6ZWe)gfAX)81srw!Xz5Gxd-H%hpH5s#)p-! zo&xPn!%8IGfTWah0WYKic7vpBB#MJqER4OVo?tjN+@87Nj@Q04wY^$fLk(-)gJn(L zAuc?DY~`y>KNjuL0D-@ttM{{DlHU*pXcFe%(v3F|a`t>HN4Hl+H5IRZa}$X0dP})iK1zYUiD^3y@?xorwNtPjxqoY_Taqp)JFU|-%_Op-;S+%dD zv=WfR>p6Q4v~@mR<#exTiwallb@C`X`1-ot_ZtJr9iBi`zElL()*-xD@tO|2Yslqh z3R1dJc0NOssb99FvIe{d@?hycQOfWEKnr0;?KP!V%$-QW&?PoxhFh>ma}Z0|-P2(IcF6 z{gZbg7HaOwLGdNG(zb=*@ztMHc7q3`5+SdBhpua?^{ia| z0>jD5?Y~^JWj6?DQ(+>KX-jgZL{%$NA3^b|?I@-^;`dtZPk=4`=4X8so!DYZ7cs*( zxs_@BWIFJD-X1t74eDOr@ZU>Pzmn0Y(|3(OHL|ar=JBDnZ`{?4M`B4$=D1fXI_a-N zGw?m6lc+Uc{!l?bgfNkbNHS1#?sVBEjn&OGUIb5K*n``a45Ei|^_#s$?BJzBljTpG zob}Kmt&cgLTIez25lL~6^kDCE^>33nJhsx64TUoZ0tAC>a|FGLCYIY&8ditkO_wPf zVonQUQaA_2`r=CpXMsYHTcQVS&AKalz8lEaFRGMSo*IuI#)H#v$BammzrbNtYWFb!s zM@Tos+0vxw|F*+UibQ|)yY3E~FKx8Rz_l=mz1>(|X7G|R+hK~2lx$Fy&w%NW3cKzP zAYK(c!>7M1>7)I~rG-Ty!833>yYmdvTiGi~0G7sf6hh^o6^UcTB_h4cw3VdrXXqf` z!XcPBd%F6CyL@3^9HTgOBz;uaLGQx;N#C~UMc-Gt!!}TDq1CFftwh6b^+n0T{)&DE z3#Y+v&a}GP>LL102Z^G6k#*FXnRiA?+sv{HfbmC#qCQ}r_L87fP-RxL`CDa8VDplM zh$tibZOE(^wwj5(sI2rRoDlpGnh9<){N^?)MWlRtD3=1*iO)sT4_WkjaS^zRgRLGX zFxCn}lAxfSD)>UyCjI+TgR++^5bf9qXUX|KG zz?aiv`TQ$&h&*Dm;Dysz2TnKgZ!k9YpP`)!|DNw-3Rqrfv)Ojsis`aVV#>NQV;yhk zpIR&LVuOznE5wkoPar+Wv#2;vSoxkm7ZC`2Ri0>2#XCaJSV%4 zk(Z)2K zIQ7tSm1)h9CL8Cl0&~%^-^4XSRdZC~YsJx>0Js9E(FjFqotKQyN3J9uQu#g#xfUGR z$Q;xAqr**}Ov|C%!ESI0h+7kis4mZD-EP*shqjCBk) ziXqV7GuH|mv^bJE8`+}?)%-bd?M)_`9WycPSZ}g;#(jeR;uv1k#c@WjwBsaJ=c$qS z{vw8+`h7=tL{v-AU!@wAo3A@5iPSyQ`@BFJ4w0MZTy4w+3u zt^7qk?zb$?2@-*~T=cU5wW-!6^6hvXn#!?++z=gTzGKaG8v7;8?T3=sXC&!gGY3`X zTGa?KF3Y~Zm{d!x)&^#@WOnhaGOw65cgx;TY~F4}b%>`g!a5;x;jd0(t$M=(Aw7(3 zvspbDyP=MYC^d$maAyPTt26O~CEZeznSv7#+`Hi?Xt04@?1W@IU-NpHYi7u22fyRF zyUKtWYmg*{_B=@EoL(vTZ07H znHXv-2JMdj3wHJ0OkK_muaW4^<;~;Opi<5D0|YMjs1-Tm9hwIVg(CT#plvv9$$t|w zH!fiN>y^PVv7H+8k5s$cy5#;#MaZSZkG}pi`r~5pFTZz0n;ZOo%E@bKKtclX$4v+8q`r*#oZrep`*X#ZZaLV^x>0yZPy@qR67G5i3AiZCh&MUo%iWcWk7QTMb^|9%U8$HD6FID64lR)Wuu}ofc zRTX-o5q5sN;x<&Uw)|?m9Ey9p-l;=Am|o%o+IqEUwXX@J%Uf<*eZi4@zUyPx3@j21 zED^k5uTOY>s(RDaZu8p+mIXP)Q$@NrM>$&1!j`^w@8##O>E?x*OV6N^6ZoRPutr^F zVO4EwRO#8+m4B}%#(ie%>iasUcQ@EPIeO#W@4chSj+5U$0r4%Npvv>ZFExp@vT?(x zmk02SO3I9%&g7sl#iKFvP{kj7hdGX%mK-l6`^TzYChGrQ0EMDZ*hTF)q8)%eHw6-R zSP759R*kRX2wD(va<97RtTMtSAx;u;R%QfcEkdo4Ew)4u`6J^WLCq(s|7VMN9yP92iCQK~Gdt&y17amI;jS40dfyf}O zg``85e{^gice6XR=+g>zo%~c%{!#mHvAx{Y@XLkrr48%andt1A&o)tmm!s`JJ{2bH zCY=tjn+4G;e8m*SzXTO`{tf!wOV*$~mR8rL!D2@KouIuNNa=0WIby3o-SI5(VTJlx z&9=NGf?XKwgrZFKat#LBaw{IxLJVje0-de(GZ)v!)~u`!TOo@8HNT!eUNVUp9={b= z*SyN|ra;+Su_{6|(j%(7=yxa<4L8;EP8H~T#!)<&@4HRF5E2!=S*FqOo^K#R;EGTu z;aHq-V%b{X-fEzn(@VZNE1kbx&5h->?e(D*vcL?nPQyP-Vmg~LEol)E3nfm#-yig! zXQ&>zv_lbnk(TaS_~Kcyy0N+G(BAY(2>Ud!FvDF@CeAzQ^g_vsoNG$}CRRCFoB69E z;^Ok;h?)GQb~jDc2x;@$=qR4_!u3WbTUB$*CHVZ(u5X&0N$XUXX)ar6)`YGx3vo9Jf*=mzoO*$ZjeFbRcE5Db|>eyR_X%Ke5Kr zNR+gyMjBLNT;*ZPsf81`6lV5vigSKHzrx`~@kn)h%F8_7a>udv?NI|ostG?cgu%RH3Wcuc}~;UB@e>0|K6le+P23L zUb{DU1hDD@j)*gQ$!kY3-?`b?C;r&@Phf|#|2#=QtysezBadVho8L)|Ttd7z1Rf?z zM(gT^eL*X~b(~w7-fv6wOTCWk@)O~c(yRte#j^Aq zB3|%TNQ)wE=RMpwk}T~r-Bdz*=dqbKER(2)I4qN=UpH>dUN$y?DQXp#j8)*^em@7q z(>@7OpjQQyUbIj9_&y?tiT$5-4L*eyEPw55>0Lo`609K-%EL&JA%B4$R5---S3Axy z^}F&=_DXRs-gNVTy=JcY&;?Y2&w;JICe=PZwDUL1vKq}smAQ9*S^9?wV#UT}c@{_`aX*i} zIPHFQHmi+Ba%!MKhF~P!bskkml`=Wdf^b%B2hsKBTi6b?aH4m~Y<StDI%A(5a@<2G-=*NaKI{pfwvTwe_Z~7VX%*B76-z%iWcLcRQbj z+MKN(=P=W*^ISGYuJwZ4_dKRptPKD43(y2rGm+55X~IFmlPR^H8XHAR7$2_|PBv7b z?CdELD`R~DlgK)&SYls0Im(HwGCk`456j~3XmMe`N}0W7jzcT101e*{jURn2B{3}H zxhIN9!m8U^Qe+?0Uo?BB9jk21u2ow5n7dNP9*bX*c63CywkN>8`8?I?BcFt6Hi9a-m6?mXgZ%b%xZ&~euqG`8b4y4ey>lfXgi zDd5?D!#O&eG-bX%V|hqY0HFLqaGmMRl z6188_KZ=BZmLld$=6k5D_EZI6#`wK)0p?xu@^Iu1p>oJ>T>B*GFs^}^oe|9!Kf0@f z6tl)X{07}9D|XEa#>qtvsI$@2?Mjl_QfwQ9COhn7bY@ZAxkl8ihST{1A$H+~!rB-iRI0LhxYU&LDKMG6)#Cv2JIB5bja}Sd zm=A3U%F%vVdi;k;bc<8QXYvJ%!5oj;0ll2yhd-RD*Jb7pqnE{aRr?8y_p^Pd{hW&r4`IFt?dp&704HGl;@1(zYreW28P?Bh3HjyX$%3`Ka z)h&hQQVut<(2?rvjdIs*Y(XtW{Y^;fa1%=7YfMg!CTk-`wmH+?-6>lJZk7|D1?1_f zCiiXg@j{RZw|p`z^f5ZP-Y%VqH?OTlfxA^?GMx0b<%s~kw`*@W86M}TndZuKndb*E zi%cxGgLJ6uzGUpjk8~IlNE_LCg8+6rHQWV%c8(c{-<&AW7f5XnT%m)7uhJb6%rY<+ z=RD_~ZwK|BH_utuN|jWb*CdQ)4@`_U8}i?>Fm8IQp*fNpaCiF4bY+aKNP#bV;HekD zcexQBU}Ix_;q|I|R@&qJ$|TBj={b?^-Rnb0A275GuX-xD%gosEjNk6=Kd z3Cz30`Im&-9Hn-XPr;DB|MUC)`@@iIN4=2=$Qbp=&MDIqDT1+$os9)_5R1&Nt+|*# z`Lzj`2V=qG3~qI+KOMs7_8)8F-^hSJ7Iz>!9=5rveh0Pz<$T}sUhF=uKb*+LeCHyO zZta?@kD82;gljIE*6QIhw5>PHKa5aQYo`}=5Xt+n(q_GjkLdeJ=$w9udnh{>S3M$K z3+B?tdt>tpF{pVE{Lt(H%K={pBj6v_rnrlX);8YARq`nbd73>O2^aqXT71c5slrQ6 zR01uJ`Xxb-iO!smfJssdmBAQ2i4ZQNR7SQUKs?KDuFFX;iQ6Jf;J?#7=VWm!ll(4Ru7F zkQM!ZGC=GGSpM6_)y6#I+sffJyI$h!?VIb3jBbwA>N~bU z22SH3Ss@sOgHd-T0`9D)2$Wm(<63OPkRYZ?oZBV)a}>F&-Ij~*^IT5FgObfcdrONA zmj}j1#u<^0HyO?=Aj{}_UZUnScq6KBAZ5IIyhh$&8u}1WA*VHlx37yz=sCSjm8aSz zTG;z3&GqWRY#zDjsxoy$_W5{^n2kz0??K_IW9>lzG%@8B==w7eI#a+&vcE3P|TO8Qunvuh0`uI$I? zbRCob+OdqfFoAB3H6}FgXr6?irg`J;bK7);C4f&Fuhv-q#-EQB*MVf%K8T#T=uNRR zD?k*M?UVSD3yX#=X%(qGEyzEDO-M%}DDPfC5-YrlEjTAy8VRP)gayDZgbMxxrmkvR zF;6c3$sZX@80;3(*b9vLeLHR6>0zKzI3r|NDT2tnx*GE+xC0OGY`4zcf)O*18amBx zH)%>vf39JEvdn6(z-TVsC{^8-jcKThgqfOTZJ7oSD(?UE8GKG8b`pJaAtPbCf^bBiK*u=xreNS0~Et1`zH-(qj+e zt*IqtEs%EjMVv~#*r{NWoXDDmQF;~ zEbv1-aFKT5^CtXr`mlceFX$u8PsLn8S25=OmF0ILnn6gfSOwPHsMNe@HPYMXjY^^p zo#*}lZc6k(`8=(kR@BBwKm@zGUv%JV(nL`ZyeiMfxif8J8fHt13Q~wBwDC}JQJbow@}H_W#|IfO0|Zg z7tjdR^?yLWed5-~KwD57D7}QV#iP-=xBl`d2e15o28Dj4tJlKuu>@Png~oy`jPy4K z5X{?4N`rSYDf7=t3@;V(HE=1mC5FzJo?uwn?560 znd#<&VpLM?`sf)*xKjT~rJK!t);?mM5ukr1Ux~YNZdf8rg z{ASGk1bXi40nLG}3iS^)l`13)LF>ATT1cHZpyTsTIP_42hJSj|UA zk~V17B2IY+@+Xz%o^eD{U|u1gs>e@E05k2D+7PlN-uK3qHo{#<#vSAaW85=(*0=~5 zFcfgTH}fb+|C840*K^KkB)cNdrWew;f}^O_zH06pU34<$D*Ps##Zk*RbAhvH_mCB_ zrNFRn5O=MdAn2lS4CZedS&=LPnk1{m9ivFXy3lYg^%ot`d#9Y`k+CB+;G~R*%3*X5 zXMq$jON_xWK$RMTE!mC2Daom-mR$fS#)z@ex`4D4a)Eejlz?QCv2SVL7la|v8q5>} zLg`7O8xs84+9#F&N7Fe)N4hXwIJPFXZBA@ElVoDswrx8T+qP|cChTZp+kc;PzJI;f zxk#_-eyespd)KIFCROmm!6-Ohu&qs=Pvy^6Dym-x0Ja6scAjJeEgl@}>NJ$Mrixxp z#OjL+fhCCZFv52|_ao>lm(r^Olg8LaN;B8ASvj`fY&Yf)HEn^b9m$@Uj5!!}AeiEdngDV{{_Li!7J7TkZ1!+`@T9E9XCSqqTYo329iO$ zv4h7(rj!+UC|z%gpVgT!peOF6zmRnDfOrI959I5P&sKyOk6v1#eqoAT#LeGw@5UlO zv8Soa2gN#{scxUUTJJJrtmUQaizBQSu^&5v96*?kLm{WuF|4`0e>{St^5Hf;>r1#N#oa2XiHL57J4#^l8N%9t3k!w~;ZcjwY8y%qELMtUekZ4ALD7ue%jnjTvBytZ-) z&-UjCLSsQKeAalq2jw8nHlGc=*|FxjW$~Dq$TM+5VSc8uKuxIEQQXE_Bp+ z@Q+t$4iMj;V2kY=jS#=NH>;EVw)FHuF%pj#ZKU1%&z7pHr9VPpJ15LV%ANLr^v4s(92A-y%Wg_7S~YY=9jaPnxOMwDbPxHywJ+ zW(sC*oR8)WZ5^jQa;H1Ajp_8MDz1TH6@HcX12yZ41DoLlv0APt0JO{qVtAwtJ@z{q z(k$Efp(QM~RbxtoM`_^l$uL?$w(C@Qn+1-KuKt=q#;x39;an8q`R~t+lEHas0iV$7 z*}*8N*;V!*(X}i$1900MH8Hv?lG+;;0=#8iT9I8_vHqXZ+WzmFd7@Lekw>quQfM88 z7`(0adRfAXxvyu5Dz~D29$XNkngfFG*TIzWbDawsM|l-&O^u@lL^=4?1HlwaEF)$L zV+82n?IJWJHaQ(UYNl@i;ur?D^^C<=+{5lZ`~_-FtKR~8qj6pM6%ea50frj=eJAm% zBZB@565a#4LQ|-p=xGOgkm#*f%TfL>sShl@Qhv}x5rT^|bC+Pbi9r^ZBuGN=K(Wda z)Grt=Zzl4HfQzUIsZQ>u7M;nzfSAeg;>ynD>mlz;r48r}{mA>;|GGfx^Z%2R`Yq&K zWyH7QO$K&Hzf|FKl1obDoeBWucpatfn#-gcn!W7G%^D&?hhqvn{p*NPbK^2VbSy(F zB0W$X1Z6wm{sGSvsLXhu#?K6&76xzOF@6RwkZ@gR`U7K$9fZkrV)gxn`dW-= z$f@!POAHg0fRhReI!+f5tw`?&TYg#71l#85f3;uoa^9B0ZVm3n0GTjpuz43e-RmNyb8nZb`EUxl(z}M8d(6&=mi*TG8|P zQAGq^Nt=PoR(}Ai#NY41%e5<@(FFV+TIY0tR%bSy1M6EXrCfPjH!UZn1IJ8(ZIZ|HRHW|g zfNA3pT3IgpN-(j#U*t)O4DA5%x|nU3BeB#t;br#nVMli}Qt8ZyOthif;&x{Uj| zKA1QJOYdsHw8p^kb89*rIWSHseH(|R+5d`AASEwots=3ZY`%HQB9rm$`aEIONIYXngaye8N?&!z2o`#%L;2?-&LUqRXftspX#*)z?p^)(3VwPj zr^bIHbeWdHb?Dk|O76L`4%xW-3Zmvs+n=h~N9;Nn*14;uOMpY6`KxA|dnK0LaEIN}@a<^FUw!Qi<-5@Q)=KmoP=FI`w+E+`b?6iq>L*e*Zx_V{MghR=ghp$p% zeCEW_-}GZwPDe&!T`{|CEI<=pr`I8OHM&su%5M60`*6M>b@`Ted%B6>m4UxoKt;9* z@}B3uknIiK8Q@~&MYxD1gCxZ*{n(qc!=hJ63AKS_Snp;pW4Ke1f#*RII%(*NAbB9sU`!0-(x84;;u z_183_c8JZafD{m0c#z09MTvoh{$1i{btogkFCL=I+zx=NM#e^0kC-ni7u#AT+eW1Bv8_D=KZFcw2F4 zw|U*h*4EPZacG{qrxvxBTp6mB!C;SH{VT%^Co2^^6tqf-o}OUp8;pw0v>CAGx4-v= z&<6aUhlo0#*8N^N*S+jT!2_zdAHFXy(zLRgG*WblHm07BdJ0(5QP@bh#>f9Kt@C2H@`iB|IAzZKjLea5|G4imdUp0Le5Ct-#&10?m2FM_3Lv=`_T{O2JIgM@N-jSRly5;?XK#35V_ z$X{8}roIb$)aWsJNHNFd@)LpyiCWvn-dq)6j=`zKnt=wnb(-H=gbK)dn3 zac4l2n9sO8^se%*;#_^$5BTfLGGF_=T7-CWmujI*6I^UH-h+x3_F!^T*Te z3U7~z^PafKjw1u2Scb)8}U>-FW&XSSgw!=t>ciSj{ zM?LHUxx4)BuKX2maeAi0{+z6{r;MQF_$Pl7oT}ppDyBa)Csg3uKnec&ke3|wTD%uB z@5r@!ObaJPwwsu(5AseWR>9ThCpq~vdh4`^8MwNF+8rUc8#fAw5oR(#aHhdzeEv-N zi69rD&|HXdShg;a+4$2|{iqJ#i)PqLs}2PdkJ7@pFg>-=CTH5sbv!`O-cOq7#$XYf zuTj;aSOJ2L?y*JrQ7pM%Zkv#>cg;#GXQ(P%aOS~kP@Vm?93i_gu|}H1)iRA&mYNRFfPP`8Mr-gcMUlzw)Z$03SyRd8X@kRLZcE`7kGQ z@3?5Nqb%tmrAlBDrU-X;P9KTu%T@d*om9VeIsCro;?=jE6tPGXfJvYKM(p>{>7@9( zZkHl8RnXvpL3^ahm9@>!?!%m^x)BS+U+;0+Ed+^_uLhz#FO&IF8s&fu(z2Z6wvl zAS=th?VB8cvn_5S-?J6!i*!llfA!03IzC0uY+b6FbM*Ll7w%_|Zk?^!camN34eCPJ zIni$t_o7gD(T8+9MbDBjD4PnDM3p`VlVE~lINLA%y&=_b3R`z&u*qh+ZKS8HgBPJ; z8`=v+H6c=FsqY@_yNW_TsAuY=bX@@V@kPz`0AEc~ojmuXStv71dmso9r8V(X#|k-B zNe}&A4?g+RKRfZCC(@Z;I-h&%Qcb zsR5Ehpy=_gTpESU7ktd3(LxezF@Q9|w#Z}l<|!sg`2TI%6JWtqa%-*xqdjxKL~9GM zKGa%;6Fi`qjNT+;VX0S>J4fjywssTam==w{cTqQqrswcw$OP?hlE_Fp2n)mi7C(V( z5&!2me+CSB6|Ch*=F1Ju)LuyRh?|H@49Zlg3`t9;NSw}E+i6rQ(wlYRE_GBgK5mYk zangg4X=!nP)O$!4K~Bpt@<5(;-r=8h3t<6d26x9uKpF6ItygW7KTiYPa#EW;s6V8B zReHP^)8}HCFn{XO_$}{+e9Dkizf@CU0IY(%oK@0>1&wsV;%g#C7^mDyY-3t|{1oHA#6JVDN(b-pbGwhhvxClr11>C#sMdfWNkbvLAhfM)0e#gX>U`*3{$hI^g$jg^0N=Frx6-nN;n({w$Cli=| zo67r^kw5vd4Etg9m9Z-$^i)m_oKeiW z7RyYHu_;tq13>t>J?dF|X9|A{v`hUH z&;SV3G`Q}*>pfRksTMQcNfoewGFYHmVGPG@^JwimyZPNz5m&vyWtn1)F8X177S9xJ zzN_7!nD#Fh^(@2SFaQ(EP@LB?OWzs?a90nQqn%wxLBo%#1EM-NF&v< zEse#HQHa{V0$pf1oZjWBR9DDx=uNIH+TScYmoAut6$9rm2bnK8n7=GKW3?s=`Hl;J zB8ef_c;?eJM;-Mg><@6jB4qB-@KKr>JE^a;ve5B+VDA^${-j#~suQxgptE<4UTfOU zDLh`w)9vF4YA)E_>li*BZ0)V!^o zxKRkgc^zHx)}F4fUP-!nov57Vj{L&^%*3GD{eo|-FcQCbbAPrWyv9o$X}R)Vwl?3U z!ER=B|IGX-yCPPh-{y&af!6sb)oSXe(#U5g&STfacuKUV(HF@%FB5B$%M(rLZg_R8 zQjDO67cAhxK;|M_QWxhAj1q8sgO_SxNkQj}Gh=RCL@!MCMk%~nAc;gN--9L$+zu}` znj=)3Leitbf*r57m9y<1)33I>4vu^&lG(*>i42-Ip)MxE3`7M$g11K(#(AiL5l0=P zJyJuC=KBL9BY$~YqL67pN0^cw2W7B-$be4U11wbwLWe`8LVcJt>z;dKbr=hr6|J?` z4vY7Bvx5B=KbXfVO#j!1bVFLya$!bpv3Z=lPW;j6u+ps!^Q)p%WyzPR+d95? zpXIy@j}vm2sDHs1cN&fG|} zk=a_XrR_mN+IH{zSOcaHne6PmzkLD2o;qy@42zVCiNst@pY_V)xzYyO6L4Kg2!gBU zB{)c3_0_F@ku2eWE83!&d+Mm%lY{BSdvVV}*Xms2rAK>03*a~=hta%Q4D*ti1g?D@%QJMiz`#>q z1p;A3{q~mEmGI+49QSAmpJj5fDH(i|Q*`fODHove@fD9TV+LB;M<#4@MRTHgkkC{9 z%wP~sOt3SSlboOxfD*pkCzsOjJVOeXoUOD~o$iSH-|LvW*SNpEDRyn;5R`2lg{(rc znlr+P$czV9ytf(#QC)F78Nc{7FGWAd@b>2`B&$;|_>_)DCvo$A5yC5cZP0r#SpBPz zc*tQ&tyOTn+pEU8yz0iQmv4b_=vp20BSzGnXa$RR{YM|O!|PZE4ixPP+;rWWLVv-r z)IZPL>KW@apPQ9SQN&DJy{9#gndWdv=P=A;ascg+J|mbGXzlU0Q|eRw{;gE;jdAd) zPSG9JgXjn(EJoOIr5K_WEvnX&2gENbGg^cSab50Ou5X`!dR~ECi^3GxnG8OJb&C*b zUh%WauK=*}rG(dD=JRa7K7x$-Lby$3jaUpp>(2d_Vip&uQSj)od5+@u^7duG*TtWJ|4c z-`JSz1hVxOx-dmhswi(`?j~W*>CGO$w_P*o=H#rBUp6A6Q{mZ)(OBa)sdRt5VgB(= zVvKFq1TZq>?|8|PpX5?9Xl|}l-I|}%GwbQ!bhK$_@w~Yms@{RyJmq?LCW~cv=xxCV z^!^hP1MHIodV6@exljC_Kf^DX{6DtGC=9X-)Q4gZ@K(O>k2DFRR&;eP1U)&VVxHC= zh|&7S=*6oRfkcg(Ds!?U)I`@t3eBX%eLCM~dVSWq?nO6vrgt+8l)$+38m*_pgO8O0 z>J$&~~cOh73FqYLdDQ#_>97tZZY>t{K;BLz4dQN7^|FyckUhtdy5O#M$PcPO@ zEmOxRDvtX4;}XpK17I&8`>@(J!?fUt$_o}wYG(sL56-?~or}boW0~=x?yLo2u$na9 z2{uetWZ2I#1cMQ^$?+gYQ?PVGuMDtdf1<-T7ECL(g0*!n1fLr-HKkxPOe~6J<>k(G{kr5l1G@J* zAI_n{qY3t7n+KqN2L=>J&^SY86ET*sg6Eg~JNcGF`gCo4lNKJ~J7@Onq9lq+Cp>xA zo_&6Vr+kbays_2C50yFp?ig{g>Yu;kq;ghEkKzuh{_(so@tjY+emMdXv5#X>=Zlx> zz37Xa5SpOM**Akp!`4?mLg5LEZ<4f^TUG~}$8&|sc5|wEj0!x1oE?R<4Bt%(%DbFA zOo>MCFphW+z*QES#nedYpTg$XTQqqw(%EN9TX~ts`n#Y{7et@Xc&zwsO|^iZ8Tq=( zVwAWKL~d_(cCJ(2R{iVzq{+_ReT`{tK|Ri%u)7++A)}o&3etTpDNKotMb1Vj*$U{V9}xW(Z!v{CYQ5!vsQ`a1fM^mDCIW` z-6&5ZfBPi#{&pR0Uizlfe^odGw)=b$Y8rFQU@n;A$1;%Ieri&8cHE9Nm+Nw-)qZ=r z(sii>AC@sqfLXzY%)@0{k2|pq1dvd6__7p=)6@OiGhw3MIpX8GD2XE#J!IZIo*UP)2o) zigGeO+BV>8K)6~diGX_?_{2rt4=at16%#Orm_GuZwP0wZ%jbf%j7ec7sDoQ@P0D{A zN(u&nux-^S=A^~}($>>eCft+RDkw0&TCxQ6 z7{Mp9*^azxneScNT)34b>&ve3lQgst$_cmbjXsss5pzG6Z#wD9TyBf{@X~Y~A50cT z0ZOQ?e6LP90)e7m2BeYl_tum(TIQFu1}{48vwb^rZ(U1IrP<+@cmq};KW_W3-cqpX zm#F^%MYX{0<@}V8=cuG^akP^Ljoz4Z;BRV;w&i)_LKiXB6ixXO777z+aW;MF1BToO z1eADC88O9yp^nD2#vC{=^1DO@C}9IuGk_n1+Bt6axna zQ#n9w6xO@qa+z6GyK4>4yuVRYSb|F;9(Gt9s65Fq2cIQenjbV{558$`{^5T;o!to7 ziOWIJX4od&5;9vNmyh6L5k>_2XZ8S!24(GpTa~Z5fJv0q#-jZ;(tAS^jtcSdUk45^e1eySqri6 zpQ)rt6QD=sAgIld1*lsF`(u$NiOU%x!~1tv9Ifrh(TqM=F`VjXYbuZX?y(0c4a>k4 zp9=`@6$VhI-w4+UeM4s8dB8^d(cFMOI)sKSZ?ab~j*UA^8!U6}SdlmhnK3ys&Vp_B zE92Xk=6AwEGzowbnB6Bg9&r-fAQO0)9N(Cln;L&KJm$M9G+itv++REk5<77^R=3W+ zw?p8y@ylP7JuSd|0f#@MDUrI)q2eUpz=!B_2gEU$4ZUgc+-+vgFOnoJ%2}W5DJli_ zFnGG${u(;>E4~KWuXc(t?&+PIODmlT@64l#-}kJF=ZUvbHUlXG%SQ$bT{+ z0j|gs{PwbxV`uL^ga#7EwqOU~WaVWr6uFCm7ny&IxYT49ZrV*eWkihWcK;W@5 zO)a_2lU?M|ce?8yQCaUEFDm=9v`a2J|MMlTta8Oz^*#X_|B^m^XXlzWtW5HECtn&P8W4xjPD0;_u;+1W=x(v0ia8b0f zqr#q1zFHFY|9fok;FojD6n0{pbFD3X&ci8IZ8Hte ze>SblHy^HKwLv@GHrahmD72NPlfZgx-)~uLKrgH_ZE(<~O7V;Q4=)0CZew77hFa83 zt5pLy`ozEwx;M7xWjW^Zjt_q|xCQtW!EUPTPrn?T!B}zq^JAzV3b_t(seZ%Zf00U$ zOge(VmvX&ZU{)$|uc}QEV;jd zs5NRm&R1Cd!%nOIeWc5Y5^S#om65Ei^e0Z2_uH?C9Jj0Oo;!%k-2rdgDj#JQV%YuM zA`?T-Kgz@wp2VBjw!df1RcZoO-KOjGdzOcplZQ99Jh~ZC&!=etN{iZ$G?wtu$UBom zaL36zea)?2YQL={82(n@)-T(y1LM$O;2o|U)~s!7d@EZm(}{ksAMi=oj+_M2(44+# zZ<*ZEdD_o(h1{d~o&=ZcsuXGhYUvaD?kyq()MPd}<+=yP(Be2mFWX3|3sZ1!!B%<- z<9`C6T%^c|k@LQF<~yHC(YTW2{T2;U26NGr!S{UrgG>4yx&GW=B(4!@VU!8E$ zfmg=`DxUVVR9B?8G@0x%xH^$y41*>+FI+l=N4KK9X)L2u#$_ZzT1P`^{eEeok%EZ0 zq-R7bwg2gXm)l?`b&EJZKTm2ywVMxUT2=Ke2JSnHvfpo5s_f@Fb-%YaE~SZx&uGcE z*`s&-fDhpc$|v4&<;VT{Z)GcK9(di^P(|X0TQ?&SnGf;@|UiBD#R{wQ$Z3Hlp@L7{KVlqi`Av3$uHa@)P{CoPmf zYG8;g=c2NKV%9SjqmyO#x8Qk(_4T7rL6RJMM$6P*&@=XP(PkzgMLE1QHD?N>6*Z$8 zw}hFEya5D8wz2Zckp3k^0`#mtMAb?>ZKnqH51ti2nQEHSCBQ}gLNMvro>dRnaTPjA z?g_~}>+-_y#Z|AJ_dQ;;kB56XH$E2lx>*YXxYX7a&dW0F^0 zJ71sr95nB(Z=7F`J8p`3{7h(vNeo(01pJ8t*rrOF*{m85(>mXbaW#CorpacG@(Ib; zHzlZdL>t^E>-li7QUYmZwKsvEMt{!0N8lK&Vr;y@uryK4XzZN>4O2;XX!3xxoec;^ z_m-_?0j8i6{Bv0ye4k%go$gM%zD3dICzeruw}<#@&96nf{j*kiDLX~Fz=iO3IgjzE z#i(P}`?JB3C_Tw?i9FCj05Ux#;{=(Yu>-^p$o{#c5hu8!J`ggP_7s4RGAfMTL6zc;TZweviyn%{nP zLg`18Yg8DI?&V>`?Z9}zVNdHz+$&1oiEKl9ksX;X(8A7nBye0$G&Wm~ko_c3`v1Pn zj$Y|y(Dd`fE<{adYo2CDFlG_yuk8FVU$7*hzOGhGu5hzsBBEl}XRD-TB^B(Pdi}&Wj({$(W<~mWIkuS=mC{`JH~$>=Jy83mjMCNJGxehe5s zDQLeE65@N_sx|#;1ubq!W%@HnKn(61wPp7xGC-0s+3*9AOOh!g#*E-e@8e!ZScPZ&HI|ieGK~|1YIVB zVLliqWe9m|;oIch_$5bY?;3WI)wZ?Ja9;Ma-KMR56wXXg$}6YN6BdOofI+>xyv&6= zFGq82Nu|fRRN4T}t+kEMqWj6DPkRUOmM_xyO;)_vGfcT>z=RfN#yduiI_&#k!mqK} z+Yv5$ZDDUHa!i?zj{x55%LO`2QAJM zLUWLdNmALE9ec`V7MIx>wq;=%)-kAP-MrwdKb62YU~DgmrijLJ#jc&e&m4*>9G+3G zs=O^c9N7~>&-OwsXDg7T*ySOE_Uj~1Vu5#BN8BLiGrpsiL;a3L1<54}W3ij=15f)c z3!7_|qQ5cmeu(l@>L#((4tOfcye-?aN>|BeGmJ{-$TalclK_m&kc0w(G~-O}kH~8w zB$RM5v9#J91;ZNfJNM61Zvd)Ox>e2S))j*`&Hh**5%9C!?}y|?TXxq5$UfFDNHw=U z*s~kd`Tt=lzzWm?7@4P0r5Dxo_|ky{nGB#qQ*|R8g4|s`Thda`m{J zvFqQ-T3P_#qScV>fxuJi49mjRc8MDd)XN&1RglYOo2yS(e~(J1@0$k=QnbaED8UKU zQdZr@>0Yk^A`_XE2>N{snQc5+e@zPS)FB`8$=mmUO{>n9_!jYA(I7e+cRxys(Q^Vu zt#N`JXg?0;aw$!=QJ007bHIG7m*V>&3DQ+~7Y zRjpxXFm)h<95hfBVsV~^=xZ^3;;I}yxJ|CGwswSevxiEt3&_`z4c#YI$c$I8up`uRL2Xu)y+<0)(B-5Z&9v=Z@N zwZFc{C~VjrEk+myKvB_KKZZP9-M505AR{v$SYtSK1J~&q%2bnc=xdhqD&J zutk3j!vOFm^}+776g7A4@n~2Bddro5y(M5Nxn%urQ}VaVc$Fa4-4S!eeg8Lk$p&-> z*XqjmEn!#GKhhuTRNzb{tYfaAb?YNQ$S|_@rX3hO@a~}*<8luQrna#qV%>jHl1OJa z6k=Pi(31vRNZTTD51GCP?qco$iv=(5@tf2c%VK!!R%9G(PAmDv z;oGw}idh6|_JH@{pC6Dt56Q@%6>7)|rkhe1>d;Htv|$eX?*q zHyGR94rhA*e=y~24tTH4rulG@`0-{A26{6@?`N3aaA!A7mKv9cXZfyTT&P7plyR{_ z!aHe@XovJ><=wIf{AzE2k!1rN!eDKNfgA5MzN&XBE$TN)B5b1uBTS9G@ER; zc9%uK#>MdPh;OL21~A5l7wtp(y-J z>~~WoZWa6sn!u3Q*6QA6KBw}&Tv`7js-sL3uXTDXUfJO*W>@7|q=m10mkS=^CIv-so3?qye zxsDl(3@|7wZn2W2m8O3bCisGC1`rx*8U}N~^SQwT5TBn@ZtZ{u0N#zP&uW*l%5Fl3 zsIQ1Du8VEob;^Lf5`$%RjN`)JQh(p%mW51u&)rGTZNRgN>HMgO5m|*@erQKH^ER>r8S= zl_I(EO@q`SA=T<9-yFeAJV%+;*56UX&_zyBJ+(FO2f%bJE9DdbTA;n0A2qS;T*c|v z8Qlc2tNekfDVYWTp9LW6Z*6SM2K6K#ZQ@a;Qx#|sO1d!uDT&ccIV(XlgI?<~f4>4R z=d9%>9r*)3x@tv3V)0+!%s&-n3HoB_ZK8N^`bUe&p2%8!ZD2RiZQ_@ulMo*5-7UsN zyQtU3eecLlx{VRV+tgm*D{BnYf6j;JPWlA9@9*VatK>cd#-r`fin0*jgElvRA1gG= z7GrJea0hlxvw>UZ{vNdfW*16Y1Zr=Kys*MEI5Vd2et)LY&PPb|xlt>-=rE($vuSG9 zLHHUAhCjhh0m3D$0mB{Fa)8`ZTUE7~MHeSb8^IsYxe`6yR;U!q<7WHtF%y6AJ!C6z zm@3b^pI2fnZS3*u=f4xB#2j0RVzH*eIrJ}3e0i0?fziLAfLr_}!$!8uud_;WsUGI8 zN*tj&1yzHcV7rrg7_KqOTgnHU=N?ltl3d@ue~Gs5vAyk3Tdw_RUL_zTv=DJe)f%k( zO-E@{p>Ukl$iFa)skoGpf70wbUO*Z2b^W$u&HB{-=HB-*W~c9j4fD54BoO=ho)ZgB zQ<8!J%zBoV0<8@i=UE3KOvZd{A|Pf-x+vxoeiba4Tnj`$Nj^@~hwZeu6Z?s_%HqeU z_&Jm%=CcoGKhrhdpC%dSKMiu{{q9<%)$=wN*!)SQ>4E}qScmRYjZ}1vH@Et$ zMsiAqRi?8Uslq(zDc@?%QFR|dj5XTUz+#?);r&)WI2pLrVlo&y9|TN(Q9l~UZxL*v z=tE6X&j`{iQc+OTKR6Vx4(Q-+L{r7W==H?Nn2S0)Tb-{eicfh~dv3B!d$IR8*2?bq z$!!SFWz2WVZkFX2%@GMQRGXN}5)OWxYcMoCUY-RXLT(uGGH$FmFxvkU>f-1V{Al)h zQJrBowq+-8nhN0=)Hv{jviNw7Zy(#=cE_474?K#zZ+z65Bx>=>)>_S(nev(PpqXX@ zH#RSom)H&d(c$q&slkJ>K6}^8#_OetjNEM0sMumeNYJVC@ zJOyTzk;2lmCoYp(iq@6-hY%W6$)a61JpBz_;j#tN%;BDz%d8DS_@ib~U|$<^8o{0o zTYFipqc_rv$o?#-S5W#oF`lJdjP;;el|!4mTL{|)<*DWM{CG#Z&nu_*PtdQ2oYeVx z&iX^3irwibz~UkY(&zV(tQH>AY2W*zwoztf8Ucl)uI6zCL7*ylV)~Q4Tqc`?A~jhg zP4xijuoN}+G=(QpKx72A2Z|J9&NK;NII6s2Cf>y)brEhkUAiIZ8ng?0cK*_F7S_wP7 zf}1IIkbJVak)-iyNGy2PvM2n}mCQgwnkiF=@L`>UaFbKV#I#qXBdxZBAjD)S-qiyv zF4I2IZWydd?+EfA86y1@b&59b73|88*{A!T2!kI)>kvE$&9`bF9BO}nv4d{F49eX8 zhXqnv=OF4*7&u6Q_#ch~hK7(y= z^P*Dv7&1fv+7z|be>>3Y6%CL++P>dR?2)}M0PP_Z&>Xj-l^<Tx#qs*BIHFfp`Gn%dcsr90^e(Fxm_}*OopO8hu8a9}h0}!a01fL1t^SV^Q ztKjSwIudjrHca|QK~bTs`1%hJ0+N2}A=9(F@U>^>{;NU%bJ1lPCHGVZRG#Z}$fVQ} zP7x|5`v6Q<9~IYLxBw4r=nrO=$aCN}+G9%C5G@z9-mXo(sa7;0l_ObLnZP(ebcL8c zCh(*W;&~ns1XT?pc4DETRf%V*xCKjtSz)YlKQxfB9AFSPGEYH;T>%5`KY=n7JHudK zg7D>jwQX5diq=%NH0U|#LvtgfX+yJJ@2)$o<{3{Ml_%k+zHCSW+;Uy|eV&x;kZyb5 z$~mOOydE-*H;8dpi%!ibk9LrzHqP@bieTIC=U(K@Jx)Y5`9LtV{Pv`)#26Ny zI85O`FFsFq$T{FQ^B@}$5d;M{VcEep;U7NKe@(%q;)Me6C`rrE(!_rt30`gq%u4X# zsQi7@bt;)uMdZeP(SQUEs@;=sgv$+ak(3m|*1=JJ0)>SWO@%p)3WrPh+9l2z>cCz> z53N?C*^+Iz1q9P3w$KM#LlxUj!D~Qa3-WqQ7RwA@s&_E5yiC4?36zTX;>Cd%=u6nn z1Z!2*ou#%Z=2-!mQwn>#v=vPs#UI=b(m(l2L4@Lc(hId5C{hRTgW9jhQH?O9@^m_8 z+zsAwOY%qRN)nbedd7=mxO#)<@ul)t*2GB|cK$6xU{q-R8SIy{Br2n6R&GPuY(}5H zo8F3*cB@=ir#;^FS^r)rU6hkL^xHY4VBY(HHl_&UT7t@1147@x|8(#vFrr(U0a>p_4ZXKWqJvSy5+p_8;jqdM##F5zklJEwWNx=)(z)(Ncxggv1qK z$lp_0)d0O~S!MP+1Ri^7!Xp?xhX>F&ZI$!X=qtu3G~|#L%jW0jU#QfP&j8Az8gx!Q zaFU&&wiGk;<vy3!B4Uo>qX|duB1n*6mBTt2SEzxKQoqI_eFxE6QJ9kG(c5gA`uAJ=9sCaoGTeF4 z8j)^c9mB8XO&3gl`Q;%Kzxwim-` zeJh2p-e<)X^C}`@Zv~PonTD~Z7D#(x{m5?5Pu+N_w>Erb$mqOy|Y4UHy+I_rI#bH8s71qB%eSPP;|MCk3*0DJGz)SorKv z_a_wa^_egZ&i5;uO$zJdO;}t*g~Nx+>N(C5g2q6kzPh)i+(t;=I^uc~B<;maSEzg` z5RVmdj`YU4(O&Z{NCbqj9yiV`@d*wy@|4O0XB=ERait(ea3qbK3%it!5)vfPEw_7X zYiprZ+FPq+AnG8~){*B>NAu&s6+K5piMv9!U&JA?XpFy1Y|P}k5^7I^r~LMhb5285 z+lXGb=fX#I6k!324+J6(ZpK3Kg>}MmPV-V>z`smQvB6u~K18xp%HDDJTIx+PXwd09a!kuJ1N!DWvDj=8~2V$UvGpmA*Zyvx8e~#Bw z|GNMO4zTqgidr6uZUkh6V=S&&Ra=~MPb=;_$9`TPrM$ek9nUb>_d9+SVK?w|V>BN=~b?V_8&k zzPz5WB&dPV=r5%>xC&~a;{h$pXrw(DAqwj0Z&Wc3WV&@+EWJdmxI?uU<+MY97nmxG zwVFy=2Qt=BVq_c{;`I%;3W2%}3fJoPJy?g2DMkK z!|ZK*GJFC8cPiZO92U*#O5TYEf{2_ju2bVBSZEr6#cqy;_}%vdr|+ehsIs9=cJfX> zpShY=Ajwxh->Y?*S+QDUowlCs9(EMBOKpUZ&~N#_;jxg4;h}12avy#9KW=yP$Kgxg zxon4v>1Jx`ZY}Zty!+^zzFcbZKflE1-jJqPcbXisV?tAnr2ocHSD8>{hGjNm<7YSFBJ?Ob>3M4yTLf;MHqBSh>n3+z1O8>#~WG}yuham zG)R<{q^RRkBl_^-QiET%IWzUWB@Kt9bkaX)T4t0OXC3R*w-LoPyWU2&Fj30yp!e?4GuiLXVAdb zEsRo5aGSU1*Dz0%;xQk!!UTEk$w}DQT2_y=;lh;PJz?n)LlB@bkKBYd_fIrR>aeG# zbmOE6GV&8K&3zbc=vRB`Hg-aTG)T}mD8u^Jw)bWUP@|4ELpJs&7Lk4Z2wHE${p zj_zQ-v~>Bg0SvFmh38pIn?BmQ3&z?;^(tNA$F_IxX=!Y=PQhoX|Hd8D>0?{{b8G<4 zZ+sh2ud^#snP>-5UoHRDGb?f|4hMh}AV)0t=D;!++mPV-je;EEx9v$ZH=P>p^CE6O z!ylzB7Y4_i!notIC^XwBqyC2>m|gY|waw#@sZ=N#@E)jRXNODg(Jj#cve@;*<}d(D z$lxV1XQw;Sw%gay*Ta|F*S^00f{gU*y34)a@Gr+zW9rj7zfT7^k2h|CgL`ICpYB_< z&m`wsrY1%Xg@_4+#0LCj_uG~r>U$5n%rPgOYzo;pnM<73XpZJY#EHiyyzY|2#};w<>J^@Q6)qlQ~4)H@P$fXpg!P z>DVR1`}wsd@x4r-;h=|PaP!!_meR0KK_Gr)*pM#F&4RH2>0~}J7~HT|qjOV0LiVOa z0$dvKA1w*IQU&M6&VRlfJLu9aAz1B(;U(#Qo7X+&_mb~&s=2armxGb8uA^_h7wJWE{ktu?Ka%!XUKbWQm}ufI?$}gitmg!0n;TC&Pmj+KLnR5!P##G# zhOW+7xdxrkbwaM!tYA!{F2@&)~^;CW1u+W(tGh|Xr z_DgvCEGMBiD^L?Y70O_@*os`^!@qt`3G2jdQU=q*35BQHES(H{!Dv^pkOq7E?^Wpp z$0v!RQ-0+GH$^%!N4a7L?^?F8ZB1PZ7lOR=nby!-Hw%e~-Odw%=W;rub96Ix zGfoTRWlGA@OwM#K&i4g1ktS;VA|V4?A-?fdn$681Te|bN&SNx4VSj^~DM>g^PG7D< z!xBJa)lWC(VNwy@4DaRl2hzpgUfq1>(&LcOsjKIjt?%@u_UMyldn4&&$_ijrgHrrZ zcPT3Y!?I|A&{E6PMYT2O|5fs~;s0K}-d?8FR>Oiee*b5lcr&Jbc>)u;NC(#u?@|i# zU@PB=4%wGPbAopb+6_09L++Ty_9q9?f>Y-dSYo)t8cR1)@2{f(h7N4vt%0o=w^S&U zTZEVSz)_Y(3S%ah?w+0^U70;maW@vO`EWaLEzfA-bnlDzh-2?>MFcx27RA#F>Ik>j zLquKQ=+|Fg%)*n6&;wPw|-=@Dt1o(7~1Z!+c`{--CjI?2Y#;UwtDPK3~m&@SFrl653c!X6e+>y|4PygJ5-!wpc}?=QK-w& z{H>j=9Nv+H^CB4diX@Z{wrO~R37zVeLZ_bJXL-YWDM<_=h5=y=xrDNoaaGN z3g()d1%d4z6i{-9)B|<1X&@6^=ey#9b66%#OP%s3gYG^m7H%egzdjW^E@^hT5w}7U zZiv|_I-i-1In@zBaP&`kBSD<+Qr$$3taR4_sGZ7&VXdaaz)z6 zkt1Yk_>NlX{`U7wLwYIKm=~gI@1X0Hb?PN%xqcZ?y%dPw7|(Mg z?!mj}lbQtwqZ1Ig9ffA_zD;!=lg!G^#`jq9-i50 zm=z==;sPcVBq3KS5%Kj+anSDh-Ku8N0Y0xEW=}%5_-U7Z+{L~)+^yO!M6>xuVHhOj z11$^H1GHX+1F0BZF8uEAFHz*~4{XueO++b4O&dL$kK`AwtVK)^;Y?apaQm=ApBHy2JYg*QDbNP0XC*1 z&{Wyu|N`A4q=?vWYjVT26ZB8jo`A3(8D!t>@s?7UNG*^GzR2hpZv$LxW+dS_CV zkC%fEJe=h-PXEHiW0+sLgL1pGrZVpuJbxw$*Dd^F1(Oy2%v(MtK^SeTtb(q)=0vah z)yHB1VFPF3`PDn%V(Tb;s3__uOK#9Db5_$lQwUJY1UH57sDZ)S zW=jE%SE;K@YvfM`PE2Z!3c>{AchfDxp#`m?aVy?%f}Cit?Cy8-^q*Lm2h;DX2VLdT z^a>3c13kq5>rX3{96v021hi;WNsg-5?qVx|rcfq5uxISDn zrdx~W_1l$Tw`AgeoyuwJ#OZ3Ru2(dH_=PM+^r+EaO-_U2k_a-Z`Y>pCe*N22PC^Eq zWX|0V`Cvd3tJVaSL8!rh*aq)!ke~O*7R(TjQr4M|nZJMaTm_^YMX&HQV0^qN4_DSU zAvjReyWIB%nV(LPy%GNu80pV8zQN{}>g^@y0^fVo{d5{k;nT^8A^sZ$6SBBDh_ zqVAMvkRFxFLJ~UJR{f*w%!>N;)%8nub`G|IV=o&{f`;>9zftuNg1h$Hp;~FM5LH76 z1D@Ql6GpdkoQ-6|VVrG=4F`)e*x0Y72c>V-P-mP)~#tC z7YJf4VK!`1eQossPu;Dck>7DWOV8kcoM5JV(A*E5W91C$T6f@^F*mu~*7pvYW4+tH zRqkHxHWFz5tQ#UZOfSPeT2aZh2ap?k5Y;Ncq1b{p1GISgE%HRDQEa^^nudPtnrlEnW zrl1(?nGT;x4ymp)Do=(rBxAMv3%_#3T$=|6WRl;H)$EwqRAn8+5tPS*mb!I2iCWdQ z=ZU9`QThXw9Hu`@bj0WagZt5@geMjlgK>X#F7SLi#5I0b_D?KVBxflF(F2O#_mrPw zfn)>AcGPV*pVzAl>&MpyfcMbl7tgn#)+Ozyjt}iRwO1XLbt4`=>=*)kpcTr%^b<8o zo|LW?s>^eMzkOCd(&*Bdj;aji?nx;pzZD6V-{2kW`sbRa_WEz{CBq14Z*fy%rAHJ- z@?~}b!qfcmqkR;q;ny@k6?uXmNLIqk=*?)BGz1waU#yP|VRfa~vZ(@2rF3U(?}yJ+ ze5odI!>&A_rio)^G`N41b zG(g`pjG^1MQ%cLUq2Ded#40_bK8ZP_ae|d)COUII;`X{LFW?bj1lNqiesr;t8)5O1 zBQw!F=#LKj0vZ_W1}z(&gE(!6t_P%vjCi^C6At}`0*?~R8;n&#D3D|&k!#T1E6`QX z#}&CO_KT&?baPbt_q(*lv~2J9v{kxP&P*6}y?@B@Xq`LxzFY?hWE-`4uB>-P;UAlq zmf#ir3%Q99{L-Knxv#|&~%aZV>C?HdkoU@^&pQ= z+Im#OW)a&95S-jS-6TAy-%Z9~h-Gv(F)42PBfiVg0vpok)8QdW2CHLHF?GgI7@=yD zOu*EQ(QITpMK0#S-nU}f4a36E^!SxKdNOT|*hTzhncz`?tb*=*3I7SijZ=89P}IXu@!GS!s#HX$Uy_%SjrhW4bb!;BZT*nI2mpJN@7f-g36p z`?an9oGLjlGB8J#P@!8Y1I%>yf&~j&bMMFPcP|H5N%D3;D)Am2rq454b7 z%ePB|FR1ieXrn*3A)_K}Q<jNeS zvwkOH<=Ac=j)g*+zBt}om`Dy;^FbFZ+%h0Y#q>>J0oW1xXju80*bD=Z2gO!iZi~JG z#S`li_*1s!d{>axxR1FtNCa-Fxm?{%;OR@yA7yVv%nFG@t}`cYV`VN%A_y^j>Xq#U zEH)bUqff?qhZy{xE?a0#_!*RX(caCTYf9ojr@jro@8sA|Ex|L1M$}9LfzA@M_*hJa zIpT0RaPsG`6bJ=NA}TDSUey5;{7p*E1W{Sj@|dcy1k}|R3s{o}T`p_gw$|8v#~=Z^ zEOk7Wb*^|k8XuSOKKp354JoMXBxvdZaL9jdXRnroT4wTL^^ypNiE9TU>cM@R$>dTC zkE{~Ig}<{*6zdI_wQq-H16jPHncm)wOL4!B%Iu;bmR-&V-^&PDq2q8$=qoxI5BUwe zlb21#j;>It?nnlVWiT~)bGM2_@wc&ZYj>#{q^Rah`iVu8CzuAkkj z7|gvKk6>B{a7ufZVcfi(h2&s${2~!d*HGDJQWwfJT2x(L_X9NAO{~vPHkRd{udlW* zHyo38P%8@N)I?zR6pYoD85KV>VI!v@MJ9{x?0sBjvM#NTE7n1+m&d5l>`h4nJ41-m zP!*0$?4!WrL0G)qy_ja%*M7itGdmb&HWX{{RbZ@@!ktkg8?Vh!uUls=wvYup9TYd( zsHQD6+%wa-7_OQG252M$;|~q|2*H6h>1InA>!N;ssoz3!ryVFe1E+!KZG~{V=r;mT zQt42l6m|=VkhZt0gIs{XU%je|S3Dl!*lUY;#ofwbR9ZOG{aET>?hWour~+lG=dCi} znfe2=y%QTDtDb3Sa1sR(#;Epqx(f!;-4kY@iAmwt)FwVI?r-0Db%_MDA6XHeUS1Ul zi<~w@ud?cCu>L{p{a(n4NF;nwql7b(ut%bb{K~t!h+$bmnA^k8!eQn_4X2@@hqFBNgz$0j3*2n0{%r!K#w*oJ4pul5E%4h1SE~A_umQZj%zt5x-AQxH${tvZbH!vs ziVf{|3)Bnd0q|R1yDPtc&06cvdzC)v1P`L6E6#^=MgKos_NE5MZjC|1!QLon z{8Qo++VBIicW?Pw%+<@|;1;OIkA@^2zPZ?}RXdbT_=XsrftqUEFYb7YB?@X_N1hS7 z8>@VFxOCE#@786IxpAV=TAz1*WKrF_jDE3MC`3vo(m%T-AJI@l3AK5~zR6k)+E8rI zc=Q>mqJ>|EKr%gkQj0l9+U`b3;A$;Fy?&6tex@Gr26gkY>kV;fK#OixJAs;8S;ngY5Ts?(?)x(1bz2i@L5F~s9>9(6cGo000JMg9!G{U0)4?eVgobqNKIT7TQz zU<+&2ls@=5+CDzIC|3g_LAj=hrw*h2P*U{K=m2P>Y6e7-O%11`DDzz)f4Ul|pjsdNDrl!~x=aggi zNUz+x=)IL{tIS!mHkszlI@WjJe_*r>Y#5C0Wb7UF>T1*PVQ7HWR>RtPMtTB`#L;6Y zirrmisU@E25?+H;{vQKQfY8j4fn7~s?4*jex|Wl{euwwHgLLAmIZb-mO?Gv@U0t~# zWN(FN+T)V`t^XflD}u7`w9ZFwvn;!{ZG&pKa1@R|)c@w+SzFsUB4>&AMoA2C5P~`5 zaiFRHBEgok0Ql`{=7WXfpG1#EI+dL?@8ZyE^IrCb0 ze_4IK5aD@62gTK*c-;?#gRMm*XiFqE2+Og%HdcZYm;O0Vt5^C$CP5=;x&q;re`_Hx zAKhA)fKuHPMF-?OLGzp%+s8`zoEMoF2Q*uj`5qei_K3fIFowbFgDFN;6IB4CiNBxB zTeGA5Cs|E9BvklfDrwR^$)!xCCxpUxRyw-(EBsr+wiiQPyz@2aRS0Wbo%e?^Rj3yN zTe|jYy5HJNi)#k9+gO7bG1f-MyGXeiS}|^T2D&i`!}DEl9nz}LY={j=y^HbF@_N#? z^7YVW;E^$r--j^o?62ZozIeN_X*FRhbG*zv8eJQv-L#*pXEIplT&B-ExLhjaSUs+f z53DsW+V-lK5a-Pp&(gGivWgI4evzILy-N_i#Dbt#+G>LGzCOd5q`J*Pmo!Jy$axkM zoQ|2P72yB){LNMGzD+EzBzd&Oqcgq5*iEAhXtN3owZVl1Y(bX6zwNminc?Q%*vLR2 z6MaA#-04v8m#`!537i^yHn1WGLagrc?kaPuN9|gSMaXDmHNrd>jwRu~qSX+4@$Ew@ zrq&}<)gwTguHc{4b#L^FyZUgvcPbcq;4FCm0E@RsDSMV+Igw920~=;G7oEp%zFiGK zXo+WHHZJqKix8~2M^2j=bdw3tJEifm5?jD%qSAmw+glA1=+hs&v`3p32fUMR0L4kl9}3aa~d7D z&Xe#ugPD3&R=~f8D_`guvH(=sI51>b+m1pxVV2>(g}KWz@$INJvK0p>rG_T&n)#OT z!?v;m8Qa*MX+>_WypzdRq&2;g@QXc=e2r;iDz=C>xx=;4m`;eG8h`WAUzoY2L4{1l zJeQ?KS{){6xVkx2ZQ2hSTvRYe4GZt*1^hVVXb&Y#Dio7|wq^{pj5{VJS!}M>H#+E>*X{^mOgqniiQgu zmIy-|FoiXsWSJg>R7*yZpHS4fHWa3nhP+nj7voqIJ!(;Hz&)wZhuf^)cq0V08HLl8 zm+-gLzA|qXQis#|6@<%P2)l#2eY~e$t(A30OB47kyGk~)WUce4RH#dt z(Ck34$Kq!|cG=jdYdpVE)u=G=wEL#kCuuJ7**CEIR@99O8j?&Eq1FHuI@kGYiXTS5 zl75x%2AMY@Ps-Bwoi;v4g=LLm;wj?r50>q1r?6ghIa!?`gpMQhnNB%!wln|lAd@~H7W4v={QtTwdOCy?~qvHl7Qi-R};2b zL$OL{s68IgT-pc4RTB5!M+~m?-Dj+;9~*cR>0{9Zu%B$21Xu0MObJevhb<}=)qIof zi~28k*Jn(+!xiBrf>HCc9%>y@(SZ%j-=VwT1Cz3sIk036$QI58_v-(kb2;tTgw;~R za}D&UBXq0C?UC_KVI>?5K_t0~_~3W>O`fcnzGm9Lu6?98VQg2>4EQAi6V2GZ#f}Wz z$l?rBB-$m*L2qll8yW~%P}23@XJ3mCg|dYA@QvX33@{;Qnm6G__bg2>MZMx-O+$)~ zdtA2Y=SVpUETorPy(8N%Y7_xDrTp2qi|%72Px z6Kq@YvC!PL26krTKqgoQf^9w^YD-%^H+|*d=MUmq$CB80C(O34|5=$fp%&a$zp{n- zNk7y>_m41!51$D9cze{+47fp`Sltl>b93Y0V^@BLB{fx)8HeXM+U&Y|@SlIUd76P< z7>%SzrC%9>lsnrxX-0UjB>bf*bMZ~O)W7X!K2j(d6M~Lr-i|o*_)J% z=tw(QW!9d2c#5vvHpcjff5uj%T->mzRPn+dny3Y$3Eix=1P<{oFh4M?ef=})Za0NiJu+!jrfsyF{Vi4SsL_l5lH^=2-*n;JTjc+F$6>4{VCt`*-PTE zMIq1WTMGY3o=G#FRg$5ofns2CCsc(x;0Hv+ZeBrI$}RTTtqFY9cww(@QT!~pPJlqY zQ@Ng(FM=#PY~cn{oufko4AJ`hvSF=xzGhr6fpYXW0Z?Kg;2~#cgtLvjPI9BA5H(+-A1N&O~{w* zn>Q9_O*#Mp-(oyM`2uG24s(Q72U20#-db0BzS}@|b8(S9z|5m*JX&V-z0h)OU|}ZH z^3=X?MSc@Q(LyXqdupEGq_3%SyN?g|ZgUqhJwyZy(o`zsXfO~vjMh=U=TU;W;V=pT z%GcMm__bxe!~M2)b(T|Zhqz;O5hIU6;eUb|Ky4s}pJF@>!FUJresASJ%69f`=b2NK zPq-K##aMr!-}P6C_Sxrl{juWg4xE!9y0mw|~ zjxh9@l}p6saa=aoF%Vr}@qC>Y7dfn=ciTW~yZSn2lX+h=<8O4nCA=3LiIeo=c;8Po zj?%5_lRnm*TQCgRAcD2dpR4C9ahE=XXlw;=vpx4KDG1miz0l^kfQQ25 z?Kq4Q*QS@tSgbL4b8N9g!UW*b-WWs2=Hnb~*0l9z(}QO;wg=KGtk~f2IVs{@^BL+N z9v@o+4ktTi`W;&J)%x=OXuyU1l$;890ZIs>gv1$F34ySy8L;`TMR|F4;R^YyHa``O zVn}wnggIPKyHIav={o6nokJ zmKboW@SZ*nol?V&Mf-i+1605mUrL!*pO2OhkT0$d?M10!@W0Oe|;!Zm*XbN+gFvxVtz0hCuP|8i3dX^xjpDF)3 z{r?U;rgLAk(yg@iZ-w5RiXRVWTcX)p&vZNWDMIPuOq?;S9UkxvZ45CDprV-ukLAi_ z{{3XdlpyKRXAdcaO zd(`AHZJuk81M#-h(Pa4Vi|*3m#lNu^!$%GDC8R~MQu0MhTO|gY?h=x6`Z|k) z2j$Hw7#o2^s$gTnPa2Ez^9ZEaOc?hi6|+h;R}OdcS@!~TXG@LZLzK#HKBPDI$CR$O z!;6xfkF|62Pa{tDssR1Pz@Ixz$Z_k>FU*uxjEW$9-}U*3k-l45L~QF|*>m{lCxuvN*0t{aUF0-!O?-_Rq^pMv z_^)K&UBK{#=#WLA;q*R^Vc;`VZ6O`wl8ZPL3@j%mvX8!|Km!>y=Z z1{Kk6^Tn4^9@70+CIaW>lxLT7tGV=f^Vc6ZPvTWu)lz z0(MKx>DS?ErrGBeiqF4zsj*3}bz`|kDg!s|5cWTDJC{6vvL%z_QpahtsPkXL= zVAQRC#S3-Pg6{rRbF_%vT|(eI)Xu)@AhqVDb`-(`4l>y=X2CTofkyk^PnNUg9?Xuj zlzQ{v{f-Yd)qpd$C#hj6ncSFQmKB48*pWTK zF<{wpJto&_xlbGPlg%o?#&gEp%nmmStTM=kMVLV>A3!p=wP~qzSBvCds?^8n6EP|= zZ#Ok`km-!GrL~koPb|HJGE}p(aW&HQo>%!~5)Dcx{lIdaH11np*Sgg0@LKNhxR>_2 z1A)}Jh4Z~<1IH@@2}kk=5%EB{5Sj^hmlS~)XP*dL*WEmQ$QkEl;z^UGEt%{$PQow3 z$X+}zj%1Fk#dBJN#Huo`Z@gABHfexqH9>ZAEUue3!h9et-C=h*)u@Tt#sMu4eKM7+ zq(nzOe{|I?9Z%~F&t<-X4FQJPX1vffn+n{P5`X_OfvgnnW_w9JhLr&=}NSQ!+FpYGkdUHTG=2f9d6A2winV(2UjV@cE zR3;H%`m*#(Pf{VWTqd5B#S;p`RJgbQAgsDgZv4Ey)xxXpmP410`YTIF&0XbiFgvsp zWh_a5aguouCkqOTquH%e@|WmyDXlTD&~GhvuliWzw{?_j&vb~bC0U7h@M*e}joFDq z$lAx0NKV8NC`Th&Z-}kr)X)-amEn-}cJ8ka(vSfro>iua9=|gk!Son=c*b@+heN;8{8T$lFoeTP%{;3vR-L`-5g6~Z04-?PAc?5 zYtP`Hc`Trgxx%iHq+V%<^_r-==flH_9E-_arzcLXjU4UsOf>dsd*P0Xc}#&!Z{oPA z!rFE>KN?wYg1`ueS(hSlWxr9EM8z7kuP?x8RaPY#I@1TQRDQQ^pfw~<2*u$JaL%Yq zX&`=ldMf1M=KA4Q{7Vw!e36tfiY6saTWto+Zi7}tWXK^l`4M$Y_chVqb6~O&N9V5R z>Fn7b0taQ-z2dc^+V@_JQC!hyqTH)uN(8btOnB`nk%Iht2(x0N^K?%v4uqE1vB)Gc zO>!kqqi(W)3gaD}D=KAZjIrv{qY70rR}y)S7B<7*^xFl;?qu@Jkg?mp@B1QweA{Py z5lI6_x>&y;eZ)zI3iL5=Fu(gW_p1w!GQjg%!z(=AF88Zx-;2&GI0yYcflVrGfo;%< zhKAJJc+X^6XOJ-fa3EdyJ6jk&Pgq=F^QXfs>E@&yUM>-`B-1=dRD|4H}1< zQsb@@TH*};7K}A0pb5bau{|d70=z3p{lFZjU+mD!I01OqxtQ;-oZhCU)vw!-QSip8 zMOsCb`fF%h=BBLQrmkVU_U`3qoaN=@=NEo^0}o;$(ypW>?rIXOy!5))6Z#xQ7h7tX zE_Hg4^;WpB7)X4J(ZC@;j&vUCr(Qj`u5|b*yQ-})rv6m9??^f`%m7(Q9smm$>9E8` zU>kO%qHtiYLD0WTzm*)geQ~rsl9QPCXAenJFHs_{B=lcboggS{O9A=DdDrfpb|v3K z1i9OD&+3h4dIZ$;Sm}38$Vn%qWL)HY9o1LHyq3y&s?3PC zmWF~Gvv^08(cey`b;evQvk5iC0o#Le=KQy6S}6Ivjg1#k4T&y;GtBhavQR9XN?gs=UP!Ka8mr5!22>o9aSmYZfZ1`i7^vcpHS87}1%cnbuWeeIVZ|zzFt<)^ z-@wv$6)$&MwHNF=hFA}68ITOsRxV48I;bb34vDJjRtOXYT99Umf($@vS5$br z*yS41v--rvC0~OXhdK?Dw)d;FfJWrD4dt}EjFVWw^{1)F)PN`iLdB%66PE%n%$|VK zf$H`Qr1?kflH8#QjatEShwZknO(HUnB(-0$@RDOT8%hTK<5C6;x%sixt+YrMR&EvR zdF@%h&OD9u z8B`PoX~~`-{UTVWe6}*`!;D~>Q4a;Cr{T(&j3jy*aU(BaFIP!pHL6AKuo@0+E2=}Z zYMu`_R^7n2+&@q2>`6b)Z5x#VEVwIj`v_Z636YBhYWkhyw|_2AJL6M@7v=M7yB&U^+K!j)c%vL z1(P6o70&mK<^_r$EdDA1Q=6p^Gp08 z9_JtL!hzr|D`IFk!T(3gi~LX7a$PbeN^Co!n}(*~9+!_}o(wm30GYm*CZ-wd0`2Y_ z*5`-z;CvRav?%8F*O~R1ota%b|AO|_A8dW)%Ew5X;^#hRx+9ItkGp~m&xZ#ma==#A zBjtor>HR^^@J%Mxg$K8_%P^wvkrP@O__?iLXF^``i;D|$?6x8Gd-wbtj1}>2&4x0C z?8V4Sd2x^|w?U9MYERm}Qx2)MHH-0`FgxbSFJB1|o{5@6Sn( zoXYodmB+)wwLrc0qtYx%*6PtcZ=MiS&sbqk>?l*Em3uacib{3kU?heKvgi6n)clTu zzXJ2G-|3E&_)W<*dsNF^!y9{Fh)QP#*3DbnvXSc`+D#(8IPc-RKG#3}$%W>uBfbw`*=(E-hz{QB0fkd_Qou)$ z?mifkH5b+Yfg1X#l!Bp24kew?!SL(y*R9JS-yU}+*xdiw z`j%@CDLAZh+BeQG&Yrw3oK=9boh<-4$|qI8-leu>5Hzzxoy>U@8URk{n(vRRCT1T} zmIoue390V0Aomy){#oeX0* zpK%wVSPos=qy?|pkLifC(2lsik5Z~NFdTDDBmu58j`=AL{e{FUD;mUhXz^$Xr}=p~ z&maUL{1#rC?-xcDLYmGo60EPg82WCyZdkk$X1rtbB9lahtiDSS<7*z4%P){FJLJZ@;){P z*6=#r>`j}a#jGruOh*09Z0Onzwj+TmJVh&Wkikz=~Im;USeP>A|h2Qan^9-{6*fbh{t4&S#ctFzxPe4gIOZ)*G=v_j!i zpYmLI8#wE-Q@4|4feBccD+c(p#EO5!dDReyBx-NC4ynzQ<`=4}ZxJNWtT##ob1$_E zmqdI|Z)FPiSW|{Epdj`mXF!(4 zOdwh4kb_U5iYDWq`MxPq;GHi_9ZJ|Zu=78?kz`;JIfvrx<1~AFQF685MziW-*~}Pm zq4;h=1u7fCbjcgak|-RUZ}0lu<6{a*8I#IudyKVTo+#_{^iOBNUFdlUH;7E1Q8QKq^|nTq)?Uqeo@4+}-Pd8>MVD7F0O zrUrxWqbS6&7-fqn0~gmyx0x2spH_5Y`WBPYX4UY@&XaK|5nCbo1)B&3fXf_zB!0w* zH2fN?o2gw615)Ly*%6cd(8&tpjGS>F&qCSi?hk8~u|~Iw_IX%w%r4Ph6k$VMAy+sJ zD&0>9rUBCG9lr707@}{@vaonJxaRxkkXXAWy52m~uraDVC*Y22f|lbtn+x|fEQhKj-5^oN zzCTLS*tOj^;s=dI87YZR6uM`Px%y|YiYBCDkpgwSvl@(*@ir2zZ7e4cxvtWr772Qb zk@r?b7V=WTNi8*|dpeaejLAy1#*{#j=T-ZI5^=fHq1x+&yh;s)5g&D4E$4v zY%+M_+%=|Y+7A4+R;`dggn9C=P|#4kH#FrT z1u>GUn#2pFxLRiSzADzpFmi57`-0Vt_C2t8aoqH5WRC`^bk@o5uF``@^L;}_ zna1-I;9BcP&JN8-1{abDd-E;yuL~GDxXO))S?(ngdMLQEPAI5#t+)YBH{;YnU`nKR zish<@bu93rUVsITR_8b43?1w0vy^Yn3IL(FML(4ah~(_l&fLM+Lr#b;lx8C?MJ11- zB$LWBUkx{l1?YQG+=P*GMIW5z#OzH_=J$LEnQvSTkaDugamYVR!dM>ogeWE^BuIhS zm*h$+`uOIPv1TyK)s1Qi?xCJ?V-Y=-pH zjKJ2Dfggh=$_z(MRlmtotl(?XWGvpv+Ep>oJl3bqLrkaE_l3%E?NN|0)zJI*DqRUx ze-GS)lf#4II z!*__QYeJi0`N(u5ij|o!+}DAn#4H1N#Z&Sd*h0nA?4IznMWv&oJ=2A!jb~lnR@a#! z=koMy)wx5x{^ii4kd}I^bt2Tscv?iBH~0EXB6AN8E06xGA?mOR5-eDtdlv-EQIsY6 zT&(8K?*!zr`aemN!*a@Z-|xpw5j{vU{z{ysO6=%YgSym)x8b#un5fsW^Sk@hzIN6r zcGdC{eJltdx|%=pPOB!@fsJcdBsTc1@BQrQhRilg*jp#c^%_E6I_Nz_VZHqUmBSmE zfVtb@>$@~wg0o(Z(Y8J?QMNeaGAYXaoBaPPI(}?S%^wXVWAIP?8mMNs^U<#fGUu$$ zOlq2|mjVModvgSrUFTVi9Zn22lRiJ8wWt5XL}mCpg0($Hoq@IY^{5NLm*K>-dbn=u z>veRXiP|5V^}ss?#nfq2C3cmm|Hm$B%8+gEAAj9srN4^pNRC$U&f|BB?(q*cGMq;^ zC$Mu0#ynUYoYjY6O*41)>2ReiI?rkIqI|~o%E>G1IQPDkkBGBeG##aYQ!?Y!w-%|+ zLKIZygKU{)`g&rgd~1P{T4EcUBN~cnHiEzImD}K4Nt4>4GTB@NvA_*oN4{GI`jAszN;*_a+G>1AU14!AUK%PEBVS_QI^0mM% zQ|#m=6cX%PHa0gzAP_Xq72;=jnLAv+lo?CTh(uyk0cC`;0OY(P4lmHhJ899cV*B9I zbT6DYe;8iJ%|{IfKK(;pCvQQ)Ub{3OBGv*@dtw;rA8)UnE&Oj?#V+xCbF1IZ^CVmw zOW!;4S_#7KgfGV5;+PA0k2%<>W$TG$uF#a0{xpMZ1WZZHhM5=p%-GV+BI3ExHyH5^ zw}HtTH{WTfPM;Zop5lK#2#)p%7E`cJh`mq>ffvCO#Hd1?sek}EPU`2x;7`_rxc)Hg zc&jPG)3m-Uu`10ha&vqqOn{x^oMEx~_|U{= z+WlHu(P|TE9y9;Zs)*mz3zN~w5XIa()Y2u~~id0XA=ksLdv~utn{e1QW(w4x#I2ismhR))%0UyW~3wPd)BF6M>0bo)7l7TAag#awn)lwTs*ikz+`kpT=NUr z>6ck|?-p&@42u?dF9DJrZ`Q!hbEs^vVKYb{4dbE0pD5$`wLydEduNUF9Q8~`)FOu4{}_PYX^fHd#Bq`HvMr+NCTthUz}+c2epWpPx(Gk zvVQ5?erb{*^*DQA*^zSTX5%l5=~xi5oArv#4E~=heX;_$tD{us0ABPq0bll(e|J2- zZM`z;VsJ5CZ#~V5JysYgaI(d@2vO|WR34X;T;G# zK2c-n^|8?VO*%&tbi;^PU((Ya4g}^eudEilIeE|JjD`V2NOMfP-F;#TH(7Hc;^pYrjv$~R^Ml0{!APeh zQ1KnE9GVMQm|Yv2Dt4p3t8U{jZ}pC-G=^@h5YsJgTBNx+Dh@p5!@XRC3G%qXYcmfz z^FM`kpt4g@p6;t?k?W0w;t-(52JvEA?xV0m>m&}k3QocmVD&&i#5U1?3eyGC^YR^EVaf2%SyvoD;mlIcnuog?Ef)7?>a= zt%&+zo2N1SA1hMFo@(~XLSk*{DtNqvJtPIM8`|3zg;d=V$w{wI>xuvy zhW2G)2=12Omtv#Ryl)13)J$(S(KfzMy13HIUi?W~!nqmxYpa)5QD1)ric z^c1wVR(MFq?VNU;JfFL1MERpOXtefQX~)N=>E3n3#zzCps881YBWA0*I584VR0hp= zTFTi(Gq4|JHV#Af&PwGS6j7mJ->_~{$V3$WR&ZDaG3V>k8O@-3eImQ&K5P-4!Y-%F zyaSIgN?{6zaPI3S{5{loTEKT}+5op~lKMHarC?4n=j z3YM8E|A;a=YJcL(`v|{Ad-sW)6o&LZUK>sr5^xxeQczNh6MhyvVhZu1v%D4b0BRB) zccA-=or0ep0QuKHYET$~aH>O69hHXPNT|AZf!o-1$S^rgWwoOs4q%e`$GKGCk11kUSTz113u|ag za65QLN-$gPEYQw9B^R8re)s6Qo)!&0mvV2h$JTU$;9}PMTxqi{AkP*4j%8&-O>j<^#HnkT6(#Z3Y1azNZ$W{a-=6T)UV)T3x zs^BuxlSS#JN|=&EHAOe0Db;ALb9MHGjv;JA&6$?9?#06<+d4nT;9IYWVJb~joU8Uq z=YkLOqm6z|T0q7#-^-g!Fg-?zNEQ@-I{N<;C8p5&B*rIPGe7zs5USBtTkLBbiA$t6YD;^G;>7N`# zSb^`X z5Xa)bbq5NPi#G}qvzys>Q|!&P@1;Z@;Lmxfa7#(iImA)<_@_yB|DR{Hz?=|!o$RK* zUY}Hkzsl&>qyAIq$1rD)yjwxI1@X`Mh8vaQFNNB~=t7EKxcqX6fxd3t+#>(h) zBOUS!nwA^Tpw$OR46`GvkAv%Ny$KhR<+c=7@}pcOJr8Aw4yChy&9Jq=6OehwrJ2?^ ztpc_%5h>r9FAka~2wl@^ZGyfZ!q zq)cK~+=VkH2&IDGsEwEzjWWyK+>*9PeV6vJ7kiBFH-+0ZR6oGKx`kyh$iLqEBaQ)d z9r0WUh%8JLN_V9Ed0O`FoE1hxLN6;TP|Fe30IZrozmGYpu|3nBG6N*<#yO8N55Dkv zD-_hVtEN*VExM1Dy*9=)lo^Z96_1=rstG{}z6r%<2e@fpDu9Y~Xi|FVxuPnNIq4N? zK7aJSUg&+Ce$Ku(ecnG_^oBS(tKDVsIn1e{jHG|>N=nQVb4z3&$x!Eb<*Uh(V#3GW`PTBgvp%U^<~RobJVMf(< z>YAou2*E9ZAc0`P-66mr!Ciw}aCdhJ?gV#t7=pW7(81k(aCdo!T=(;R>->dTGwbZ# zU0q#W%_^88$Pb;fLZR9Ds~l+MnL-0vHdw3v=CF-dRDm?$@ZRby$vZJrs{zZ`6J|_5 z;%VoaM8AXz=93O*gex ze=rA^(m$;8_TK}u0`>ji@T{~g)3}syJ<4<^kp*g7B~$zh##*MJdr=~r0=E9W2r#MY zP%Ew!l{eY~Z#pG#?RtKj>J5o|{)0+_*O*kjmU!mK)I$z;iv zKYKU1*LS9I)biQ+5pV9ll6R%>N7#MV%pTuIHIr~xSlp%sz^348?lR~8VF}Usi-q@& zoY+7zr|H_-!=uRKS%cPAeUyeE$PF_pl9oka(}BCj`f1}NlYb~)KTz6&@AjrZ1-<6_ z01Pfc$>OHHhupd`ilM=_?G%mNiKK!FvW5BB@oe5%LEm0S(JxTDbH*(2FbpunD%e3_ z+|Z|BW*it+BMV2-%D>I04jG3Y3|V?uMC|1*Egmfwbw~|^+_s4VVN8D{ll|wKdz-Lx zFxu@%yx0TrDNR$N z-Gj5$UzME6&V~}`(kPlvr|UcOoUVLlYey42o9E}GwU(^c7Yoig%7w#+;wZd>=6Qro zk@33Pz93sXNBriPgjq3n#~!S>@`LaA-M&d${hzyJaoCr4-its-(RJQ0azcF;U!#Iq zrJ)ZMke6J>Rk*5>Cc01I_zLj-t@a=^Bo>qk#BZDSlslr}<1C>6AfP)OHBz=t3b6j` zuQ^hazL*y^@d*ySVgMI`?mM29yw|T!(R=+LvZa6@H~Vs!+tD1TxAKJ35TXTJ{--)v zVz=$Uj=9}J-c{3x{wu4BISR70tbl0QXZ;@uAGF&*&0dF$XC>IDH;)Rq|3KaPIok(^ z^a;M`H7s1+U}P!}ENh!`7x>hyCix|Aju~LmqGSsA+7%|3=%*}3*f*d=kFN#847yfc z^1Gz}uS38mB6w>id^*XrR=1(U9D{S89IlW`xdN!Gj1uhsCPV!4aP#NU)^RyQh5_P6 zO)ge<019F(NsQ|MVRWQFQxIt^v%>}bE#5gH9pR5-v?YOcqt{{#CpUzPAFQCY%#Z0J z&>zOP`}z;V%#{gdciU!*>i1G3Fnev9#|gt9K{U3h5kp#+o0x$Yae zL@IZMT{xxv5y@*qc@#hjsy!@4@#C_K9#kNrH4A_xe8i0zKVE`zo z7thl(%LBE<7V^H{?sxI4piHTZXCYDe2#_%RhKpV&W#9$=+&UAqBq6yI)Yp@qxWir5 z6+n{A)5>2ROtAvBzzS2D)?KijB}`u5pY$GV#Q=;$%iZJ*${p)a30ZL!2jsyeyg2!J zOZ&|F>B7m5s~>PFug9Ky=>v}w&~=Ew5;( z&y6Xw?(yw`M%r#tE0F^%fnh^!1`P4RQ5hWhJG=S{)P}3|u)I8{jH>3GwPrM)&KP_z zTJXcf_h|9x9?~;XSZZ7Qk+b<=`sVl8MjO&^wmo>>_MVnL+`Ln6)tK^todKHpzZmxq z#mt{9e3{eFlpBy}Qd1O~IfD3Tetru$nZxQA-Kl5~9O78gYu%|(g&}=bd-Vic#p8>0 z5i_g4TwbzTm6X?bb2@=)1HWl%Kr{lE`E1W|DandBkf;aGOmXE-9CK&8j!T zXj$l=TxpnBtsPmtHkuZAmzHL2#6XAAW|l+@4Zl_ML^OW0+iS5PGY4a8$M&}k5N_Rc zB0k#(6JW@p^K9jl-asJwoS~sL8 zRNUxDo+8rU`DP{HX!_AX{AfdU5LFy)CE!EzA3)^K=#2Bs35$gOaPOhDRX z-nRNn=QcLeSko%vn))Ixm|J*=q_s%}>JKJ5Px;ZYd75kmimhOtUS8!x;*51U3U7-b zOiip#MnU#}!7pvDv(c)x?N4pm)yvh=5!?<%lH2FDx(8Ak9fKMIxMN9L9_zf*fk$UB zQr`bmh}LrgBWaWGT6k@|TNlWG(Au)Eu5Mdi4!2o*14$j((D=DJ&KQ#En45lXNbqNm zDL8FevuxdX(G}GdCV+p*66{z&^B?blx!_Ty|HsI?KG*p_{33a!*{ zn|+=Jd=74ma36L~`CY`s9-st3SV(H^sACzz*@>KN;fw^rEOR;}k%!74Tq?Y0e{`X# z?I+E_KMbTmMY<+Rt}d&5u0s_t$AP_fHD)6TOD(bqh0qm*gmV?VyguYyxfuhV;`HmO z-Hd_K?6;zqagE*s*Iml|`u4Uo*gY?P!T7oUz4wkIBBF7vasKQ;P~--mn-tI$=&8^E zzh9AKSLJ`K56SKNl6?^WuzEO^nP3%tbLti4^7ew+s@d2qca{g-=ZQ-CX3H;=y3$_h zxUGphjiFQ3mL&m3cv6nw29G2+cY*iP`YEzxux#9_}oV-PWnRyn%c1(lT?Uns(DAi`}cc z?0)(<5;7$8%UX(PS+||%WYthH>>G(VBHQ z&xfwtnRpr)7Qn^YvKT9=-{IopJ(aymo2c0*@A7)rMP{d@%OrZx<0bIv>!l2tIR2im zRd3T*x4U6i3l{$i2l!&y7-St|A&E=CDf*a{1jg-&HBP19!70V?#G*juHh4b zG8N8-`u8T)9E$X1!VSj?^9mX!PpwIx2DFsIx+u9M-=j1Dt9vE2cA+TuxZzb*z;RnW z)^mAuskp{N{1*b?T;pB;Jc*;y_kIO? zu0FlLkw8R!moL(`c^<*GkGMJ&4Ov|(GnAA`n36~=lv=_lOz=6bo%(bp9Wp!%NmC(K z70Z{6`igQ-`ln&IyyZ%lzsTlR@y(TP_`!Mo*o1Qf%8N$j_6;w?^uc7GHBw;Rb1^q1 zy%+JB>-hx_j3h9?oauBM7~d3YEXja^ALuTl)mFJ0!}3|f8I3}1-BBMGrBPq~0Q31L zit)k31Z-RFyO%6;_N!oF6MFMx*0fP8I^RbVnggLvWu|Z3Z-JkU9Lzy@;ia34r~RVU ze%@9_2CCQ3p2vNm8>F?&#Zuw_BH5+IPt&B!<3UD7uI#zuMcig4b};Gcbo%KrGyk&F zo&$D@baPxNcCIO%_41dHB1XV^-u@n=u^nX6bl^>6=i+(EZ!*D**Plw~^u=%yEy?!S{9B-_ZVR22Iy zA{5!6`wmzblgPqjh2HI1?`{X_6sPsH>Mep!>WyK+4+ZUlC0$ znYiJyJnBkn-5(_8lg!Jg&&mEbY!3-(LERv`~9E zEKz5f2uyst-KFVktsKlV(z+)7|2w_e1p@oiuo z+{jHHk{Ny)ObQBv?pjMOs-4bKe*2d zRjMY?+DnbuKG52y0)EGeB}IRXZ+}%I;z}2&-k1dsF2^9c6rgEI3Ohg zw&s4MUn?nT>4GUe{LNtV->}tpn5*Ecs@fTdJMBY~u3XFIRL02wk**79fkdxsf+x!3 zuXz>Dv{LMU0Vjn`V2QxSX#s7DgSH&q_AF0(uaR?f^zYAM4|Ipc7M9KS1MJqTu*hY#K3mKcE>%eRPp>HsD!!4uNisX=9+n7^^Y(-; zX|-B+L~ODiY~{Ct$ls*6wU-BUylB73D9F-;7Et0piJ;k_M}1W7fKx`gmDO!Ir$cnf zb)Yh4^&-wzZe`T@LN%qcohMvDC(-@{nQ1o7_OVO~=?&w}oI50J+)1Afy0bE+o@wX9 zU07S1k+kOk=Y;tau^WfZ44KM3bKlT9V7<8ls!ew?rH0|*uB7xF#N_rX@+U|+p;|tS z*rpi7>Jv%T&UP8|FPWTv)P$lqi}%Uca3+yr#LTS=`51JjZ<@{%7=D2P<5H&-7D!a= zH#hM6$3vueR(tAxoqXJ92HJD~nUD>tMwT8`C}G{FeujRNW_MM5uXXD8uK`!6pWL*j zk^ZAxDS>`F*v%OVd|Y$bX&(urKV-V=UrM856&qhs2z$p@^oDl0>Yi85!l-eY zKUP-T3RTY3v%LHHhnFwI@f01@oEKLz)>S|%A*4E7l#+&w66=WMh`S}bb>IN6i{{*n zGQ=0B$*&H_+Sx1DJZ>qoPEF|6T)Z%?T$)uGavT@ObWP#9Fgoh;>b0Wj)TDk!puD3L zXiqdHX5^N_DGPEHHDpWr=%Q`pdGnP0$nRX=^6S^$O2_MChtu9^ZAJ9}byBk!;Io7h zE%c?Igg-XZ6g*#Sx}q4#W^?l7z(cPq1`LC{H+FonatQV>F`Xs48VWlZ-Cnm%#a~qX zeExkYLV^>)Xb#Wv#4b^K*ij~Ef*id?N4wB%IxEIA;oIpDlg#BpKUe*J<$yn`lJrId z=16YEdUw-ORyBpki@F_L`#OAUN{>AYOOi7%grduTxweTu7Pd#{dWQ_0|9hn_bDe_Z zN~7j>b84z=Gg3VmABi`vDou8r{S3#Sr;GqPEqsT2a^Kqzhqh}WP-y|jfL8eQvQk_V zn&rV(-S6YUNZH4eK?Cv$N|=c5Mn-`qcURoB>UX{dq#SGxy}=d}SrAhpaUK8vr6^Sx zsW$B!r3YM3FDuO{q$NB?TNLc5Uh}MquzwxQ0zb+EzZ@%Psbd$`(J5E`A4D@2vJ^UV z$!Q7}Co@f{(OOGChWX}fc6DnnM+5}>2n1=3f*?J!7QVB5Hid3THNpNStxb!*KM&dm6$Y+GfK$nZ4K#Z=(ntSr5Aa+qGd#eXHq*~7JKMAx6teqDB zGBc{qiiJDmJ=0utqT)TF8n5}>mH3Nv5}lj%sJ`e%zqJ5lqpCKN|VIda6xmaLroP4{T`4N2Bo1Lm>DxYtZt5u^P`37(fBl7 ze|m=uO}}r235CEWDMmiSz84{m`ZAirbS0!Re7pyZ;$8k{M@1aNQhQ$i9xB^KfhY#U zC8y#&2qb&e3MM?*N%08flQ1H$l)$gij{iU;E9|K?miXlu4!3YYsr&qp70ZpnUi zb(s={m%ZmL1M?c*w3PO|LNGH(Ak!Zg8m(1~D#2-gr*7@&(8o9*D$@ARYN->?6pQYm z$d6+^#~S@?NpSl<*|TASplE8&jgA@4`{r!Goa%jDRM4;_*n{`RFTr#TWt^0&f6Sez zGiDgX={}<>v?g6r_GT#p85amO_ig78+pvx{s@;K+_W1%VP{*}f;bU}G{HPhgJAsj? z_TS&(&vxqb0BZL>EewkRUW+54Rwf-6#VqGe#&@AbdW@x;f5{IFS<+nt4zZBDac#(Uy&n+NAacZ%UGv(1X-B+PsOqa%st* zzhUZ9wmxZ0VPk5pl&MxiM0gzIVy81rGA*c1p15$}Ps&Vf`&6nn>iG7Q$8xvi8T2&Y z5!Lku+~D?a1ow&$c3pR<88uYQdqOR}RA0ck%YN@JB2N>xhVSJU-qG18LY66Mg>P^; zN^xU)skhEYxSF_hJj%U3Wwo?DKcB3<9Q!yCt#)9(W9#qN{1)j$-`vSx&`P5$sM!5? zR-c}^z!{I$W+^#%@BMKlV&T1HXpZMYpM$KPumI!GbR~U-XjkLo$%-aqU-3gQQ8NTZ zLRVNWTO4*hHL|_P@Eec7Wo^m!*=KhMJ|-S{kKcKUt*mUEeOmdCWNRIaqbBkqO)eA} z@Sp7du)hdRT2&`2YQKSQk2fFFTX~fnok~B;;=Gi4w;>qs`m+pkmfa^$2w9lr0nt2P zHlfs}9U$kz*ytnbyTqr})x{H? zHt!0F!V(pC``J(4imXcUFY$S}y&g2?XaH_Y?-lfTfM3@z(`rWtJ3lG?=Gmr1r*{D+og79Y{ zT7KVOdw=Ec-8X9`ukX9C)mF~WL$AHPy%$I8Fy?5r)2a|>sqr^Nk|qn}4yuKPq7u~L zj0x>7gt^Xf$=p~{sGvL8hLimNtZgz~Roj0wcp5y9t?`&?nB;KcU*KMJ9ZTf)RUtLO zi^8jfT(>2*buqc<4?y(CCe&+m)ru`y)3fO#uxFcj#|pENG0x+Cep{|iZ`#N1rXUsu)U%+lC9vcXX&cSl;ZwQOT^ zHdB>3YmUL!!Y5*(3jZj{lU(SI zZ<;%$jLJR*7UlkCBMV%Kox48VaW7*B1m)eay``_ItJ~)t!bMM++I?igidI<1L36?T z@`o+TxWb4K4X-k2h)f8{=XLAXSR3z5N`vQl&pkEUF5AV}@od&0&o7ZA>Wmy1#WOhO@4Sb)25@YlS! z#AK8sl^_*-8yP@g6(}HyTI$p?sWr-{YJ*kp^&+Xmk^i}e-;Di$bwg`r$f93sWUPO>l{>tjY>C2Pc>maS2&-3G2 zOJ2|IidI=C1@*j6 zPq(^X6%;QPO3@W)M5VC+bjUM#I8PrXfAphR((Sk>sSoe}TgJVcaCV^%3#vhAcxn3M z>2&YSz7BsDwE5_#>Fz1!ChqLmnde;mwF!MaC5rxc*VID8;=yAPk&aX4w?}7Mm9z#* z7Q$nEGKldaB%JuM3#=$RMVd>uMcxIY6E*wXSH9}ruD$N9vGFOb?Z1c&3NB>F&9-Z( zg2H@$F5q#wbm=by$uoO42V%Lk?j%X>deZa5I(>BNI?ae#w!ZcqKo$>>zr(_oZF+Y+ zQ3+~f0nH)ghqPl7BGmu(Sk7zdNtWG8wuo=YZ7jR`{KXy5yHUl^i*B4ImM~m(;?1Z6 zqG~UMUepaijl@0u-RjXSHzU>)w*VP#yKPw6wrqKvO50mBRuYqlbYC1XdxDQEL-;>G zrDMEoSnCR#Rs4&>aLWUeM-2k1^!Khz?WN+l5w>=y5eSuFsf^*1BgV4g<>P=!@I>929ss3>zc6bSWA5O(1pdtBWK55 zn!SoeQwqNY8a9z^Uy+>s7}pEi<_n{E+E=KNI_RJs8-=>t)Kro zuDFsw__VUY`Tc}6`m!{ALu^3^a~bbM;K}dLNkU^~>!JtHtAMkXfSI8N6&A#!;M>TvXdM7ak6s(z!YU%}kOF5|I#IfgA#;f^@zRRAv8{8Lm?Yk6EU zA_Yg=Peqq?_};m?Rcz=+M8{{Et;q#`}9?%q$~Q9sGWT zex#Ok`g~Bmp~Q;Agz@%y6~C$R0*!dt9Egpj_MbxVY=JH2*!AJo=nLtE({X0M=U8UF z#yS%n_Rp%zwT1h@-CF|=HWO$6DH({LBI<2I{@L4apLyd3%-cT2LqCcm2PCB#a}Gcy z{7t(2rV`2GXHQK!b#FNPe9;0Knamh8EldbtS*?DU{hVzh6qowiPX$ifrU_zdoZ#Av z#C4I9mgpo5{um}3&Zu}jWnKfDv=j3VP6${-_gnq1qu2Wkphh4*=8rS6H5MpIlwk6u zW|RgCi_+O7{Ka<$!=h3uJJkg&)>^5DT>Rch_IK@TQrUDcLP59y0aEx6%Q!+!jB4L` z%UWiSk9ZGXuJ&H1k5Bney`Qg>PR@FGtiTzXG!811#oq(50&>V*5sl%#yP;5m%yB^c zAPFGag$xTzV1gFMtRl`QN|Z9H)Hrs<>K3h}4JkP7PdgGW3hDKsFQrXdv<4C^meXG73$J@>F6mC)U9)c6D-wu?j z4>C~^)WT8W>5Y0hcA8$nZU7dLeCXP{5f2c3fYQj zFRJq{oQ1^?=e937nOd_dl{0tg@nn-yqU1h&%2kOFSJ~`1IeBB`R2oL4 zkMA_;Z1!U^D=G*U9P6H^91Fh(Uy=6gSyDuvKOGR|DYaM(&F%}Km~d~TF+j0s+l{|V zd0$NJ`vv(9#U+NZymtMp$Z2`G6XF+Xh>_q!eh>AVbQEGm)@WYWj%ZLYfR!sgbJbW7iK$h2eLj`S_u<_quT9D-j<^>~jYZ_k z2jSF2?KaBV&5rvCmK8~_l9kZaMGcKu_L#g%omdp{Fvri8676WMf9;r^wKHvC2ya8h zSjwTSJWC%3=PiK*iuD}#^1r{2-x<><@+m1g^b$k`-}bkL#}kt7c6*U+&`o@MEE>n3 zDzW`XVB%W*RQ3>>N~fo*VEWb?Tv~zsjSr7VW6v_<=#XWI+xW)@Bxk)bovuGng*8`1 zdp3o?aMtd9B+}-U6Y3%Olioox^t7Gm%(T3?owwF@^1NHci9#l&$YBP`qmb#p>pF!4 zhH803KEhV+4U%OdJ!XzS2B`;90NA=e+BZ{3;?A=sb0%)?vHXSr(mx(9Y!lx18Yu-q zL_!+4z+~JXvd?!lqvpaMBbZ?>_6>%3+wGE(0*DzN}1<(|O6xq#Kva(8*95~-LEK1Ux zZMsFsYsE6w`2l~=;TCllK=W@tJ7l3hi8CH|k@TUn%KauXv;x+QIVUZxL_@|-7}0K; zSB_=S&kQL2JvS$bCd%LJanC-p3mngY5^Hc9^hopM;+mvQ2FilRIh{3+wn?&>`+jkA z5=z*S{O*jt6d9Vv8x$E@uqAhFB9OcrsCt>#+Fh(UfgzGQfxaY>I-u&I*6seT4y_sU z^^yTbS-#b+?Ox9hc`0d`}fNmol(Ver^T{zGdnEnQXMa@tNn%kFxgt zKLIK@jiFIZ9*c%@jeqC1ks&(|jF8i08C!a$n(AdT9S4e(x|jia`HFDW9)?7YpJ1|e zlaoS>BpvY<&bHP-bot(<&s&HVQTtGOyw6-!S%db$^S?5BT;S>}Y3m-wHC z4n~7L>Alwsumwwnma;21@8Osu2LrAB{ol?ktZzg(I|&0`hEY{M0u!WmT>Nc*yM~!@ z;y(!edl!*yaebh1mouZ;*6sO&ar91XJU5|OG^c5RL`zgzUx=t%S9v{d=;{Y&ofoPk zaojGrPzhxMLZ<83Y=6N$h3suDZPf+WMgPjqf;-n30Gc=gHF|JTEmmq)j!#lhn((dn zW=Q0rrK6F@Vt4UBBpG4nt^yKQ=D z=Ejkrt)r|#%j|`SSNHwy$CV4i*Ii>Y#2%Rcp2{oV0sUEB0NkAKlOzY`G^NqHAljU4 z9d=Wj*M`kzX6C7M@B`Z>`D2rWiMbKB(y}wlpMAiHLoXqB*0;p*SbRcU!o~x?DnE}I zN|;H&hj6#pNK66LmIMPKup%-&4$i}$`-S_f6?CzwDIBq>;W*dSo+X94aHH=l-9hj- z*88XXn~K@CIrOsRqm7zmVKy=vXEZXwAY?RIwH!G+DZ#bN{vbSjv#O?k0tq^9SQ$Vc zH6gZ$pZ)hAM;SvrG};n;1CAFuni7z;a|AAQo>?+4|I9?|)Q+GbL%gprcmJ@C{Ao%k2$B#(FaO- z1A(X`-14bSyFHQ!Iugaw{ogwSJoErN{*@e)hF{Yt?MrlZzfIll^CHNjRN|gmfs4po z_%F#$Zr8jHi)=dXHV12Ke6k2Utt1bV+CS9%TA*d!-0;H(2!!Wx^^+|(<&SYxEb}%f zFVf2WsR`NaYRtwR`1gvh1k!9qp6T5kuFW?0 zn|jY_Genf`=R))32CBA|`6~hTbIlF`rpCH`YnCzx*Z1{^p$cMrdcqoTV?k^A?7yoaqh@suA}t-68n@4`|_ z3xpv8mQ%-RC`G*1Eh!U0daCQad=P62iU24s#)U{v0q*nKBy6=(k_z_y^|{8-bv)~? zldJK`oLs_cOXB%8JKEU4FMkd7T>nr$xe&?Q{&mr9Ec0P$aRL>TG?mri#hn38+tKB} z_grl2Sc>eqY*gKw<*c(lLq|vX_bkuAaK&`M;hVrj-$~j+#vy*gKWa|R>GG!D+}sqt zPTsw4KB)=c$6)V8r$(eT%xUi>uEzLZJMwzx2Se^O@UnBhvu%tu3*gC>?fy~3fL=am zxzk)g)xXGQ3vqcE44&w_x{^P;ydR9h&9xBBvbP|$C$VYwq>`zcQ2zCFs4Qv5aH57+ zx?Hw3u2VoU%NV{PqonhgC|B+}b)0LOR6X%{!(qovBH53KoyHW(NeEeyCZo&e#=`4% zQE*_iTLiaqf2)&tn@4oVvN+=2$R>*xSjBTKr?hkXmBW4j z=)_M)NXJMt`Sj}&N~UNFZYa~@-(l;9F@SNY4L~K_4_@ZdF8bxWABZHWm43Oy_RN;U zKS%6SI4b3RuKkJXu!yXTnSEFnb@rL5y(@bTDkn+aZhI2}B~nLnL3~0vClY+3G0c9#Q7V z`Xo^YSP=FinZl>9Fcy_z2XPPiG?Jrc#vf=AYKF)(v|GM75_mM(AiVIZ|L)Td zD=wv8%P^58!RMxfhod8D`#S0h#F>;#-!*>MeN@jOH5^d#$LemPt#1I^8JOA_^FMx0 zEjgrGh~xc+nUwSBH!ek$nSe~f%VWsqzZ)w@^a*vkVElKzDwjyj_`)dDXPsxA6zGjG z6uA%89`!$a(@nl+PLUVw)B4OcK3r;yS;n=rk9!*g$WBWQWw*#m+Q@7rb>da;MlPq= z&jNaOYYZy2Z>;2Htb7Z|sTnT!OQitWxBv{x4lNTnLPQZq%7^D$MM^F2Z$mbI&utR=^PLUA1bNP!0e{R^-7>blGc_DQc(t@qWxc6s7YpUjZO7m;Mk2Wu z_n-T6J`XxJ?*S9;G*23sd*3m1L4ik`QCfq`hH~KKY#M=Jb|NQEyCfsVrp7? zeHe_HKg1b#kM)0qxdGp|f%l&b-Q65_QOP;_{40WvmzwK{S}kHK@9J5AlPh#2!)En5 zK9ohB)PMJ=2wF?_ifj%MweBVO5L-jeQ^59m)FSRMOwWsEO%&=wFua;+{Rk*18LRTD zBZp3dN%ZSWL)c(BhH)L%MuI5@zpBrriLDhy@cfTj`0FN9mnI;u+q3hD9BbKcPFS1Z zGiTdC{sn1RS!-bU5k-Nto%vWu)W=1bo|U0#wcD2^d zc-wF7-OoMO*6vmoXCYfDW!U5b(xeow1&NK|Sj6sr0M1G^ii|#l0WTKlU{YK)Fs+yj zzC-3KJuiFObxQIK^N`&p+QB&ZOS&awnKNGv1K#d&!;atb%$1v=-S6Bf<$-X=bVj5b zB$#GzsY&%Qv&k;5(omgHutIy4nch??u6dw^nPlpfWDY$J#M31AQze6x1cHd0blqHn z-gh1re8Bi)8(^6y!TBr4FSfXge2QLqhnJGEaMA<*1Kd)7%%nm-g5Rrq3M%m=GFB!& z-PM83ydEcWre(tTy=I%pR$~nRYy<9gFA6% zbd39iA+1U`|11`qT-vEDL*G&EZgt)lvGsPn&9hFAD@f+^iXMA8FVR1nX2cmwzw}3{ zTwR)tR{PbEdG~Y@YyuII%RRq0Md?A=jJ!q@sq`aAlvMSEXRZ{HMC1fxjD$?hPBq!1nH^bET`)iaV z?Kmfq>%%w}>R7jsZWCS;JsWY1sfe#JV(0aN-NME$DH-}ib?o81yTKNU5zu6OvAkov zEKBZ+CN6HvKqhlcd9U<*tUb_tI^rzUHQU06GqJHKP1C40P5JO6_3;{ioehVB+x6Z3 zLW%Y2!bC>Wass1K+uzBGLC>3Re>y}SLP{woG2Y*AcfE28`kIQN@cveWoh6r2^~*}M z?3@c=QhOkP9!B24D^qC=F5A&^RV7_`5VFoIX<0`%&$R>YjZ<=gL{ z#DV@2?gAvMc2Ceh+P5%J&)>dI!wnRS9NN2&PEe7`b}OD-1O!>qYu-f`ps6-9(3N+PNC3F$2yvc$qkC`8^3d$*{}C#4lh;X9KkJ zZ0S}8;DD?1rGt<6S5JNCS4a1;C*9L4oX7a-moZQ7u;qTOn=KOHrqWO3B(@e*YE1a+ z&j<2|A6Lf4#;)#3d7Ipv*)j;*uBHYwuiukbZ!ADo?8nBO z(^ZlL<+gP`*aIr6?09kCOe?Um$l%;a%W|j#&48OHf~YvZu47oa zpMsT#JX%`3$#1H3-~|iLWwbbo>a&Y5ro1e*6h4nWb{YxiW+1kiG1mrK_KW%({2^s@ zwnCNSo@;97?B%2?lyc(!C zuEab_Z7PlK?9a^ZfEcHT8T%~^-uzhSH5|=8d~#fBjY#?xY9~@NXsdQ~=K4=h75(X^ zmt@Bd4BdIAnJ(l96{SzZI27>4Z6fM8pMRlrfyjtek2t7<2NvL}O=)?pGE)UO+RK3j zL)oqaVr)guoS%>|M9gh9<+1%8%u==E>w`a$Gld_;Mjkc`+vx^(5Io7!@Wj^K%q5H? z;t#%s&f5dOgF38+^WXr#2<2v^@t|n#m20oXRghrdC4RSpGgR_n-E|3 z!O^??fLmvAG2^9s%H#n%2x1c;#KmvS`)mn0=tZI+HN|mZZBi<^Wu1MO62ym{ohUeP z99V9RFD;XgKRrqo^o*p-d$;GOp()1f+>r2R)O;1bmY;mN+=eeFe!&?=T5!XUYdP(N z=!-P}<6+i4TK?M0u8&2{sW=XE`nd4UW=|IfA=G(lTN1Mr>#rKK3NIp8OFxT`E=;am zW_;dPt`9A`FFjYIaxdoY*{bhgmL^Ys6I~l~8x8?!eiq+_^DS=i{b1fPNFvfLb7q5H zP%N;LX&EXBq#bSWLi^G2T4=LLNI)Rh!m}fFP!sU+aL!Y`t>Eg%mkMJ0KAsv9bW?FO zfZT2U9JL2_UbrD|#&APnTeQ@pV%GN3@Uog+PPi$DZ5E%`f%n~h)zQjCAX{tZb38pM zA)%VbPwP0poY8$B*eGXE5Iv>~#rd-QI;+36=XxP@yAN%ncl*Zoiqtu9i(RF1)YIE5 zdb}1$H}uRz>^s<|kIB50Sp0L!mUB6!_{cNE5#aL^eY_q}pq`=2M7yY6D`YG)K~bh{ zZ|xUGEQtv(mSKR`3{@DgdmLz5k+!XuMK|6wF$Fx5%UnVHAcq|s$i9V4t*4uqk9czF z)%6cVf?+<#iGd;gw!IS^z$Hg+dWleApE7}~b7B0k<9!)xQX z-*$v}LD)nWCE*o=>TJ72Npj#8L%42)&be(8XY{D`0$YvhuYP#))Gvn9BJW~~X_t@e zEKN+MMmrP9m{5v&AH=%6>Y8pvv!`!n)g=<}8YdDuhHjCm=4kDy!M_9!$Sz5i^Zs_= z%?ag|%LGiEO4XAn6HR9x^oC339`+{Q$+6$O!}PXWGPJYOg9W>ajt3M|PRlso4071qUsV%#Eawb>lb`?MNG>_;;nR(-};>DgT*F|{n z5zyzGi1SmQ$&7zgdj6}Yg5XzE;mwQB%@zz~@dG_mId!(|BUJIK*noBp=S}_JIP9JW zJbSPszaLg8k9_za_$K5Xk6yi8j*rc9lAje&51yX#b^mK5hR&p|btJF`q=x&6MwzqpU7S)u^=d|0 zR~n@v%C>4}u{7gez6!Iga)7G2xm}4QmTkr)p1>D`Ra`;JySvyAq?Cf>jJ0ka?)Etl zi|qW%Qf=RCEQj1}{~>4&a=}GW5uYjn8%IS~*ty6rr{!pt2|AfA3CK8UwVIkOQzlvb znJ>FIK1Fke{HZT@S+C4(uKiOL(i&vK{1jx;V|GriX?dakgngfXQoh&DPZC=& z_(~y`D?}bv%hkWjdr6U;r;*3O$NldUT1NeaMT~?r~=;cq$J>DE-*%_FhJL zD?$QoBIY#PHRdfKv=X4(66Syo0DYPijS^;3I8*7A--=qluNhhvw?|cA@8pPb^K!m> zsPEA@wD_9@2^c389cf>Nn%yu@t?l8iWeBsquMA!`zZt7DTR3cC@r}s?2gTv!7;jJ) zT^ak$XuB!sERbqQ1H8sut1Daer-i^x-;6dg0gYzCvH6Zjg&0VU%t6kI8AQSV#h%+8 z=zbz}dA#47#(L-qL2kYJ+J8w^ESC>hG}0P1M&=@q+Rv_JK=M&<_1(W3&){4jVsS*a z$1sAMY#V+g}Su$NdJa}JN@FgB@3;Rg`j=@?9`khrS`4@!WUIV=96_eM=5yk)vd z$B80|_3yJntT5J=tC?UdpxA)P%kJ^i-hj7AcfKk$t3uXkv7RBCH9)MCDEjd#GP8|+ z<64oM6-en0gM!1R^Xa-2rKrkUub;B!3|6FyNPpm1BeF_u%0t?WwJ6|&$*m$s=7$|8 z5gvD>ldhh}sW`?=stOsy{c*vzm=8R$dY$|;zW9jRyz`W9At4$eu&3I*p^taSZP+R} zc_z(fesc;$?XG+onS`XmukIJ@Zh1k;#cFHw$6(e-o-AI#_*COERm{V(Zvw-0R_dXcTQEGIF?y?B zM?eN}?7kpl2hiL5xroS0+5=zr&M-OM%N^zvPy0U1BeA`Bl)+N9aK|G^wXjCGfnlB& z7R_IVFvf@RN;EC6$6)m_FD7*FpMf(n%nky z(M3Bf(7EzIlme4Vd9Q2xyUv07nv*!!}N{`k%tzE z{&SKa!Wl(iqF~b&Yu7^u9K7nZ(KnDt%2T+eErPmZ*7q9Gj6eL@jNxbGgU-5dbsNsi zWJu+EecHGh?syFbAKF|UFTta?RpH}@CSw$-)g}a}!;H&O*7mVtHFWalprF5D*P5&AO$2e8@?Sde6Anvfhd<+lip^<#SYR zp9dheaQ(96?8u7g|MBz<+?jPZ2r;~JSP5S+2W}RPf z*1fCF-n*)HN&hSdkkLoHJ`7O7J)DCX@9^d?w`}J$w;!;oLr(rH@5C>G<6sSlPPHFg z={R4iR}f}%t>)&YXSDKUH#;)i?-D=6b=nNJ{#UM(Uj|e$kKhl4&&s5vpVRFKL4OKO z#&y*Dxmmqx?hb78a^!wKUp4|RO872QFVZ}Xg2+1$ZXPnpPHpIDu}kN(23YrGi$U3V zuE*W~m0L`zK5v0c`6GyUFg_b;ONJ8>Jsw_#t7HUn^elv9vQf$aBI&x-qIKO?;zmp^8G(q0(-qXAY&^tn41LZCEWD zWa#9xdWmA(-V5pXxu`ikLngnmx<}emReZ<*`eZ91R6H2X;)Z@_8^sOVaS? zXH)I4XOCHp*dE~ED zc^(T;wQ0W&zq+bUnx~Bun4@s9{`12g_jWMKsd!`6+CD_OOPOl!9X%Y`ICXk;STurkvG^Ux)36 zJ)cw-;g+%+g$a1t2mV8M!bDC^Uq;}3cs73Xl8*=jXvi9Ufd% z7NleK>z#WE$oeumQOjyg$TRa{{plJ29JPhZ9HDsl-`kwqhi9W71c@2?!7FQLX(Ky2 zTDF+iU2ZN0x(o3KK|L9S9CNs%A(EMwvERMqh%x5e> z@>yHIxa||GQn(uR#dr~&C1+ACD%EnHXm&lA^+l=}Q;~v%m@at^5?CwdnLvxqMTzIZ zB8jK=6^?A5WDKT7-zY>{+j^{QuXM?u;9yN)8NNrI zrmMCr%kMTRPezY#e%qvz+c)R-%I~QY09Yi@cHqfzA4jP>3#?~3@LT0hF9#+iPH&@7 zuS+8*Y1Eoj)H{3@QGwmFK96!&;4%@}iQ-%fByz6jU<*u%A5&D6D zKKX^$8#cy7&A2|O52?2++&ni}=hEM>D}`~f`QxidcI0m4Gcp<~O&RYe5qZ9fn48N@ zdVD`V-p}_QHv3~eKR=C*>ewEpfqy^}cJ0s3tax!Jq`tQp=gD|lOsk{K@Ac{Y>i4

eg2fU)bG%kk>CHrla$pqPs}=a^W%o8{#Y0g1G(=;Qv-#L9$|DTPi>O{@(jx_}cq9`{ngom4`n@x92&jxL#V_X^m<+ zKZ%TLxO;db`|xXir)XSw`QK%{Zu@v?K^XJG7kPJivP+e>Fa11SOV1T*)L2U`5Iq(h zj(E|`%CWww?tjNU1QK)BO8XR;%yeDz+4;gsrr&*Y@$X+=UiJI+rp8uopSR09z(L6j zjJ6vf8u1kDWXy-pELx-ko_5|G^S=tP5^@BkP0fdi@DXT`e3Nf;hvcYY^OQcWjG0zM z+pV(%d5JFgvVFXU#{ktQr520exI&3|)r~-d z4knN9)O~)z41dO+Rscu0vP4N&T#AC~TKjs4(nd@_#ig*;puLEi(VZ$V=4etV_|Lq9h`mPZ>zV;lrq6RssU|D;F{r)uKT80G;7q zBO`7lg=Rdbl=T6z?sGIU&mZqHyJx&y-!sfhf-|&DGXwtPxwtYHVP7i2du}M1$+~Su zxI11*DRJtu>Z_LGRa6-%jcho6ZQ;9_zV6<)`%BafH$1IoKeF>C%O0P%z0aQ9fn{aD z>&|$|1}^FExi>G{?GU`1e;>B<5eQ=;8>N-!u~M9B7LMnBK{%)EQ&@iY^Aq8V6Hopr zWU0-Hvn(bkEFy_!3#W&?jSkPFBR>YeE#TV7HqT>m(Fy)pFQa7a< zX8}G>uJ`S-SEl#v!!CIhqDJ34Du)w^MTMB1T+VZX)mACm_0O*hwinkQ{>g1bHpj3V z318vRXJx3_w31F4-DNKwwxJ(+U&{3-7E)QnZzQLZyF3P-N8z)>`PNQ|FF6BZUUo$L zv6gI7L$_+4Jy1KL12Ml~_x{~z^GU#2{gvYo{V>H&Y`z)L&TiLegc8&9@wm-T@~^M@ z9<>l6FdW?VNo=jndb9Fb9b|bLqf~8jYm#@=&gRDREo(WacM{+M3W^#t?+tj!!|3wH zwWe?l@D1Gek{g1u^m0ZRngryKvvLslN$HB|Ku1Kxn z(#s%1jl<4@InCrJ|L=+@${tlL4E5&pU;_(dOR+_!U>)hT(VVIf+Ab9${e)SiPTzqd zQBhnMEX0(YSHL;{jn<|n!&a2%^~g)m2jG=s<(r+s*uV3V&YfxR}*PAuo4f!@LuP}=Yg#!YclR?^!FyaG!6n` zkh+%vD}VoP6qe=wfkQfdofmCwY1${%VdN=5 zJ%I9NX18Tj-bu>9Qe$z_hNv|Mt0^EXrguU8imd93YAXXQA~wI9-mFe&T+@{cksVNN zRTq^73oo_Sl^FM4wyk@L_n#}Jck{d1kU){*jQ)wm&+53KrCF>NJWX|)Hke^aYU%!TqlR%gcm(Wqe{Ysr68Y->Nmv0CfGWKmlIO+1#2cvYPhk zF1f5C&jTnsdnTRc>6zQy7Js*>sl(Nt4s2(#Y=!|oC89y!#ftLx)3MeUGt)kv;gqIA z#cjQ5t$ccVz=Iyvn03xw^7#s6!bDi16r<`Jw8Dk~Tc+JTjcw2ebjU??ymn91sL zn91Yd=Cgn0Ud`{pcw@eFWHODuOu74sV25+e^E=EVFa4Oia+7Nk*x>NtKH4tr#EK%4 zaV$kEZD$r|3}So^PfjcG?)Ie-kiq82|8|j}t5aX)$tB#trmNm13dXZm-&CSPd$|6n zng8Q0O~t2%{_n+|<0(z;X@oQN(U0Z>jU=6*ma>&5%5~eiQMF2JzVoaBfvq2^X@win zMks0&xjaYxC6JJil~3Y}fO#Vu%N#lST;;DWxyUj>mK=kGi55qwb{WU#J7aQ}pj))M zI}M=0NWug6X6Bf} z{RAl$c_AXjfp`AarqVL$y)Ma3be0R0Cr@t>QOwzm$L@9n2p~9$`$|xF(60Vc_#sm&M zVhG+;8^*Z>D*B9FPiy;jf7aw`ZRN^2JIxmK1mNuc6jD#YhWJqG85J#aQEvqg@P2v- zov@!Z+halisS^q)7T(7$MO+=CED~u}zbsl$F;T#`sbF+&k%^@Lq~7r4O$c2!vL83k z76Hc|+aYaAnu)C6gK%r3YnOy8iSvcrXB~3Ahp+`4XyiaeH(7)SlBmO!|1n;ncwMs7Gc-_i2J<2>ao9cYfkyy94 zzdCki;9X_DlFtxO0{K9V;%RHI$$`sOF1R{*Oj1wBHjsFz?-yE$8I`-)@{B6NSVBVI zU}PEAFgZdOvIUMxcjT`1X!tnp!SyaMNbROY8 zAGY8D;xc(K(!~g2AP0h{m4vpcnPRd%A0Q#X&p@31tI((D`ZGXDGtsxwMOnuuQljzs zfQY;&-v2LG9-*Rw3>1k!(m(0d0_c@9XlrP|iH+>u*|n42R5H1L-}t%25Cok(`)vn} z&L1SXCdNmlS}I=7eOAr;b4t}*OUqCH*(3o|cu1y3N0qF}gmNVxt@Lq$5{;Phr( zotB_0i%eDng)!(!Z&=lxBl9fiKo6pt#ZC03K9g}oxGi4_9E(ymXP|5BNO1{XFm2{l3$9rqvd|UiEr& zKkv)^gbr=Nsi$S0T%NRtTUEhdo$WAoSEE?m0q#K?!WTl!U?mxXZ4cv zl0f5M-Jl`8dDiM`z0nw3b9N40-FXCAxW2rYz;=mj?zNEjS<|_JZiL;VHKx(bsjcNK zOKj?V+^Gqfb=jrVLo6&wVC_fD?PV=3-zt$cJ{{_N7=KB+Ax=>cqomu4d%cgjng(Ms zazt)Z|GhzRiyr($l7AcWH$hfg=PShDMu580nUhWIi!2H$NOLh-T1`A9W&pIje9@FP z0Vh0I$!PSimf&WJNOGM6Ne=@dEac>ogej4SbtVwEw(9t`YtFxyGAd9m`}z_(P!5D~ zec^%RC7C2CiYMTT*W#QLk@1)VrmDa?sr3}QlDMVaO3qFJIb^pW3KWwPf+;iBP`^wQ z=$J;= zYj6Pq)w`D>qiAC8MUOkNU3G(K>3#(EZ&DxTaobFhycO@^k>TrIt9)5w z(l#KA9HA`7=C_mi9uqmJdZc9dZ8RvQM#R|_kpKTDSM1#ohMr$Wips&Q;|H|sAd_5j zyK!cqUhTtI%F;&}XSW}-s5FvRaCO!Yt{Do8gcAzA`|`oG_Nll{bBHVM)+6kvTtsVb(|_f{I0vN?A4y@TXj+Q& z-fvK5thw}y(6Q)_(_l(CB`>co0jwi==W>fVfb~VQ4f4+PTwbqKc5DTLigM?*)H>Yc zs@e&`+@|zCMLNTl3mGB&fY+O&-=8kXJj<=%vBiF?wPkxKx0_vTYPDIL^C&Rfo|eho zsX9nkRKT+%`tHvtMHJk%eWdp|4pzDs!)69-j{svDQi%h2ouej&4)8)uTy3EeoF9rO z1v^otl6BgfY550HYYW=E2_X^PV z_z_|m;B`Ucbr`JBLpSS?bd@0_ETe=z7^`gfN3fP+?t;mti2f^REyGs8?cZEvw2AWtgnQOoI?kHWJtUSO-W3p3#6bV<%>>n)^8Oyd{rzNT z<=QQM>t?@^5rJ|t(j2N_&3BCYP(x;3ft;P{PmklFD;Nvtbn zb(w!Q$MJmV^Im9GakljBDHm`Ds;yQZP~}_Rt9zm(tpDnHvDml`9KzLAPxGS0ck+XH zb4nCPC%I~M-6`~fBu~{&!h+07dT(wNUFEeKAX8gCPg}eQIL_?`hvV4X^QFNb6)5Zx z_F6~0hWi6y{%;Q6?VkT?NO8v?l;}}AV*E;LH}2)(T0HF4&3NVX8&^<--c9?C+146j zhPAq$i|){n*%0?%q4@9oJqtK?_whQ(v_ev&(12b9%3+p3V(1Y!u091+lcB4PpxFB4x z4<>YGG2msGx{=J~y>YP!a2$oPQ_OWrDSEiyiH$AO@G8B=iTBzqkaE#)L~SkYA4Er% z!(5EM(em7xTQ*cY7)5D71(Xo8IEK0&gle7WQ57}$1(Nn(0lEjGdsVHy# z>)?>t=HODc_kC0EEM)@H6Zvj+v9)8LFcS!a-MUmF%~yQ%wRE-BY(w1yNy?rV%VWeU zP1x!#?0ls2_bt+~|3GYbix9uQ@*IXBp$3$rk5z&+4o}yDhnp5o+s4o_pPNr)pM#%e zaFi5uoVrBd9EP9oYpf&NWMFY@sZ>GfxGVUlP*1dD!l2*KkDN*f7@4^}=Mav#D9T9! zk^tda3z9xVq*~9)(mhWp&iN4 zvroladz5`NmxIKJ(9#*@lk#h1vr&weQb-$pcd(o5d0~I|c??V_yh&~6HrbLZo1~*> z1Y#5w63M`fRhDoN|JvVECZfd_62=qQQIPhmatrVU<<)lRQt<|q3>&(}{&uGjbf2WC zz0BbKND-8s=*}RoT`=7XEyZ{BKFBAk4ksMpzaxZaUBS~QigZbYhMwW-b|K>3-F{Zr zT>!nd-DVg(`Yk$>?t3C7--e9EG@yS;f`w zde^7-DhU#k4rKvPS#{B>LpkV<^Bc8pC1N2J6GODJQV%1!s=&6Vef>F=whbsr2?>NS1n(t^61cmM##xB@3!wogx>?2w zDC2UFu{p^PySH@e{ze_ya1`gbAHNAu_e#^nTkjDR3yM2B@4q}tEA!JFxYJ*XN*wvYVdVg6$rx4ryC}*-Eo;jZwarn5{3TATcEiC{no^tL-+B}qgswq2ZQLv! z`9^m7Y>IQ3&g|-8(ZcfNI9j9y!uH8b7^&_b_ebhDtzoaKn&{d08Troo)u?g_NepD6XZggb8DFLr24mFgXx~ zI+7Q@XOcoSBp*iuoEfUcli%Bd>$*aB%3aXQVwxS@QdU*xD1y_R=t)8e-W)LP<+JL% zJVCx4;P@}Z$054PV<0my+wS(&tLuhE$5gR!TD&oogzrl!-KH9RYof)`YBH=MNY2HB zM-Z|2jAD_-=FA$DxlPBL9o!uPhC%6SWN*#mD`=nPJ!A<^P|Xuz=!o;7!3xCak7l=g z$9y)vQVD^9oKE0L6d%ow_d>q_mZ0{;6I^@uy+F_TKQkW+e}eEZ3PQzDqq&WR4key5 zP8d))RO{z)%4ce5*ZM_tyTo!KpFG2_>j5r}8wKAe zv2Qybn$JjNwiGX!U9kb_DY$YwkEG)L09K+4snB`p?+pl|q@RHNa>8gEG*S_%EU2K! z2;&V*S1NjKp8Vgz38rHHSXv+PVZrfYR`ZIs7 z$5vEv%%^ZDtCh~rLMyaL){iHmrqSeyGwB)BPHj)gh4(qVQO zr7bjOWmr^7aV=oCM)2FDvT{ihA^KWFCnZU`T?Dc(h0gF9X-M)tk?KiaC~T@Y)=M~} z*^t2MU@tVycS$v2PEVffMACbN!Gd!de~!!+C7U*#?goYeqO( zCOTS+OvX!1z6ceM{~CN^wN*FGPexT^3_M#T+p-r3fR-l4;beedHZeHt78@@ljcsQE zAyi`dk64cz0KLSewZd{Zz{qN&^Pe^8Gx|O2aS2RsKR=LosDvS}MGT1w+-;oxty@h({<$v0y;RLC+ph1ctd zsKvEd7MsjbAl^8C3cx=D$i(2GpV(hnpro@$}K0&a;Ss>dUNs^7Eq zjYRFUimTVpePGD4@f60&!6=wa^QMvjt_?dqy?v;@5t&Ww-B)H;Jfk(rKU*AUWdD)I zU!YUGA+IXZ#kZc-))EiLliL!#?Xa5s|8@bqdc2?Q-^YDjPXgvo^JKr?tMn>9J~e7p ze@PBu%6FOIq+!+6E`aC)%B%ACZz1LD7`fTY?xVm)#^*`?vU9(t_T{o6yESQzQu}<| z|CY<`%EZv<>S<*q7vVPUr`j}xg~fH%!Dwi)ahHz5oEgCgX$Xgq4k#$FhJsFMTuiPY zB~&jY2=zXd-Qrk?MZ}+L9_ib@RA+Kz5v~*9*~i*Ecu`4Wi!862#kW4k8NKnTeS?fE zn{A4C9sTlT`IzkeG=2TMNiakMY;Ec>5SWi>PAhdlM;I0F4?%AjZm#`q9+@~9_?%(u z>+!nXx){{`8?etVUuv_hZ|_jbm~5x`yj)yo>`^>-km;t=r9fZ5OeUK&VjzB=XPmuS zFizDIkCwS54H6IAbS?{1kUx(|bV-5|N~J`+2y6@07+>VKp9*!~&y=jre+(>|CqV$E zaA=0gapMijI(A))S_kjW1>QF;qXqC-kdcbakbe9J*TgWmlW;U%$OJ>1+I zEH7x1$l(1aN_PASks0P$ZmA3fWkk@n&>V(i;Uj-?p&{qu$v*4r^ z!k6i~J%ns46e8(@BV+Y-EYfp{vm`Pky$PKS0^df=Ba)c*awF@OR+0UCn$6T?-schp z>bDq1#8F?4)0A&mCsjG*$8383zmst-d(*o5Bwh19mIQ@$$e>zHPl7hqGBY%9aN?vc|heA^b3HsDm08AqTiASU;qY2%1 zct{JJc0S8l3SG2PUYHit zjHda}No0PF(nbV%1H6k%nKwP&dAAd}vJXFHj5|r0+u!*#E@Y%AXgmV882&>zkH&dO zI2Cg+zky?C9=J?$-+k=;#N`8Q-?D}`Jwq7fwH6@Sq7N`^;CD75@3&D4trb}0H%1^R z>kfW(E_GrWC2$vSvQfhL6i&6wqlYsgJT$XKl%5p`K4gX6_dXaAx+){Mv)IxYFy~~+ zxC5?Ichr8%@4v#cuq|Eferdbq>sT^>g}`=X=kog%w8EUJjwBPu426+g61{2}*JRof zkm(?c<`Bb?@OSHK9iBXW>xydOwrUCZvs)gU3Z^)$zJ|p3ip!yU^~x07=MB<6EMHm{ zDkb(229!WLVA+Tz!4MhtZDHy#^hpcM`{~2zEfVeDW|3)0Qi$wYz`B=XGY=a2U5j(V zX`BL*B)j?}s+kNr1xqDIViKUZINK0L+b<~BqS{5t)SLAdh44XSbbf8{OoGEYO^STW z-_UL@4zU9CJl9LyeyvVszbv33XSzGHn-xE01q=kx>l72Yeh@LA*+A|AnI!$_XehHU z!H`5cQEGC`R98Qr>>xhZTT?#%-7?OhThI@r9%?NO`U8V}b^V6~C?pLm1>PRibC-Fc zPHMsR#H*pIp>1nF1~OGlcE)PMqN4vfxn+|pzvBd`W-w{~EGsvn<=f)S5q;OCM&=TW zdM?bWK$OTh&|2BJIA;RGs(c%}ce~_;5`+1E+I0@*>a}jFjz67x zHJ5XmtbyHF(CqzC&8$9Cmj04zl5#ME4hp&pj%95@*AKcIg84hS2OCcqb@9NP#)c`_5(_JFhrB@rd!C^n&?8X zmMS%6Xgv)vW2Kls&d5>?KM-%WPU{(?dw*nYLbsXV)PktJyGjR~gdAByl_L#2U(mNK zgtdRIVZ%tIU#otTvvsgm(6Z=?W6?!Z%c%z&+eHC3@$yTMwYNm_{9GQw#6Rz=RiZEc z;fnYHu&24pI*0hVFt27KHxJK>S@vJRvente{hwWfi5f4tTo0$GmQIi0MWle>ViLBa7Q?BdrNg*wK`Tn2KVHnX@HHuAQ z1nbWbof<#tU-*2C^zHFZ^0kvbj2~}ye%v{@ym`Ji?ED#jul`o?51-JUb2Mt7*}>2A z38zu2Jshwtis+LsOjg!>(3y)QI8xOl(riE)(okEsK;38zPQ;RZhJtz9QH!)w+DS%} z!@Lh=_b-&TId5DYJy0EoJw27_y%X@~JwCyg`hBGN<@E3`B(+^sGyiEvAZFnxno$;q zR$lR~@_yO!(4>0@Yom7oovP1$m3y8fZCZ~Z zL$gWgcV&y9^SbZWC_5J>S=)JEs^`!+8Ux)^uLzvHso>%yg%yB;Ly|(9lnGIp{z zm(gskX4-ANBH|tt@Ia*?oguswglVslmxo7=W+wXLdntpS5Dv3}22qzNDI7~jsdQc_ zA+x2!kL1Iw56f4_GgS|JC$1P?zY?iKk7O@Zd;1sV4m3thYa($W#7$v6jIK{_EndmOz)StXMea;U;!{pMv-ZoOyg6j(=|Vbz!V#aT%c7 z}dEh ze&2t489Dg?AOJJwtv1rlfR?2NwJlgcb?q=L9gd~C^*NS z-M$$vjR{T3sW?W#&EPCn9j*H9=w-|6LC&^iT<<${l&GCrwi?O%xX$_Ox}7;A|E;?D zXwqRCMn8gzY#?cvZ}QgTw3R7nyq4}oZ94dqbRfxUAJ$s9Rh)**?d7>m3N%ktoZQ7F zcBC|3RX5`#5?g90A9%*-b8S_UDm?%zS>dcsEjwbDoT8P!6V;Tp}z-gus z_!|#YdFto|9%yZ&#K}@$#S$ zzq^H%h)kCBb5@e`OyP)W1&1WlB87k0&$x}4%1Zi=cL$U;F$)?95!8_*MQ&whqcOiP zfkuyOlQtq?YYCjjP~tFFsTU84^rM=3fgrjTLu};x30g&R0f|F>$wi4d1T$1_#5e)c zG9Xq=yOiyN%f(LPJ;#rp^w#U5(gaVeQOCm_<}ZSaRzjEIcK#4lu|Mlj;RVD%z8 z$6#xP0oC3O>KO~MwF`usp4=@G2Tx17)&>%4<`e}m@T*zo)C3A+;7zb)T)voQ*)Zr! zrnD}`7h1rHMyY1)WUY3Yw&wjAkU0BYM8$jU^1A{sQV^ourN~<7JjqPMtVA;y75UTH zn*_L4I93vNO$V7#^Ch&xWUQp+aQcOrcxot(_xR+18}bkwN;Z%L1?-52LHSoLDI{&j zBHGO}4M=NXB@ZcR0gzjgiWw8=$Vj#Tgzpp$QpE_01WEi$D*qPc+sUiOA-D=Mdh1A# zDK1(y>)%kaB6I$=j&158wPIQ?d~DQVeAPdeigp5D429$Uq=W5?kX)D^^+6LWTaBHc8ymKx&c~I!?jXxKhcMP(*)-AK@``AkW}q`m6?j9QHbwa-0=#zKJf zFgT4m5THXdrK5=~vd|bOO6R{+Wud>Hsw0dxvX7ARu3H)AV&WAWr^+&LrBOx9=M50% zbHGmygr;K{3Avb?eLF}ZnFEIB=4?T$Fx8mAXctH($K(v11`apk2@%j7>MqO;cYbXT zP_~{N{40YiZR39(w0A-|(iDA>=>{=I5_+9Xxp3Qh?ASJbLX133BiP4e04#Hm(nTuC zgzi_buK%1$K7R0!WncJY==r?&dEeUmoMqwW=Jxtf``KzM618w?*p~E^2NCn?xNI)X+X>T zVnwf6{%L%uy<&XDM5iqJqE)r%_ZqJqmga`(L&?YV;V;C9hIcthQZ%EyNdU*P=hbH} z8Qp+`@&qSNo3V&RyHx89G(NOch6uh@Hc;7~GjKSy2zG|nQwuBSLh;z`Albsc_&jA& zxxQ^%^78Fc`q`$te=K;}Z2`s%X9_3iYX`W3$~?X$BN99$jt&cW7a5zz#-Rkzpy{Vc zXJR%D&Jpu+rAjLJ{)Bvg53!g6eMPvE;CLe2m^M!VR7*dkBd2YmGh#ia5YuRrXdTSn zYlwNjbUB~^&O4?1dI&sd1U)=#ujplwu5Ox58a0MB(^ro39JElW^454DHXktze13AllB^g}r? zK2yUlAgW-Wj#U*OUgHq|Jp^pLVaqqzzL`FK1U?$>Nc<-G4+lgqrf>#jNh#Y@acmFu zM8!EYwMHXrc}0T&`s2|0aDUT2nP3jxBFT2DB1L4RU!?n1 zB2DSKp{nPId;-9T*0NG&FfA%j_m!7{sh4Dk(gfmdhlYxls>J@YDDM^B0exiP zIJV0Q_e%S8jG{1-8F>hMKAxr@s{mUv5X<{r-HHC&iTS@1Hw!w+nR%KDZm0|J(2xG3 zWqt7H!rr5Rxo@~4)QgXNR5woQm{mIFgUd`nm6)&R7C!2GmsU08&Mky3+DJD8Q&p6B z&3e~(v907&@lQSTpFz``hea5R^OI(tN;f6?o|*}=@HS%eRT>O8#`3p_lC6)#KR&kp zaL@#eMw6CnVF1n+N2oz#-K`2Hm$-%os5XN1qzw%sqU$jGa@{7l==Bp4j@h_8e&n@) zvoH_GzPq~Q5Jwd|bA;B2Q_%8N5n6C27nw83v3XDEy*REk3I3G=YkKV7pAOF#$`h4v z{nLWri6slp64MW8DwnMBJX^0VRwK*zGeYFC*5npl0--ISEH*aLVuXV<2K0TD@Df}G zlGF8m-bVBuzjy9h9A3c&l}$#q1p^gFE2F_8eJ$_!iYWX3s(BEZ^ zEb7hiG>afmUo(B=l0_pQYNgdhY4YV4gMzvNI6gmL-tT4Dt8uLe*f-?vOPX?eYQG%y zEC6rN&nsWaa?IKJ=+Nl^f{m2D72w_dR5Yw%M4L)h{86kq7y?zAg{2} z+D8KPZ!GrK!4=8iwDCJ6r<+8m-?U#-X+ks^*+RlG#g4umc91AX5tp$7&NPuRi|ZgQ zQmPQyl6~1-ydj43%4)r7&qb7zvOAuuZ)mgH*+RzxJ~9|(Y)b^Vg$h>D8WXZDIv&@r zlB70&^vtk!gHW(L2m@~MOdTbW$trIH2VTJ{=Z7r+Q8EPy_J*9#LR+)ra8dPP3zPtWFYklz4t!fMjuk$R) zP;^k1g4P${cp-tGKAlG67aYtQ9keQ8ZEv^)5>*x))u7;7p&2ai;xC@7_e-P>F|E-I zBysl8*k9e@5?Ts?^La66ratg$Om@Y4U!}Pt;_RgrV zCzn~DGf^lb!Mp!5mx|vKzPmV1Te3#ZT25`vpeXb8b z9zNgd;k_q92Y$)Zc6(2U(Jcn3fUeI*L3k#H(cH1$AqRs#VqmO_paiuzdNF)#c6G9T z3YZ*)CPaaZR_QS+jYK`nOUaEAXyPt_u16gab!WFHS)JaOh##{3C9-ARgflR$Yp&3U zP@m1O|2H>0aN6OtP6MUzEGRciySXW6pVZ!WG!BafzWQnuPE42x+K;kSpPZhT6famG)SvTXhQAA2T-vf-vpPUuQrc| z#nhMQ*57qRjKCHkP~YwTAD-SRy0V6A8jWps+_9aGt&VNmwr$(CZQHhOCmkm{IeFf1 zod0gGi+#1ms8zFO%_;?j#$(bxrtFaw5Qxn4IY&h^w;hJKpnVBEa0WCmKt86?E+|Ef z6bDX2fKUH2$&@i_&i4hel0>+aN~_|dg_llw1 zIu=*;ll0CyYeX&In`V-a-)|>a(GRt?5{GjwM6BW82tW2UD|v(>&5HAkX%l~FFS(_V za$sokYgP#&?SQ6fV0RumIM^3PUNFpKyGzCNg=RrHgV%if36&pb?!yMgf(okBu&aBH zun1iIH?e4gWQ0z!(+FG`oC6LBmA0|%FxiHiSi3=Fizp9t3BzRL2>6Q>YEIK1gG#ot zu`VbKf(HqHYD;QEeb!;+6w(|o_K zC*C?xBm`axIf8JBqX$9qY#g2;>BIJfcoEi0mImlnOv2J+(1HkEhg!xKwe zmMVav0uzf$1U<59_@@)l1UAUtu+)S#dwvYp{4r0r+uvUle< z%;J3H@t(EoC?yr89~nKV9_5c^ri!1<^&UU_V8j;LIy4w7Co~JkYX5%}XdE9$=R-j6Hi>_+)i&60^i#Z{;2y$m1 z!sea11}Hhdv);aPl7+S133xQLYW68wGpEb=UkbUcVFo$pi%VI)uBE02|<>J4Sw z-=D#hVG=VM3)UF*@?g~o0s;}6`>hHLbqPJksvqST96@&}5>e%Dh!if%nQTEp`?Z*6 z@((w-x+qti*+cgERbvsIEr4vpPRvMHq@8XVqK7)KtP`mAP1zvwho9_sMQj`h_nW}n=O zq()yIGGpclWiNy{rZ!sBG`2uvh#>1Zn;`s+(Fvxxyj@iR4b8<+*h*RD?)!I>fEIGr zXgXAc?$@zG_S)3|Bn>xKvwdAF8=jZT&EHXxrXz z0!p3oOA!}V8+EJITeaOSz)k0EN#J(%`9H{y#hn_Ra;x_w(@@EfiMln0hR?W6lE#De zI;mt*RU~txN)BWt4k{TPqD1{|4V}3S$P#ECa8lD6GrfuADUuSazSr4YQmE|-6QC*} zViy$o2~-Ytujb zmhc_4r$=#BKoj}xCFF&Qq#0=7XQEVX`^GFZnhpp2@l$^ zjh|flgE$7V9M}g2wo$6+Q5p)HHNsq=xL4&NmXX#HYmhW?Iuxl8$4hYsWkFEQnHCye zRV9{+12sZP2p!hyuyhWTnG>PbvC12b10^OSAr3pnJuLPFl4*9HeKtQ_xOrZrwBv78 zkfs#EDE9#BHD{Vkv51xC;P?|s^Kn(yr+_WYykJGEJFZhHCMpZ{sXxG+fP*>YnHl>}+n3x#2rNOqv@}5K-G{(RtVX%@qokIJcw3WMXcfDr+ z&MOmp=Vvnf@taJ{gZXO1eTphEI|?6UCDevi8njV$eVhmwo!_ zbZ~~vr10=HzlgvB;H5@-R+fO(!kI#A6$qJ|$y2g{p+({Xf{}tTOtnY&A$7G#S|dHe zms7H#KbL4dsgXk3Lo{9Ez={`)Wq|^E4A0R+uDC}~VW8$@TlD`nim;^k)1h?d3{c*H z7P%shD^IQY#c2uG9iUk-J3-}^6}!36^S^hT-vGA!;_I%^X<$P2q9`Ibu0=LRK)0p9 z*Kj$fN=fuWGAbiPLrSsAYvqcIeYD%O&PbfTzjhuGdp|qR_Xk54`M&?v{&YP6WNpn~I9N_9|7)yKFw1W0)@dIeUO;+?o3xZ{jW-n>Mlm)gMM(qoZvA_~cYoZ(cHBJ_V|NDHxREE-Sl;7C6DesHG&Z(yEh!*V@eyyp8n6Yi zb~oR4dJ9E$Zl7$JXC#2{cx5aOjR;%|Icp&?-0(%_v@-X=Mk{%^!gcke*1l6 zTS6X75d8ZBNRbw^w-Nv~XL}$@9psmEK#d`{wTJ3}6=$3SV#-V9;~z-JVuUl(#i2b` zSM+{qWq6Ccu$DF|Mn>W%k4P3C7`Ze_p*0XhPk?Sxb6Ly=qvMSCNLXrTtZP4WSH$Xm z4`k>CrRCcM>yHEJeK(ZoEJuclBbOXffy08~tjHNgISoC&TbWeJZ8p@atbay${sx!eW?;fymf`todS)8EB@=q=@mDtEZWSwFT5%J$PEY z?RvaeB=$HH;X3J}hoJ8K+AS4mevx|&NcBjZnIdVP{l4hDBNXDHqG;o~xrip?();D7 z@t1I@?|7SD$O!8Egd$Mj{_R9!m%dLDp@3S7)i@4{x3CtJQw!b{vHp@}3f*{=IOjr8 z6TSu*HuqrwnH&@}j_n!^Z3q&cP18B6ikzuJED>~+1DIjcah{0kYx-BMd&mh$7qp3| zrR~Q03boW9x}dxW>-@+)51>m&fii1v3MFf9mGQ!yfZ3pMsP;8Xpci@MQE7&U*hoy? zXvYXis}D(id*aFK79^}q0*qJ&(pOBmrTi9TDBCy$4D6NQUwV7!sC`^8*{|-^Tw|n# z*))67-6uPC6nK=q6jzreI9SvHL{|q*O@YGpm_SEE-*6)#bZ(#KZ+*evU|Mrz2ph#= zBRraQBxSfY4td$dS3rMYTA?3xt$ojR-^z!6SIUOowYt*au!(O474oR^!A(+tV~B1| zpot)JPw=FMEm>Re(J&de*Su=@v}~}Bm9Fzx$;LKgHBed|w>?%&FZTmlh0yV+3f~}@ zj*g}`QzjDIxcx61MUZF7*qi(B(1*wV7alu=Kli)u?e6u+>gR~?CqIt7bCFG#JIm$P z5;HZQa1EieAL_)zMPZ|K~~!;9UzJkW!39Q6+?VVy{58%k7DQIiau2JpB5k;XqK zwDtb{%RCM&FbvF5d=p{4<+%)cb{Z657&AnKJTi+DcY#u31a)ABnu&OcUvV_l?s?%w z62b$I`GXw{KsiU`mwrDx{)CCqqBfEMwTnS7$kAf1GZS`qz>4Yx*_xf0x+f@(r_M=A4tLsTv5-iezV8sP2$Cqm7A6{1D zY9Xi_29Jkh%#JvYbeAWzqvH3zm6RJnOj)ak3Y(_32yVY-w<{}Uv?rSYaHZc9J4h0` z7vj5#=b;2XY0odMC8MzfQk$L~$IBuz-^2lRCh%vPoJ3uSta-pu!>S}ytSdnM$EaLo z^)#s7@%?Ih2}j!}3p1BVMtsi5!V_!A-bfJ9!5ezp>+3l^N}cTTo$TD)3f<;bVAk`T z>?1tsc09y?7aBfC)Wm5*++j&`yF>^CWn><~ZdyYZy}c9Pu1>$FGlwng^2>y&L!+Zm zVk%{dMq6MBB=prn1_rr8S>(3p#PZQXEnyfO!F(4WF(*11L2>!O8*AAWjPgu4UM*W_ z_aD-WkyDu!tt{%W36RqIezg)_`B9>5xPPV<3%h$}QE~{!QCtlYNz$qqe+oC3Syf-I zr$>9}G0${i{CY0V z$eH(2M?9HqAQMX<0<)xmwM7@TAD=d2*>BQhXZ^Z@JtJBBReZ`B=?-}ZF$iS#hZnVi z&OaHQh+hxayI+5So!?Xtf#M|WbPkyV)LSf_sQF7zs>v^9k%$z9AM24VGzh1}=|D4` z^S$S~)rs0@J?tnhJW7;YP1km1*UdDip~NUH1{8o&U$8NchZH57AmM`0BD-Y=998bb#?PiM0ggA*9HVuzFEAPE_nI-drJjxMO{CI4ggLwY z+_1KEb)bwYnxI`A-Yfm<>&Wmy+_ zUHq|Cpa&C(qtp@X%Y*nX1-6Z*RpZYtyXe9qU#GoR*Aw{Gsw$`0vSnf|os;~2I$y1h zMeuuoN)DO_AVHP7ccI`|TszxtK?H#>Tg9eo$Ib9JmcsQ-yNn6dfd0qc>rx_4qc7(b z&H7noeq#L&gn-;cdzJe@-$A5I5&x2I4gaNJ_B;3;OpIPOGjqmg(NM}qyoA z9mfJ@japQhaCGkwtBD1gASxh)F3Om0z*L4X3@z=w z`;>aSD{nPqcTPacr!bZfMH`YM=w^gg+v>Q6q;xHz4*9n_1dVclI@3sOw5e>4Rqy*U z{Zr5fYB${r`6i%~V1t}QU;=WzwRprQFiV&d0>2z|ZH;^77FDSpC=3lCt8%a0T;Dka zXtpsL7vMAgUVG?;BLz@ct>6Z+FApUd+y~LfHg7N95`SmsOnu!ABDVUzhUT7+U;V`| zK}-l)E*`A~fn*<{^k)fq z1rB)tjHA~&LuI@QXiaAmg)yhm0Y!qtsv#by(wGFr#9-@6WW~$biZT`SZr}W6$NO5KNvHz3+~1*A)=7`+Du#b7zEB z_1U}|(g&=%A?xTLgfQ8mbjW`;FE9^aY%uDurLvB6xhw=J0@RTS%II}HCtjL~i?-NW zct%O{^-~mV%VSKAZ?ZnP8z@Z>j(o2-^_)f;8<(EQ*x45{-uLM!LEo}-C#X1v$l76kZhSWR;Ae$`A=MErJBw4rE2(NsE&J$g;`_nN9F+1W?w z73l0>1!SpF2%E@K=LHscTW%?zt|5x6?=lxC@jy=cjb*F8ywe~^|I<7g>NSrD>8Z>m&z8{H@Qr}=m_1`)+idtSfK#~KMCYovTP08h zx2T2=8bKtVor{E3D@KJG{*>m7a>3?!kSYGsf?D0|gC`*v;d^iY#L%rqQ4te2$CwbY zGlNe0*m^W2vvQfiZMd1G9-}qvki4}j+4LT{s)rfJ*``td{a8q7Aw$S)2)u|kzWfIC z(J^Wf<{iGnzuP!d?Fcr5{F)--SMA*5#5-RMh*^E-*;=L2J$HqtwB1?25Rv5Mdt1~@ z)Hu9!uubuB+X3;K40*en`47Ibi0!PwWUT7Dc@TNnekyFM%#Akamr@6KcBb0n2XCDd*_MgG$qq&7bD~dfBN5 z9j!*KeRQIQO;o+_p1a-RT?{7m*0~#64>r>(6F~*CBT*$FVCh+bRx&(<9x3HBj}O&2 z6|@Z0bFfzsZaCMTkrq_!GA)OP_Wjh9RcFPngcKr9-pA%Db>4*XEFXyw^W+jHbOn{) zfGR%-Nc(xI<0Kq(N*H@C}EuK2?#J@xM}*o?IAJ3k#C zmU@s5)2{EimQJ{avjm(*^8{*o-PMSnbxTvpr(+mg2d(@rUbw$-x4}e!muM=UwvA$S zjo$rM9y=biE2rA7Jr{zusA9J}hW=@g1qd5H8gzb8cdJMojs|PTnr*-C>;J(|f5anM zezIjT&iMl0ZV8Ei9-Eb=V>%}Dw<;_={zD%~tz-*H1Ux!6sU?QP3z)VVYDFjA$RA72X0hhm9$?isWWDW0T37W&D!`A49k{|vrtHf*9r-4&9|I7ktAbQ`uGm512U zzVmEm(^Iob3aOiMcBlT{ky#rU6IBp9JK#PHPL@cNSK)T7$kpo?QVJUr7MR~V1hW5_ zzkD*hS+b_|9%l8#aaYgrLEvlE|Fy@=Gh4sGis#c+Yw~4Cl*Bqs^kl(2+h>PI=x%-;9=h3BR2EBZ8aL1$<4iG62Eraqi{y(y)0q6od_f^EB%V*3;WYcHkl~X`G--K-oiD7e zy9{EDet7rIXx=)6)-+h~2V8<9*q;l9W+~5H4i!U{tX?Tb+8G}R4uJTLc=JCB_)!_6 z8$&LZ6SN@oUQhLaKyZHQLcv0_5ryu_?!5xE?pJ{#S3gDHy&cJ{B&1}I@BHaU&#*|7JoAg3CnG{PO_A#-*YuasHViZDmoJ!1M?89*R0?U(_crWKlxo3LdF za~9|6C*;<`ZslBnZU*Jh+41nqg6%of)~lZRo`u9v*&MHSZEjyGXrAaw*p95%W212T zqYFQ7%%&pG#MQ24;JP9cjqZvkg4?81J$5A)_PY^G_G7imLlX1Vkg=PRFLwKKzO~S@ z8}hy)bS|`UYJ1?44YZUJ-=$Z2059R3ab;7qDj2!VpUGc0i0r(t$$kdWS?AWZf2_K2 zC^x_I`I zE1g{OfZOd>dI$vR4M6ig^t)Af^VM`TZR4BOjm;jRQDfuZ0rQ~*R^R)4pC8wYvV7Y= zVZN{H&!c=kI)l#}z2JT;``l)|Omyb!BC(z)7G&*Z)^Tp*I#|3cHooyCu^a zoYI;oFg3b~)~w`Yf4(}1)Bm}sdN8FFdnw9JSRg}8-6JnPSX;5;hFGvJQ_)r|*ekz1 z6w5?N@|w*%9G`uOn_OFcZb{~I9GH8)U!?2Q`CX}j z%EQwcyy zq_`V*R&Pxy5gTsx)~_hKEN2wn-$qz1_3+V)p-@j&Ssk<>i#C@&mGQ?v{(6cfTrBF` zwr6rBec}tC0ZE52w3{NC&W>8PQm6|^Z|HOSKEJJ0odSJ5lh$?%EjPr{+&_@i;fnIQ z92F%AGp{rG8Iz@RTsC$Y$W-i#9HgjH7$D%{!E$@p>d{=AM5Q^b4?m6=6}C%qzA5!I z$NYG@(m#dVg)wSAi%6xTq=1N{eHi#NNNSt6S3P-2CfI8!EVnCsMIkVFhOr)8DhNGK zR62XlXryr>=y#$Q@m{f38)+JwW~g2FXFRw9sx1iSv^{LR|D+tZp3dgH3DO08nyk=T=jxtIOHZAdRkBOy zG5TB&>*TePdtTUAK3&U3Upse%+iZM@iPzCDbuf~oZd_nLmtg&&_*QY6A zC=&??K33sZeqknLT^^Rmk0{zyKxzWP6Qb{W%G?k)UxDD%PUj00rs1nx;+c7B-k zpl^5@>R&reP-9V#>R_lu6=l=C3@vLOd=_+7;PZVp@_c@z?&VAmyvyV+)*w%E2;hJ` zs!~SqX_l(x0kV~)Y=rI`J$Jq3zIpFY&(YZ0j#`JNU_;uGQ!-UFdRdg{ zbQ4Eclu5|a{1u3pdGG-S3=knGR&GI>IJOaK(R4Aghw1d9!cYQSRF3?~Haj z`VH|sSf6tIl`;g)_e2Y9Fg{K@nZzCO6~=9`=D$;Zsa;|^EfViOx0SE?NZ4BWTf0Yy zFMyj!SkuDpOvg&5^10A&WV|WZn_VXIN$)$|{h&9%i9lsC1O8gE@xFZ}DYfJG-S0eaO6kv>!o>f^We3@WQc;qq3x+Lw|Q-aR3k3sVxI0`6`d75f0jM?$8$Kz zj4keVLQuZ{y{A%go#cx>?-o}}5xzxyXSd=WE(2Jkty5ECN5BLCX{>b-t1ba(bncTP zQucYfq28?xOcM3+*2ouMK6iL=ZltjA5{XAH^TS88nUq4Dky`NhUZo@Fyk%O4*r5_l z#+V|XXY8Udnou>DOj+LeUvWv;>{+ zotZ>>TGLrGevBYK{*oOC{N|wt1%5`UA3?2N?Tm&a3}pGGAW`6cN_2BIibyUFa)+x9 zH$+&eDM(WkN*R_`=v2U{DP0{CeIh?hcjXr&TrwZdXSv;-)6647rAk;RgRM|hUOYl| z`z}%UDqwONszXy4n5`|D6!i~A?>lZWW&##~u>yOIXitpv60wJQ#sfFcbu9Z<2SWce zRjcR`IVaHU%!G-Uwj9*@9Y)Cf_;J2yy4g6|yU7c9-FLCK7cdo#VxqVwcdWmt#2SA| zP#?FgQ6-?p?JV0NR7>=YwN}=^n1U%)5Gw1@>*dvw#Eq#NxTO2 zDIQ3pXm85H;`9^O|JDJlrrod8r9I_fEmNWsGc)%NX&h2tfiyn@^8e2Qm@H4m^}1v= z&+c8SGHrNA1hICig(9Dh{l zwk8|f*IegD3oH6nB?z&!@$1Qws#5n)eD!V#!qQcw`#n9XK0V78OS>N$YR4}Cdw4c$ z>|dE2N>IA1M`&!$D_l1(Pw(zzkDxZm=1eb$W)f!Ceg$GNO;1CQI!kGEN$ z9>D!SdWZaGk4*b47y)8L>lXBIbBXA3!`&o(9K^2eXK7aXuv=Q)-wphN}SN_blJdmfi%oZ$npnh&3f@tv zmA&v7J~NMW8i#oL8nAO;!#0wh1oC28mMEhQMjl?N!Pj5`ZW$zO9c1gCPsdP?Ibg$US7&-fGxR9?472ZE^CLp+cC-w*j3on@oCON$KSSJdCMY zeEIvhTKmWzf0md?IHJD2s2D^JQLkcE@*gF92|kv-Yd7hdo{u@69u6_nc`Rm;7lHg0 zq|GK9PcrnNz2Ktrf^akxP|ejL{%;?Wz#5VFRnAsxe+~zc+4pUSM9zm~H4DyqCwMn6<;2 z7SDP5KMF=03v}sWh52w?@DImhL&fqlIj5v!;Utsoz%sGzylGT`lL+^2cKSbT`;n=B zfJzjs0g}Ckd5iK{(m62J7xv}w`evJJlc3kFt9xmh4_D?sPH86bpLRUJ@KOA0NBk)( zm-sF_whxDXFGjnZcVO}17o-+U^viTtLB<4A!OUVS=iEwSt19N~(^9oh*!%dZ$G}y( zIc}x#IXVRYJ0dM?!<$K3V!dC?)p?M$WRjc=(weLjyB_WEd@+P3qw*=VXktVRcL$`w zPF`ObK zIGRHCgII4Ot~ibXGi2(%>Myzo4rrvAz7(TT$BeW;aWbX)W(~FSlStWd^wK4+3fvq) z>0eLbaTIRqV)N7^>KH~OC}ncOWihl zu++$upXCPswpnVh>8ufD&WHL@l7|LDjVU+7Wm?Vs*%bP(%SIp^#j2N)jBWKt_hS6i zjJl?+e2r@jf4-iJJ_9EFW*>rhSmZ|KO1U9gAO2ZxJzA9xYkNVB8(jx{r8$e$S$;8_ zK#;QS-^Z>M^>~mHVgu|4M9k!zP~gRzVabbh5wOm4i)CKqb%#-+Cb}lGzhfjgXa^7b z4c%OVh?2L*nx*T#fUR%rq(lx|TaI9A4VS4#l=m7CaMmVJfw?|`7uZ{pM4QG+yTw7t zJO&}fMl>ati<>S>mkT0~=!W}d2p+lMv(Oj4ymA7@jC&Lkzpq9K1JF<`lT_1oo6RB5z11Y%d4%75a7eA$ps-nGnK7`uHks>sJCtg6wYjy3aA)iIK60Qs$jOS1mlOlZhyS8H$jw@v)u- zHHpV-N8qxbfc)b&sb@`eLxNCh)1nxn<0P3S47vgxFlZAG83Iw@lpA!kHsZg`-S1`kE}ycTM> zns5M?#OcRt^YYFJK7Z#qFYZVkdVRI*(*iur{ERH9eN|#?f7TOrL4VYLTfHAL)=R{o zN=xl_Wm~t>++j27 z&+EZ97fZ9i=di-MzczH2U&M01FK-jrykncDbY+ESc>r{O_o6ZF97l>eXB+fJsjqRD z=En#q`uDF-W4Y*|&h0PQs z*#;Ua1YExAa{{{rIxV`P#`N-jcaWcBYPllx7_8!v?ejOFDg?rs1m9j|*6A~XgQAKQ zllZS71ZoFs7|*oHaJqA@>r6?~49`t`PNa+G!@(+4J*2m}WZvXj^;9HFR)y7)2_qABJ@vj&5E|0@qLqOQknGE;!nwOB}vACptaS z!X6!oIE|RWW?07|(WK>d+p7t8kuq6h&tx0M=pC&VP*)nf-A3Wi>eiB~RHQDoC{++T zw~Wag%AY9)MH;wOE-Y2B(UIUlqarH|nkS%S;-jXyi4EQ`ocgM%S$&|%QUg2a@|Jdcg@@sKF4ma#pN_X7l4>gU-0jWEHSC*xMWbsN6Vud@~>roHcB#% zO4`8FmOGe6qD<-RUdX!$#+lbS$QN+TD#b(DtSy_Wamajf@kdDvxVmC4YqT&J8K^b- z@oq|5`MNbT&D=DYzu?W5i)x3SS+?rrF(*wWp<*M>v&_N%tdbGf=6U9_ep7x z&RMb@J>Ue-i~hTNSC;R<)xcR#X?nfaaEFj|>^EhxJQ03+!KT7IY17pAf)jzn-gabm zcbUKexX{*)w3CD8FW4N+a)-J`s%q!@ne+cf#hzp2wOaL_-u0aN1@ZM0%kGb5&ni#e z{h8`N3CSte@)Vw*7+k6U58iHV!PdTRTW`Ev&&HHbsR+2+8Uc6Drkj9|mzG_?e&qG| zBCNON?_9tbZ;9!ud+hz!$l=u+2gogo|0Vt2io_VOAuSqxW<3`xLdH6@;jyp;I?wsj z!Nr@){nh!imaLby4)@{=4lI-FVg2SwH%C%l=Ar6_*pKS#AbjsB(iSfw1jMhjpT9RPgN^1rUDZ!gIB> z+c<)oZ|21-=T6mU(B){87U22J<>Yy~^n4UPp1*PBZVteyi6uUC+T@Nl&P$w6?Yc zyj`u^ov2n$ob7bPx1YzYRBT}quCC^>7UPOpN_hW#&910;^EJ@CxCi{^{tZ68HUyAJ z6nlczN%R_z{Oe~N+)CZqJT9j%OTdN4XQqcHOnT_q-7g3`0aj(?%tqj zC1F^|sMN6$V)iG`?2bDrFgM~u*N|HcHts1xz&9>b)VqaInA$u;dD;?2H4HjyrPVm& zpW=JJfDVoEN?}ps7-qp zHgytDF&v8`2kh|~V4`{5X~j`4P0-I~usnG6r3|~?PvHwr-0-w{iqT#p6_mLdb{rc~ zp`O>yB1jMHoIy8d>bUfiUgl8@_*eR4e9`ppfmTB zm*9Wy;-{1?0`?6s)jq>05PK{=13vqsx4s)l8HI*=0N)&w_>@$?0%L3j9{bgzq!xOe zKbM?B@a0rIiIG*zI6MMdH0GT?6TNWR7J19~GCV`w%lh{4<~S`6c#QG!38n1FED@#A z%t>T!!53^4ytMvl20`aRjQ!=yZcRu}ztrEPl zny?AGUB}~_Iu_i2mbg4CrKwe1@OZ8UNjpuqu;>+(`*ig&fyw59di^hDBfjOKGx<38Bg7+9)qA_sTy^ z%zP9#xG{xuoXPv7$NERBT(kZYEWU?ZToMUnYc1#@$&@i2hu%?%N`cGBV@uOAJF+I- zFvv~lRbZqemF7^>>@U)DKHXr7-m2UwE3wJ;F^`@87Yti%G9OBleeTuaAbBD+wS$ij zbkB}8K!i5u?L1wutKKkw$&$UAP;Va3*V5$tKkx z57vBR9fN$6aZ5?h*0oYp1l!1%ofP5EAHLwb34UNmoj@hBFE7v!QPu4ixtJ{FrNK$H z_->3?;EduRJ#dx#Nr3gN+RFUgUh`u%t^o<#9m$JaL_`0XRnEjJ7(p-jrnqDVlUsBR z$72ZcP}%(DNeWbp?&S)J^oNm3Ns*bvCT;`oebEEMF-pW7r`uZ;+EjckVP|axi>9iM zkb)MxLR|-b!CI0N#|KWqXtaUF`(n{a5@aav*baUqO2{cdmM2CX0g2S9u~_YiNIn0T z>>bY5FV+HvpUde&c#5{m*Ec~Brzp;6w1+A$mtkw<0$g=N^~r~&1*%j3LXEUQa*fhQ z&g!8O4#?u9ebcBHF`Hz1>&XpcHaw2L%988OLJ_1G?;EuUtIX16$YyUlFX8SQ`VouX zkQOTYp;_*$v183za@#l+{|ZBbuqYfuQ+_D?q-BD-wc3Dv@_}$XUV*|O#o~%ir81$K zV^_febU(2*wL~*`IWI{)0>%%ehu3Q19V)`9ln;H)G8p}P_s8Ae#fvU*MNzDrRp`3~ zWy@spD_Wnn{dCvIJNY_c#s(hbP)icUl`W)rM``9xi)?>azG!>Zyzf8HpJ%^6akfbw zpPtWS@vUBLc41?ZlSJHK^?jv>CXDDM0%Lf1KY|kBVNUt;I8n;SoU`LWXZKqzUbltn zxLNPgx^N{)#!A>x(`@0WITOZA@a^PQ0a>%4*FIw--M$^eRH1MahEPX zw(-_h-cKmTf0Cs1yzn;_$k<-KF{{N8dN9dye1>D2t6r5tnNr2h4qDf!ylt5E=<5 z%7J_gCdQMqe2}PH!G(JrE~_vid-j#I%d1We!zQMs zqh+P*b>E)b2e^;*F(WVuS-GOQAs~Bkrb$>6FdB)LFy;T1;_?Y%}@| z^O$ra(}IoFc|J~=&X=ijHyDw9sghbhK+$qL?LQDkX3No0@sNcn@ zbZS9K85>+rYBj%^@0z@Dxtu50+G6o?nXk!UPp-1Lx^kx4e(h-@WS$Q3is9?dd(%gR zPfft(yLcf3kK8AAU5>2D7o&;D!;#lN7B064xt46dQ?2j*{FF2hIe&(d7B2wZLu+`W zc*WdcQu$@n%Wv0?R`UFYGVs)c5hr!Q*$k$yl^DX+CAAXSDX(g35puY|I>lq2Bf0H1zBxxm%&PY!_)HTH!ZW4 zRbGPaE>q$X<{2T~j-0iK@?@^tGX9XyhyI&Ma%zaQi=Vdi`U)Vd0Zp^gLzB(=JhNE8 zrS5`dT{TC1YMa&2p-jE`QPa|Y6S~zl@aGU}eE>HB8~(adSDSaY$K%uN<6^S5HP*-N zJkoTnJ-^ft3i1Pq?Lv8JXQr z6Ch+Qh=!=SXjIG#0hx@HuUq1--hK=Go#rj9kCN|;!j$Sw6f>Olp){Q2g_%%MbooD< z#Fq$vS&)l?+)p#S%UppHvGrS8SuKx*U|EJWO zfUN;5U3e=dd%@miwsBuQJ`~%0&THa0rD*Qba~x)Ci;A1`adyUC$x4L(=iI-;i~bM3 z8iBJG@%F-_8&>nR(nN`(G>pDe^gROA-qf6GV*;0{%*{ z*Lw9&{cr3PH1I~#^i;9s_-}Q9UWl@c?B%s54CDmx3^SZuh~>g zPQ)O}DY${XTN`^lWodVRm(U!%wv5#)Cl2o3%F__?LEBosi*U3r~1VN+fa+e8V(D&$m5zY;K*x=t7k~TIo zBv#bF01C|IpEt)Iu(Q`g(;Czp<;B#8{OxYoP^@TIv?o|`qE@m(v8r!7lr}-Ns`3?o z-`ORiNd`x6C6mEsZc0ot1ioyOs?pFnnW(XXGrk>^ue>}_&8vwSP|2o`nILnAXpb3+ zy)!2<5Efm~W%$Rx#S;oA-J3)A%7W_W;7`aEGQY3@f}1Z>XHj&~o4*-stF`NkfEuH= ztr!ahEBovTci36GUKJ;U>d#SHe+uA2!Wehjd;i@%0Ts=>R*zK58?*A2GF0a(EAbi( zk;p5nc`mabsJ>rkn=-oP6{@+eQ4mf@M7QxX@|tBj2KGot33tmjlz#UIYLi}9CJj*2$#y&~XUt2Cmd#A13gM6Gm3r(1-RyT$~PNj=f{B6_# zu&h$MR9Md4SyM3$K~sBmdK{;gC0H6*BUik7j^$1C;TG% zcLo=5_!~xKbV8-WT+~q$`|Iv1r{NzQe>&2*uzvXEvS5`iX?(7bfv?f`=pEAw7_1%P zJe)A*?i6{w*c~Q}z-^f`^;wUlABFFGMS_}=|=Zk#9(3;)<(ztus07@;vHVdpuqQyNbKalNCcE?Q zcP1qeUDqzh&ZxE90UqMe!h5A$qP@}+k!!)y-3xvYM(NSp@a2WU6W!&?J+@6ps2h8z z*n)Y3jj@A{djU*AoFIV>zx$1v>?Yr$^%mdt_2vYZt$jmB9Vv*dFy-^Z52It#h2LL|Gr$^ODmqJ-=Bi~H)PrN)+k_uIOjU8s; zWsk_}*~3T{BmS9zL{>R}3)TH-iSpuEnM2a1Og4X>$|28^qA`$~bI{!D7iAEbe8#iP zQF{$3`r?Fjl>f2k!L#Vb8hER@bLgG)7k_MR+<}CW7o9TvU*WEp40`8$f(P*B=dC2Q z=Wg{+Le&vfSx6n%aUWGJXE$7v(%b~+u*!}A+jy1OJ^9F_L7mKHC0&gvMzyaIE2}h_ z%Yk=J6t~3$))ZKB`m6@H-;5h5LJi{^=sC#5DIC;HvEziks&L*}TRL~_>UGh<_UA5r zS+?ACnih`iZ8S;*r%IJy!8L$N{gVn$d+U}49$-)myxHqc&7MOfAS(O>9C#aZQ8aVs zqO{g?b3iIjzd8v{f{wpMWF10TNKc=k)Gj2fEYh-{f?c+H1F5-@k%BXv#>p7#u`*UEHHT$mQG}R7fkI zYD)+|_a(*xQ{K_yNHA;-X`*a35yu)+q;j<{(ctzC*5*Y-+jqEh_3bw)B!u`%jOg42Ffn>$&@(3E{jEIG2pe=?)tji~{NTe(_|L^+YF?IU&1iqR=rU36 z{_h_iqW}PrJRyRgWE;C+GHfBPe7#bwGCvmfA-6L2OCo>@YvbZ0$3UnvNw&;Xn=&y2 zFfFe9ERdRNx&u`M&XNj?INtakq4x75Ij+ia4uEY9xPvXKBJ#?i>L*^1y_$cW(6JOq z2Xx$e=;f*5i-o80c8soT&ws#_W@>H-|GE8VwLsujl9sxHZLUi|T&Wj)$@wFTFfR5Z zPCNf{7~`()e-Cc{9;X zR1>MaBEI<03(~B*j~?SCw&rWwWG|lvRrTx4}2XUZY*l`9#d>yA;i%A=*%|oCm6g(PLX05wqj@ghaBOjqmiG0 zFIhYt6fL_=FMZ2l1D3#Vu$wHdwrF!WK^!z`OViY{Vz^KF&5zvcs zE6FRE@65GSWYn)K{d@LH#vqI*Z@$^72OdOjNZSAPJ+`|~;C3%g59i#6MLfOBXY&{E7~mQZ$D zq?CtbGcFAi0qU`b0txq^JfH0sP+?|ohx5Y)xI>nIMdxFm%B|qW50upP+90FBJ3GLA z!LkeMzeW_a^el9vh8qB2C4{gYoV^latRuiev+Eq%-j%(hKJe4_En%w-v?)}H6XzvpGBo(0VGsZjalK=e1T!EipM7Uba+kkSs7<++KkXYqimO z;CiEAjlKPYjJPo7DEy$hGHUPZc4{J@`xOgBrE=N6ZzXc!fe9v!_ZYj@Vkqf~n5esdl^IM8dy$!Y-}A!)!bS` zdfE%ikJVhOQ6lO->#R3dX7do*AQ~*P5>;Y|0lBZ7BMLSy2*5qEfU-sjGo{t)0$2Pq zzCF|xz<+(+-mEg`?2idCoK7BYz)A@6c!K{7OEn z;jGtAl=QSxn#+3*#KEl;dYfXhr3f4+UkT_Z49&$G0kkM zeQ5z!Pn-`DpcjxcDI~9)%{Ol6dP%h`5*F#7jiSax?cUw%7m&1 ze?XJ7%U03)W%?azi*!>(BK$TmQ5xJCw0-{ZzrF$(Vd36p@;^69Yv@gzFHKaQ z($2(xOE3IbWFTv@9l9&F=G@-z=sv*!yS8cT&CPj)-1Hyio-9L!DCeyPC=7!3Iijgh z^SHx$vc1KuMM?jX;Qg1-@4Bh7-BuO_Yaa-mk+bQx?DD0A*VkXrJmdbH6&r*_zi;OIl2V-y;(=ay`$rZo8{#~1JMia6}k`xstm z*HwF3hY%LOmtc_V6Qt~4;1qOfI7Hh?WxYH!2fx$+Z|{1kDsLp2E@*}J6MM&CJQ?fh zxbRdvY=)i0(-(T7yp%{jcUQi3LkTo8!%hp{YH*8Q|=SlEoF6-rd$je>73npAR=mZR{j(Rt9*do9P zCo@6gtXApG&Va6%SCKC4yStMCC)<*+%5`k1>4=+t^<*-f?um11aw`2 z{&5exzp`dyws+S~b4x(hA%B6AMJmvPmgCO*iPyPX;3+)Zf2z*RF<+@U>(*gf-W+2F zW7|$Ib}V1u8W;q(?hW8w?^91W17?2TcuH#vgJMqz-g%ym%m} z_Q9yTO|7A?CNByD-q8x0b>ZE+J{lATqe3j|xNcNOp_ci3FlZ*iY!tU9KgXpG9fNG0 zsW~<*K+02kXl%Gyi~cfkT8pm&hu=3#-4%>hoHV-Dtg0s?eO3|=0+A3%t1i(&Oofrn zCRMI5%ABjVgmlOj46&V@)~VBcNFQ4L2g56>@&gqOkwC5}>5npXkDqh{l^lfwC{-g^ z8POHYdQ^*@QAxP(pJetuc;QAiwBqboM)?LGfW4~&HBGg=TnbsWg z7*RU%{ukmps(+EsDxqaraB6ilq+`-wS##^`^DM$I#|Mn0VaE2d)>ct=KqP?rk1?kG zIVxRiUEq_;%V`;)iF*xE`#7xQF31tNr*33%NF-uep6``o_w~e|{a<0*FF74qGCTeL z1w>w-GAh`1{;pKjBLb8eH4Gr376T7?PkMCO;YjO1ghU0#@UJIskz{EQGrG}mVa)zi zsXF>;+{xJEXLxVmmI6CuHC~tI>fz@AOdM2g!lorkci4+lZ33(wo&IMOwI87sOAD|; znq7H5E3EYyPXX>l79v2Ez}g&OL(dEGCO|$bs)_5;m1OcF>;DH%v{OJ@JRK3yh!?*v zPIr>?U)pP0)9izgrT}+}8LJ;2z@9Z2PD;_*yZWiqG~uD7se8(*mrTL?&t>$nQEa<0 zDgdP&{|L4|ZNN48+^S}&U?2y@GO}Iw)KOKo^I6aR`96t@y5njf>|pM)(HVST3C=oAXhVI>OLc*#0sE~LwEgoHxR`4|ng z-YAO+(+WaP=qoxc-vc6Gy=XNXeuy(Y^H7&?sED5V0WF??v|g<`Uj=>SmZ>HaBD{8b zpS7iKEbZ9t%S{*6bn7$LZ>^)9_?)sT)rC~Iu{(1 zheKAU(1#F(?6H{^r+b0xtA=yguS9l-+&tO862B47_MhVjs6x60h+Dp4^4K`eLPHw; z7ARu-&C(&QX3&b4vzV-X{@D=cm}`;||M=BN5e3u2ntwYs!GY$RS2=tlb~gf z%d+ea6DouI0qkqjuaUn@*=L{LFJf;-=bMU+uu~e~8>^i*nXjfN$+{b~kHsiR*Xh!l))OO6H=dS9+o&=!4osdOex@-`~pA@N+z zO6C@@(tyFsIA|M3Dkc@Yh^)EevKR*W3p&+<50bF6jfxX4< z6Wm@=WifYGvuHB-rr2_+;rWy1crG+n^e}U(9Cp;X=Tgr zh5DS{nT4@31t4MCdvGVTmn<3Z77q}$)*iS-2&TA1Ueh?xq_KNkhN{lkKxpyDog)3( zkPMP}Hdi@Ob*4YE4P{h8c3(|I`?bXefsx49Vv$=2Mlum)^dulhE%dW zCw%OOHq;&{2ojcc&`$-J(c~&@M3f>_aaT*^WSX%<0jvyhDg=v?e2Q5h3$B+ zVK|ioNeN~nV}X#i+Go5zOe+9i$1l=s(rBFZhEW|vdHfhXcfTDq+4S9I&mmc;y&EHT zlrqqP8mb|xPmeEsZ;ElIC)8))Pb#QejG!f^23fXP$j?ZGG?h&*c7D!N4$pXzImlm5 z**rQIS*z^@bl5icYwK06zPniB^t5P|NV{lCU&hR(F-QBj2AM^f`Mb5!@ zzOdfrSbh7Ws!(_=(CPw$Jv^b zYVrYEb{BZ*PHgRbhcyQ1oEG+<(s`U}I zOWK9l!tB~cVXq*w-7{yaW8o~@Q-T$IQMh266e-&=cMypV|D&3wg$LeUBy+9%P}xII zKAsF6EX&;uVRx0cRX+!#6;-LG)$E?Lh4r!$z<0 zGXFhY%e`x3&Rm2VU4M109a}KiziN&eXR5!`fq$2KC0$l)o;CUoKkpbQOuVKv|7k?| zngm(|tu-}WdVajDMQA$nU~}}m599%wj#|w*zhpMr6v(=BQkLuT<I9a-F>b7KV!RC~tM;6865~_&@G9@AFP+On<8edgv~2pr!vm87gO4d@Fvn)9 z#7soTLQKkORn=Z6aS~xcgGFA^48kWW(Am!DEkDv~>1u)w&9Hs?8fWP63sDIq-hSz} zO4%sfn;?$|(=2s8G3Y+SKf@9q7sg0OCC)G}Xe}$zM=6#bcQuU1`k4Y;`z5hUO7xG6 ziptH`Kve~KHTYZqjNzMiIcehK_GXfs^9omz)M|rQcetZ!W*z%pm(3CC4C(Yn zZ;5RWrY&J5{fj9YbY52Pj8t*6kb{fTauZ`37uYDpJ=2-i?wu2~Pl*gYok8p6YN+yq zITMEX@(ezjK@jnFV+k)g&fY5NH)xB?fvdN(;d@Ylp%Rl(<$pdj_T;>-0URL){i(B~ zG(`#Ob&DpYb_PL=;@!8ZFHrR|n$%*KYGgD$=YsVr|2TE#y5vm#(x(!@J6-RmXQ0E3 zD#yBM;SB+mDtX2R*2z1l3PKqSr9zFf08cz89$kr4D68ZQtt@D>3$G~GF;iX2MgN>f z7ovabU&%@=K6obeNo+Tlq+^fhAf;2;EBn0|F_~s`{5r?94Ar&N^w^9@}lhVUmqFJ?&u40Z>YBI?j zO+bps|CvbO@pNzDb$@nne|?O}>O3&j0!JnJ(8cxqTpz|Vh6QcVcA(r^&AOMcpP3;k zZN=#GXHnStA=a&;m~U9n<%F;|Lb0D2Y2QnAX=dCDYk%;bJXE&lur>`KY=5na{xsOn1v8qwAZTfKAJAy&k&hyE*dG5^wdcnB!iJ=A zRt~1y=zhOT$?Wd%6h5L@h6paPM4&o~L-n`?7eP-A{NG0DOa^Ij`(z_l_aJcQ(({u4 z44j5R%Dj>T2719zKE3R}w0vd#t|+rgw>b_qTs$6x-g1SwCksTwG!*z(Rn_ z))0AaZ*E`D^mux5DhX?07HKcjn;GWzW99`?xqRz?~%PQpX;aCebghi&b>S|GiGS?AK>on$$1XV!)D1Q4$T&yeNrC10 z5#nNsKx}#_`M4bXK0cNR-v|J@L=cL(Jbv?#$ZoC2K)h2jhv^#!XENsd3Vq{$xOF=v zHQ_sUsGN-0e}Rr3_6<7uq6tJj6BHJU{Bek0Eo3_;=#-c9jnHf{q**PO{#~zmb~Wl> zUJ58GBG6SfV@A^g`6A*-AH!gQ*SdzA9!E?5KmsnU zWVw~wf+PJ+_%CX&jyxx#6McDnegPS@d6*y{%Pnu74`}!se&PI@ai~ToQC9huVRhqTAJq5HUEBcw06|BWW5D^e*qmF z{OVw!tTkbmNkKmeW>zctLyU}**YeC4{Go@bxAj*1+lA3Ev(_uivd}=ucx#+V|DCJa zezLv7I7O2xACkkp*eO4;eUDZlrQtPwklXA!aws<`B*xs*wWBn${>Zyguw^A4U#7+N z2k;Nv)c<&BA1g&kG#wiu2`cRRV2emg>L&DGviTc>a(}2E{C6(?$8YvdOV-_()zP#0 z{_@KHo$y!n)}*EdN7aa_Kb+guiF?+G#QK_Z6My?Wr#)|Vzg77I<%$=jUc;8_n>?lv zdR?`Ht#>1zsNGBYr-Q>Xw0j0dtB@NbG34_TJ>^_J99c`!AV`|(TFpH3ei;~;1F?0v zj`=ixFV9;)f-{48%*G6yD{fwJ3dPlQN1HREEJT6TFT4MF9-!08IDD0}pC@=ZPOU6; zacV(uQxd?9#pgny0pmILuMxiQvkB$MbbhAXS;n^HPJ95U*Mu8?Dv!`g;KrS!a6FNo zs;8f_A8WQJV6n%j|7#Yt`DZUOtLo<>W(?OYWqx6!m?n!=Res;WwUvdacM3$#JM*-OR|dOFIy}t1$Ye|^7**tLz4>f ztz{3-_BAr9+D&8FJU*`0?spXCpjlbj!y5vi%|F4tyeVnzcqw#PaE(NkHo_3QmdCwA zoBI*iDW}Lv4@pp1bl7(E6kd==_3N0okM>cCVfFo@Kk96eKSq~+Z~|XDW6d^n1C#2L ze!Yb0lZ0!N#*17d?%t_FDEqb>Uwn1=fdS#o?cT9Dx~tW8bbkwugKCw+`+l5k6P0Y{ znIq{l2=3j*K#;;ie>rAa4kod}w@9cKl$d$k@$osCd-{Ub7$#t7q@rDwfIFe5_327I zvQ0ZNuyL@Rfzj{TnQYjBD{nD>+9e~2E$oeyL?GY})cZB=bN&>0VWQ|`3!BYi7t)nL z;d~TP;Q!BSOc(ppt{>lMf2~K7gXJ@Vh+g89V{^* zAWuFnsYX_R(JeSZQ{?$!p&Nba5-iahfyD@U?e_<-hTwbfvk7y9h5ZL$?pyztA z&2EVcc?hFZT!vV1=-MBeG`e0DycTOv=W2!ImQ5=F2nUZo=B68!QRxjdb&~K<%+5Tpf+?0QRswD z532Bhad3Q+14@U@Sl#_%VwQlf`x@Bz_cP{FRg75{vP5rIZ6%ihT~F`EYY`}X)kH72 z1UTfWw#FVg-g)3c0N*r0Di zG}g6j;ay-*%R4IraI1e)vlE|4K9{I3Na~KDZu;{^hE39yo-O=4JSO$L86CG@tbPC>oq6nCyRe^*4+OnbeCvX zb~%G>krYy>{ zh-4x@x2`%ql-#!*hKa^`3i>rVp;e9oFV^m}B1rn7o-C#YmNpr8>4v!@?vyZN!n2*o zpY_KPS&8AMF^Ge*JQ`h$M$doKaK=&INV(EU+y~-Hm$9;>kw5N85eUs_7{tqH6IIu& z5(s945L9H$U_YX_nsa2+8qN8?ET8RSH{bc03vv<{CLjBf06P{luKPFexh>il7DkPnk2iRA`NR$yCmI-Wnqu;xQ ztJk=B1?Y5QQ>Z$}aBA5KHqA#jDiKXtSv`$ssEEBj$pUAT#wfmbhZlg?$A@K7QdXNT z!S+uTo`pLF*^ACt^s0daUqDFb*3IL!dkd%fB2{T~HN;k9${3ima~sz(s%^BMde7da zUbcWeLY-V{3Q^FK%Pqdzdm%n<11!o-khY_G)j1QCXzTW9MbXzQ5uRmPe%t$EoAh~w6 z=9c>4zV+e5?|k3SZu)$FC=bhTH1?QVb6V*rAofw*25L_tA)_Go5M~EHu|O;!E)7&= zM=s-2s9VSZ(upACc^u~_AN>^hdW7ZM|5Pcn->%C01DJ{ir9ylUQ4$14hZWzfxkK zDe|l-Ey9M!Tq<^?8aOF<91@i@4bA^DE*5mQ!e`lD3ACP9Gf<_^uMlTCOK!bTPD{iG zSEtOs|7#*i3%KR(qSDu0yEm>*4l;}1szlLI-gd?tOnPLi8U;59mF9jKUHmL8JTv#o zDKsNu@8)>Kwd4>auQCbAYSM)7V(i?9#p`st@4(~ef9o*!63KV)!o_A)LX$tF5m41H&f-Ka_>qkaOzWi{bEjD2bi~r z;+zR#vbnAI2cn3%tynzv$b>J1UQu{Ts*uxAa6%N{8pXAW*Ge~nqpa^J8Y zwUbNiB*Nn}(>ECWXNqBD`vqtTUmMCc0@J4xD6jTdrdubG?*os!lW^ZOJHB9!wo@LT**UKVI_^FEhZom7`Kt1MuvoD^Re_UA1ox zZmZs)D>D_b8M+!$KJoR~MC{%WnMIvsY|)BvzG-djQ8f;_7}4W+C^5UN>>cmqI^JrE zOA2vyOQmNB9@K2ACjoW4M+<(XAnZgaLt8xqX9(+E zJ);svIcg$%4jW`;PH;j3!WlZsBe%wgKPA$@^~%5j_~5c@nK4uMk)7l6Ot~!!2>x7h z-#Z+pO={x(9M8WuyP7Y`qchOb-DY=wEx%VTKQ^aQVY?^t7ro=EFDA0NhuL{@4>mtX z9bz`cf6RN%E;GeWQI!wrF4iZnsVVg^^04bkz~FJStkg+xzkKfl4U8qNi4%L~QvtG` zl*d#7`8j}!*JSREiS>yQ#p^5bMN1^^_QI5VL`JGK>Dv$%ge1Rf!U;0^PKEo{!g;u? zE_JT%{JN!l@)x#6AfX0hdgl7y#Mk3xpA3@nJv$N`>0fSTZ)Y#lsP;q&U}j=2Xt03~ zh_;HiFmtJC2}Y~oa=oMI{xJne{v_0e@le2cZVqSItQWzY#Wf~~|NHIm^T+Z~nl3-K z;ns$-JZd+*uDYp4UdZ?*p$bvOdiJkcA?>qjk*GB&Kclb>29>@$r`Bk-RFu^c{%p%f z7Nzi0ORN1p-CbTA0ka`!W2h>=o~4Y%q;8Wmk>vmJi^!-?cEAM`cAr{l*NwaraB|uZ zp0VA(6(h@nd_5aA5I2jPnbGZnfnqDVZlrOcgijzK+trxva&sN&QG^ z^iVXGH~~&5Nkf#OeaetqZ7l+|Yzo{w&R`>77i9rkH@Y6Y;SDFZvF(rwW-BY97o_Oj z%E|)-?F%?ooGR)ojkSCeF^tPLA^+S*F95gGTtNm1rQ6)bO`Aw5kL4ZppLbuyGwa#8 zAO+_dqncqAeRbn90a1h0Z~LTB2v-|@XK94xJ=>b}{wm0c#G z@XtjQ?SGF@U4 za{nng|2^z^;P;pu8tQee{V>7SsK~>9h2!NH+lKnc>X}+j_$Ejns@_H-Wlq z9!85w_B#!VV6_+(xqWn68E3F$uJY)#hH`#xp&tJpCA7Ojtxi#GijiE=NUkI?=!tM9 zP!c^$s<7e_^GxmL8vgkjeqzVCBrEKHn9~okXtU;B+FPmMJS-gDz$DG!YO}_-3#}r#{>>Z>$j6 z5;MOfCR}PwJ4=EUcjDTI)D4@IYrEWD2LihP!#q?33v_ucOd3=!3eD^vB#+6an-Cc@ z+AqB$ZoFLyAr>-jnlY(OF|X1nrsM%s)eKLlMFD}dstW!b&Wdi*+5IS3v~V%^BW0g; z9xXca+Lfn1)DmA)y3G}rqw){^q|7wH4CEU8ratj;E{j?Q0#dq4rL%lo-UFuhiTNPJ z{q4V9H`~+HALA{2!ked+N`xp-C!M|QZNHc}Qxan^<{GUmqlmmZ--XPA z%wCp0o^`E1ZoOWk)}nxS+Nzh<=XGK`K_dQ19 zr-HZxK94(EThirS$vo>{O1N`%dp-1I{4ovp?Z^N{->yIvP>G-FXK=VRmy`@^H` zLb6kppa~otenblqFTaUYBvnqkj3e_c)I>nnTU*x}(Xnz8|HsPIJ^qO9Z?gt5LYr!4 zopk88t3BC9ub0bD^A!8XY0#Q*2j5DS^Mb?;r&l3SDri%{%J*koMfU7oEwifIskoiP zsS^4V*CHyvf^;~nF6MLml;aExYKp`S&D99>j9IPYGJfmJ zd70^-(wQG4yf5Z-v7D+Rx61Mh={rD%lmKTVMsEg=mdLrQmQ*8UGt7 zNKA3dyg;`EwtN~3P8_a)zv0hnsWP&_FlXT zk-cMf#tPIe>BoGp3R$Xe2uBuE;kIhtT5hK7Togo1Q48@xPJt4me;|^k`<2&z<+&0=p6aw6^u?=5G7s_Htd(_MF)Q zN;a95^=7srKCnQ}#Ka~5w8PKEoJMnQn9sCANjEX>hx+v-sK<*D7>j*LfvBm13LsJw zyoC-3PBVfxh7!gs7#`AD8XH9y_-UaowvmuSrT*uOrR&e#WYc7vyIRT^Fa{eP23_ne_p4=J}h^t7|S^9@_^bhNL?;xAF+ix zu;ksD?Buxpacx0NQ&7y>!*rEkwP_%8t*HytoJW6Za?FmVPjrK$1NK0)VE|i8=x=#% z5_<~J!zG)9(tmak?SyHFCN18qqDmPmi<@RB_${l9);Zn(x5dPr_)8 z1O1q6?ZztK%iWICOAp~~yR^&Yi`&Kj+JZliyX;}z>vj9?-R?=}(Pl%_FM*}PV?YCN zT}M}Fa3pIp?(c^$CtB z+bdEbhH;C@bxrTCB`P0KQB6}VWKguiFZVRn>Qp|6QoY zvw;`w&7J>M)ou27)zsn{ypG#BMJezeLAs$+(CnkrXH=#hvL%m@#Z5+_vAH$}>xC3$ z_e*yhOBwM??sw6#3|8Vmi)B8 z;FR6Y*+K<+OcU)Q)PkYVe*@VZeWn5v{gOA%kb41Qx#idvO$NLHx@ODZ?(;{bBC4zn zBmfi{*O$0UYmHLc{YOplp4Ym6=t;(?WCe>QGkOs=OXjaFBpRWL_9IO*uNmC4zt`Rz z5|?G=r_a}!-_%Lc=5-32ZXp^j6D4HaWzGMLujNN$KDF1pmiGJ&?}p`}2-1IwdpDss zeoz|wsJU?$BvoN;QqC_#malS+$Jb5fu4?ppKiabRI3NaI#GPloT@9_(Np-C1RDoNn zw#wf#GlxBGK02|g!Aalag?K}S00HCjWF-qBBRSKz&Q+lXaKO>QDVi2Nb>Zc^pN{Fd zp4z?`Q&OA0VXq1qIQ@soHDu+rbAz)-DnqKEaK~_ss+En+q$2td%5p^lhowj9@_ybI z&wi%c^kXzkD+`_g=U~h&@|CsKzV|BBy0= zq*ZD;&mE&*IcFamMfMq1G2wUh+P5(sAt3IX*K-d9x~dNOz&A=)_#{f{-sUf&JeCr2!N zRv_zOj1bEWzKHq0QfhVZQ&)uJa!8>S?EY+p7aUq zg!{6E<1p(QA+}3nEr-KZD3~iht+Dk$qJ}jUQ4MYE_+TL+XCd~lA-U~iNbo$uRBTaF z9>cZvT9XzX$fLOx*+xun=g3vN)OGztm2_8PmXrDmUA*PXqK5TXk~Y0}>@EcE_Z2x} zPxoEUt~U&t>}g_vq3qSaE`&^KKf?|FV+BVcPi%p&5D-Vv8C#o>%pl0FzbJB$i{3xT z{ymypZ}03~5PRK5ZK&#cmQ7mbar5vj_+BUy(sdQwgW6A@_$%A=zhF>Eb+Qs z35Y*kn4{@hPnYRj1-|O({31SKzcK&WQ0)B~<&N_)+TuO11X7w@@_Wp_-3Pt+>N>r=OpUW++2F4wpIs>| z5c+QUsI5M04-5WrRUp;ED~OfrtXF=991RW9J{_6RWM}=|a?)Bm;M*leH7(l3LqBzS zv7w0nZoM%x6XWbv9apW?MrIl8rQ8#!5eB9|)e*%rot(mve%m{xW$Bk#!cgT?s9C5T zG8vZoX)&WGE>ts1)-xI{`ldn&Gt+o;pkaWy!gf{Q3sm@jj%({lewTLl^+K@TU9uBy#Lp zj2UfizKpV0HV9Nj4=HY#OWy7B!RTKcXjQSaI5J4=T;_n!v?HyuEZXBR-5XfKA|~qN z;36ft^Csp8r0#S~Bi)CKvL@g8_f(bWlbw{fwTqhc^_%RuNJ%vx;kkylFTQY6>&38r zb&(am$(8C5c3NiZyCUOd{+=F746Lfszend%+wvvKtfa6~=;cK$JETscr`}>w+FJAs znt9vFez~afS_sp}-l*z)T)Q{~XR2MTz(^PSn!oeF!kwWS2TJDYghsh=OF_ozX`)k4 z{tPh3`zP948SIS+)FN0cxcQco4=blbZ}fm5Z+v5$5p>TnK(@x-;+Td^V-qV?va4_S z*((iDE1`PiC04N6rX+?6$IN-hd%nN6rRMnd6mF|SAnW#8rmYuv!OO^b?g)CChT9qL zs#}ZWIAx|X;OQ_ZOcHE}ncthvi}SnKze>TjnW{f?(w<6s9&Oh7Gv}hRr$j$&#|^+S z>N5We=!^kB`}u*r2yI1m-8)5icLyW^r!xCgKT&-*T){d&FCAH`S9Z}2SfS`VP1# zKRfmy&bpj;dAd&0PvI>3&pa9boIj{o!}9w5JV1siA|mbBa|Bt1=a_>=K3wOA%EJ-o z`poO|-&?I*GfZznu)1NbK)gGt-0(WY_DJKsr^av{;VX{}hO0!4Y<{5@w(#Os9-d!< zuB8a0`W;N3E?4V2V>i)+(v);wY25sassiJ(CAI@zbBxchaLljI8Ld~+sg1Tm!WwMt zyJ><~ily>Ab9!13F#95+$^YQ*Od6#(Bi41EanoFeSxre{0Y-GO+ETdfbpGO62Qc>% z5`4-#q04ZUvt@q`6Jx1&$xYH!NeAbLQ=OKH9KGJh*f+f9AT65)YjoB&o)05oXWGA% z+~p}=eio>Sj5Td}Z1B20$|3q`bSoPVGs;ocfKbJ!$!{TGNcxtp#ao;5aV{lQPeUDS z8RE0H7zyHBdvlBVWi+vZ+!@&CzUJOgCBH(7FXKJT73%bS#pPQbL=@5(<;RaKJam)-)% zjOn*CGo9E!`>&v1s@gu2Zk6!u`4_DLH#F(}1*I7X4_8;!Z6AA48(Hs*TE!wRhwNR%o5egy z5WkwFp?yXG&!14>-b0Ni{hi*wq$sA67<|4vP%+C4=VAW%k=69oB*2p1ExeO&=_TT3 zAK`xapVZ6B#>NTQYA}qgNMqjfeS-HO?e6wM0Oebj$6d(Q?dug-r>P8PbEm^L{sq-E zdk7vGfx~WotGMsD&cyK4ei~3HosH6LjGY3^`c1sLrHa+?HRZb-{cj=8fCc;U>D=-^ z>K6bzo=7KM<(ujzgyi@_BYV4&t+eVxy%_?jq zTO_RHfGhWr&G+391thFRM{7>b6Pd}(V~Q+oPk?q6qweo)I4nG^zklOvE3c+y!P!I# z+@+s?)=_#nQ|sq z)uLC(Uy@5PN9b1}uHTkDPS5ug_S$X4K`-CO7t|)fSl}q(&VB{L?*JP;p6JNMzp3r) zXM&-L{7p2-fPq7SEJejp%U%S`U{CWpVXw_kIheb6rg^pias`)4$EdlJRS)#fV*}A{ z-lUz!gRA@9t5j*XnSJ?zZX?Q?<~U`mEOTmn>SwAjYU(xjp4av6(EpmY^uC&#S9SZl zvZ8hE{LnEYis5yk6cRD4G13-&cAcX-gYZ*vNS4?U2bm9YjAucKSibrX-Bpt|H}4l3 z8#SHH^gM(?x*%e@3B^whSP=eYcNZu3l29|b6aAx%3~wS!+99Nz>0{0!?)E>w2fd|Z zwz$ZI2dnxZ*j~`eE+~rdhY5*a(P8jaEOjqDz~e!bhk?ORqmBM4qO$FMm5yVt0_}x< z>+RA~eDnTQ)glam!7@8lA8eME3BJMBu_`#^BZ3rgCoC9VXZ7+Vqm*&)Fd}~_O{xPK z+)zY%Sa|8~Wfs^NcFsU|m?0m1N!%X~l}{;Cy|JRD z)GK-R{946xD0O=3JnD-vCP`6IIA76wR+sggU2dA(9nMVw&JEnNf*XDJ$K$%oUZn-U zS5+p!kUHZg{JAYtA9mq=$itU7TH2L(kuLe>6`b5D=Z0m5I<96DyqZqE=)lYsFNsf* z51z6hLl%wABJYzsD#NQWthh_P0u@umRMiPig#$gFyH$VZc=+XLuV-La$|D*Y#7H@5{NKZarWDhbydc$eBL+l?PGCWf@tyXfw5>CgrN!;jQV4;g2N#uJNRX7% z*1_2C`Ms-xk?Hmy)a!Ga4e(z19PxQU+?+DW3D>RD8S@;b6Y{jcqVbv)l!%~zr8z@G z^lBsMU4HJ?w+}d(w)u$3Y< zU9$%&nI69(s`Q*~FE0OznxBoXX;L}X$j|@YxTE!|EO4?pqh6_3TqXYZZ|N(SN|-_k zb|p5L;Ylo!DNT8>lm;2)0!W9&9PdFqQ&;zCrK9m%oc zP)fK6NG-(@ajBK@(N+6}X&43INfaBQ2#*EPtNJaKm5@Rxo;_A!E!9RV0hJ}_2ge|Q z#>v#_;qF_UD2>}&1~xd~y4{ zdAjTEQic(<>P1s9@sx4paOS$^PYF&Y2HG)KDdMMk^tfMUmMk?-CG>fVdk7BW6Dma4OY{p)) z8S_kV=Ah8AX_8}_ZRn!;3C<#u^hP&*TeT zaSr(4$C+al8;~#)TZFS zdK73QO%WTy=PRYQs;@&jc~o^PF*)96Us9Kk;< zFDel=1#+*uPw2qJkES;F;CsR>@FRH$)i zC?ntTG-n`)i?$79T|tDQ?X&gPh4t2#{MV(mX2ee+wY#svT08nwOY>@&#~SZCpFCFW zN`=jCvSH;itHfYk`)EsLY+=y0!(}gzf|~`1jPNvKbR)|1DEHtD`IeW=x>_Gl55=qx_j75^ zAEs&cc6E9&n2oBn?Ghc`DNu6EN59+PwnG-<-I%k9PVam^BqP>n2H>vnpj7xA3*kYO zs&=Ks(gXxqE8Q_(vugcF1$INKR5Pv}qWZUfGY( z5n3mflLzpq(AeVK(q8bx)78V@d1pSAJ|ml`Oqv~FS%2i=qchF^b=R1*L}P=J3GJ^f06Y|pVYqn$eqs?&}F4}cur$Lf>S7jmL1o9eMrmX9=X8;^r$ zP!A`e$iW+}NC@w~VMfqO0;;IBdLbv3@X=9b6V2Jz!Mcf3Ta%^^3WQb-Y;^h?32tm} zw+2E;IT~}x_*Z^^N+l`^bV~EzDCcAQt>18v>o^3-3L$6^B)F;;?F%_Pzz~sK?ja2? zr~`J9f=(^l!Sb#z;ff!&b5Ly;NR&{QW^pos`!@m9yY+68YF{l>=7Pu6lA>+R_X|tC9a^7^(ykpig ztknsUU%~=I_!wqV2kR#r|q-{#~5Jo`@c=e(ofaG&%Otf(drs14c{fc zwZQgxCvoPVwMzy?9NoVFoA<<=0mCf9@ritV`MZaSF39o&&_G7!{+xJrd6Vc#bXOtt z84g>wooE<2kwy3TXodMHO*|W?myfdOR<1eF(yf_i#)^y1MHHf>&OaC3S1FdLKy)Nu z7EjpJ1E!q6R~l?S`r88c`!F1nG1T=O8ye)!X;#>*(=1i@{n|b*83 zrk-)^$hwQ)HU*Ek7D_VA@ur+btfpDpGR*@4fIy^q(M>$C0(=erx%WALyo){x!BU_&gpWZ$Jna?L2%wSrPm zkUqhjFcDhQ0+E%(6g8?EwnT2oj99rs^PkgWTn{XcI;6|rJ#I-MjG|`yko*y45gSi_^DADL# zymiu8IP@54wX}(b@=@!6_bOpfm?F!u@scgoE($g#apsM|A2r_hP7%=xci-f$==pro zT#Pv093k+j+-&VwyX@yE-z~sv zX;BbJ-Q{>Z#@+ zYME=*0~KepW$HN2yAUk9mYEpumsIu(W)po5L3dZh|5>vhuE3=MJtO90!PGVX#M~Rm z84}MKCGsg1-TBJ_F7+UuUI+CDsXR5E62#F;yL^WE=Zb~?0}c=>l`jki0uNqJzs(7a z3}^#@^x^e#T_4ec65U^bH=a&WDaF&ihaIdnAYRd`7t_M;5*Emofk!NLZqV!j7RR8o zj0@&Mk-_B70N>cVl*Ib`?Q(ey+F|MQ-}c!d)1q4sX5sBn`xRNFCgyftMb9ZTs%5P{o8I@Nt^6KO}_wV(Np^HUpk1QA8n3m zvL7MHiF6I$>s1&K5E2@3&ny38rJHdG`6mVoOvF%xSa}7G$27SFL0*@6&KzwQJ)SFA zm(}i2SuOM-ewcxw+7xYx;VZkrBEtsztYbVYo8&k1tMYayFR%L&9?xf8$Ma@Rlka8#On756PN2!E*2(qvjfk(|*nY9UzQ23~v$8@5Kh1Nq<}&0s(;2rV|>CVwiRuO&A*!zVruy8)2VJ z&5N-8u@zmxoX#EqA!Tn=D%iy5zd`f71=7@2foLbkuPgXXh_TEF%!@N!kS#FF>7Mlp zJG^v;1CM4usSNh@L+tzyiu+-c!oh=GB1WCsI$ST(U9fLhpZhn1r zDXOks4#o+t_)ez~)Oz%~ak)NkaH(&91_aKEzU=bq*BGnH*lTlm#*i{GtQBaD;h`1A_={2BC@{*Q)_o#>XON zSf}~p>>_({`M!&e#xktoK3CY`1sB}?F0t*P#nzd11F+u z!Q!H`2rrKN?dVd5ZeweypDv=+^WIr$gxtZ=7%*51>f&;p+++6sQ06>zf4O#*W+T28 zr1`f??Z((1?b0)`o*4$w`QlD{`1sK9DxF>^!cV$1$WJ?z2PFB6>a$A;8iYXDp zY$I15``=<~=~^RGKqkRqnEg`B&>F>>zDJ(O+T|tAmhnH?^OK3Cg)Jw`P-oD3-)UH2 zM#DHNXQjG{tzoL}HG3#^b8?F1W^~g8w%|9qgP}$y#Bjcjmnnh|uAKNESdVUa_T|&AW6=UvHfO zz87mYb23cyGhV2U$~XAuG^VU1eKRjYoELEaO;I-m2Fq&y+>IzMtS>a$Jg;MvX@x8O zfqP-=a{&@^nQmdM3_!Ujm`;K^qu4rm(;}87sc3JMvF34%Wc^??T6)GhFrz_JWB6(? z)b>$B#<(@miwFXEp6|-Dx4PcIx>FOU@Db#tq$hJpwKT!wT7cHdI;(OJg%H=Oi0J}; z7w_`fAf1hZsqMMvrM}I%Ph+8dv>3@sy}LiM(+%WYi_HcMw9E$YRYH@-pu0Zfm=}3FnR-0$ZoUVpq&GGDWFxUR3(S&0| zU7Y=Hmu4Z3Y0>Qgo=bt}V2TqDBR_HLPdlz#0Nr?nFSXi_1xoGXIik0m54XpwEUV=h zror|7V-~av=|;SS^YVQ3fS|nuvF92ghj#%=*)X0ho94BQ{*G9>EJ8hDrZ-F^n^(Ks zm83IGO0(LEvkAJQfQpFcPK=iJ=P-~jetj?TH|JS4aL{CLN*8NzKJTj=7ftdUt;Hbs z8XmQ8uFpyMR9+Vpn8UW_9Vo1DluEVTFC0}`y^nAfaWQM)P;{1m*8j~Tmr;<$_2wXl z99!<_DPJA%5`~c4n?=~SkuaM~OmNu;fNUni|8dnf5w-l>rj`R%M<`QWfwfn}#J+0)fB6s)Jge=l74@8dprHZmi4#Y1BCE6_9e|hj z>L~~CI6GEC5mNqs2+VCaD!$~*k$AeR!V@1(6VN=UI|~K+akujaN6D<@29ZY*RTSf3 z)C4NjW_1k^|1nvx^E-;?9#R@1`>%)hc_{oO6d$QUKufL<>x4mlI(QSNF=aibgGm)J65NV*3xhzs44HS9IUron<78| zZE@HSj&56=(o6#7z&J~FX@w#HNat^To*3eVy*GMPYPa6_XWQ)gk7$0<9^BUVQxSBj ztd8{Kb+~RYN1C8HNh7<5OHX0Eu3YijPfe}oP%NKRCaP!)sQ?=3#seeFTS;EZNfuxq z?G^$Wl-3HIf$x^UWltKXk0GbKVmnI0T+jO3ZpvsH(MX`XRzG*??Ar+4+SqvlQd9z`0)KgxXrg+nm*A`s+-HI;Ky(F0*XFYYeqvzBJKg|JkM zo+fB*<=bT1V1jI-P^E`xunw&OVd!B3doc1U+3_p`|H)piF0?Z)e1QvhX~FWbsohIM zj)kA8NuDluY!+Pqi^o<$YSutDuyhW3^#?-<^kW!4Yx}hVWx?j&MuPV;;RgHZpYa&I zrsHA^aj`vd=~50h`;Trc{aOY<0D`ZA4NN8!6kBc{xe^&DmpAjjV!dza3Ra46U`7Ix z`rR2T5cOrLsk{jzhV6{e3xd$b$DODoyyT^sSlRn04w4|}QhlL_t69ak!Flo$ANp&| z2pjDZD%>)P^~mgN(W@@vBo3;I5W@y6@^CuU?qaF^(tNdLaRy2)>4d5wb;xB3EI zVb7IxxrE*5Pg+L*QO4uVoyN0hjmrE|qce(||KT>zHR?@c#tYL*Ct%fup7c{_J`D4f zyU~GiNpL)SoK;6ix4ZxCRdsuKIEZmKsbS7!2zuxHp>{n&0{bfia5CP=vo5ChE?xt~ zHv96N_h6>-86u!*sV!~JU7`Ba7D%Fof>FGV1R;PXS zlwuLb8(MW~LxN77=myKGW{wJnl;_)RkoPDAbT~;v;S&&u@ggBGAlgpSz{=9Ty%|Tf z12v?3_2!FI9VmXHueQT7N=|&VluqzXgVFOBnTa)qpP z-vVJ{S%rOL`0qzvBj!%|T7p~g7HgPsFa(uQvC3~Wz@T4m2P?P(co|t#WCsy(s_p=Gh zUC!XOHZ;Kqt?bD}o_ocr(1$Jz7t8c0tc8_4rBLkS7E2Hop*U;pJP66$$edu)mU>E? zcOG#w4}f(D)pJl6=Ay*wqaI-^tAc|VUmF`0QEkDgewiL(>m>0sf*yuvm3ZFLQqwMF zACfO?Dw6M+NhiSm&X+08)58N_?U&N`r zkQjg{F$#DTN#h5O0ZHOwfuO_HY2Bbq9ww>rv#@zmUgW0GWDop7x&gwJfIxhJb@iy~ z1pZ4ph}sASA&5f*h2pAOMCrp^?m+%G)L@of_oi#XdOgCy>->)xaZVP#^N4$}=hut= z^GnEe$NRR={`Hp5nP$ryXUv&AkLsL_BKM0C;{K8=FhsY1xuq#$Cz6Ev+R@bDT_#-9 z_p5;wceU5Gpt`(GBBF7yUE9bJKV0JR+v52TKR@HEA0!LOSgIIahE56FJ55HG+0-7J zYW4JYHF*cCHlM)>q|J)}%rn8uh}sD(C4R7e9lkip=&ig=Q0Ksv2Ox&$nU zT;dFqU%D-yaq=yJVq^hOsR()LEvAgP>|oVs?}Vp&Iq?mQ{oWBmi>ECCk0tEbZ9ZZl zXd3*;GP3lgVR?|D<7w;CLzbr3{S(IzY`OlP;XTM`;R3nSGGk)HLm^YpF&!#&JV0L| zhmC<@bZf~g@N}^@%~Pm7*68JR(2m2K=e*)kiWuExd_r-^niNIBcbrjJAw-%|OnFRz zm|bF-N5#;t;f7kaTZpqQ-RC$Ql8YhMAT<;m=ig^++t#iRP|vG+w6?Knc|X~YY3E*Z z>u70N-kh0Qr;9#v%tEMM$SCDb{9D(PSVY?#)KgWEj2IK$)e+zFqTV~igcS@b>b;ue zk%zNNWlWaS5|hfcpV4`+`S@}erKfIlUQ`8bQxRR3QbFDn#GH4L&xu!qtOqX3m(bIY zFn^UMCp+U0Xk5Tt1a+Rau>j7&px^PCg2kY{IJXfpU1oTixg&$h`X_j4tK*w=MJ_Pm zbsV*UMgqr}R1pW1-toe?i5^uj&vr+#uWH@IEwDu6;s~D%Cpm{NKCuqp{|kksougR%L5qk zmkclM(9h3?F8eaj2;kjmbVFIa3Y`BMR?ckJj*AR;{?piZ2>9i>R-yikG5?yqK&Z+~ z$ZBm1g~~+dxsSeij-#ffR=b~){)@)3}ut*QOE88TwG_a3!;K#Qc@|0(vFgxxsSWPHtKwfIx?1s@A z#Y|sY6@-XO-P2nJb?EAPQ~EBeyUxkUa{~Chfc2W%jeby$R@d8~4i2?5990H>{7HIxcq? zb?goVXR!n_Gc|UD^}~ej`l%_SuF!v#M(kPW*?laE-~8dam~xD9e#J?g96R9?NEuZ~ zXaY<@HP1d-d&G_X1VYwSk;*Avwo!n zi(1T^Hys;i5wHX5O+&MITtkM%N=NqKR5O%5@E;)Rq(R4gz#X73H1hi*d&5T*5U#EE z{uX8+<#T;0<>s4x?&s@Xw7R@I{iznjWAhZD(4Uk@6M4A!&vf`d#E!?0o3QcWqy22F z7fK~z8{EFQZ6@j}LGH@@>!b92_iO)3Ed$-q66YsWh%GvXBfjA>yub52YU}W4O99rh ze*I}@C(VaqL@Yb;VfK$VX9@HmLxrvKo-v}0`mWd#lIuHSDkSloTU9{D&LL^I-B;_ z9|c`$cLu1)k5aXCH`@Sh5Y@5`Fh`tn6Q+tbXO}bJgqpfJ$(i%lO5V{kPM1!fA6?a2 zgCzXPMqbX<7uvG-w{kXq0HsN>vB=7JiQGja?&gL_sF zH5**KqW1dtlBo2~ZSQ1QS4HD$jU3=LSrVMh!pOxG;!$+=cObzx5TOIEHFCS_pp#6x zNA&GI)nlVrF7@$9CIiY5=^EbTW2&^ zc^-RBioT~ICWlg;$O2merLPn+>~^PqI$99(94m#x(v4f9;CXA62Ex6b!ZBL?uNJfU zLs%?GNu!F`B%!Tx{GNGC*?^imwSAr_x@N~f&g*ci>x)y7UMu}%9n}t7rQ`-$9oiRg z7j)Hqm6=+6`NZ?4F&mqBO&^y8U|6S;J*4YfJV|!YeS5ixAY&-WM_6`nzSMr&G)Tin zcnh)2OmI@Dgib-Slv^eHQzywu9sl{k=JK;}?p(*Gj~^#EIyoaoCLV(4ANoeS6RmCIR>;dX~Wr7X*(eJiX=@L)V+ovB<7;>7xV&v)b>h{xPvw)!I z93hA2qIpWT{ofVs%_75{mDZ(@3a$)h!RY)@#K6(?3My{_DJDx#)YP=BDwXI{`ddWQ zSjv4xA+8SwXetWlVj8~i=Y(kL=^Fhi+8*U`DD9}f+qkD+ZXsKbYb~Kmp2clNcUgej z-yf;UpZYfb0gLB9c*AYzce<1vg{#{I`3$7$+b~T6YrddtzJ`BGeF{dHpPHj4aN9{gVB4}wEF;{upGjnPTM&D1(+*!A;;HL*V zcNcs*fq7N>fpmRdI-?)4-JLUYP&pq%eYXI**p*RK9`1|$cRu3l9e-S(!3`q;GA4rV z=Wlp5KN^KW1Hu?qtv#kAN03tla74ab3?1(kir?Zih$ysOgbi|m=PN-?;39klBtX(K zdS?BRL+jgLPcEC+PL_9|UMx;B5j7aNE+wqdx5joMhR1?U{XGXHK?U4yw^LmXv1uFU z?J-wpGUzf#yq-7wC>+y}<=_;SR!*78&iI7Q$hJRs_Y5kL5I&K#B!L@3t(dK)(4Bix zL_dtP3JIaSzn-_~nkcN1nTXER4o5-U5O8mYar>MYLdY?jEBp^%al7lrw{h6y?Cw7wP8hRNiv@LoCl; z)gYI>Sh9cI#or|-w%Tjwqu#3@+Nvcgx2m(ecGdJL7XkI-@Dpb0-KvZCN&9*7STr}6 zF43jWpNfb;w^hTjrmXU4xhXNu<@4~3B$qEIZRl(W9XJ;oDkxR3c_Qkj!O`47nQlSX zj_sC^j&_^|JEA$8EcN(1%JREu4^M4~NI+BrMc`CKbAk|RZZ;>6Rg)6VTX-|ZD_Nv5 zy@+pt0<*yZLRb7wfUL|n;kO&=?pxiy2e_{6F%%z#KV%wEMqmEHA0gCZB%g$Zxyy)V0) z4~3sD>~tMW?km98!@c$Mk=5>L6$IU&_8X=#-FN*Cxtr4AW`!)}1)4i$WHfl*w%fWA z*wzhpJ0!xg`JwqBeowJV8xbE_W2Zaynp|Bh(jpmLDJY_z#3Yog&NK;bvuT8m`2jC4 zdoc#&v-Rfp7@vzPubQkDM4yYP=%)@VuXAUQ3Lh%p1l`&aUH9GBf&GNPyFOahDp;0e z1R<$Q&QY;5I9c+XGc?rC{V7fRV`pC8dMUH!TY-aqZLVIHvarHjeTpRoUT?P{ToP6# z@3&tGSFgZ1F2L$8sh+;fR^vm6Q!vu4qBFv0aOre6?X+H!8`JzxcF=)~5 zz(T1%^;!94-x4ETx#xZANjm`;eB-oSa}@qBA{K12;?g4lJ_6Dx1Y<9xKL7*tu@8_M zo0T%Dw?bu|n~<0TaFIj&cJ*laL?47O2UPWBJX|llvTc+U`6H9e*sRbUI!PRM3nTL# z*kq~6SM6(rho?O+Jb`=2A3U_({ZY{4c7B}YLd1Xs zZKEC0s+m61?RH-ryX5Ie(`^;9St&GNd#INeG~#dJ&>hPO-20~FsVv-&?~u`tyDtre z<)8W7uM20)RAi|471x_@g`4Af{}(r-bF6Oc3kq}04`q#Q4h=4$m(})#e6xD$?%1PP zY=j_Gcsp|T*;dYzRM@QJZyw{J0H*zUUai(TI|#GxHa)ETl9bl`a4JwFdpWRV137FY z`*|}J`(OcmsTj(?^ffz8f@Ek?h;8L~tEtzEnqjeU#(tx3cK8 z;Ur;x)!j(U%c?G69VxLgg!yN$CX~C;KyH+4oKDYzu_CqjP-`@p;*_Q3sYmVm%c}uI z8yDS=GecfnC^_y0VOnk|sVIo-#bUP@3JD))KlI(sWJkvQOYoSP+7gy_Btd0A3~Z=| zi5og$Tb-RSMyTDk!^E~ z!=qy7!!uJYFO>ZCmAwQ6kEaIwKpwlIuZo}-Hufg6yY8LL--(f^>!SMkDm9T3zO%3i zl%TsXrW>ThyaUZ%@(O&+M4F1|;)4Np;#i5|?egYb z5OSQR@%d(8dt)B4vX9--T~{voUb?y0d^W6LY_zwt_D|UAFr%8F8NG1oW zt?e^@Pql~et|{{Go6CpPw1YiilDx6n*>z!-NFtuD6dS*A8U9^QxU0M%0Yki^IMo7o zY}4tEf1~aZzd{oyf)%dvf()zX_a~)Urn2DSw;&;xXqQ~06hH!;39&E9a#vkXEM=v)9`eJVzRM(T^*5hF&j{JtEvzvOO#@N^+?%(%aXD79 zvX4{>mxJKTErn3*!K{s8Eq&}(X8=}ki__yD!ZxL$_h_gMzp!+_JV1G~^h#Nr7eL3e z1EOk-x`Ei1y!uB6biAmn@o0V!hf7KIci23iA_9c7plFFN(@6j_#x4seKluSjW+xoA zo1abRKa3Z`kwk$Dah4Jz!*72HC@?Z^M_)4c69$UtP|b63M{HJ=??ObUKkX3Eszza| zyH*A!*<(PL-ZR3X02lSU=IWt!f{yQxn4jLwiJuG<#irXTn!?d;pqLmr{Tm=hy?T*xr+Q(u}YNdmUo^y66JI69A#rs&wFby_o3+C-Lz~Fa7%F=H}JB9N+ELYDUYG z5g%{vN^@dl<{<<;_)aXWpxIOc;mcl#HMa*x`?U9?nTw%G$4?Mv+ifIef}K(dK#UPY zqj-_Ov@8xixut0gjDcsIts$cRm-d5F;;hoe8OjtYDVm@W!Cpc6k?uR#^G|46ip3ku zsA_Jg+$Ba0e@4R3h*2J1z1GSDc?Ol$&+V?Gxt>IM??x8Mau^B_n5g-4M8nyWN4l-I zC~j*_zd?hVOxHSH?|TleEki%c9WWNN|CeKlp*`mD&oSS}!1vte=Jr?n`%Q88W)mH@ z{);h{VYqq|P2{@{=X!u9hF52N0dxpz{~^8KZy`o}Xy@VwOh2PcFBalt*Eqq~b`Q!o zu#8@4&V`@^AhID=+g`itNSm4wube^qWf(AnGHJiU6x{nS3&}v`54c8mNT)>=iHI^P zU_Lk0Pq14?1#eCAu*EwV9C4a6uy3;fh%xT-^j2h{-xI~bfw&^@5?*mod7iMuYmO~{;pVm)Xo6DIc*HJ zz{M*u6bVGzP88NS-dQ3lR`g+5cZD12l1{D6)4~*oPe5U<@5Y)N&@dVtY2fzn1`Frjr1aVDr!zbC}xeubkip>%lVEr zm)1}uwqBPE{uvgBjFA7MAWhKCJorqo7KM#uF?4<%x5NhA7ck;nW9$RIyu5` zeD=e81nwl7HSqnPrgU8oezMC8rNxBuiI)eEO0=V- z&p}?ihc{HfHPpE|tDWD$I0aGEM@W#&bnIJ~xHoR@rK$DRNjwq=hZzQvL?PvwnK=GI zRk8w#%79@bum(wl{@k&q#YP{_NLF1Dty9>a6pZp<;sS^`HU2Ld!mAe^wer(l5Utjv zVeTE3_{d6F6b$E+!rVtI$m}s{2a(KVcPn{JLfin4-w1@5`r7gI-v<@$O1A6wDnW)F*GM} z1C(%Rw;SPrq>2SLTNMovb5KTS^tdVl{L9e2*`Oe6=S}aMzO1XKOHGZ@%~=;zw*l50 zGmC1MyxiZQr&1u3{^#vwwei0ZTpS$aw)=T+4H#=F$NCXvhY+6hXSswYujrcjsTjx2 zw49f?U}OEC7n&`iXvD_Qyfk94AG`T=rZN`x(<_s+W&#xvfpPH)O9QM^?>Na;VQ5(xbxXyPn$+ixN;t9YI48uU|6-L3j@H4d(QKeo# zHsVm!dsLoJf3QNtrC1|5KMO8kT4v|6Atb=jVQZ+2ZtCD?&EnrtuhD|Su?VE)9i-=f zf4s4&ZN;I}(J2PPV52#skTYDz&G`Q+R$ksPR;>iL%YRY6>))ct;pHw(KYtTZ+-b~) zD=R_M?GA!MAPz_NaXWLSm$pGErIAf@;(LDj7dTI9J5y|ybvJpJgKt>x2M?!kuzqo$ zT3gPof6X~oZE7U?k*Hx$e_uC@k( z(U+6MJ4RLL9a7CCx&T{A?i#z-hiVPv$`Kj4LWp_`x9!1%kgwfGDvy&n(^o%@ScZz~iu*3CKB=`CaciaY~m$yEhKyxR}DVcqj;?2I;(>ZC>)&1}GZ< zsn)sUU8ZoJl8b2!t+-phy%Bql`O%@h7h0@)PJiq!ihQFEh29sH%3fp5@kPRI8g>@Sm4H)0ecc(y_9jzk7(Eqy8Io08gO(e;Kw#%rWwDxdgiIjOW15s(sRUl zVHMa+!Wa$NIXS0fKi~dH*I){_0E!2Uc4cc2jsz`4=6E<`MA^z6@8&!%p`T8En@4PW zCfIh3iNe(X4J@d`MsoYIlgv(?3ij65$Od4*$vGX2^zD`%OFlhZ3i^D7cqB8P3SL4~ zCJ0Gnbp3A%{71eHp^L@)bZP*~@@|ho+7qVQre1QS#-8T)w=x497hlm}m}qWxXZw8M zl9Dbd^@jPmwe=lfZk=`R01R=BFxHYF=9m9%NAhX*nk3##0i#8QA>)&yEuoO@R(do2 z6wj;5N<(JXpg6;krbiR}8Nrl{{;QG}g(;wF%O6*o3Is)c(9dCD45TLN7|dp=e^82* z%t+hh4Z(wfd*26mq2?tZw2BEvz@|CybrR=xiw0RI{Y2&aRr(FPz*7;nwtZm zky_^3)ZW(!ZeF7%)w~_fCtqN1#v6u^e^pJSIZ8)b3K(_A%_!zE>qB1GOHra*xf|I0 zJR!*;`yN1iZa;p1Z>H$5i;-hpEs?biF!WbNUW)J%AzDp@8#R_`24`Z^qoC1EXg78% zL`5>gEWz*}l zp}%0ws+jzAJnI1NqV`ceCR}@GlgbvjhWT6Ia}3z|(gvfQvhB(BS=Xym@=30gx|{f- z*jKgqzAr?mBpLd7XeKzYPgUP-c0_&t3HgnPBXN!L>VkU9(BBGX`gBT@bxK_l-)LqT zwHg6Nuul`DCK72qztbxm@aw7%Z~1W>uc>0p_B~2$*UQvWdFf3db=cjOd;wnr>^7ofC`&fy`v$ zVDUY4c>d_OkhkUndN)fuU0aDoMfB>sxvx0tjX4Zy@iVm8jXxpmxQL=2nLl9L8Xm9ae~d?r~8df4VS+>xR;XLQ@9 z^z)$g2o}1%v*(Y~f~&qRo5z3a?{5%S^VUM#)?F`0B3g9)L}>Mv7mFt+LCt9y`E9XP z^kYr`s0{#Vf}T#x&q};9{d3n!e_$1kbECTLe#2uYu>2gj-cPBdFL4i|nq$#@8teQ6 zEA=}>v!U1;zLHlvw?@A!`e=RUnMX-6!PF47%|O73(nVzGC7U_on|4cZeqN+W;?RBd ze|2Y;l^!?p6r)*Z;E!^AvqQKLCnh00i5|L3P&~`56w~QJroUnsM^_BsqVCpk!#1?1l-UP{)JVAEmb?@wNNc zQ)-RP0tnXt8-8nn|2;ne+V2s-E9X%hQc^NlWF$1^6CJDh8WO6~YdSiyE$uk_9%PFS|7SDU~$y;o0 zY0@bcYpdD=Dy$;#N8i7_{Pu&?OAYNty~?kX1p7;L8%d;d2W$2S!1yMbYWVUPsF&ry zPrinEqrtUgrBB|ini%VWtKU`VXiu|8&CtG1UsguBB3j9CU>f&hCviVpvY>b%{AycC zjhVA;hhzegY1Of&E#p&46VxxCL1S5?R)V<&ZsO%K65&*?*wh)nSR|0&@@o}y2UTx_@Sc_9xaklD$#$c}J$pO0R@TX-}vTfDMYIw^>CuI6@4=nOq&o4n4m$awA^)nB}6JmDcW@Pxr#dv0-y&=fn`{|C5 z5-zzT0wK3T7DsqSX=_uiB78f*=qv*UM5_B5X|Z@h8JqJah#lW|9otSl-*<@a4!3!F z((!gc_^f;65I5DH<&tQr{&}^y&ar|>&hZEazY-QN*xOHJ6Q@W4&VS>%U51t zM)Xo&z5!b}c-4;v9f(B_Sl3d0z+f`mWe|sU1xn*^nk_f7sB_!!y?4H!Ty0w0sBU)} z6DvLS7UO83_7+Rmx=~1lXFn8NycNzwz4b-6R8?7B--v7t4e4s*PhlGm#ejr>d}4XQeds|A_jhz{nb|3m5IE)3NQ2ZQFJ_wrwXB+jde> z$9BiIZQC|>-v2v$pX;iNx>#$}#2C-aVLDEQ@_Gkt+Z8IVfp131db9I>I_POC7IxE~ z6#)WkmS@lz&6ooQ5kB+8dnlTv^oPMlgY||_3<@FOYifk0m1i}UnRT!A^Z02nP8KC4 z@wcE*VF1@4Ks~NevOfApuh$0MJVt5jAR3>}!d+=h;+6#y>}c;5c;b2ds&?WkqFDQD zGu)$EpaUv;j$Ww>q1!(&IPN%Xx;tbpXu6k~D{%s8t}aM~OSi9==CAdSrLWKGji;y1 z)QP;Ofx2x>BY9&1aFJDNb7rJ^A>1yQs@Wt=egI@(lGKPA^42yu zSVWEXF$TTvZv+erqA|s>S<>HhxQZ}6CXBgpa#C)YXgtOZF4V@DbU&9N&0-@HV217W z#u2oi#a=<>2vhnKsOSqR75aoKMy`#mOE73P{E~q%-xMf-GZX#gEqW_-lBUpNE$dd> z!SFuo#k9`cC{JX|kY-88*ItM1*NQUzb{)!-QWx!HY_ZU@*=at8lz8WLHs_HrBTmRW zl@7zLKY@K*E*P>c)p{?oT{?d-H$-N>+ee0!I;ho4t9KGyPJAy@{M4Yps99Rb`XXLE z@uuRW;+mKwwP>ET8)8c`_?)Qc(pmxqy$MRqPu6hk#1o_vZ0OJg)}JqsDEm;5ZRS9d z2(V}YTd3B#!?FKcCPhG)j})*?bl5^XY(O%=PfM~zDXVw$E=|!#M1VZ8UCuEC5@^dZ z@7icc*=GOR3Z(r>RC;?E^~Yz#zY7V7$S+S1r_%o$$Y8FMo8;7C~z>CP9t)5Tu|12bw|-8*8_W zTj}MK?wH*vp@1XDxSO)$gM*j*sZ{)xUWW0eQX?|jC1^Xp*tlo6#0?QpKv2=kQOF7_hnDa$>Nj*0?r7a1}A&h;HT^@~sJ~DYn2iHT;cS+M0 z)S}DCUyOY_DnjS^w#nS06ANVh>5>8lU@Y^`v7RD)@ITpoPIu_FF9bATIE-CtsYd*? ztlM^&xmaJGr-T8z0RgWbZbs5u5W%sZ?U*OtPb)-R`ZMI5s3@Prx%pA@uZ+@}e5li1 z$LJg>YT!z`jU40jFF~rh4Fw_-v#Gx#KdG{HU_g1XRQWxE&$qL={E}eC{X>03ZA;Zs ztY1noRMf0cl4YNBcX3NKtM_s(O}+Ygf?9ML>l6d$g>!bJ-|I^SMeG*>!I2FrnKEJfmFdd^r|X>GNt5Fl~e z4WKEC!cskbcJAFbY|7Q@_ z&1>dljG_$e8ZkOKf(y|g3D#;EKiWsC226z01o)F-I+qmJ2j}NvZ#0Jk)?U;e3W-|4 z?TYOmzD9ghKrNInDm>3_=;>zZ zio=IWK@fa|QoAKShY~$4mYryhVtt!1*VMPjZB6> z*fHLK(x!nxjuOWE8!&)R#)h0Q@aQjdSXqYn&yoD`fQr;MIdA22q$JWl_S5C#(|Fyr zLjUXa{5fD@?6l0%`kErM|;h~SbCcum`Jz$SIr{a9I;BQm#y;bOr$qb-UDq< zIo2Dtcr+Rkx$iB&VkMbjRPLV=@t;Q=QH0cF(Gcxb5b;BgItq;_6WU1%vctC>_D6Sq zCYB>Za}emXpXe?=X+_Ig%AeBrS_tV_Iu4nBY`9eI*;weseb`@cbMyT>|0jae-_@NRh!ZEB;?fV(XW(a-CyS{Sy!>_L`xrVBk8}k)oQXFwcdzVD)av zv7m*60S4E(@AV@u|BO*ZYD`i2O$0qYA8`MmyqF$^rt~g(RuEslcR49EXLS)^6s*=5;wY;xcojkxls)C zUA(XmuhQk7oBreJAQh>zPux2kK<}|#T!LXP8GUPfe1_?%RcdIp#(f%H<&TncjY?sH z>j>Ym{W=)45Fkgu&;6`-b|rMPso) z6mtLm3^J#D{?hM57=<(S&4WZe9$0({( z{0{M;74YC?JI3ktzxL&MK+Er@!Vb~%kfLuCvu$u}mXUFWk!V*BI~9vDo$e}EU{(mxKwlcM82qtk75AKG-gd1TV<4^;tr3k{ecUhf!J+4$Xo*`9fLOf-(8Bd(7g$>V z)x60&r<^8!Xm=2pFzry+Z&FU0!(Pz!uj!@jU7wK-YRp4W-Tuu%D=MlDXZ}bpo+nm0 z_As3mTmxwz3Tb%91Ne0d!M)vG^)}n3Z=l^<;oE!t6!=kQw?SZo@H($(7Qm+#B_$0T z2kxAMX$kf7*MKNKhBU>9D&OUvMj9w}0~ZHAyJ7sNr0{BukOnUaJPKEznvkm0{_ zw(FrKRji%G{X!TBPxs$6LQDglIkTF!68^sjl}VLWLpc>YL7!Ghz9@LH^%{(bDvxOp zs!X%8gcCoxOjB-=`R^sXSC!7SgY1&jQ^X%4iv%e@bGhP;bn@GV@+Q%cg6Cj{IMnCwB3e<-ltPNUotT}LUe zO3gz2to_~mj3o`(4n5}uk7mxGW8B@L`NpcB#m5H>NCc^+m+6cfaq{6NyIkRN-t&_hvJrDmiaTZR zPrXsW&XocSJ5R`7>I=M7nhxYtHe!5XCUgvS%?r0Yg>S2L@AH+73~9gUD#&hW^VIqp zNhH_pHz}r5c69cmv>3iPifVjGmYUtbW2U0O6~C@5no`M@8`S|^Jud0Jx4u2^#kQ?A z+nz<|TqFcl)-bcj0Cx+^M?<}&hzOM717H)=PH+uV~&t{KKTDy~*$NM!6%Q z@SErh2WGnF(#gHg`!LkUw*GA08#8c@G;<9fUlIRA=SXvz`QyF!Lb{6i{$Qszk6!f$ zC5i%|I{&MIlwk=e% zWr3)DHQuZF?ftInr0LQ2`^4)tBCXcYZw71$hY^v$X`!WrubRN!-z2nRDzmlAqn-AB zp(Xoq&R^BEk5*~-Nd`DpJon2 zzAnf|pTnmi zRSgd87QJWx9kR1s-QQ8(SIX)wt(nZ5nKX!}3IBhC%p6U9N7#`xRX6nFlg^%JHdW4+ zXvD?P>U)`%w)z>s=gEex*>~7XaI2q}gGVvL-Wv(PfLLfPgMu3u+WPR)jaYKum(CGz z=ko2!sPo%2(Q>YGRECNyq4zU3At+!?<~-v>Yv(&>eP(3dGZlA~$x``EoI-|WGcZbh ztU4(23k3^gpUCSvS7(2w!r{%^;~rUg^c(E{FIv2*Cqc>yXAdPQon#5A>AT zt~dTXHDiC*rvDosU~zPz=WKloY_0BkDSr!fx#)ZlsdkyrHrd3^j3rqx7Zl7qKaRu0 z?S=-Qtwemq^ek;AVeKI?cHQ1wUSLe%5_{2RSkp4*MF`u9tKaQZ2U#LLiHbE6WH;zX zk>l7f=F8&0Se!L{xSWjP3-f7y+YUr%$8psfl6v!Mmhn6}D!BOG%VCJpv^hCp*o>-A zxY5>s{3~Fn{Yem0S2Rg*>gC4ax|?GjD%y~pb7#!Qr14&%J@_Am#;QqRiz+l=@WFXL zC|H}KwBG2*6LvIh4D)88ABmarMDwEbC=S4|`Y^rV68$Ods=@h%!bY>pM0zP{@X!LF z62(iOOP0Tyq#B)l0&`1}Hc;Xjurhy;=`b8`mmd7Vm)2HI(>hb^7{tU-w=Jsuum}6T z_lF9-Z1i_1;;_^CVz5(6ZkV(xfZtmXzgw~$w@oIVL@x6ujR=~*oCx12|KEoKPI;;M_5&_E|8|?OhsLJ1afy z%k0W6Z&a%@El`dv+#+ux-shNUk!@|y+z+_9CJsVoKe&Sa5!3lHcK#U`rzVa?)&;D_oGUrn@}CO`fgNY+F6IG~qI zk+)*?SNhFR$7F`&ICy1N ztvwyw>F*ng&oKb|Z@39G2C<8gfd?#%Mx^jzYH-fUmx*>&Hod&7jYQMI!cf02j2e<( zfYTRPwy2U>y1U1)5w8mI-PAVO)>6UEAjAcj@r-;7a<)GA;B3BX zq;|9NQ;JA6BJz~ugV91FnQNx9flUU%)5uNb2O4C46^P5XeurLwt@K~lL*LX_vpOBz zbX>au^5%KNQHjb1G8(0lL?&g;nE0x7vhVu}3SfvkA?PG8=yYug_2syC(w%ne&6Bfo zK6;y@2nRo{rFxX)sXFa{Aa(t7tABe}1A5)KO3UNW=z9$XkU^zO7_WXQm0uUX{=|c+ zn6}@)8Kc?G=i<`6{@@JOK%A89qP^(<*j?&cG(MiVEU)gmlmlk@oquJJCgp5=C#kzZ zRZOUAKg0+uOY}<2_51Ym9E>oFL}20Vgn7Rxxt5`o)4kwo=AE>WJ1DfW-iSXs|G;E~ znZ?E~K)7*Jq1I*`UVl*-@ABUgQh5Te5^Fs%C+bgagZ zMkx5#Y|5Ei@@7YaF1x&@sBAQWt;XY;b;9+X*;`cj)RxEtz9UA&G(xP`A?(0mQ}e zPKw-Tp!pGz?;peTHF!NJrgBkkAAf7t*V~ng$Zfr?RbT>QOy>?DZ|k3&)r#hk32Mc7 zFI(N687-v}r*oM54Bzc`VGv4>XD@u*o^omhvyEo&tlgX{R2R(#Rr?S}6^hZe7OMP* z_R!4OgOjGbD-IOAP^u;_i;}Q zUC^fxz1qzkg^&&?fTt_^^OE@foVaf4`(vh~Z^PyPgg~|N$5hmqHjjAx=!WQ&eCwbx zt{bLdRtDCTQ0jOsH*C!3DYFNXeR8e|^!W8RK%^Tq!$ezYjGUk>Wt&cUpFE~OhAw^_ z1H3$oDHn@%GTeXXJ*nUC7kfMoKba1+tYC>YjIPWwizDhd+ZJ0P2 zAQgG$r{QN2FXA7+!-=E#TL44+C8xbKKbh$iWSK_s#Y4q&tc`|fhGg`%L@9GE=jknf z8Dzhg4g~VvnB1h{^-Mjnj|mA)gXhN)rP)KVbp_wc=t#Ja{n&rdnR$@SkYg)@$fosF z1TNV~E{!YkDs%1STMvc6%}V#%uu^JvEwsRWZz_qb{}w-YM!`?VO{M117Alv~1poCH zzeUa>qqkh4HmGkX>r^*M*!7VlzzRD*&FgaP65YgA)$~o&E87?&A#@qd`-|bjf;lvJ zECTGT?TOKfalD{Zj8-=Wk=n6z2=rRtK;S#|sZ2FFHVX`KHc0Hb&lVpRAt&Pu>3)LY zlk(KS0Pt7DhsJbl3g-kQqMG*=nlQTOSC4r1BF+peDy3LVl@+p^16I$Vf}xbA?o&r1 zv{xv=@T5nIU-xaWBGGnClbNJm5Lxvo@!pl8eMDVaLCq=CVxMZ2%X8Lg z4^f{%4BX9`ZA|FgaIRq>T+He$wMcvpE=Jpme}gdX#OCB%5Cp5h2N*9js}|LVJW>d# zs4oH}^#)A3-9eNoi&9e$6ueLW<&p&Xz=ML}T1>0wd~7Seq^TOY%t5Y{shztj>UQ5r zyYGwgU$MD%{*H-$G5AA{ROh8^nMHY0HjZ;Lv;wnS$O<@se zpyyo86Mm*ur7x^u@Z%Z(KZuxK9EADZY1F!W379_lWlv9@p493Ld?{`8!U^$V)eeRV z`C-NX4@(aL^Ndxvj$3qz)Y*|H&-eG#_P74_X}UygX4`kJ0cFE2CibCy)Gh4Y8&Zic zG~C}JpbXwbdL-@lzywVKU{puzu>Z%tb?dEVy$wzxpj$uWQ3U3t)a?o{V zbx;NaAa=({O4%%j;8XG!Tlh{AE;u>4bUd}k@~b86&H^04)L5c^GDu*F zO+RaDB8*hyNo$-m!xrh=yq^6M*F*f<2K{Bi74uAiU5py!qGJSJFswsz+kq6twa2Hx z7Y@<$dGy5_0eW&s4GqmfAJG<4scv}?zomOWiQJjEU=h;tWnn|YCedGROkk5WQFcEuSwx18_0ip+3hrddALDv~ps* z^^*H`emB*Y$)(u8hr2VliNlNbO>zXGe$3-G(OPA2MRKE-<#Iu0{b3RqR#Mf=!oGiGIuF*=f2Ytn2sY}v))+q^L0?lD z848_h3w>%-X!{b0T-MBeu+{Fos@!NA3f)NQl$V)M53P1xorMIJ)5M*mY9^ttU|g}} z=(pf2DMh3+P#*%~3)%|e}{}+94vjy2wb3D)2N_$N#*h{?p z4BWficQ1b1zx@6=y1D%`PDyKVd;f(j{`a463Zw6TFhzQi#@x5#RJZyVJ#o1g%Xd%q z4-x_YbY8}$^_H1+%D`dEAjIH5%wQ6PAtarPt0DM)XnSc8h9!5;c`!?(sEpyQz(vuY z=|SXM4uy`r7seAX2G+}PsK3#7 zE3ORTLB2Lykn5o*y#nwsjpL_KKWBfN!Hk*RG2&{xT5 zX!>?;xI5WZbE{(2%)=5A35dSJeX*%&YgvSL;e&Ov`Y$4W9PLp%YH-{fAobgz# z{j~+R6YoX7spOWutf|DeLfF{+RT7ND1A4qV@p!!3lbQO?jW@{08zwoGf&!=AWtQ$YZ&( z+HyOe>Js_SH4^=Sl=e61Q?VRLfK`!MEWPX#eqCW@b-ivU8*fKNa~Q7n(&hSFA|3ey zTk6{4kX5oqH`;7%S7UjnXRcKh*gym2IVOxwXYGzj_cr1lY;bLI@emdPk13RXLX^wSdT7d;AtMFC7=<~c3Q5sHm{L~DKe`J zUGh^Q3- z#06<#lu_zZa)$~l@XN*K%vu`Vo7)!O{RO||f?UTIJKxauxkbRSO=j;rsF+-{uQ80( zr0?NTPUtHm;~0>8C?_Iuh4UxzfkaFevA9~_3dn%wM5g>3+2dhfWDn!Fhqkxu&>(uW_g@U)hk_=pGZ_ab>+7pAl|f-2#v%{aNygoNGtDD^V(xkW!4UX!ELBB0 z<-;wwwAh1Lb4$J2(}$LX%j>(e21(JP%6t>t!VJ6rm|y3^9swuB}!ius|a zq7{Du&HZ|(%Noqd)8)pUP*tQjQU95bkPs2=eEK&%@kYQ7WBwfxlihRD?Cd3x75$;f1JvlDG#NlX-AQFn#<2urI096&+ZRBnZqsyOj6J}JhqU_` zWv_21y9O^X6y8M{e)NkU<1`a{a1LBZGbm$wOp3OTdL48Go$A%n}s1$Xnt9DQR5C*)(6J1lm2&kP_La8-Sr>d>pF-+#^&WQ=eE6qu0GTbacOR3PI z%idE@X(Y|Lw>2?bv|7%Rt_(;EliZmCx zUizf%aLzAW`F#%?7|U?BGoQ^h{L&ep7ISYs^fGyuy&0fxMAMPPi#|?y4he>AoxBpv zG#w^4EBG_DAG-_MNHWa1DTb2Zlj>tvp_gwc^l?w&ouS^?4_EUXr1rS$=yt?l+G}hKDa)Z$!g2dH zIuAH2+;tj(vJFQ@QdfEjONYk8P+(Z{ke>_`AgI)25rctYgi90CQ$XQK8`%5$CLs zvcZ%DEHwF>ofB*0N>Kk zP~XQ#oVobJ(9YJoM%UfjLE;^69j*3cKH;5^O`hunUi)K+88YYgiLwywFw0|?tcOrf zxZ;m$+tpQBZ-<~*y14)pUUHv}+wX9}(Hh)FL?<{}Oz}cr-MI?fYP^&)sfp7#)?P;8 zu?(>#MK>}JjzTbp|C*0s4F$Id_qaDIf^dW@sX62UhTdlS=k3kVoDOZjpzn(Uci{aF z6}roe+3R8bF75I!J<c@m_5Ado4&>b@u?Cw|E8|xV?#gfIq)v3m53twK7zU+#t9e zKA^WsaPH}n+6!T;+TH!2z_7B)o#i;@?0rlcz5mj{6w2Ipy)0(>1RqXhvKLXSc>r$D zlPzPfn;uJBjTHT^$dT#l1+KjZBjD192Tx6b#%Mu0w5i2bvrcc%O*w>~$0GoA$2+Qn zvVbyS`se1>%(WoVuNDNypNY{OE4<=XSPYciv1c`qB((w$%u1n{W{1X6sK&$9Z-NR|fB6&Irve`btnJAv z!A?-VK(dgPY2C63EaatPc_fEAU816GgWqk%Bu$tPN<*5v+wsL1cPk-wUz^;^G$($&Pxw;;lkl! zn(3Tp?yIc0cU8P57yiuzN)0po(mro)g=%gDGFCLU?AHrq}IgQa;J4E;LNA+$fVZG@}|{cd03$x^W!NREiX%4)MoqNBmB91C)j zhpCv8D%A(e{ptDl8oOS7&i3Av$V<#?n$b-?ws-A4Z?_Mf9};x!T)eHgIz0>d#_^SB z1g5}H-}~L{?FY8XOjGGV_*JmtinoO$gUTw-YdTDvrC>M>bczB}_GhPO2jIou{3}Hl z$i3@Tfi3!Gl{Yk-r*0a(H^Q{re0d_D8w-z5 zc(>77{L}tXkHUeo59Mdt{-`y~CKXB{RoChvuwTUeRn$2@RahWPNadZe>f@W?-}J3A z=5FaneKXE6`gWv8Gb6|+t0nPg25Em#>$?9gzqyJ;rwifx@pq#KnngN8Stm=tWMnoc ze_ePB>!@Ewv^*M)nQt${jWn=&^6F78^9n(BDxkle+AM{m2wjHQP}=T4l_;7Mzp$my{&J7o3mO60c%n^EQygM~^ zjI;|j@pMNv7HE~R^q@5^k}ML${R0rj zPxl8Wix*mhc$N-p_D6J{0zN00MoXdF-djm({+lUPR-PN=kte<%XG3#KdcM5Z$pzO7 zyCQ7r0L5}TAt2+yZ=T{Ax;J){1Om;KLr)IbUVPklpWTR7Vvv3p!NDRc%}%*1~Q#MuuyFH{V$!->;1m?S7v@RDF}JG}A7{V2vq+Y=X9 zOvR7JVNT9{UqRy%G#m{wc7pdfRvDl2u=vVP9@D8IQ~9t|jy+A#wE3wqS6FciGVLA} za71cPx${k^SI07=3r5a;n7~3gmks?FKk0$NO|dG>M$)v$(?>Azcy)6iOxSP*AOCnF zVO-xgMpd)y369fob+o3hT7E9=lUHMh#5$!_b1xsPE?%#9VyI5!NYhg|zxbIRLtpTK zF57~Pm$gR?#x7J7C0(leMM#Bur7i_#qU{=i+zG(M9Y7E@5^A)?`*#n;I$9uV$gy2xxU*6aKlJISb$+@bZd)GkwkDn!(4qm__dC^b9_ z%0D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 z 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%0D? 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

(eR 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

E@hpWNM!#jKYI$Ku+rIWM9ui<^1>`oxzT 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Ġ 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ⓈuAQd9i<|w;?(NKpFrT;1G1`&~GCYAT=T5 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

8b-lYkP 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 diff --git a/agents/doc/sa-create.png b/agents/doc/sa-create.png deleted file mode 100644 index fc88116afc6726c77e7e16a8600f1a99ddc58a5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90832 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]gZk~ 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

D=*#-JVluBBiJI)Fd32=STg!LXrgi0s?ENk(Yd4 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

K@8G?*B%83Pgg%UhM)(YY%& z7mf7tkf$fdQLmbmI;u{xA|@8X_vK8HIJ&-o_0nGnouHAW*n)SZi{i@X`%jOqjzrEQ zo2&WLJb7Sl2xW@L=ip|@jc5st7WH59()e7sBI(h(GV~8Wn5NvYFFm=H_Wrq5RX%Au zI@Y2NQ@Cv~@y$GmT{iul=`x=YwlpQPVdQ&vQc})fCKKQFFH{GE`R*-3r%xU+1z_8L zgVFN(7#+m?GocsxEuIXDd~myb##a6Aar9F>WUbxlS1-E$ZghgD}4yX@Yj;1&-w z1)LTMR(Zc<`!M#mnFzCAq>=|QeSM-`JF{3Hxcnwwh24$A(Gx!33rz1Hqs5!NFf(Cc zs+GfPjX?$sr+ef{vE}qoEEHsEU8CzJ9*Jq41QUWjjvB>sk}GR_I~(#_vOg2F;IEPs zCQ2%MpnUGuy#nY86sfYzB8(;l$XH1d#cSQ<=Bj0@jr;%E<;4z9_zoCH~&wK~ZEIt!2orUEA9%Bxd+gysbbXy z3J%S#+tBdvXoUm3pCI(TA~ehB{&;W>;8%&P=HvJn6#WJ4i zz<#&Mv?fh|XHtcQg^3@rA42dR?;`s({`h-u9vJdQlq>)KH}TS*x|m%iLp^nLHJ+DM zu44+WZM7lrIB!-xW+R@qUAKD!DDc@rW0?ks7k+odj$bbT2>xb4xQ33myWe$n!1YPS(OE^W@$~Xy%(R{=i z_nQ*@zJdAp1yTDteG(y%?Hwy*-T_;-gOZc`{Pv`<^jSry2Q~ExWMKL8Qo)0s%I>Mc z;SYaVe&WCt*ANIeRfL<7J3VCrI1=F)Xev3e4&nG<4F&x%xSgHGg?bLkAPOM+Hv4b|_i z-mu&J5tHYBAG?(v83A}}=)Hb&mW{C0F)U)wFW%dumX)phqGF8L0+wL0g70y^Iwghn zTYzrkLTNfHr|tH$J~*Ydm9Nzt+G{P`k}1k@{Ylh>qqhplk@0nFz*Z=kbio3t=E&}u z{nkrXu0_CTKeyIxZk2!fmtH3F6Fj>y#(QJDg3%|$r~j!FRBw`DktajFJL1wis|oom z0<2|?QOAk)Z^T?bb^Ly>kxO?Y&WmtZZ(`$aSC*C*w6whNquyo~<>pQ`)pu;i(I5Du zjT_$a`k1J%xJ=hhbV$Cnz~T3XiR(j)gkBO;b)1LP;3fa%>SM8Ajp zD;a+0VE_?;hirUp1-gA)gTMdre^Dz!>SsS1UT@=VLd2u(4(`qqLR&Gz9$e-(6=N2J zQX`%V0d2p`Q2Wm%p!|oY)HTjkKy_IC}y0RxrOna{&ZkFBz&`Jih@3{O~P%4+wZ` z32xI=r~iRhB#A)$IZS3c2*i$0PoaLvU~o5^t>+G0eJpgD?96b-U?c#m$rH{O!-Mh! zG{|w@t99+Xc@zm7=mF*@dVI;tN?pS6M({@ueB~KX+VD_}D@K&CUk(-+6p0^=mX@bw zeRjE9Qxw{gkJC&okZ>WG5h;q|MxI+)>gAet8p9p~@_**>^(8a=MLI<~T?<(ZnArlu zj6g=n5P4R>WQzi^vcZJ9g5htc-{=-}1RIz}f8tFN(kNM?eq&i6%S#C*S`!~)5+(PX zfJpRs%&@xA8%&3!+pLBw8(mE)i}A}f_jOteqTXN_A8J_?VSQS@48{S*Ij7zWdf8?3 zKYxrhCg7w>&0$PL+9{_=dcI7?Dm^AI>Pe20{=}iq)}T(+&uZYUFwseuKhY_OPYA|9 z6pbq68rQX|?+Yt$>0obhZk(S`K^`a0I+r)iksi^@E`GGh-Ce)|0D+L!^LWBXB{emG z4FjPzwkh0uE1uwH=^mVY7o4-7z_Y9S zTM+%0uRw~`dha|1w!fteT38vVn8IS)Sm*xHwGO*sdPErHTc60n`rwwCFm#qvl=TYs zy6xY&=5d~S*->Slif^^#c?Cx&2K==iofLl>-{8q1KX7-G5#rfWIO6gCoE^q_DTR=% z3TCU$q6*JK+i8E(H|H*2-+Q!IHpmFLW)Hdc5s(hMQUBFF?XuWFv7$(Eh&mS&H@ME9s;_l28E0vTeI@|1i_FxRBZobEgv@)&DW<+ zSW3rTd!-}8&ea&Qx#~ZHmV-jOYNS!lr8c*+ilyUdVtfrvF$LKSjb8FLk;w<4mxIdd z`bw{4dENtl`O*BwjvKkDv>=f;!cB+V`n6b#C_5rl$ z!Mv^%krmVB+oI|~i6?=60>qqQ3)^vHogZXV%fI1R3MR|}p5K;oQtzgYdhP=SNJ3NY zkAF_iC&8hdU55{A+rOh)5Mb!zyJN$k90o*uKqtGYZ<1*PkpK45TjNOvN|{5UotO&b z^`usTZIC5}wkL5KI^~B~FQ-;s z(z}8LPd!9^ylKA6=IZ&G(9dMmaE_bKD3OR-M-XQ*d-!gkbP>FzR%q=O3 zP8(&?E){q;?H9lbKuhkn$MNf_|19r~i(|{l2a?E%zluD|Szzn5{FXWJO^6$B!R7>y zzz>zzG0fV(ss$riFa_{H0uxyIo@e0aI~d3f?JEISpGNf;#+qO~qWokj|4?`?NT?x* z6qFcnS`>wJD=W@dPc@l00ON>}=5X_;t?+&OozF|7khzv)fUhVaitsUVqaB;@r|XKF z@;kX**_YXjW7r^z^j~drV-j5DZy+o{3Y`7yWe5jzdM}wgGITi<$n?oeQJ8c)evbf0 z`bCW%+We&NM$6ASO;M{7;Y}%A3%9-#_)f(4b2hp-#lKdryXk-x88sP%!HrkKhv-$S zi1+S*LN1bm?a^q5wo73bgXQq!a%tTJ*A=c^TDXAA35D#4!4GE(F#m?e1UV8XXD9TEZ z==Bw{_$8mXH*I(~>ouHwie#GXWh~ZNginFy;bBv7Yt4}Nq{|Nn+*U|!!V;@i#Ai>$ z4P=k8{qPIK?plx*8r`Gdb%=JnwX4!{yL6}gwv5mg=B#}>6XwU5zkau+SsO@x}HZT*Fd~^!a$!qQ8f9hjI8_*yKy`-!R>>w%r`mRF! zZRYUfMn7I{O>VGR#&a3@^FQi<N07I~fBf2MjeKs$UAeyYVp?)v5;gG}|HH=6YXPFxH+ZXgV|fKi;%wtACO zm8YMvF=B=wV|k4rmfr((ZB`KtI9a`!YXTX6WLKc~`5)n;`HmkBPl~c|SlKP9L0p96c(U9pH50LDx z#@&`ckerI%z#k$EMa;pgRdsC{q{ss@vNXcbwNC@2Brdh(!99Cb->H?R3)}o(ljawp(HrLd|jh{e@h&UhJ=m&Lyt<51$HNS5bdvD;c znXD{|fI43&TjXMuci%g5E#+iO(I0Vz99f&P(4@l^26E8tA4@R~NA2BxUQ@NN>|8zk z>z9qXf=?V%UoaI><_6L6Zm-VDTGW@&=4z9ivHo;8z{1kEt`6v}ZpeYM(`YceLFSm~ z(ZoH;TF=*-Hmr@5sl-{lu-ETJNhWTR#;jy*eAb$h#_3D)q=8L2GK_$O{4*La@0=&L ziDZ>IMJ%0`TKU_ydmN{z%mlUm!r&Y`{0s2XT!L1#Shm;CJI;9gjeSJZlDvtC)h6By zvqm#;Q}H9k2=1-}pCsp}L-$GFTuUJY%lawN7XlRlI2M(9M=_J6e|Xtl@8)RpyJ z!?w1cZF^O*$AeC~d=VUCFQeo?*cG!Ib_dB>(Dyr{8ao{K3&Gzg<0EeX1SS%j;J`w-7_} zb=3E>E(Ne{*Oo z;`Musmcvra8ILtbMuCUzS`dlPG|8uvt8AF%Qb8b|s(Li^o<-&$KKuEL*B&2CnrrRe zCcfxw?(Gx(|Lk=V3JCX@E%C<62pWjE>Lmj9t)t-wN^ti)ySdt;F@y%k9WJkqmHklj z=1r0(5U39oVB%<_*A)T)AWU*7!o^T-T^V7GBn!as;{(N}0zg@q(ynk)1x~vk7XN&m zOT~-8f>ZDLrS}6DYfky~G&1g+uCqf&SzcPp2*N#&&tS_r4~YzvDRS0i%*Z2dIGf!vfTV}g?tXF0Qi_lpo<9TCy>BJ9Db^jOoW2sdVS>9Ju&!z;{(7xm|Sn?wq!2xleLBL3KR z43?V$j}nW3v>_?&l)6c@Uj_*qS?_EkK-PZaC_|ra%)Nf~{Aotpn z2v|goZ9I?DxhDt&=K;hP2!{5?P8v;ZaIBh{F*so ziou1qQ046QQ3`K%9Oxa?J3o-H&SvYIX+v_+!g#z*aaSUeh?~k~QrOG^q#9e+>xe+b zBN83^TcvoktfXJ)+E_P>x92GP843Qiu}Weiy%(7!K7OyK{9w8G+Ee4-B2JIj$PpwL zHD!QoBi;|2Cy-!nNEz9{&y+&IEpDMiTbeeD>wu@?)b+68Yn{5AGQ@yrL z)V9{v5ZmURkX`3I}&q^g_WIdV;Ri5xX21xbv%QS}O|2uR@ZK<}$zsu|S&XmY^*I2RktD8lP(`^(gB zK^S$kP=NWv+1SOlJTR##^WKN)m7M2r-Ob)O!(@@Q?S9xC0~x=rtp_#U=t;*Fns10) zuIMJO$}!MRl@`=g#>RAspXGU-jSvv|D~EG3=0s=(tPG8HR$Yz=U%tA zzZ3X$FCkWa{8$D+ooYlZ>Vp@0l-3biYBmOj^4b~_IS&2isQggv@cx&Q3Xfk)V>!kt z{S@gkjQ18fqI8Sf>wq}U>zel9XkWQ}#u=yp@HPD>J9_VF;w{P%vViU$^{;y~%DE(! zS~ZfxX4VaEV@m-s{K~+46E;Qp*5|}^MLpN@KApfe-;r?Rq$)y?Ma2Q5%St5;b9M@` zbH!Klihl6+rvk~C(6%uI3vV*6d1W@yk%=n1Y56#+Y*}^(HvCtq*(x~)GkY%TFKK?$K>lD{#AEA#7{gPp!u{ebAjNg0i zug7#k$;RFA!4>{=(TMbZiO`zubXM`Yf;t0#x9@d2mmMcaqYpjE!}f(lb~pFgpkl-0 zVo-&^nWnUuzb<{Cm{on^ZhZ=;EuhFAa{6xP=R>r@>oAL<(y13sru?52JIy$}rsK_K zv$RsQJtE>%+;RVlQfPDfw^tGVeH~|Frka4F(CBRUQWCNU#t7l#l(>i55W-dadL6}a zt4Ykao{-#{ld7rs3ER1sG|M<4dL% z{}uxFzKm+yRo-~gb)b@f+_poUQ_LO>J!XYIzW*b6dQB+aSQ=vyuw(4pR+2K4DjV*f zIiI`gnrjNtF+XcAx0Ki$Xi!X75J$qyzNFDqnZ^m0M4Pk6yJPHgKU>p~v0n#8FRmT( zj@TYi!i2GL+m2jEvJ^$60zWQ16YZQWl2r7INEjhj#S*q*w~Q2*HYJoU5DRyH@1x+n z)BO}*bThJczP-BZL6JP@I8JpY(`wfz^V)CRU0VVfEn;Tk%YHLmk2Nt3ZQTW!kYcan zCr1An_vcbxPBR<6df25N%PXZS`u-2GqwrDiOt3DSm+(2bD7ZvZ%vw>|Kp46UAMNhi zF=1m1-E9DC3Z$RvoVlqv2yc zjHq`ElaCxl(A!m&Z$1)Tq$)8R3D3_00*UNiCu48Vgu2MR{ra;iN~^1fGiEGo*Z*6U zlO);@<1++f8xfR>G3b)7coU_vcx`X79-$R`g*hDaOHmUiP2AJ-oZ4gb2feLX_3HPp@ZRh41dkJoV~uFK}9ArmIeV z1pF4zJ-$s5*^TgTVbCTsU|ty_!tb`Mpm>28(S0R+M#Z9_mRXkq$O6RAv-{dZ;H0Qy zo2CRHYK4FHQmw1eRy=`B`OED9$um=EZZ;p7!Uk#M95%;lJdJAVDL9XOg-R`pF86E4p|{_=ajM(ywt-K%IvjRUvwIEg$=PC>noP)H z_=B|F#POm?J)Uo;`G_nXF0jpuCNC~2E!D#5z@hXhaeQ`s6Nh*~taFHa4yuI9QDo7; zw-lo~j*+z~6^!J5>Ei=_5Q3$_rN$;1BtM0f@$f@6?Rs-lC%Rm3##DheVLrfe? zpcpDg37w2x65wB%)_`i%2^68#rZ_DE2&2)bVEPTz0K)NJtcd|_`6sf`9|rkMh%qkj z0@{^%Kd2ZiF10W%_-d- zwNX!;`8))VobK|t&6_%kT?uZqGXYnrqMn6!*_E53vz;;g{1+fGTOT+Fe)pNa_FZ-= z2E0%|%!ZAEh9cSuC-QuTT36stHC3(O*Khn7*>YRcc4n=)eH4_CwL#f+?&iYSd(++h zI>F@njcIAeBs|6gzu*DhH%k~TPn9>((+4wmWOf`B;CEEK0eku$I_OleC!$gT zAK=ZoXU)qclBpHlZuUwozT%=nMPjd^oe3F{vseRsAS6`!UiZB~Zq!Zd7iT8F?t)M+ zz0Jn9f-AfmfOQfJGK*~}m_%7@rDCS5c)km!nd5e`6?DCyuQ1t*DU@|f9} z12`&P_u1eQan{?vsc7k#$Rkvsa|xz)t%P5WI5m0)Z_OEQ1p)>3p!o;)|G?%qjVwZ4 z$<_*P1i+?XGKD+ja>zuAAtC`kp9qi|g8x}xD+9DcVZ%&D64KLMa7aW$jsQi9@TE^q zW1F+k;Vr@IT;a5j^Cj8YNO1*BFflatD-Dw0xxmANIka9Z3gSID0$V$a0t~dAkLUp1 zjL_V7zCZ?e=tP-pb5SIH{tRO1Wcc`_XXldx5QC*66x&Vi0~d zL=m=SdHCjhykcRr4pWu>-h?lQq zjFV;Cgy|U;i@fk6{T`whnp;wB>kr0IeUP2vC(4G-T&4;5v4IWg_R$*w{4eb<&M#KE z9_!(StXA{CD^E+>joLn^|2=iFpqYguIG-!9+Zr%ycosMmkwgKRzHq2zb}^u6j<)9ert!Ci9t zs|8}eAv7q0F)`188o~_FTs-eZZ_LnT_Qz_R%zYft6`=}#;K=|{{I`;Y&v~Qa_tS?n zl)Gw2SVJV@r*}g&X~Vy6RuYu7_WM;LV$WYU9ME&X4g=|t)nS7Xrr*nbl(AqqWp=Tq zK#}EIfx|kwva)3v8_(!gLd833Ig?6cGOw#0rpISA8+M;c3D~U)y@02BK3sbGPXYH| z(imQ6O(c&H9*Z;ycH>57g9hpYDM zgN~6Kk8!qr@J{?0JS%(TD9xECKen6DpB?2lkb8lXj7xu^K|V z*{boa8gSmespECb&X(2S44um}RkPRFV!h+7Eb^w(XY7Kp)IXWY@}F%DjeL1-HtbpA z`t=T$@8)1U-Sy)xKHD?dbS%w~h&6`)%|XdDILaftmwCsT1~#L%S#F45wb+}4Jx?fr zd`a5V{r&HUA4<#CEGm39gY39$fboQ|&E_{~i51}GR!8J={NJ`FZgc}fAcPMEuX+~V zA;#PXSDSleT5^=@JMxZk>Sn*Sux}M$1Q3j$JUAaE26^-v5HRu#mMk?geQf0lqG{*S z?Jt(J{K(7CIz*Zc!$egS0T}yAuJPD$)$jMSGko)_SEoc%Dfj6G)rViK4deHp zYs8#i2NV+kr136Z$kFoPoa)pWV+#G6dfV|$xZ%V-0gIr<@0<-ANaC|WNV`??*K%mS z*GOIHutTp|itw3?{uyCnz$guT7ktF*d)L$aQbC2`D}W@3X zMeV8YQu{l-U)+1;bz6Q}48f1@?NKQ*r+5%;v*U_;^N%fUIV`p8B4H2C5Hu$g&dpHv z_lS~aH-~C25t&!mo)o;@DJN6SvMf%O5X`>&nfm($!X=L@`9*CkT?Zne(N?=O!mVlJ z$lyH~W>9RnQ%zJFIFczTLG$J_sD&xHy7qX;pjZ^1#6s!>vaUG3ePWfBIgR*gQ<*0J z>e5#IJ5?IfqY$7R0p`@E9Y`7EZwfX^2ZocTJg0|#u$mYmv&Md$iqYbC(-*pc4{hck_@5wTEdLf+gv1v1p2zGt~P0M zh43lxhcYo$>4P@?)I5kbGGcM$>U%KU%b4GHv|WFa(c;^m?xIB4*l-^B5Bil5$|}pv z4#KKtE)NE`pq1nfcV;R~PNlo0jo0=x3q$kpjFY3{qdrIUMbLbyde`S&RF({6UWo#? zYLNg}*~a$A&v)v!2!p2Md=H)l!IyPNsj>D@Lj2%BE)q0^OoNC(yLTuJ&#yzfu2-68 zE#sd*0zI!w_M6*i!z1Mx(g_{+a|Jx)cp}2SIpF?%Uduj!$Q26>7I-Aeu~!s?VMHC| zDdRJQFIOlybWET_4OuI$#edXiH(7q=Vm_R3N*k$um{o=6k%k^#McCsL3dT zv;kG-lhAaDtxK7-4w`~oGJ+tHbI-v@;-=hm+HLPQ-6|L8J~5JC6)RCH1qdW}-LQr7 z!mH`Hxizb(By^awIPS8y>}6@sqyYvlz!UuMy#sOZ@$ZZg*s$Kf3++ze|78JW(ZVDPJOJj_5Z>&?5;DBa*{>Zs2x!%Um6aGOT^+Ig zyxF>;zd_+8f4c>J*+Ck;UJX;kcsg)og8=#9#gCx3BA>uxOIwvU-l>QXV6$1W-TCY~ zX$=@FYGWLWPhOc|tqyVs&~hbrPOslYRL5&!By;Z9!Dp5g4a5!bLjUj%8~4BmjKz{d z44|Oj_4+K{v=cYS48i!y0& z#N0a>^=b&|_ohb$VglF^G=_Sfk@6D+5v{qvOgz!nPeW@@3GmEYzJBI#>qH2@65l)x zix9(S=R~*BBt{_1w+}iJ$&toYk*PiLDJQKyJ?xZGGde4ameL03*8fUX5vvHpSCEd~ z6bjG`tPd6AW*Xm_2Y(d#MBrSm{AOyt_Kf|cSr8KLh^3>AFeW)z3s`7#b?7<_KYWk)~qi9ZT`O4rbp%Uq$+GGVGm!YDCg?f8O_&tGwASkNs{2En!XxBoy6jg4gM z+D4iL1%$~1(;NYXoFoPGgw_a?pk@zn2u#~OX))TLP!i`&HD)$Ih%9okE*L|<;Vzi5 zqONBB3U@IBmc4VIo2c26cCWht4A!0GKGqne@j8{ly&)vP6hyo%79%+-(Pvg5PfB#* zxYR%2Cu5hMCVkcq!>SuFQiy3V&Q(ggXA)A!F`vFqK%HtKg6{O$cYNuS+)BgaP@Kyv zi=Dd8Fb(I5|D7j=jEAl7#7);s$XVC1yiYi<+To!eAjSej=Hfb6j=Kd}eiIj+-2|^MBkGGOm6=bnae`jcsr=ayxmmogWU`OjT<2Wh z#U3Bs^dF_cr7?EwaI(!C!Vwwg86QXwn_0{wSSy}9M_pcpX_8%L!Xc&u`oj_xoMT@X z$vBq+T+yhN_TrCFAlA=R?~Sv1+uyf-p4hzK>(RC~y_?;71H-q;`$p%gd#D6#=+CyUAmPqG-TA=MUZB3C{5l za_Y<4b@7#CZwo27tM9)N+kT-ObVoy&8q?;Sc?M5Fk;yZ{#zoEr;j75~?U8$1DmOly z&RcBQRlsqAoxW>m2q#)+;v%I!O@q4h0loL5?9HIhZdO3r;pbA&B!D6_K1 zFYmW-um7@JPgVi})I&xTcuhDOX=-Y|-{tvB%jK$k=-{c7HB$r>)91?1g&8-B`jJ53 zf-{1oy3g&e->X9ILoIXFymZp$+47t6Ky+v0|#twY3;ZvlgT9iOf3Xx zu-w3vZbgf2^feRTV%^Vx7Y3h8Q_z*O=pyCaJvs*jV$jdzOS zd%kuJyV#n60Kd$D)yl_Si*Gwhpw{6cMI;W!IuAGulC!guKTjOtE7)=aC9ZPELDn6)4{lr+^tx3Q@EiLV7TMVnNtn=6@6J#I138QjbEj zxUrZv>ig7&2hy*=S+7oSV4L-8MjgwyaCgIpzsEt|opD;vKi%b^xQFw?O%HsJ;=9)Z zZ!wYmW#m!wLA)C=N5DbWEw`!saIzv{@b;Mr2db>jbt}B>b3G9!=r5u8c`#KFa$D*7 z3jHT^`;DL8F9pldmA6tbf!-|MT#`Tqdb9f$?OU-p&HLZ;yYj7*L zGiKEYAR<*XTt(>OEtkotjrZ$> za<)o{m^e>=Xj)4A%f3_ZO9Cn%JA|8ZY0TK@ge|* zpq(!C+78=VT>(5QmOWY>16?!PkQ}|Y2~mVC-U=mjN(sFtH8m4Zr6tX&^xdk>Y|%K| ze&zv* zU-L`=mXz(SjeH=XyB=$vsT!vnpIk$0qOV4-p0EI&vVEAlc5Jm5%WtqKEcSqS*oM`l z0qwzDAm19IjDw{qSInzaVDjj37q}5F0D#|cx*(Iq#)c$nW2cO4;W1kp1*u`3h!Pbu zRz=@$AF_vALT$G=s5}v_T-5Lmb~?V*e+&QQ7jGK}J79ZC`hopPKQU?dn(|NmZ;Q-2 zw(MyQztDSnEmH_G31t=PwL+3CU+rpO@s>;52UU1e?`y1DL5o0uQR|h><@@u=rys27 zH{d<#8X~IhdU^_5sHv~K4`9ecisFFnDQeP;YIfw?oMe#vHwm~Y7<6MyhIFJ(VEoYK- zV@HK;dzFpAQyr&U|FMDl1M0|g8{YQcBpa+AS)bJ=PsCUKmlbGfxJV6>q_g-+orcl7+4_}%q z+gz5}l=e3K;=?mhIh#fai%sltt1r>c;qGNeT*yJp4e?eBJRdFfGw} z=5bi({6ZW1DobqgM$R*qYqQ+&4tqq_e6zb7>0%RFe{ysXUxtp_lfy&J*nCjZ62A ztqy73{qK4Et(&DVnN-F&nHFRW7*O@p18f}Y{2{z(k~MlL*Cg&;ye*RX{*b2KV}+`H z8~+^M{%Gy6%Ue?(;%ucDm4=TOxyRnnuh25NJI$)y54Z6 z!So?7r@MSR97JY+=Ly#*lfB@oCxM!mi@Vn zz1_18h6QYsIObtMwo zXosDeI=F7o1_oN7v2Br$>`xB<<-&zz`z)j;_Bsh^h4K7}IUG6+0nBC7qV zJ*IN0!B$2SRYx+p%snf1TifGb9&Os3hw=5#DPqlX11ezf!c`&;HBzUz|Lg&YNw1 z94oRiCcHK)RYfYCtLx7CE<}tByH#w|*%d34$j|DP{UtE*f+)cOMPq654)q_%PshU8 z%>msc-97V>H_8D9VR&Hy6VB(K$_$txH8JleDgoLFCS^ybFjJ9A`~MoQxvo|)-xX2*W%0yD3lsiqU6yXX8wJPjG?}|hf2Xgm zp3KjPO<2==5V%jdd;xawdhhYotK%d^MAtMWIn1_Q?cZ;uKLygJn_LSz(IT)0?4P|zm{u| zG{r}?BLGyNsI#kRjd>`#KC-T`a4wqNg|?{@>f>;wBeQxqxS9bba*xASGW0c5ZkfRp z$I4oR@weU40t+Ky%_}`o1!M8=5A|E-F8-7owh9K!K@8V&n)GNE3kMy*l%{=bz=y%%ab|qmPD7qyY2ktCnP;96 zS6)}A^{u1a?7x+zpMd->WY`5-P^2S7)~@H_6##z)oV*FORt14rveV+Gs9&Wv5~9g3 zN~)ca8Z=9h#2=(=57p-!ihYVOiz#kEmw9sVG2OVcSj($?unS8yjRR9z$$n}y{(*C9 z!vb5&VNxU>#jAJf5@OC`1mrw`i~hp&Cl)~H%f~$;*%3jcV(3cea?|`A_;e_Vg?Vw& zG(x&FcdM?&2rIr)jIw2P?hQ0pX82B*I}%o4m52B_PQAA!^vJGi3+GM^;WT}DX$d1W zFtsL56moDw$f5~lxs3F*_mc@bV&g7kgBPYH{^XX?&mBF(#_si{=7!VH2Mg67;*$(W z2m0xW+B66?MlL=B1Wfh0mdG++vg%C zpDYk-vxF-6Bv=gJ1(q|F?ZS^l=>Iu2Jkr)tO#Ag@ew!me--NA(P1+XL`l!o~Bo(E_ zxpuZtwUi0f*0oGs*!A11_iq|a=KB2zpL*H-zPG&xQKUknJnFCxw^!xVVZwC#c@)vx zDr!=L{GQ(rw&No0KlGRESDONOt?Rj`y}fb61g=ylqtg}C=|nmH3wh)oF7oklT-5OJ zS`gG#bZ5i2PD#B#x?!8k$!RMoYS1Z`%A@G7C~>&Dp<_pRsn03X+eD-0u9V^~Fo{b< zB}WSQ=<@V}`1x4aXRKztXU3oP0WjNA9HkrI z{!#}t{rk$+4`?2u`6uF&Ir0JUebH>}N037x`FzrFF;*yt_wOqS#JuTv5xlNr8zu5WqFTsj=57Ymz zJh4QjP_WEM3)XJdX$_YX6APnPib7Vmd4DyM-v!nblH>|GrTj1m4FMw3MSWBOK6AGxrL~MLp^Y`lU zsaowjpc0&kJf~p2>zTf=mta;f{Z92swSy;V21!XCHGo1)|J&IRCIC5tv+Wm;1tUzU zDiNS=N*4Lg$islcMMv*o8j>yLVQ9hN9Zho_ z`8=3{XmpAJ;0vcId8b)SxCKlMT|O36Pn(G@2jDMosOONzP&bRVCs##+N7*sP$hr&= zQ4a5-n{$bf&i&nH0Hl+93nN+4p-to5k+ug9hFjuqBwt8phI7l0*EL=kGGj01zrbaI z$%qz!rZ%sIupX}?1@QVPQE&}3^U+|e;rXcS&veg`*Iq#ph8%O*E`tk8+mB&}rBT0U z$>?|8Lz^z=F@2N@N6GbuE6%|CQ~kyW*yr&b*LAa$OtLxfZoSV6gtj(HhdHdH3HsO? z#@`ahYh8~Uq$FYVc=(J-%Y#d9tTA>Mal7^TG^y%Wqmjftb$J9YaBP^d>GDlW zi0zZXuI7!qP-WwO0?{k#m-%|zT9NE!NpkFtp?=&EPE$bJ#s@+Y{wJC@$UH!hu<@y7 zj1`@iw%pScC$F`H_Z;D8`?Ir08m1j!&4|_H>ZZ?IcMLtww z0>p+jkQ{+as)NGAP`!j*h*(M`S5a;Rjw)4bv?N310LU~dqycpUjeP$I3)y<^M(+7v zJHtA=x#u?(b*QYtgNfqD;iBN0Fi{1)>^g-Mt$}%>ahmgY)JURCuS-^y zX|Ab6C4Y5iK7?0Hzqx40tVmEgUSjLjTW|k=v$x3{K$5cQTQ4O?9j10FH8pzb8v*;p zz&FcC$Ud{Zv)L1j6!;-!u*r_xagN>St_WRgt3hYNJbL` z#)bWPW2X>FqTSf8wFQ$HYo-)ehDs>`QUII=o;L(bO%Aj-_(>!j047p`s>2D}?ezwm zj74N3-1ZdnX2pTOx&#SbBjx<9SBCC3Kha{2wv1hg{2_{Z?F%Hvi#`{LDHQZpEX*_N)c;xKK@%fX;y%u!34S z0{AVr5E=k$M1)(6i9fokq1_gd!py7!9v>@+_vF*rg7Y(6CB|zcu@b=coErjsU zj8PbQ*s}o&bgl_8Dj@SDw`sBKA#vHtlvR6p_@zhVRumx>0{m^fQ0)LC_$MSujS@xd z6g88!lcf5*4q@qMbX&ipw)ljG*cXzduc;|_KMl(?(1lobiM)>#lMcI2X_I)m^?N+d zFmO-QFE^!qpG=%(0ts`-9<^Q+ml>spnqn3aUnpiSnmHKq zcn;0hrDT8jv*cm<+?Cy3Ba`h`8_u@U^^E8cBjfaBobMjooXE!qND@NhbGBWxS))ZB zvdl-RjTXpghK&CHUgx-{^m2=)j2mTs-qF1h>w_@=!YLdufXGFaxY7;jcNo^POE8Iv zB_qP6!{(iI)M*Sln6f2~{VIt!-^Z7&)ecp+UKt9Zu$f68MWPjrY5f6rPJCtZ4JIxd z29TTY_`qwsqhEU#%l09nY^DDza~WY{jnR)_6biVA3#JncqDLiumr6%B0(-)P<4KF7j@0T7^2do^05gC| zN!#pdK*QQ)-WF`DstRm39UcF&&*sGLvVK?G{i`?m!}bWx{x@6RI$N&Rc*>S_#@c2O zAbnKOmw6t$78~#BMzVm>S2ihksy9E4_TkUbz6aa}4M({?(|Q{H@%P*n=4UI@q;1D8 z??3H8L8uVVQqMUBoHeM_G)kVO|Dau|Vk;I3PsoETI^o47AtvE64*ZYu=f$F9lStUJ zuyN9_tWh;oVUGqBHWSrh(3$#d@mS2VTT`H$!<)KW2N}Ux%5_A0Yng+8y#*@ONEpbV zzg{&PD>F+$LGMIdOR9|OE|j8kh;rVSg_j{3_VG1VkIT6D4<|BwbcBCbs*Ut6tbA^R zyY>afuZBUbpH4MiPmUapdx~DKqJj`?Ow6eB0~NqxVrv+iaySI^aZM*=3?S86`8YfMaFf zcFlFr4M?RivcVoP5$o6f+j25rv(rjNe9lkG3loZ2-n4|@6QBs7 zJO3c5v27tRUEOhw%9`%ZHpm@@fJW>`2C2mS!tp$#$-8#F-_CpT_w~c-op=5 z#@XiuJ_4@xR>RS#4v2x}%J64vWj(#A%aQscYrkS;-o5#y9Ue%FXQE4ro=aM7W`byw z{Tx;3HlYY)k)|QM3-a(mch~yqJJa0LEQ=ZiY5ZS+ks(FdrmQm~eC4R;$W7}mD|I@* z2tTOT2~qhDYGI}#WT%DVN02F7Pnrr+U%8f|JzK9ToOEQKk+4H zq`+fmk!q!Rk~t9(wGx$^p;Zqe`G28K|jgbNqmzTv0Z+yi;&leQm zd(49|vSFvPUA4*D@b4;&C0qwds%q9_r7rRKJ53`waBIZ-rw>cC_?f3%v+oy992esU z$@#fWVraA8Fi8_N*0=cZf^S3}=&0u?iI2yRm-gSsyRI>)F#6r0|B+;EWMfE7^NZ#y ziv}n>M~)GhdO83{Mu2fHVc1!uTZy5}NS79Fj{fLTT%pafYpYt@ut&$CEB<_!Gw|Cj z#$IuDXX^!Fm09e+G)HE$`J_DAtIxm+yaesnLb~T3_UUtzRu6CE@cQ zjSn36M?j8Gzvl(9sQ96%7hCCqbbgr~zXM1o4j*rvDhoEwR(n+Tq55eyT*49Ce}z@3 zZt`BWi%2EbGw?jOX;&8|QH^7$`0&PgKUHmist5<(`w6c7SX@4H@k2+jTvBEEjsGfh ztfd)Fjb&`=8R?J`Nuo_eXm>#Z4VMOlW>^xz0OGp%k`4l z=)WUTQ%&p}bR^&hl=;FJcM04fS9XANJI@9O=}-*pxx zg8uZ7#lD*}6hb#QY|G%c;r0%zBIdFQjv0nFa-|*jFte_D`%GB`fZ`I}6X6K_T_K{tJ8WGp*@X?yT*2Nv%LTD& zr@p=(9~*6b7i*KoH0|M!6!m0+Baeh~am@xjX009~{!vx4W_8b%Sb+3XX>r!90+#K7 z6izQ%MV`6M_H!o#3spIMtxO*sd~^3zuC8Ns&z=El1b+T-)d3$pC_Q0uLJ?ar(~Ji% zVn1^c%M#ACoC$sl#S76pqT2k%$GLSpHX;R0=TzD)o5TRTAtUCwcC`dg!+J#)zE{)< zz7-OwAKJa_`lUPE8*AfUC)ctnj_z3X|4uPfKO?$AuhTcszQGv}v{2tgJ}`)?%<3=a zKP!Pdxq}D%pQk*2#>G)1vKV(PoHGJ_@l47|O=>HuWRuQT?FpX`>QE4ZSspkVjtdKa z`5d-A!+*Rw_8f@7`pbfGsDpOs-p(9J6}-Y+kjg|bgBxKRbG$~OW~u79Hd~82BHQ@F zoFgPU{oz?+$y~JEWFhIU7kh=s3Js=?0veq{z6>a#M5R{7rV+HbG^ z8HybbKfME#IhBKYr~QO9Dry~K_%th6&JybqXkn1D`5aaJT9_4edw;A;*0zAduZz@< zn?}Ko`5eL47u;N$HHPhGu%d_VJ?N(un`RZvePhDVn$soGqKa63tc9}K%=enCDOG60 ze>d{s;Gx)n3-%!G>c- zar-#9^$*IKL|0J>wALi5FlLPetk0$dA#QYkiT&ENlg32I-WZ7@U0@+E%QmQXL6{}O zXh{{C>JsQX#nPk%CGWEhI2+GQviy-Zp z%7MuDY(E?)B2!t&Q3X$tYQq4GjsqF<_%bhc1kqf|9`B5eh5H409uA4==~~ z4a;v$D+-!xXRnk87-!%h-tOC0T`y@333Sq~ejiKKFUT6_lUxK1I!wZG185mIS;r@K z>0{bayQ*|cZ8uFoQ*CZ(QhN7x?7NM~8`qi$7a{Sw-O&ooHE&IQ^d?N0PXEb!kbF=Z)Ko)HVW;th#&qq` zf#hXo{prcF?swGDb%r%$12StUjZhzaj8Pk4QsE zrIL-=C_DJqsXBmzv;_!|Bk=1Bk)KI1sz!#i*$2h*L^ zo+K=wBdZNY=;M`Y0z=kUWl#A2PI&+;ziT_Nuh{AZ7-uUvWJGtw-_fz#er32&`w7zK zqqply1FdTuW>w}rx-h!{%a41!NRk9^+f)!G1aRCQSF<>#&pJ%p2i>!67G=?qJ@yAP zlj^oUieza{(v7cLT2kMmF&TV!hLW%}MSFfBo7kbd+vGos~VXl^1T9Wxg?#ZhIYFN z6v-%i#^XE{+pdi~dn%Oq;hS*rn;DnUOadlAItZd_*G8EI<}{2JIc)l6LY2QKi91YCavB40h(F!CxvC9t(o_mvhQ_8- zLxgnpqe-VeW6kA$V|A2<8dPl*bo{I)R~s1j`zB>{K3ImWZb&~mq_Rs9RDO?FWrYB+ zA_&F4bxKs%GtuAcg84jB6 zAL3ZI5Mkl>=#mZ6ZVJ$9DeCPXef~o2UBD1@pwu z%D#~G%-1>V0Sp2+qr;$lglIKpU;-Ye`N?AGU-p8^P2L|J5vW-0ZXUcS_89*VG9DEzE_1T-poNL{R9C#(9qDVF%|*x&OP&S7 z)lo?JtjzY1FnRh9ZzEg=f5b)K`&AG5lnL>Gq?E+7jH~n@+j1W)#D3SduZ}8ENo2zV zjWW#{Pa3Bb3T}!ec>L3MB9}iBchYNDKM*z#b*FLH)6*N{>nIB@v@5`2nkRASO{d9+ zxva(>i&Tvzw-eo|vw9&y^P(sp2}PYYbT7B#U-pIUs~urwvxJXd?l1oPQ|^YPiB)A! zcaZKJG*OIGOQnfxSboIxc}uZ!>0I7zY4&1 z7n?l}ADl_~G{s0H*C}h6PXV<5Fc{oPw~)02gY%(jsYy7E23oD1LJ<+v z;ocFnKyp~osRs}BaDdQ7ywR;??}nA?8mELZ*yX4uBm6yEF!+Z4iWu%2CQY%^NWGbM zCx~}eMmw#iAY0=!mza*Mk}g>|m6SV08v16sj!EX-PAzr#nz@k-M~B0bheGcUX)C&f zhQ)o4X;EC-LIKuj@=^-@2pVF;LF!^J3qzYUu<;7<7=nW%%0b-#vQ9=NCAmzGT^0DR z+RSr=!Px!IoXK$~BE%;k0TDWAT^&(+@KgV^|J3=p4`LHd$gAG>Vqa?6`J}*O%E-kY zg$>)IoYl+dbQu0jBxu-bj)ajJ$D7qSO%_MNWim=P297Z%Yq`FRKEMbjj+qo5H) zCp~x`Oo5^bKfTC8X@C6I6ntIRuN&g^5;xw=_mWA9_mrJGUaTdrqNR%Z?Q#1D-TH4? zlE0iz(I!@+DLa0)4cu__e@fF0+*gKG9aSCrPL`1p1xkE!a zdd>K2a?bOzp4N{n2gFPq0GfL$4;*h%yNIcajr@D1{g*LM?Mit>cF+(s=thGXm!O!! zbe_Lyb9WB%Z+i>7Es!Vr z=Xb}20V@>05#AclDm6Fe8j1bg1?=s`By8C$+#PR;rH$V=uPc^^`};X)1!UC0O9f9A zE=VzH8-2KkW{cByK5CkatU`tF6%k@0fi4a%d@6>`8mcg@_3&v;Ofa z5TxIN>9Zox^Zjk#?&}Z`QgaLX;kJLiEp+a&?T4Ih5UV`9p0MZl{}hZg1%AnB46QF- zI`7*qpv@{a$fQuTFI@;ZPK%X5i;5Ueyuii7hew7gxHL?X+oi7sH436>m7U&p^Q8AX|GxtdX%V-uDSydY|YSBals>X zU+0XCv`!L*%8Wv*At0b|(C`+HIfzPgjnt1FpcfqVy*4w^!+PY34g${qDLE8xdW5qkLD@-kYU z#U-@1;3Ip7>=Q}0gP_>IYbhn@&zJu`ijE0eO+GzU_gpWU`Tn-tO(62kR( z1!5L}+1$!3N!9abUk(>&?jlQaAAqyk z9;sNvsq*J@+MbLEe0%6ZCXS0?$t^CO zh8l)ticZS7DLJZViOnTMxWS0X8?8s+8RKOoNnQ0V0FLm=lcV+R)}~CE1MQ%|i+%Kt z)R+=W(UY&b44oCNHd>ysP%}T>EGRT{6A)}qypqyf$NjLT3igL&f}FFX(Ns>;|RN6*wlBd2bUvRs8&&gE>A|F!S%mz}~xs*LKN8N)PZ|r$FQa~eG z@9-!))OgI%Q-|sJke0k3;TI4`RzK9WxNaO0N5C0Urhx|-tBHlyN%Aa_)ST5sp}H^b ztM40NpB3(o@i^tPe`u`n^eFq)+@OSZ+&oxDH{zIb=zp4O!d ztNZm+^Ux2p^%iatgG&w1LKUleAEjS6Zw8dNhg{1i9xLvw1o&6wY1q^kbIGb4wmt>a zbIbWMZloh)Q{=zV{DtY?&G@UPi`r#g!A82C&R;CT^sWa6k2`5seUFa*Hg8buP@F5C zdxPaJSPK<b!G801GJNrHW0R)5Y&VBW9E1|wpc_%vV|7~D`j1p;L0QJ9HeFQ$Gc zZejjN)BDN2i>tW5x~WW^$}(ax9;sVdrRl=qdtsqSc!!iq)L^_A* z3bxdHFThY0S_NiwW?d7-7xDHQf@4OsP7aq8?jEsw@FRrF0#g$vLcG zipTw^>f+ose>FohkvJH>0^rXaG)2aEW7_7Tw(v;Rdv3UOnv5?{ zzyz1+ec5X9N1RbKxYbf0Gx1xQa!Qt+pOyLi-tA3_A70mx48qY|Vu+~>`P=pi9Re%>O@%t(cO+H5w<*Q7ZSmg2<-zd*$lCpu8A^H-n9mjs3=i4^$}^F002 zA4({;*}q4ORQ<0KKiQfbc^9S>ABpi1XSpRkHqQ-_$%q>lT_}l0pKID&n>fU<#NOVQ z+hmd(h>Xvx5Dxu{B-LI8-&;A$&I`K#abV@67tv-c`MJRc)eRJ+q#Fi#P+RP@$`L?{$VExRa3tPI=b7 zvu1y$V4xc3&Ock;=!d;S+D#gvAE}QSYx^M$?j)pxc$aHJYWeOZj#o@7LRTJ%-fw5OGIcscw76}5(=nO3pV#+h2&!G$BE>y3v2ol>)n zh3fm$R;t~(#3wQqs21+Fa#nD$y=c1qg~RmGw{C?htkXfRgnv1}^%zz*UOhwq0_@=3 z$4$k09-v~LnYr>Kc#%$Juj9s7-5*+W6FtWB?eP6Nm(qo9*>c?>j|qWHSc5__dv&1) zFVAdSgq&mRw8U6~W zUt%UuAze2O5uPY&820_JOa}ivTXXWW2ujh%s?Z~=DpF@8=2ru62lUl;aFPX7tS-SA z`;y1(Jsl2jaOI@(rT!`>z6vYIrh=8tpC~dJ4vBqAj@4^=NS6YAsLz9SgR6JbtVWWQ z3fIqEbDfx^Xl~@xN07S0OomFY3mh;Z8Gc&(#k&mmzP8(`NdS9Z;=NvUSSK?8@P1pf zNIIyDhKT=Rh(=EMaL*Mey~p417F+xcrL^8Tai-_%8+U?@UkaOYMPUbHCO6v0VC0#F z@X&;9d3fPb%I^-_8}L*^cb1vCg;J$nHVAg7Pd00b$-n489kjdT%|TF*_)CuOzOeec zj15O6Tikm|OXcs&-?zQ#p|O8kTp6<9{83mn$-upvxN>o2-sPV!W6my>&LS+{6Q^ur zOF}&rF^1vDaSs*99UroiLv@xGY)V?#=a@8mKDQl97)36#x4yKy9$I@0T$+3Tn3toA zm;Sfyp8K!3h`KU^mdW%qy7yJa$QjG$3BG!4rRM>YJ$zXS%x&Lq z0{bvdykr?ZTc`PDjq4eGr7r29}-DOEp;Xc<&U%e;$c%+6sHCN=ENTgdtPvEWhNC=G7r9FF^;B(dsH!H^XvB1(n94 z1zH-+Zr_%99Wf<=#(?zIe9VaE{m!Q3{&2JvY>z1&{dE@8Bg}I_MxHx{>hE!-!!Vi| zxBrrd6b0>N`>v58#`P0z>}(Zg*!~zY1e6(`hz3NIb(#a^{5yZb%X(981UI8a$dYDU zj<5PQgb?5YIZG~<>x1wSSN@G1Stg3hAd2;yFr+R(EgAPBaP34=+;z|T)FtndviK7@ zfBJAj5`S+Zv1_zOT^FpM;Wj`@NgG~EvT}bqW7{uN=o0w{{+$$K*&3oI`F3hCNvb?) zVHG$l<{ij-#f z2T2mc=@oj?A5UV@uGHi@7{JGkj7v*6=aX~pMt2^9vpOq4KZ%Vnz+<*s-cwhQ@EZ~j z@m7IFvSU-e`io#Lq!Vu?-XP4c*0W&io0nS87t6sVuf`mEQ0*BRhFk%WX8(c+=JKaG z^bTR$UF4+s!V-c$jlDMfEZo7z!jIrR3wUn$!FNlJ+9xcT;g7gf*E%Blxmg%A0m;=j z8;o8Si{i5TifW==lGIKNM{PWT3XuN)7%DPjjmb{Grsqf4Og;$G-JnlMqM zhpNFR_F8|{Wu$5BQ+wSr@Im@t1`?Y1IX~D4Lq}j@r?Vs2e!Ds4!$G8R zcg060bq#5spYp^+zAePo`mS_-i8y#xVCOj)!B7t~RD#I0XoMDVxpwZeH@HU0cjlrcx8Y+#-qiu`M|OuGy<*X9 zm+;GHs+)F@Op4E4|97~u2bS(N*}3GE%qz+>=6_w-{U`i9u%?^+Mi`^2o7*woH<77m_5L-EJRozFAxQM=&0(1oeEs&3>WP z!QvPcm<1b&3-A^ASF85tyj>R-(#On39Onl|V#?CKgfu{E_^7-Hq>`H2Wqw967O_sn zaX6&^9D^gO&qr*Dztbi&T?4f?H2Ls@`bqMYdC^3cug;{NgFcps?YL6C1p)k#61>}9 z53EbSjLA{d`o1;OWV9_f(LXE1ol{kHTP_!^FlEa%EQIuXgc75nM#3(s4;wMhkXKrLIw^Dh(4{S3sLSrHeUl_{Lr0joXKt?kW($0M6 zSFev)DmiU7mhL+Aeu53wu<-?f)da#BLgstl=XOzx6Ck5+a6jALJ^Z6D04*9i*=7b^ zow7fUBy!yzZ7)BIf7gf2AL%G4L>}Pk`dynEC^m+ygQF#q6-4&+$i>)a8_TV>I zLhcT&cUVEX2(c*EUD#kwu#1;%Gl(8Y)ICKPH5&MTSpW|@ zA~dDFBv77CJ{xGHqgby0&;*=^$x(CZ?<_TL6T(`;_y~`0U{mB@8#Pv6YCemJj2zIF zr@4d=r+3e#QyNm?e#@%yZHmZ@+v9K-oCi&8-V%auU)`7WoJa=}2wH5`Xyi#;Z+-+k zM7AS-#x2#TbeV^>0;_~d;vD+5@4f@JJDlpZWE(UI`^7{DcGbUSR6Mo_TL2=kMUkcY z%8b5Ntkb$7;&gi^e*WODaM#jh9(|~ykEyzx8LQ}XwgL4)xbS4~H04CH+BNXp7dMky z?!DUPu=7Hm?Ul1hwsCOLCYi`Ei7Pmq(snj0zCsFlvAsoh;Nw8|l7-wB?h zv`MDpQ>ye}b%0#%zPg{~=%qL& z9>kOtefgkI`yf3!(6}joG%J|p$8o>O?dbgnzG8u%5M~1?3vhtOs zs6{aY=WdZ1G+O+Y^CB^0#gkaTyN}Vw@YVKnt$Dvs?6Z;_OOoNbPNOaPXtu<9U$3pX zIhEhg+Xcw!IoHP6I8P1GLjp)yUTV?*hpoIL%4KXmExzM=*mVdN|0{GZya5~3dKGSB_C^2iUkE!nEb~%RAh$h&CInb}evOJI zc$yRT28G0@`c!Iu&(hyzMDNwDy#)M7D$8CwEvbjXm>})wC;}L#R-CP!iQIf0?YuTEOP}jVKo5WO+Bvp-IwkZDC9Z-_@Rk!&-ng0(0u}aZe%XnsS9gB zUP^KBPma3K6;E-*NI4Y|lAG}R60_OyBlt3m$KRyI4Q;X9s8muq&c6(rHu`jf(G{Ee z6Pu&BM@-#gxf<^%#DlCqu&|E?>c*!aareYyatU`fIKw;hFx|DUF7K;Ztsk#pA5eNz zxfGX$n(Ps*6eUwy6;ivfzg8d?&f4EdF%%tr6UO1m~6h?W+u5o5Toq zNJ)4(p)#a&pV!klb(qWjQ3+D~YYV|_ibcfz~T`=vx3p}7P<2@cR9dz<&|^luU! zMBu~VAEYgXf zJ$HZ6V~OT>(&TRvts+-4v1@Ovn-QVW1K7>}Ut(pLnWpJ(kxK$-=g>|@{l6q;ePIT;Up?Xm2}K9R_rk8OFS6M^~D+DltS2^a$%e5wz&d&)F#l?bNx6ZB=!VVzpeh>nCml!_Zv+0Li(gn%g(d!J(n&dY;1K* z;)3T>m+~Xj?TgKB=bp>NQ$p4^2L@HR4GwqNuvk5QUlP-Kw!-5i^k|WbF0oJxw`rgB z*KH*L46!#u{5Xm+u@Uq znct>l)zPR(JK(rB0*CD&u2Ro!{5!7_es;9LL5J*IFvF_k1E(p;=V~o8u1=}TlMOWQ zZpRI0nE%uArEnAR|Mzueg4L_LikkCBnoAa=3~1ugE2%ia%Sd1n(pL%GvfgF`i#yeB~f;rLr)hKtrs=I>1Q}PGs6Z*>{y}#$?_8NaB&k~C$A^>+QR1V72 ze6N%gHh$oG$7Va?2F@UApUv5`)z|mO7ZPF8c(=Fcq!19XIOs{G?%ZZF;)0|@5wyDO z5yz6JI;Q=#P(BwEw6!bh#yw{LXvDeIb7e=K`2~sC4#D_AY!w-Tg@FK~6!8=cAGC#q zB^7+8X3UNanV~|AmF~_MDYCTi>bKM5Oka;;MOp)jg2-%>a$H;bAvCz`=hKt%@;(iG zSTCsy?zBMTLE`bhSglL6jLRRN;s;8Vxx@41G@TkPFZ$&D4w)>0R1 z_-?Y@|5nwkJlN4=b?&zAa})1uB@iQO(x_A{wb zRXWy-G2yWju#^NySj4XQ#|I0pxNz~v+(|=H2o?K2*o`au!}|G35mqkarn1}Tp3q#6 zz&xJM6b4EhnJ*m5y32xlKFq^!+dx$JJ^9BnRK{T`FKVTv@D?#A7CsVyYhqdHa}2M ztGzTO6{soG7>(9l&_$xOiLN;Z-OUycb`hE;){7 zhRlTsk$u@9Kx5MUuVE!5TpKlWU#oHys%5RVkjTTB-_`HwL*D*ZNZEpS|R zRr8LZ6`m*lv;KjHJr6(O-Tlu;IUTAF$JF?8Y}qQ7A>F#S#fm+GN+QTgv-<1a+edud zAGnDfGAx?%HJeNfdK^J`ph?}<7uUWNj(`z4kQxZ}oyt!bPhg?9^Qtt&MKqs(t~q{U z(P&WEw1Cga78ET&Pf4TTVp2&CeG&vvLK+nNJ7B7ttStvNX+kTNO5SK%15DNShp3<0 z$gY3wSrtkCDq>q*!8LtEdJN;Sjliby{5i)JN()r~Rw0mgpvubf623!%EsYJhhcY1l zQh%;S5a%La@1d~FLl*S<|eCp*mB_704(d*pY@j zj5*4JzD{m!OtU#>&E(h=lFK%pKC#f4;AbzqdYYcKN$gGq_N1L~=`du>4G9wH=on*J z0G|wdwI%Q?K(U?ppa4c;(L%=%PRr-Ywl92V;rp-yFd0i#lCIW#hQh0&~6BR$AJY*yoYmT2+jSz zBTQQ;c<-$L?WVW6wzlV`pf<=eDr-q1;17gCN@32Rl)*EOG8ezNEJi&4t(T<-qiAXK zVgGQcx+N&_;EG&ny|Sj;GjZjsjw~hYaR@W^ut{k$^Tpti|-nOe3&6Qz9M}4NXnNzr?mMe{Y`=qhrfSbR^X^IKU1N}lk@{ZLQ}yer zAe_K|Jlg>T@SoIKUwrPKpC1fp5$Mp#Nfy7gz0SNG>ullsuUbB+^*EU3@uCwUijQ)P z3c%>C-6rRyr|clLg^_NSuV^71x^k@NQezB`@*Vnt<#iXvOllE&<`!t0tpn|0Kk}6- zzj;FjVnaWng;_!P<3gPiGI)e80hRd^##{5wrO07%0!7Wq4wOi0l#G*u8J`=7&FS%J#8t6 ztTsC45DMM6x|y`;q&Oz(*@ruJ*wMD$>Ln7iNcX}GRidyl0GTZeF=wejT<=ow#VKa> zo%90?z3!=7wh_d4#3943uC}yxRUp{pB|aQz8;}e#&`Cl%8_%c#$R3eG4?WADNp90W zK8~2_Eu(*7M z54x74;N#_D6B>YKTNplf4}^Cx{6<-peQe_E3k9W5u#)uzsRXsQ$L|zy0Uj^ zru7UCvvSdc8>t^8UhvOq4y3(J*s1~t2yqt$$O#Aoggvfmm0?F4jn1+3Ej)%G(0p1ma)q46bwL1n z9%TpWhr7&1zTR<34zqC#I^i|j`A6CzyXK2INVXz9()=~8y`O}w&~T(B_H6I1v^+b) zso=T^OT!uo8*{;bDFVzPwM^g!n@Ckt&ezQeF6kz1`^NO{7WZ{Z^%g6;FQl1;dFkuCRq|SWc+j1-o7$9**#r)M1z*~Ej z4vcox?)hevkC&Vw7|Pa!j^-0~j4WbVu*s|^o&%@P`e&88mTO#lV{T3+DY>}*^UhD2 z5uP-o>FA7j=5Ee%g24GwGDY@jT;&M;nK^i!(w!d?=%vSdk(vrrF*2Sq~juII9txn$tJqLT#ToVvIY=lWJzy`t65NV46?Nu^WyN2S-hw$3!qcJhu&|IRS7S3m!KNX$XmekOD7Spp?kv0LDiG@-G6V9pqv6idm!s!))6%VEl72x z#d{(9ywHOT89|_0i30NkCg$%dnUYQ&%@|P3^H-9U;jH6gsS>pA@os|Xwts%iSQH~9 z*je=k{J~P}$8=(yzfCa{kh&Rm7J;s{L^Z+>d0EojvTcW2^`X^ig|{NjJJhQ!f@G39 z=xOCjYpWi?`63}ElBBtjA0^KR7r%yhu5h8IBicH!>9jk0GR?2Mivn3Q7fhuDMFZyA0Uc&!8&Y`#a&ssM5oEdoX&zRNfYIa;+8A4 zWgjvLHE9C>)>O>YYyP??xZY=9qO@kgXE)A~Id1PNS{yW4!uGM*W{InFYCc690Q%;o z5HDMA9yvsE=UG+iH{;NNklM6wd`{88C5!KkLCW`7%y{t|FXZKa#;l6%#>iA=9VsLb zbG}gp^qj9_%@1+`IG}u2CJ8$q_I3*}N@(y|^3^)vjI@K_VDzQm8g^NOL07b8N>8Gv zU*wgzrX%4D7*U)Cj&x8=7sVV1<~X=oLz`h0b2eV>0)TC z``myiHXQ6;yJpp(etqTQWQ%;B0)$?;Tw-_tW9huMNLCW-`-#mEg9P~&+Co+(O;4u} zN(#FN0!+}$BjEr)1SO;ZGbxRjRm-TyyPT&|KR?t>sc4lCrUj{wLFU!kIwxztqQ^di5B+ zWYJm5T-0Pe*s9}iEf)3r~Fx~b31xIdx5u?29Cdo!9TG~r`40^ZW5BHP@lv%vU2dR zBC|AAo%=I!o#g>Nvq1r4dp|xkeLoRh$FoGA*kDr`QLaq`RG<=QHKv+mWq#KP?0iUQ z#Fq+BW(~9<a(HPkV?}Y zjIorGQ)m?Z%oW(*mOP;{8|8PTAqLlXlSQUkjHi%Pm9=bX!8SKH%ibgTMI+2gw|Pao zBlNP&im4PE1~QRulG7*$tO}AC@}e}oNF)si!?`Ix`uC)}SD>Vw6Td`_`cmlp zwnVh|_#;HvVkKzM#1^d4O~YS56JxOAp225i(gV`>8$N_(Fs*90&B;;&q}+tN7ZO7P zsXB|`c&X^&d84qIxkT>ojwTd{{75{uC$BcSFXKdjlgAU-3>>K$CZGRxYTy1>jY*OK zXa648V3`rWzx-v#=)qcnUfaWDLZrGY*E@et6P8Fqb^x;^$_8CtO}vrb)`yHHy|`fY z70fpM5#T@8=_cP7H}1+OWW~HF%7*h%Ds8X3D<=i4op4~4C_-5!A1b2af#9L`zW@N= zbpH6Vn)Hb<&Pitv>CY9!_@@r{&Xu-(PRvVG5t~_7*k=FBf|qDX_RYM3`G1-15kH3V zF~0|+P?;nX-yr!gLNi3qcRJR=WFl$uC{Y#-DJs%P_Cac6P_YyWY1n=*f_SMekcTq1 za*aB&is!Rhigv^7)J&~Yr?m7^Ak^bc5iDl0{R6LthW| zR96$jLG!N8ezBwhSf0I81o?gMeN#(rzdYitYE~qZ|K7f2Z(sL2p!L0+FA4LD^o>Y- zM6Si?jJp3sz{;w(g@#hT)p^kae`Q&Ixuo6?&Wfd1^&QU)r)%AZ_j3e|7L^N=ZSU}L z8g3do1h$|@)`h|48RXV41`WSp9f0!UNYd@0)7x#!T3!3Rk^KR{Q?ktf0S70|n2O4* zT(|@$rpw(a00s!s1jbhJ5e~qu&=FF8B&h0LxHxxh2Se3_?ZjmF1# zhv=-?_VL6#7IV_@?04QPF6Zl|;E#vybDDHQ-@JpIxqPZh|0or6S*Vn${buCs0X%`U zm|RK^hzT81h}8!_N;8-^L`zOr4~2P+NmB18n$W+QG1rKd2zLavJL0se+ZGo{Y{CjV z&mUa>jCaw$(`&C6u8LMid40+iJdOToz3ErkLesn>XxXh#$iBz6w z>uld()K?ZTX4hzL%vxYR z51?9dX=w5hU{K1|v{&%p|lFyhR2kDtd{{3)oWwXMrP-nL8D@-thEg!v>U`=usi z=brcs3&3Xd>{jlvS5z0>>?$JW`Nl&6*_C2HL5z2gZ$tb^Ch^R$Y}DZ!8)hM$=}~ON zt|>UH5J;r3^v>b9+2&~VwtKQB5n4mnhVJfvulmYy#kL8+aD3bI`?{S~tGCZlCi>-)#+9qie@ z>tn?R_xy29*O0F4CnwVsb`1R?1c#`oOyHPWeQ{3MZb$xQHM1`5csyFCw3+?6k~7eAreyQL=(LVQr0p_6kL7o_DdH!{2t0+qbsj3DhI_7{8` zEeK-0l=wgpCHq<=zckbZm8a#1kqM!$Ik=LT(5{4E_lSn{8gkmpV_Lr2!7m|*ybo?}P-hDFU7cSR>+rZfFPoXw`GPV(SxvCyf0Tx@%AhyF&A4nBP$O1M za|mc;s)_0r9}k0@B#LaS(Th^b#Bdj7e4~!5b71hRNeX$J1x#KNXnMaDC8RhbY{Qs3 zB)kl+qOHSFEKjDVNoiFWV3{(7h{^aoXZj)X}dZYfbuqm8<>wF$Gwu1fv@=P=sO|A z?f+d`;O9WG0=@@3n3y4Nc4;Ym+#<3aq;kNQgv#*skQ*^>+A*FQGpMA(vD&Nwi~oLu zXmKrrpL5Y?BWzIB(9oK1w*3W@Dux&xUwNp4v_Vq3(O`j!0+egOWzQ__k2r3lWZ+)q zTbb>y`W+fK@*}$QkdtZk$lwz{KY)v%gbqV{5jfa?|@GXdUwN)iEpGs{|lD?T0`eCm|=k=d{r z(;XcyP>1iEJ@dp#Mp1$);7$%ALq%ypTBC+jW3l$}b&@^qj0_g`F7X20{!`^xXB`H> z3*miu^Dg4}ID3G*cKkZ|^SUYWIKsWzyfp5n8kKE!!HO|-j#k7x0Erxc?mpBY2k+vt zba*;!)_e-%yw;7%lV;O@+z;8hXzpnK3+5S+A^L_a-}T1{Z|YLbCYg5ZLpKAEZ`Ai1 zL0?@oNdg7?XcB~fxDt(lW+P(G89y7VWR|n?`?gT!3^N_91v1NkQF_Kurq=`b%wbKX zESq&E#~s1bYZn+jY$MGwm;o|Hxu>*5)I9xp$B1~lM`TI)gleI_*pUZJQKygr$#;;J zufwyzb1m-ntWDz{JJ07P{0e-7{NOuhD#70B74J34I@kl-mbzdcBo~*%!2QDxS`-Q) zc3m^-)4|hDb;o+!MQ1>@;9J6rh2XW6-KfnM;cJ|nP_a#R0t>?Al6dm-Wk;>Q_F0h^ zeE7*~Gx*1={Lg-WRZTA^j<@dd%FMRp`I7BK>PQ91r7xB<#=~hFKAgrCFY+U4FMsq^ z=hz7QVlTZ;6aIJ$#4mg9TKU{dT@KC@T7eY?WQqF*wdo92CE((S#S^rO8jGua273F6 zoHCO*Y%x<~>)65-oN9hjjhCM>+nw+hf3FZRF9q(gCU}QI-0Q<%@ zE3#Sz??laS1=E(xlckYfAj_9@Zue>@+_=txsc?miClznQ&t)K!@UDYtyvJ+bd+Bj* zh2=L;M|p4xk}T<4ce3iv%I*KVL|JWO3POJ&_4*H-!~XDu#B+g`G}8;R5H;RO-6uc z4TBGozgCu(jzW?FFXsCF8sW=q(!*pL7#UaW9D#b^@yDhPsWNZUSWyU@?nRphmbF0k z2%KW_eXfRii7zA#F)7%cm-h4H-*97PWH!y-XVaRN5&1D4-xgAjey_Dnj08fp^AI=-+WF+&Z=n@GVLK~< zQbZPNwa2w#er2#*s2V^{iX5yzds%C@r|$}3yR2Qb*&1rwZ{ONc$7OYDxuTTyM$pQ? zF4l22%|0|7FZ9c(P11_kpy*DpOBzkWbZ~%*>O#^yrqbyh{l_T45r5(Rob+?S$ldv0 zkSeD5C+Y}90TktxS=OJ|L-h)$+AV>vJ>hs^L*ToUjXA@3J+BmzalW;PuaTXBRDn@HN6{|Q{5S1)d|9e&C>X5`pL z07U8muRoV(yUG51 ze`eTOry+)|0+`%bg%ZGuo90EGvz?z3Q!r~&^>+617pdI}CVEc7da>b~0i1lXvv`p*a zuj>C|lhH6f4LI_78MraYz8iMQ89<9o0SoiHb|@C@1Od58BNdMXV*wkF5ddY1V}8Er zvRZC<;g9@d8$&QbBPMw6`v}d5EWrw+lNJ=JL&+V&oc>(&EJP<5VEaBF_D3&A+pP@+ z&(PGYmQF6XNefYlfX&kpds~k`MSJaMbBZ{Yz}P1tk{(j~r*(RD319gh&t#?qE`ldt z?xW>$Lp!PrHJJRyW<2>sUs*c0W0BbDhpZ-ic!Cs&UpALNoC1N8K}Opw>(5B2MT`Xl zNh`;)}*@0`-(!IWu^5q!p_(%>QJ zIj`KT_Q>O5N>6Ew78b*at3z)9cr;%KHio5Ux4J%CG(^fRA*Qv`$|XDH3#8wlG$uV+ zq!RAAPTaI~Fn&Hl$Xk92!8zC#KHzkurgNI}Eoa2vUyn|+n$u&z{Af< zglCL-kAFQ`s~F3(rlAU*Ca@kMt*RK`zO@fw`yn&zu7Q$J2b-xDrS4oAKniUZ*p5(F zeT#g=+duSg0}tP-J_h&Wg&K8U2TMZ3uU2)tiT(@4SuBO(edO4}iAlvu23ddzCYFRO zBy#&Dj1qk>J&L11%>nL|Nhm*!SA zo8iqeoNJf^10$AQ|FHyD0O3qguHT-EY@G;PHHT8i)Ufo86#+PIO3K>^yC7Z5je8~y zJIA#q0a7hedoS|7Dd)sm`|%c?^>z2ZCn_rxrwC9mfGp9kf3$RV!*re2!^s1UvtTK-g&oh_kZUqa^w*1^gqv)atPEoUCR%fG_kI>$H{M69z3y} zS4jb}@Hr9zl=clnQ@9x%e{+Mgp44Td`wzk^l&@@>=;P*<}d@J=BWR3=%L&)B?6SNQ@S5>~DxaUB+;uS@m)BmXlU4z7o7xCDp* zN;y}PY~2fHf-_~)AN5Wq+RsD1W@J2x^>_fq(4p?)rAndt@tuAZE=fyRb*dhz(h!+V z`$2#;M=gfM(Oi_nH%Oi=*jeMA3w3?2abUq-)Op@-CMh=dPPpyiy4;-!jhirv$za|5 z&o@sQ>~B6qMH$g9OIPZdM9f4t<4(fK@gjw-)Ji%_`v3WuHc7sd>hFZiCp!<;bE4&ETyxj3^#bv|gL~Kc2lLNo>7^}O>$6R8XG+F5 zmS-DfJYiCrBjFE+nvAa+xR0y+gYkD5#bpFb+NYX1_ssQj*_UHEDon?M@1XWMY_v<0 zhkobM9>1U?8s$u;uJ7e&W-!pe|Fs))8Vz{$iEmF|0Azi5-ouU+GPzAn8W3W*G_WP- zaQ~slk4ao2hx_+6858eW{JEIEn(UHIhcDh2(pe)wA-XBvIHXaI|MR3}{H0Irw|ZE( z%br))E|?l{H+5WMoWrHpjR=nuQ#iyYJYr)4?B2a)mxu(k5B2-x`*1)C8}C`R_C;cP zhT=35D|)aardG0U!Cq3A<{j7svw&s2h`4vgnDojOvc!aMs>O*cnFfjS{L!6BJ~$o! z|C-7SD83R)hWBe=2IRRC{Vc)E@}yM@r3fm6ZR5s;6xMj8x`sAC99;@cXNr)7GS#t( zAYZgBDYs}^!Q0l6n%>Dt?A`y@3q9^xiqf%VMZPKx<+*}AUz676;4>X?PZM(+H3K6s z{mYE*u5!qCc3XBWP=7!efDG9zLXtNu_g7fst6{AihBl6}Re4pBV|pOw`7`I*AHb9r z5qsso>oXqFJihiU*gsSI#{wCtx@-el$t7BxX}9Z5=IhAMM`jfSly_wNO(W{_^)=a$h_lfEd;txS>j1>Ckxi^*&3GSmFW35I|&zyMMP!%0C1-D z)TH1L$j^Fah<)J-`@T3N!V+#Z|meX&nkK0>KKR~aliSmjp9hp zx|Dsf@2ZQ+AAf(&d?p}JISd-(rcpQlgYwnuOtLS+5T+FgBUR>u*pz=l_G>2kr~x5x|2!0EvzUsUByPA|{G}Gap(s6{`@_3KU6DY7M~%zw`3MEQP52 z>xf#BF1S1YR@2qB!HVf1+lZ6Zb3m zoEtAYjRNzq>IhiHL}6vtluDeU2pIGaptAyF#4q?35a6$jn%E+bBJJ|>J0OkdT3qWiv&SO5J(t{ERJ=CeUNUa z6N&C}kOBSAiXw9|$b;55h}WsHe~>E<>*8rLf5C8Wj{4n2p37qcGGLIMuPI~~yGr!v zTkl(b4X!61sKKJXHB?ZExuo?){A_lMLdWo0owDWiW`Qq}8b|Cu=jijOyu?xTs_NPB zwNOMK81~WeWHr3{(au>6*!uN{;BNJ7`+mdauG%|0FOx5+kDRKNa(Ng2t{ewm zXO<=5O1p7WU;!f6qLwY$f{%*3`s7BP>QdHSVg(z=(tL3QMU*}|Lmqzs$Er(s?+smv zkPnOTOw?bbbe)c4^l6P?BBd~CW(dF8t$A(5KX-tvNBplA)_M zFXd)BY)~7=&b2+c8{=BCl8#*@@P96uA|?;vtoGA{#VZQ6+?r^lClBUZU9*p*_PU~H zjku#U$Dj}VbQV@!cVJb7+O$OK_z7g)aG$@AoVcg8w9>nd51IEpu*=J}uPu!$#PAdo z!)G_?iOgfk=-h#Z4Yubt!>3#6Q~NRfsdw%7$=OQpA^g8=d=TNpY?iDxw~7&{(js%c_{j%2rXs5CO(`BE|)Y%4JTd#eS+ZR0n7i z1ZA2x>1c;Jrr`KYz;gx|+J1?%A} z?Tpj$`W#|7<+AHz?+TBh@$b)-k+-ccAD!O2`MA%nFurCOYwaIChg&vl;)BkhNx8RN zc%HZdakMQ9%x`$pjq@Z(-K4u|ZlHe*EGR6(K34@a745mlUpr2yfySB zQI^M1>r7*cvos8qZN$%-&}wiYO>CMl1YU?Gka>bl?PkxD-S%Rdq;w}!@7D<_D)%LE zJ^|~j=8>2!R>KnpicnJ)WB}SKIUxJ;sP>qBm-9`4VTu}_7ODAm=TkNAa{j7-6Q!-w z`hp#x=ik52AowuKwF*!FGgXVUBs6HMt*R|1;~L$7BF zWL>dOrSz8cyn=hEUQONcFSc-918y(I)Farxp4g(e9hTdboirCN{O1| ztc^D2^-Q`JNTFX}foze4n93TJc;kaxEtSq=&j53Fs3(VfQnx1o!xjD3sjH7T6pmIW z;uYMIdS11%M2Jfs?rA@-r_32AZ>A>BMU0_m63#q;0Wc`W)}aF{=<7{H-C zQ^>UKJX51^9;GY#Wj3*VTrZBlU!f%VL)!8fKvnI$y+DN%2j4}OY%rxf*u3NL1 zvUrvP=1$JNqv%gG9m)!zV$dhqHqqxzM6n5L%qMOL=FCJYHjS1WhK(}soPi8W zW37=^4g_0DbR{F-6w1?He#gX($`+@+YCFzl-(eBt{8svhOO?%%uiIi$pJ%egUB?t5 z<{iC#=r!ixLlc4cb%5oi@ZUohmM=UcSDa8N$8##S{`e9?ku|=_GM5*JM8KX~vFKIDL08 zfCgAklAG|OP;ySSG$CK0mZZrl6(AseYQ2ed4j#Hyh|ypu^MY|X zsE2^XMc=^)^0T@QIJNM%?R_P z^3_p8O7xH8Ts^||vuO)9(b665uI*)Xg5kFGH!U>bS8b6h9)%_zGc?#8se4g7NksZc zVgQ@pCl{?@%k-UF)^L8;?|)`GXV{u*U5Jb{X7Lhx%C?z@tRTQtQ(zV}-i5eXRAC}D zCN8ag=}HvEDMEj4NH*R%SgOuLd|&mo>D?k` z7?$_b6k{3ORC;>Y-vsA;i;ERLnni-AN$*8zEK-UO1w1R&T+7mp#R~V>M=})@3zVS% z>*F1F=ktcHyeQ^t-w=h>l2HWewi?4XZl1mE*-!n#eunN6N-;$9pE1_#vf(2}N&l0! zORFh%#GtobGnf_WJ~+g~^I-(F;~a#t1$rp-W(K#xN0|?XGDl3lf?Ts@Dl-i-Fq-t{ zMr3(y>*zU5Nb+aiD}#mF+v3m$@Ec9U!rphMn*KV_<6h)yDWFcpG3?WObhSAhk*$A5 zo^ZqwLe%1gGT5BPao*{!$Uvx=y-&c%ZRr@xMn(vVJpcSO>m=fAnnC%7d?;a%z4;`W zBym0AQt?)H4!w2bVZ@0MJ*@JxuA|-(hIAqS2y?aD-ly4`+M(Y6x_yZ8sB+G^x3NK& zTj0h9EfPrN)BIVJ&IC4s!G%4v{{I(ljswmYnzWx^Uz{1hMBO*v1#%fhKp`FDb${Ip z&Lc$>dT9YuVoCGR+1fZ1koo{&*g0O=MRNUxO?er+eNz()-f5McC&Y*AMYl^ObT3LBzvz~)XG_;F$_l+#A?Lf0b3SE6 zG$wY+&krp`;!HLN=OCNheV2SNp$Dw2qh1q54MC8r{Bm;gL=3GQRD3v&2ZTEE5GL>^ zOn`YbgntUcZjA=OS)aKM1n&ruuT`0O#Cza{Gw|u5wmC$+y4Hoj`0F{nm-pu;v}K~ltelG}DR=49iX}tNPL?l*svIMOJo~!<+Wn=QsY2%MbWUP(4H{*mgwx_^}7 zwG=57v!PU7if2uzyA?hMyL>lcD!*8;jpi6W(<6c2wLMd#QqIZJR6|!Z<1iqQ+4b>! zId@II`~vh@<*(e2%G|eti247I1we|ZMCg9mE(ETr%wLhZ-r^Mba8^pGvrkn&G61d2 zZ8%gG*d>w2dzqODDwv;pOwMtH5&*Y|g?v{3#ynswPaezO2}b+fRMFWukG-9FnhR24 z+TedCkw`hs>7tT)V9?ZToH~sO(H^m({w0X7R|T7t5%ZTj_|c5;>I2VTWZl-7UvSn% z1Fcc~8-6h9p0*>T7^hFjQy8CfriDtAn<0HOK5+djn9*wIf5wY;Ao40lsd1?EU(SgC z{WdHJmyAYJIzB?qWVQ)wYM!-Q8){lu|zz&)!B*r2uEolHuFT+)RaTl+3lrE*Mv+HV%!SEgZ zAH(uHi=SNbn9NL>{8IS zM(j}ZQ^=E-D#N_T<{F}#0)LLEDHXgwDv^NYJfLJCZ_8r-ajffp1s==(lk~0K?Zdm} zvY^mtzts+}+bn`HK9tBiH9y}v*?hZ5`gh5nPso|{T%gVGETJ#Cy&GQU8YLV-BSp;L z`JOQGH?zIRdU2UVz7`${tZ8ftr$}K4S&(ysRH-YTETbZP%xVns)u?kq(O++-5&NUW zmNe0RZ5z)&FC4d4jH|!z6TW!pRmuXUT#y<7h9yd96OgNe!q? z8JQu`&mhS}!PM8XdI~EWJ25*AVl8f-srnxh#tN_&^^~Z%l3b*rwMpu!Eiqu3H}^m$ z(N_~{C)jP;61=w4bk)$p4g`;l5K}}Nyd38F{?UdsZP^EbDZN` zigPCHLoVkb2OEob#Hp-eYPp*;8|*Gq>;7zID320s$Yh+jC3r3;XYmeT92^*M6Shn@ z%_a1wz{Iuk>yn`CdOvlDU%bwesNv+~>~xUWwRd;t_TPTs&Bs&UD;6KATAmuvg{GMx z7|Hg30^9#o&r~!W3rTx=?^=A=@Rt$a$W+i;OQzHI6essBqZ98@*HUbnzI0wBrt`I& z(uOl7duLw$uF&BwEsHbCubH+sU(=b!lji$x(*GyN?LMPByP@-A7E~B4YZ?${D}?*8Q3-mzHd4 zQ4EdL>}>-|${+%r%a6WOmC;o-+&>6e^G~F@;jaBTQh!tG~+NFw8><{6iBbGW0Rv z0kDY-u8o=%csE(^AZ}*E0|^fjNeLFPH4}w$QdMICJWRlA-!%11pbG&pB(33+XP(q3 z0ToYKFFSdlz*}M10kuGrDuUkY0H;sVui%E~X3b`i21avk;)E`PG&S%DLVOl!2F^}8 zZgv|qz+rlTwycmH-$Mv{`KQL0zA5jFrP|gA7hcqM?Lhcf;L~2>gw;+eqhfpv-@dFm zUvP&WsofYdxN)Ev`P363N-6+W>}wwG@<^!2x3VlZWVmqTQLlD3uZcZHuR?W-)>Ovd z=wMuXa|laeR&S;*&pVEwQ13AtNCu`gFWLzaSQ6VxB_MgowNz{MW}NY*tC%Hz1A0B} zVC!Cop;^L^DXpj|5$jHxC)E;^LLp{u`A!KvLdgK6#a z_Sz}xp?S3B70;Nt^VaKr0?=Wf;Mr;Mpd{VCEFC1$pb+>~X2Y0SCj}q~TA~N-n#2jF zwrDiw^mlQAEDOMND};e%KgM>;BG>3mG6m`qVskF?HCh$J9-P&o>t#LXinL!`y3koO z7<*g@e-B-D9S+=eEpncs=_DXkF`(I#tYCJ1v^oGef@{A7hE;O1&jT|1gniD_T^ZFB z(X%H)k@t|3Er^5A$g+IFgmTS$#nb#OWoeOi=y;t+a8I`4Z<>1)rxCFDx+LN-SDhjzUbZ~=_%YCn+9R`8?S{A_Jbu-K?g`W|89|wqk$N64}6EOG*Zh4*0bf9Lco}CEIP@=fA^xPoz^b`M3%D8>qXYS78 zuE{~>*cq}nX6l4}ZrhCd&wkYriy&Y(Z>)9aNB?%AVBLlW&;q_M@yQq>!)(%Ogvsn7 z{){UN-&Kp0Q%+nDoAn%+ro(gl(Ez40bkkkRd8`8KUq>yjyN@L@jHO~nbN8CF;_Qb6 zXnp#pa#ohonpoc5YC#w|t@E%1rWX9}JAQkhQ6+1Ace4mtLfhbXh16GI0a9jgfK zG@O$yX;*)f2~B`yGDK~HJw;#V?vQ2xY=-|Kok!+-q{%@9--%j-UxW&RhO>uD9&Ct5 z!MBm08Qkqt0w2fi`0_4FtXKW~!X@R`-cjX#CoSra#LzDF6Gi}9foaMP;4-VZf$oqn1;uM17%rMM==YiGX_#W^|Z?}WlpKoBWUp}yC zD8O9EiG%3>_f@z(4=)ahBE;F*>K+?lPDX8?k~73N9!WUP_}v*nL^e=;#25-DM$25w zA8C2=UtrUUO6+R-#|pWu$EHHdKTwbFgMN-8K&P35dKQ=P5dndU0xIfYjsQMt`5z~L zCQfhFaNSX)u}%Sca7!^y9h3++2k-CDk`eQP3Bm~EDfEu1(CXn*o08eSVmKK3mPB1# zaN(D}V;NXyo=FQXvWB#rQ>cfefg=_pmg+Ve=QFIy(n%EleapM_#n-e~W8 zDC@mmnJf&aiurJIUGC8FU74ix||Ius+|gt~5kKOGDKka*|e~PL8($dmQo# zpk`@32w6w-Igv16&aE>YPd)OE=6|W92)!{)(<}a;G^>3PlRl$6q%+CGwL8-O<3Oz8 z8{zV*xbp^!i23)Q0&rXDw(KpnA?KSRrZhsh0Mi;J#lcs{$=gNMufDJbrkfpu34z|gLyTm?U6g`%B*1^PbY_4ja z_xAWAx$t`ta^>6kn?BmmIIrVyEa?+ybU6ZYwp69lFx@bS{U}JE7lqdmQ66=1EOn+N zaG};Lo3gTL@fS=pE!WMAV>7|6FL$vkfzU{O00$U((wu8*x$^DbRmzpCP4x#-^WF1Y z{ISOIf4Oo$^^kIktoL4OP=}dKJ8ihXu4hJ_*i7rbm5e}kZ+m^r^OJa8&3lb#-%GrU zVB2^c)99{Vs?@3yy8R8&g1>p*eAh=)e4iHv{q}ub_LJmP346{u!K*y}5VHIEI+_>X z)RF+{hCmk8G;B2T-e1xdIyUZHr|xxXp#Fn^HY-3>{zE_27vF658Fomn4@SeHzZQ$F zCsv|=`|;*r4|(A7%M%Nfp9*QlsrJAS zdi_Sn@#8bdjNQ*mn_|Rdq--;}_JqAbms_>|*m5_3a;Pg5p+S&K^5&y|d35~RFUQxY z?nliPXpxr)L;{na1|*{S4WVh~=SbDwWI6n-l8Bm1)bRP{6uCvGl}h#xpiVOjoYqjhDyBq#E2R&Raw~WgE`3t~&(j zJ+^`P7xkfk_q0MB?%F4v1=E#2m;R;Qv4(LZj&vZ5*RjPrjE18?jH^2ST~b*mVgEW_ z8Ra%Xoj5pYvwzPB_45=+eqQDkk`P=O#sLs@Ekwn{tac_eR|jZ>52l}7s4q6azF@83 z{j5ANfMR_h`8uQ9tTj+QhokTL^azo26p*=Vf@8xkzT4a5z25fMX}W2eNTdstjdqSCC#x?)7*U!Q{LG zyYgWYP;DSd^~PKGoANpb2CT)T(U<&Nl9WPUFZ!xr)^_JGb3w~#WUF0Q0%FU`JCA9?}K|2)O81cmOO}{Ss zTg9^Vdi_N?TL=uyY5z!pgrABJ%rV^U@DPPL426fcw=T>?s}M`p#|a?Z19!GrYo#5E zL$_DmBJE-Xk5goN&QA_4sdyhLXh@+N5FpRxnKozXuh0QHSjG~;k)7GjE-_xiPS8XD z7|%^*;9ahLLax+#1(Qem9kgyC9jmjp&lk^9jnc~n$Aqkzo8+a@C(S#x?Ka&??q~ui zoHJwm*IMq6qjFDCJr6o)LYtl^QAuz>jHKBT;aA?fbGP?YxD4gs?^mQ3?iEiHW^a-` z&cq)Br*s_J&;_rJ8|hClTVIYtiS>)$rr#esU8+7S0dOupA^{91Z$@Lg zS!w*34=tZJZRftIxM2E{=)W+Rgi&dvLlZ%s5N;!wktOdwf3fiI<2P5a7)sC8Y!`e3Ku_^1HHdKx`P%AlM`gK4GX*9;^F6pAM=i_4bd{JM-`(z_%Mmcoe z@cqGK+srh5<&2Rbjd}TWWo%B3uR=k9JKO>ZV7PUQ)wFebRf^P>I3ajZ(n$Qn7rj;{ z*EGJ@S`ObFUIsp`Q>(g`(1eUtWXRROFOYN;yg88yMINh+%Ei*)(ncfHAU?WSwGRM5K41TBY|-&3CsPJGpTZi{Mu$|(rAR?nLgBQD=K>i(@j z*a#ybCJSY^FPWqg{Wi5*MWQmN)^1|oj|gnX>{ERX9VGw@#PSQ(WPSsI4f>1<${-7$ zOif8xdujioEgy`KF_VMVqBJSuK~33h_x(Z*wyL z3}4PR{oHrACol?$)aot`a+70Vt2Gc+xLbTp2#{liV@ZLK!u$S|IwEF8ytcH^;mD0V z;5~Z;X_WuvG8&!lU|DfYp^vZA=ihmpdmCu4I%f1&r;ZxnMmvC1R2MuIlf(O8oevNk zoPe91Kw}VeNJ{Fk>A5ki(J8Aa>v7AH{ zN)&(wr((t9b;{}9)epJ$B<`g68|(eGxR6y{jpz^>rCE&|qSk!Q_-sk$L%EE#(TkNj z6`$9W&872_2G76~mR1tED3E~2Rdgz&)}PQ&Mb1igHnwt*cF%Q+ohq}}YSf}2#5+jW z!A~FLwi$E`@xACOGq@QRe*1bt6ElsG#JsYsp_|Z1G88yAEObAeQE6>^(V`FYUwpIb zWu!lH{Tjvf4FV>fP=J9x#o#0MH@2X-$=VQX*?kYzE(sVxmDx^ix4=s7Yid+s#PLrC z*9oA6!a}~{!+Ts|np%K|ZH{gDVX4L1hv1$=KtPy>@kEku8`ML^FAR*DG7k7_x4#q_ zd!5Mb+4T%WVvKHf)(J;Gl*Y|ycjB+VM^w3HJuN}X*MIq_!Pz~+6lvw>81<3LbH9jU zD%n}IXDyV9CB3)Q=5LzB3D;S6+DGE_x(~h)_M1z+%rQk4F^Db~;X202U$s-(A9W|M z`|8(+tpl^*Hjlud;@DiG=4kfYI^S1Mz0Fsp*zLyjI$}hC49vis$N~Sa*JAmD1}|N= zUmYVw^6;6;=mv_&06V}cfOsgPsm1s~LQbCP7B{|I%<#qdncHLg&;s|om3FMSb&6?z zd}&%n9%-m-!AAS;yKiwBrih{0SEC{u?b>kNJYs{S^vP2;%^+K*d3-6JuRn3Y+jz#l zfjWLjG@s1REJvxJIS8{Ii8<@YWBZoH8NYR~#%2wD9oXljf}*YO+&aDK4%uL!rHgf` z%Q^K4?uKhkGL?W==O3?SCF}Q14FgnL#YFS;TW9Q_nv@6?lC)?orA)V)a608g0wPVK zEt11xR@z^>rA*Cq^?mLZ|53n8Vj^jex;d*7y>HS9u`g${oHx)OddUUO>*luQM6Vp! zdeGGje#I6 z{;J>0IFD7qZ+$>u96bxcmR*9UPkuBQPofT3SmL<%F7b_JiyheO6-PRCT8p0Ld+|8e z#EIkJ`u%6#6QN`GiPGf~-$}D&UWY)N_`pAE($jDewwY47e8;N+b{Ijo9R9Zs3sF#;tbY82p*2Lw}>TtZG{C z!BH=`5o&FlOdMLb_I|@KpF`caDqy&9TJ)sgUY^y_mdL`3Iv_RR$Qo4E`iL#zUm^rz zZ)nG}6c8+iC;@63nQ%MQ&m1DmdQNh#$_>LAPJ(UewCm{5pD@hV4}>ls5uLjq)npUA z6jKeJ(Y`gz>$NlyEnq={pKV?Ed3nF`Y3HC5{`7 zkwMQH~>4!gx@JwKrtIXXgzzmZ;RUW zlgdzdG-$%+=Le63sF+HZ^~MWd%i==&@jT6Czb^BGQv4MD(Y<+QbmFuJ{Lm}X1ph4m zSWf{PM2h0nYm_t#B)oVkxFoBy*fv^x zjN-1i&uS@a{?!#yJ-jZ=rJ6ya*7aA$KD1k!62(GKXfhsoi+5l{lmg#4R}r97bKc#`J=288R?Ogf`_GQj zmU);OTqal3JQ^%#okjd*)63JYr3nVFy@cW0amVNT z75c9g*AMQm7=T7ARWnOVZNbZ4@nekl%bue+s<-X1v|cOy8`;SDOJkR#qB=>myr}GG z-nbU`GJU^Sr=}(iJG;22Wxv-*&$YD;`7H=?_0NV$ZI<-(bc&(7Syhp)Vw}8f&Mi(B zW+H=7WISI?$WYX>|8nnqAyn&aQdE)BwDPNRCp?oi+NY79{APG!48}?2j!f{UnQd$W zZZ7yfnMVW5bwqU8yoy&7hid_N6O|8{r|?6^tDQ5pdVb^c%c)<#3t7zYn%r53QXoq>?m@#5h{tw=N;6C+n94%Y8s zp;YmRJxC5+55`Cq3GMQA$&?FqXV+nnL7%on&P^vssN>cSmfSCP=JJOeA9d z#4Nt4$?CPpHr4d}+~z%8e@`dU@r=m)UZDdXfI4kNf|o7oh+7F^rO+y|0Ae{$G6h}f zfS7E7&Ed%Ix`r1YYP>h~57AyDJLq zHw9f4Uk@;P3Wv~$A#>d!$JEQ6KXUke#d3BPb=Kiw_uxtj%zj~cc_pVh(?m0@=lgL$ z!7_dgTe{p$=to%GY2GN_a3B?@J$27nc@HK!i->@B_k~}(DSw?nYI>-9c8OkQBa|lj z_d}lLoTQhHdLaz>Q5~RO^AV!upJ4|yrzw?(4#C2 z+)gTQS0}KYX;9v2`;tfPpFyy8%Z#u*k?1pyfTt6ULNJJ$U<*HjD>%e{Fsg+VGrcal z+vLyBvn=HgVtguW?QGknR%RYlR?7*03{%JW)X+@C$GY>_deb?HHm7SVa+Ci6fVo0h+0lO&f32PL!M7Sx%|tER(?F3w$C3 zH6zN@;v+p^uXd-Io(S3v=@9V&--L&Slgc@X0<2kq7fC3J48j#E`&%D##r(<0p~)^b zXQxG-k<^VK!hLzsEqb-0#0`0#*OK~%j!xK+E^qW*%nOO&xJQ^m)XOfSig=)zAcYSX z!>_fDd3BJ)#mm5l_jgPc^=vxE*JgVj%_V)NJx{0UxO+?RL&{y$qG6<|)nDurAt*#K z2%OQSYn=3J@^Fb-%0`x&XP*2Wdg-=l)&guy9T%0PDD<_zvSx#53F!S2-AG(;eVkgl z;6gPU>9W*p0)FV8uXl*?p3Cy5T!n4h5+bwav($px8b(3Zp-JJ_>(EKTGO2kmJ zUVTq0P>Dwxa~$TALqDNV);vGFz;U$i?qyvYfDV;N#+N1}ZK%8R8UbM+`sycl?J+g1 z-u>Jre59UxQ{UX=^rM6;80pG~euKPT@O?-J8@_z}Q|pryS9jcH&cNo;i$YxetnBO* z+=Je{&?lcwb)`JDeJD>`olnm(-#1Slh6dbE3Rq{whg80Ja>vZ@m#^Rv(q0n$eNE55 zkd>Kf>+Rkgc3Us`5Npe!IulPwka+(sc>gcX8MV|hYV*%my=TUnfOaB4XxhG3scrww z4}!^j@b6ueA~|{MaHp5Go>yXp*YJ}wg>Ig?>IUT;0iS$hN56hzUj;ObVe;|u)Nfx- zc2th_E<8J)Abvg4K3gz;Wq2wi#3L$7XOvqHIky3y5@wcbeid%Kzd??X67iK%nSV(M zzonIZ%sJHsFFcmZAYB)JWj)Uw7@RJ8*L)AusO?ufAJO^p*4#gj+nV?FmSmND(5ly} zSJ=rH)g7&|IAEY7lHiY_+wE@Wsy_Bvmd)OYsU<}|oUnJ3#!W(6VPj;DG(Td29d|>!H z`?%WO?B9l77uW z5dD5Huz!bZF>(Dk?yac7a*xlb!oJ)ouSPs@aKIH&HN$;fVN=&9QlO8*fBkl1Rmj@k z)6meKVDkgvIp&|qhY{|+lfRImCVF5lyt(=BCNT=!@NS-I0jSBxd1m!gp&}_zfK?Fg{D*~&EisVf`N~Hw_qoa#^k4xAYeY^8_9mSK3@y8 z@ikv=u`=EIUuCPMtpzAsoj7BYe0~bkIU~6yu_)xt|1>0j-{?d?(`MgeN_3NbP~D0q zV%btDwv|GvvO{XMHs>XSGDP|6;5A`!&X44QnJe5@J;m{EfxjYUr^d#ZkM8n)yAOuG z$4dqmUa9=Apw~ho8NHW934E5gV@TC|aJOlmZRUlI2-C6n$23H5+(}IP+(|e)O>OFK z{Y+(O1oly9L^JHU&zHq=2)~H)hwO0ZTdU&Rj0G-1+UDZ8#;SLtsVInz@WvtQkd(|P zOP*P)VhX#kEvwoib7g|G@t$MfZ-qay^p)UT}rMR0p1^^}egJLk;<`e`6j`X^Xi^fR}Aj4g0H~ zJ`7kCM&N!*eEFN3$1Kcb`1|Dub)2QE1NB*7!T!u|>f3(nL`{P4+?ejX0#^gJiy+Wq ztzxdw(pBLp!>_i&p=(=j??4*edd{ZQB?)enaibz&~-(zOkI&yTCzL>|2B`Fh!IcEH!4 z%;y^~q_dE{k2nTE+d`=F+kC9s;+!dfuRR>Hy{sizH4;!|L3wdnE|_X4?@!Sa(*A>P zLCL6D`=PDiemIP$dggvtQ|6+>ELY`5Y0AcqUYUj->A@`)mHrU2B>8+|0TqpZfhmmF zQ!-?6<$a(#fUd32REB$NW@=N#{Z%J55io*gKp5!mr8y$tewqKbP1pBvKQ$*PWG++; za(QY#pn6;s@~HL&+TI+C8Dj`>v^^wh;Wx<3n)^fgxatb=2PF-}8S|T+Yqd_zHAt|z zTM=_*-uFEDjkGO$tVBs#zF7jaFSqyr>CUfR*>t+D)i(7-+3C3b9Y!{{9K1PYU`F*; zZX)~zgDXmqJv1d7LasP9plYKBbs4L#op7)b5eoxS7}V(} zNX=xi{MW_7h)3i?9HRwJ$T zTZurReI_Tw)-wh`LS(dj!V1w!!QvpwzHzKU12&?|xpD5s)kVcJ2L<^$(; zjKm{9s1ifWV#~>Jq)DAH4x*YW(khPeT_teox*vMa?9^et4M7RBvMO3%yF2(n5vEWK zxn$;_N0)U(9AK`$yE+A~E!9-`AkL zv>mJFz`T-x8N1<#|0bUhZd=QfYn(JL2+<{tN} zf&LDlkzD~ECS|nrf{f_qnsiR;Y%Pt+EvvNoN|}>USAd#i5Psm<)#O^0BX({~y3`tK zQHepth^+cCH{e7EtP=)i>x^peND8J%-o~(v0I>;yu5Xo#;LSUeh#yH}U{dSi-b4mp zG>V$ZhSz7yKxTQ*SH6pooTTy-1!mQpnzn$fKXyp_j7sw+Qi(cZ)|=bmuQ}8ji>5|> zQ_h6O==9TWkn$-P;vb91sB%)Fg?H;?v{Im?LFq&lzPfIrS5&@ z0m)^W1*QT>YgT?d?mhEHYbu4NcnQpTY7|IRO*u(>%D*9Ed%3;5=8!j&TF8 zp8Juz{R|{ptY5!8f%bA$wiyNeoXIHlYW{h~Ad|nK2TYbMhH}k`X3AOfDazasbZ1f6 zoHQ>)bLwrq-w>snq17rc3b^rCoNGUe2+v#bW3>y zZ=(oi7&M@RwST{}#49GCB+i!^hT( z-@o5w?E17DD83D$#3C4E#6?NU!ROlK-K4~WEsP?#=bK2L`MMq1V@yaLFgRAejRP}) zQl#8qR;SEfu#d^5zc8<@a@>hMaSO(joy+*^PMiO4z#mx=_MJnq-b}M2R=NJOMiJ5t zh)WJyf7n*@ues_2Zre@?uuZG;hc{v!bso1K-5Uc|Ejkq7VC)mF0`|-cL0iE4*#$`Q z+^?_FN+pd+yIS<1@nO=IeDYLdHHLn09+huRjh2+wPQ6!p|AvB3Jo~^0*0&!`Dj@Y64tz+-#)S5|YEIo9RhbTG{y0>9!m;ef z%?`V;5CUVm7BUeNnU84;h_CD!_Q3?1l|*mbY@i2kVMg6+_r(WP`(F+5#9=O>`( zL^_Fel4{A4(WluuEwrj|zKamHIFJV_J82(IeYRx;&w-RA25+s^MoVR6wNZ@;H}#in zlF2?724Ok*=@kaW>*`u%GP@+6C~zB<O@;zV0t3L`C-6y4Ug}N0!>*?t3QWaI z!=>)jiSqfryas#wPH%%?w{Qa=2E9>pSi|01{myqbcAe2<_oBm4#7J#MgJ=tQ*%6T~ zlRlJyG?Opt>0{*HNF|&+OWbLm_94+{oEh=PO&eYutL2Y^yuS+7mTux#sZkN5VbkNx zr!Wr55L%V?;Qg4WrX_t#I>6D!!Pk(O@Rs%Kt3g2vY8D=|r$9rBq1;Y#$CvHQ#gyrm zFcgTCyiHaBtRF*m6)#V)`9dzw-3VNSxe7o z_shoHeM`CULl7j1;iOAlwDg9*=Z5U=*ZYaz>^V8nVu0y2|K?-X@i)6i=A{CHoYyS` zNCMn)|M3Tbq}FFVINLh`qvEio`%buwyZh=}V?LJF1O@rg#}6%Keow4)zXIuQ|L4B< zUtFHf`0IM(qKKUjh76-iXaU3!2ij&N-*))o7u= ze$Zs(_qhIZ2JJwpWgBf0-C!N?aRI!B|%u^duhp7&Qf%tIkjE2aTo>Y(SIu6?ei z=q0{(iz{-!Z`kQcVF4GaFqsE@M_SWZ@ghF=eHuI;lDf4MMU|AHH_7hsrdpsz)}61I z#3Y~LUJTC=u!Syd);{IGTEp6wX5lXJ2l+l8wc2FtNS1u30IVO&yu3K*O;kAgl*yio zGR~Nd0zBw6Wuv=8fUzkzj_O$p-s{5MVO<pBLmO@ z*kiGu?WKdt#nQyK;M^I^KfAA)kryuG}5L z>W>>KyPUJ+bsAa*-hbI%7sH(ElR|Ze$7_C)wru7<3EyW~DrnSX(lj#>8|PyKj(|lk z1IlVI*FhPJ;%4Y$l`9f`g2U)*+RU0wQ^g60(j%=CGPcTm;+X*lFGUPTKAE3_+A$gNi@_}r5)*7t!M%JzE_DY4h)CVKwRQK z7rv+JH9pJ+P+J`K0fi-wJW6d!`ng6*`jpHinxT^`T_(0e?Bprtvh$W8jgPo8;oZYH z!q^QHIH_^u`P9=DH)x@FmCe~2<`jO{`Bm{bdAV1zAmCrkYt-J~N47W;-pr#9Jpq~K zo8v`>Md7#I&2sLZN78@);F7rX(f!^bF|pJ94?PCdH?&L z9?SoN!4y%im~!VQIgp_Pl1N-y$uF1*_rGHCut)3chM~s|!IO;mV1Rm^mwIdBVs$uN z>7f5F^K`aq%Q0Ays3yr49+$jl2}->2&ryUT>>@mGIp+A4KfPpuKL^BfpqjsqBlU|6 zzReZM@pkNgGdhOD^;F*vY}W7O9;U)%XmRNH3GtJIkdov}-hR_q`&hW?wT90ktOUNi zUWN&)a&NfrR)V&Vr`Yk(#K{`&QI9{fyn&6;GvkCNEXLrRO$^C*)!7uj*oU*Vp#3x4 zZb)Gb=K5)pH-`v~@<@s1UHcIc(60U4%`Zv z&LA*f0XN|RhJOL$$rB!CmWSpUEvBwq)J5z1(Qdg21-l&h$XJ$igY@j$8-{7D0qU6RUF0{s_h_}X%AGdaK3@*J>Q~M%9-|~l?!%GJaAfgDU+p`sA zo-+0Z#z67D5kVu~%ZvuYdN*ZRIgu-)n9kj~)SK=K;y0qB!gM)|w=K_{{+vex$h)qR zs+$WH{y@0ruLwIAhk@!1xuO&WSJGh1OkwS2!<`qSj7WB|R4dvnLIN*BtY zh^g0_L0ins(rh@`dUZ{2auu`u;VDxmhkqC&a=Lz|sE9S;KnNVvfBDz{6b{uU#-vLe zByoa=UP}Eb%XM0;om&bZ>(+fmvrz^5nQfQ4)8ZC?a;hw-pK?XgYkJcKvH<+N^%_jv zcYv5U8>121Pww#U$nFackDf7;Agf$CaXY$Brsh4Cznp*C)C?a-RlgZ+pniHbH|mF9 z6otonc>O_xf9jE`gED}9;N^0!bW_ovph$b8qX4=QB# z;f(gYjw`qfVw?O?kZJN$)nq{FmmvET&bTp{!kg6o;SoR<;BC6D8Uoawl7vRz#zZg& zHV-m<%2g$cDjfnB$4yJc@f?)PB~$f-?7^>B-ofxF(P^GPa%j_WQ_ZVZ2mySEm=L=< z^s(0j~VMBDa=4Fhz^kX{BU7Chpg(cP@j-~Y(p^dt}YR3#fQ3cxKI{naPVZ6H^z)ef@n3Pp|_CJ zRv9%b`NXUJv*1EX2LI}%!TTO%Z&@Y+3~%A=F{{n`L~_n{81k|b*` zYSvC%Zikqk7cN$vYCumC|6cP4%xyC7~>7I;!N=DJvX_lN?9-H*iDAx^}ECl9mP_d3etH_NB{Ef5N9wgJP zKmN*}TY=%kF;_ktrmo9rzyNlnl5k*vs``?DNEOxGLr|K+Fy(-j;H#?nl-P?(ZOgn# z^)9~85?~TodAyrJuxT+oHIZbaTl-PkMj0yKoO|2#BSFhY!y2SzuFTkPR_HYqpk9>2 zM*~&+Z&LQhi1vS$@3bX9X2a(v)1VTRq>KuTdIN(HlAWwQwOVLmPB<_6GTEkBD9EPy zp(elV&lg5M6w&9m4lhyw#mxwhf>op-1ad%B|KF&~tMT_)%}3qwsW-PQlWKGfpqoGC zm~~YWWIq}&rFWXNhoMi*VnyA z&{HsJx*)>p0 z#~$j>fS0OFqS@ujAfzpZ+eXm%7#xc?Ef^OKclr&FY*_~qgz#VYA0E{}b*zZdLU@T4 z;PQ;Ht7?<2#I>7Lur%3tws4*fNmjsm8wu@Q3%OVgqaNtN*^q}$SIG%x-A;&mDyhAG zGdNHy8azgnV_!(qa*9UjeJZq8uv>4%F=Ne6M>*Yh@X?5$;j9g#duf(^RT!*p;Pz-) zRd*9|P`2>jDAxxTLUr~&JwM<5S~3C2=iJ|OHJQ(f(2T5~wr!JO4ioxmf#7+r5mQblz=71IW<;r zQ#~3nt2H9WQj}GeJVD8CQPQ|+L3lj)KIGj3cB;_Y))9srsGr?^m z7F%6B`r++8))3D#nxU_AotQDs6@gA$lDfCT0s@sC_Az*X@_LyiqYD&YsgTC-XrA#1 zIB)IS{gZL!?4boot>Yho@}!#S_>Kl95`vz`!BeYZfZiNJiUxDG3KPvpt&jBaw;KWVFsn z`5TaVBRJ9bxe3{|!9;MJ$+XhN6^C&=A=L@7!`|)0dM7S8@_$>hAsER)>k6m5G(F~ zY^y^+$G-&hpL%Wq;L>Bm%%BJ@)Pq)r8_w$VSw>MHiClaC@&?K}PX6ol`GZd`T)q=~ z=UTZt{^hfHG=qtYn_ES92nRT!_hfuzful~EI*!mDS6{$WW}5gJGQ4%4`c3Dw1&-W| zOQ*F8xb0@%<6h&4YE|8T5lWb;bC2V6UzarN2C^Y$Qe*IXYRv>G&bA``9f_wOXo)Wk zTDd*j@k!(2E}-`1rk>oakeO~70gDu82`Wxrpb!MrB483wHDS*62?7rudEgbtym1PB zL^ja0u^)+X!RT15sW+c82RV}yH*J(*Zv1jClwWfI@vE)zVcQw_H33n|FjuEutomI& z!2hfW{Ljij0I!9=7O~Uu0Jp6kjH7bg3Qh)>DK(ZpFz(*Cmy5OOR>*si)&+&;*98y-atlqG*r~XVolXSUaomN$=17* zqCt&sKuVwR9riT&$9mIQXqzr4ajovG9s3d_=GvkZWqp|m`>w+<&B4!rE%7>n681^I zR&}5?%mBExr(UtaqE$ix7y6J%H34OWAgnVynsvMWN5<@w%@15Yxaws7a49rU5Tu^<$J%|G5G=0Dlw zcnXy)O?T;>=?mX=b)WJ3ih8Z)X7yycV)C)FFRp~DpC%-MEcX)<26zC6v@QYT-lX57 z|1<{+ASOTCkvYFatV~SzeADU)5k&eYSIb<5(v9a&3V0P;f>O&hr~VtvGE!#2Owg71 zJ=*h>i+`E|W}g*67vsT_%6gC4pEJxn#2$B)X}mN#evM>!wE3tgh8#DH!VQ4 z4a^vfghpzlrO(VkjtQGXI`~_%XwDW_JsOxpgI*o;9z`(8sL(norN(ki++N7#qaG2k zAycn8ZBe%b>i&F_u{q7@0()pSj_AL*LaOJdSu6~6FBBUi>A!dYoMS~BRF1O_KRRX| zwh$|(AO(M+VIS6&vfg>2*>=nvTSWn&a^`BTRXIjcU)EvGL>o^EIEs+Nyr<-ack^0@ z$^_3H%I;Ag5gqdkxx9x|dI31mTEf$Rp*x^N$fY=|I&Wm zwp*<{b{nYkQ-1!n-Zf5kkKe41)B#|yfp3H@kZ+HBQ$NCI=7ycxdCF;si(Ia_K>zHG>JoHq)Ph`>CRNtfqk+!J%Ix3F7EZ1P5K z$am+I{$DMCHI{Q@&}FL>98hG9`bVWJ!`IE>?eACKH!aCFTOYL{ei*#KjJLzOnP19( znY$k&FiDus8E<_)NDk0Sr1fj^(wi-e>rHWO{@iE&u``%xPW?`oao@z}Bv}8tOEH#< zn?UM|@v}D=1P&fPt!g@eyLIJSTj3267u!QkQ(YdiExrHwq8pHZR6H< zalXU9qBO&D0#%A;iWhJa4#;QofS19skk}rIeVuy)wSUJ5SgP5Suj|YD)ONTjj|1$N zJ)r8CIcFF|40Mi*YAr_X-X&0AFa11YE$}_~{c8V^W35BA_H~GE$%LKud?5i$+b1-t zFNHJEXNtdu`Y_6~2pH2XE)-COHisk7jz$yxSb#SIW&Gqb6CnXI!{`pJB<belN-dxAl_il}uiZ@` zcZQsE4e;uj(USC912Kw{?L(=d-xEQMTGRDC_sJi-1Yg*fO{Ge*VfF|PJRON+XT1|C z@3TV^U^LLoyN#jJkv0CgNVd;kMEe5=bbv?YIBp(8tygyJl|TY|7Lm!b{pQ;$Ql#F_ z7u64jy4m-osx((Lm-^!kYX5_*5q6lUY#3(&BPL88|1)dn*%2GA%xz+nY1bmmBTNqi zdO59H_wRoJ7*g(}49lhdL&_oDJ?IzfhB0crz}yNJO}ghkZq){8>Kv~)jGw0)KdO$- zG=vqRffnnkEWfpZbhoDQ)D^S@mq;zE7Q^4YE(&vBQuiP}+RtqVzwK(rufm=e%NP8s zSbTqPV&gr0si7&W1U`CE_uI3a`I`E4Ae^QkY?3zMx=;4CrQaAXFZ0keWa2=?h|CkA z)F^7co{_BBaHTkGS}c0!F84NQ!H}8za&7AQ+5CUbfDX)8`J@{knN48}f5J&kL_?|X znMSCEZG^6(+D-s?O}cSyMmeh+=Y54tNd=Y{-PGI;{}8xlChc_r0})_0wGkx@rtSVe z0!#@n#>{$u2S%-7dzE$B9=!uzc!%7MeP4F`RJtD2 z57oUhB1_k*H=a)kLyzptLQqx5JQ=wKv23AGJ=hpi{Pk!?E@3l&7 zIkS+@lgo^#91PI%ZrRc6$!X?f0(#}g!lJPIG+6V>{;d{_<07rB-@+lnBETa-Xydk$ z66xX8X=sccn39s8P+F>-@~R-&4e+fkcH80+q6oaEpg5}qmX%v{??LeZ0rzCKkXHYO zb$M4Atbbw%h#(BMv#!_2Rs2T~Lrd$VW7M~fQ6s^isQ90BymthjSsZ~(g)ekdF&#NOX*4Z3_&l0HG-8&a7+_xzdE}@MJMvV8D;O1&br>1 z-Y>{)#u3(XC1JBTe*Iudu=TL<$kPxf#D(h$UO?9?Ct0{=#T=iW6CX{05ksUd8EZLU zI0~80MVmGtw3AT8+_rnRxSEqtlcInu3{t*7eFp}6(PHM9Z@IN8;CQ;3^)uNQ=e92# z!fw)1jPBe=&vKiv2J9Vwqk(%$cq2)ey1*#N=VdU2=f0sE#?*I7bN|gZQHOw3JrI#E zafn$|c(9WTJ2uXq&4oCZ_4kkLpT42I9a0zvt?k*-bCrK;7i=<;WC$W>yTq(b8K|-` zeW|y)+rR@Z+jr96Q|n=J`y1rK?O$>wo?UoM>-u!9;%u+uR#>+%I`I~ho{C~kj zhju9WfN~r?y*WCCny30O4y}K1H)6fWjQ0w9!$F~U3>c`=G|LMJ@_@oVAt_lc*tw!E z_cmx5Bj<;GinfIh&4aCvKVrf&^jogh!=jT#DV*0s;lM#KU@A=-B4Ttj(-MzNUwb07^@s56686)Tr_4599$ZwV& z{TjN6ns$KtuYMM}Arpqta^Ab5YQrvmSjY z#uGxX{vt=7L<_ebF9B%MFXkpW7mW*X8==NGaN)~LyBCqniUYnwTi55S-V*j!sdlS+ z3FycmoycwsJi}9GWOSY}x9dV#SA#>nAuGHozd9uLmzZZk(0^P-9X}e3v+BXC>jxEGr%$s<$ zmde=J*fKeqUNJ^u%LG9%>{^Gap#~2bdFUBB^U@3Qgj;cP@Ber;)fKnKXCdO$arv1; zJT$VrrrXQGnI;CO&1vt-E3XHm^)#b7XR4{93uURS1kd(IiPtDQb`b*CNQ5o11tQmE-GL6hjob>Ey~-({;U zt*Q@ET;U44njW72=W-KpQxQ-(2)XfEFw?&PXv=BDry(I~wRxbh zW=7;nP(c~zD1(LJU$_1dp%i2Kk9YEXF-9d5_U%+u8Z8hA@EwdLQ!AF#In17J^1Gs1 zbE}uM^0L?su7ML|HI`?7%BU;QnoNA9M31Ngz+?Y{Z1>MXx0JGh_uPN$C@|^N(69sQ zc*!Y>V2+MCi(1PV^+lvi$-=OCq=eYt;+cr>=#MW8Dk_;TaE?om&cjZahz-b}l0?{v z#q7xe-?cbckb*w#lKl)6#l8kq<6yQj7P0A%Tbkr+EfN22J0V7Zh_G4`4&wBz4{)Zr z95CbndL&K_K|QM%c#ZnNh6bynui7R;^3!dB9UFXpD*uPAw+w1C?7qE&ySKPQ3&lfl zZ?RI`iUo(@?(XjHQna`hcXxNU;#%BKo^$5Ryzl=xlTXRVdvfjj+H0--+XleQNx?O@ zPRiWnJuR{*_e$rGvu*tKO%GgT73jaId z5e$4LIYVFi+p=cDT?C-z=jT7;ktDXRb<^pxgD^h5r8$^fF5Z2*C%;P%87?SPN%=w(`*W7srmc%X4yg|(KFWp9*-C%u@*gJkk=Bd( zB#b;U>y{yYL$$1r*-4L_X8AOWUd|ze2jUPvw60|Ydrk$5b54o?L)0<@^mDqd&!wSm zwaL?@>)hGW&BE=4hPIuSmejjUE^j^KVaH3|{C-jL)w;}Lqlag#OTpUAoaK-i>8nvJ z`Fea@lgQeL>XCIA}&uT+IH*Jz=wYPv#?Jhb;`8m=hTCHmJ_rhKO zFB$~`%Y9FALa>wLtXKwzUc48(Y5LuIWGrLm`#>=(sh0zt0sgYl}vW2BzFv4eZK&i5$(4 z@K{1kcKJy3NV zwB`evBvXF`W4*Esq07Ugb4WKXx7e^-{|*;7LQEzqkJXzB8K zc@_9DL;VaL?0qkS;i+cQ!Yf2)q~NE~s*L)F{2`;l*A4^5m&tf!&w+fg&Mq@Tv6V{m zgQVyFd^@}z7xwTQW)P+oXhwPifC@cF`suPRKkSP47^@ZHm<6Wg$#r}01Xt$Iu;l` z%chLTkeykjO~lPXe9%$_liP94ZXbs&>{ORQJ9R1ePVhNDtp& z>K*P>N3$Ian<%qe8J8bSo^23C0r}{6vboSGxzWB~|IxG1X6O~KWDKION+29RL%h+K z0G0OKG8s7zT#c4FB)m&0vl#<63T0RtQC9i1Z~ROoi7l47RTREx-HHz!70VpSvgc@wUl(!MO-`b23b{#xBs& zO5m|kHzut=TG|w4?jJCG5D~@5%IL1|j~Q5w2#&=-MSlGX?xcf+v&%Gi^sj{FaZ}@h z(hOy#&S+7mek2u~2m}ScZW=XO(QzMjQ61KaLqT@c_uL{jVt?3nM0B!G^W^G#QhO6>iQ}=toY@A8rTDwUCQK)fr;y-o16ZVb{Y^>mcT_gN9r-SEUxQ&!S8OFWg7I@Pw8P zj>y>KP()efk>&4L;+KFcnUo*xF|3D#EcH_LYNV*b@eDneBg`r8@%Qw!0lmj5LgZ@P z5+OrVo0N7^vn66Yzcl>2yQ#N@z~qm8RIQ5)p;rHU9=A>e?y4%>q`Ut?`hW5y{`1{6 zor97f4zfLPYQ{HOe8%>1H+h-7Iw;6wwP-m|kHf^Dz@d6=&QOQ4p+hS9HbM6QXjQ^+x zpwPzBjPCU|#|&+CY|y!}r8@+ehf_x~ecwKaiASlSFsb|JCv!1R74>Q5dFQkbIx$CS zh&`f)ga7Nu8Ep6I2{82o*z3A(;7T@!m`FJRihyf8V9wS*qV^ns>G3DAE?k-b)}^oh zsm&518P_*WpbM_yP>Oy14)JCMMPOj7|61i1E%Om5nzCjfi%|Xut49=TxL-&%ir5A{ zf=_maqtrG+1?D0fP=92t874z3Oi{Sk%1p~$z+O43yz-!8;xWAx9hEDK zISkj9Y{HNt*YfBC@NYVf!Ro)Ja#BJiJq1y0f>Z>S6k|`ziJX{qh0Q#yeEsS`;^C$JR4zWr6)sGdX73^et!EPC@O9rM9ug zjFmsLHt@U-?rOuPU;V4g`ODx{+Vk*wm62WuUJpn%_~f)1F#Z7X{Y5AcJBQ~H&9|pqv<)NyO z?vdu?&FL9>^b3#stc&bLkiKrmTZ{G&keqGz&I8Bnn#o{c$(KXGCi6qtRj8fsPNuN4 z?%G6~Pa@k`B-%-_;{)OLuVM{0o`P%Xp}eI~Q7HY4r-`m~Kt~og>Lq%yt3TiG0mJPI zT-T}eU+oLjn{k^Hk+vS&ziOJ?t7I79+;ZcUgxoG@@JKUFfFECyFj)TK30ms4 zQwjqFZidgXm#u*RwC&b6>>ryQ;?TZjQi!qVG*4JI_-PcN6|^eWOpQ<0==}a@8PliU z^N5^sJT=_nbaHz1y?u2Ig6pqAGP9#Cewy#5{Zkh7+NdDOuA*gHRQ8XsI~r^%;hruc zh2L~*#8&-1qG*bDakJB>vvOdP%-N`O4XFW;TjPrH)$3(j1JDJv;UblrxSb2d4q%4U z91K(PF50QS+`Ue(D9La=;hM@+{Y_w#pG z{Sm_;+P^`m#jPiDE(c=(2nC3)d4fcXSqcbNQW1LlE*Gn@Lm$8LL#ugs;Kt zaK3k8SQ{lh(|i1W8qd5lqJ#gEoKGzXRt&!Ye`HXPXJvN`O@0Rr1@GoBU zy*`XKSTe^sRYiNhR6#wp_ux~LrhEMF868~P|1u7^x%y&*vHz8S!sBbKjv*ZPy`(N_ zZk+I-N{!BmvUfSH5#4vtUDDLc1T3aeP*gMR-4SSK1D=gZMXIUtK(yCW7siHhkqpQtB*fO#BV5Q0`cuy%9sC$IJ~sXJF$?cD=DXdgl?t;7dD3& z7i@kun+puulWpwxd!9~w0V8R7kblOzFn>Htyc0@3%lUE?EGLLvoG$oz+9rXtzZPPK zIM(lx{MF?Rapp{3V)FY#S|@cGJzjQKo6iy+CIy`X<4$XS^zD@B1>_UV?il7_8dW|u z^G-%^S%{|&+YrYfYI4rv%g0;TABHzTHL?;``KeeI=_`yyhZ)W^pdlFqAV)$^Kg`)C72Qf|8- z+F@@NAhbh!D%`7r3>-vZ;`xengt|=ld!7wa&iw=RO&bGTHJ*m^4MNI9L%2aW00Yrl zlw&H7B+!P|fWzU_HUkhxD{1t=>;#rF-b^S(^m{JhE3&5oTpw9*SWMH@FCZ*H0V|h? z5-99qnt{Nv>s`I25mXasVd`h1_k5?>KwjrE-LbfahRE0@Fp%S@fpO=6%$?`CIduD_ zV2S|vx@G0t%`l8>;!Kk|6Z>{YejARF;q=tT{QXl`61wjqn}J8)mcjijAl;!E(<@q7 z=p$S_pXdwS;6(c%(tL-#zy&m^la*?BmFHoaZ8zOkVx-X~9m=0-N~4_~li>mfk{~MZ zaC`_%53Q~g(@G)3v~}4dqnO>&it~j4vP&xKN>Vb}>`UePWfuBi_Nx>0^qq~@goh_S z_?j%}uQTL($Q_o3j*r52HNJjSJJALd(_Fk2huT>%&x;Q_TtaZd~(hP!`CH7lPS^(JxhJk zn23KJyWLx8DI!RlkK@tdoFqf%h%gVMZ5>~4KJ(7s7N##f{jrRyN54l5HGX8UNx=NrRk}mOvx+_m zQFf}E#DEVb)_j=BC=%`}6DuMZ!GTknS_ouZTZ2NfU@N#W@kt1D?{`tg-fwL~J7zw> zAJ$n+{3p%It=O%&=+D7D=}0a=p*oC~cYlj4ssx`l;G?py_}m5kfMHuUPCUHq)m!kW zNB1U|HY|}LDxP|3GoQ=?V znL?$yq+zwjZ=5<#NCn+h$aw8Jwrhz_W!X|~Ivyby{wevYit? z@mv|;@e!1s;w(u{IyGUuEBkWWx$N2vaF5V+_cezZp+QI!*H6W*cKyK%Rf~qP%&BIyQ{0R`+(thEYG*T6T9$SheS6Wx~3gWZ^Gdbw; zqM89<)K|Hx)r)~x1Sr)Nbn{_mWFbT%?6i#rzhIj%{GRtKb38ia;P$egiZ70DJl|6O zVv?0FhDC&IK&@tA4zFg;^2JJq<2_hOK-zL4Dx=5&6l1a;T zjlngJ(lisCn8R1pNGO~PEOD55PtZZ1F<<+SiTksnPIYMso@ibm=rxs;?x#z9;Ur6^ zVsTXJYXz#cZkR!H$~bBG-9rQF%510nmDR%PYMD~hsHUK6!Ywf5hn|Z{+riSTMA$wa zmoKUx9~uo6X|N%v?!B&cl&jGQ*Ov4hTA&BWaq6QOmRGzrsN>>Lfp_Z zvDc>6ebUk#$qr&FQ1rXzke}q!WoiC<-*X62pWSF;;zJbCxf@62RNj@<+LRR0mgZUX zzC$7+BR5adOC|KGS@@szap3z^-HQK_kAuQiUQ7XYWn(@5M#CJ(0=l$!c;LM4NsS@1 zxjQ254c}o7n*$+Ea+joTQ@JKSYrC%qOn8V@07}?EV@iCa3D~xs1U{b<;sqWub9;7! z*=_K4@>NlW^~|X(7^2tey?6P+ zxu*;wrRbxz*R5L4dEHD)sv6&9qK5w6l#gsZ(Di9|!eCvs(;QG-Kxfe;O&;T^ZtH*o zLMtnGd9_lK>bJCV2}iM;6d_ZJpmZ~qOpfz5<|!EMP+(NY2b6GEpSz8G{VOyITfW1yGg)lg122LwZ zSY-v_e8=Lq!+sQcWY6W&^Kz-KkkRiHqPgVrUcZ_Bea&&V#JBPc_9QysNTi z0duvkUv)Tk>Jkaaq7Qtp31Y^17`*lOBcH#{Uev56Vlp~BxUqOs8DD!fQjzsFKa)<; zs>Tk+A3HvHbB(b0rW^V`1{Y{G1caGcx|>`rl+)N!?E=-#M-Qy zd_HyAb+B;N6>r;J^QRw!Bkc9OSTYuhraDkTQ4gZ7bkKWBZMlZ&2L^}&O&0oo6nZ~u zf5iQsNp;9yqquuV~2t zFBlH)QP_P4n`E!Zr=~lJtF&faO9IyDRO|0K0z|Abh7>($OX$Q@HU`u>^al^qL&6l_ zY~}K_yra)vb?P)g>53==Xz1n!IfIB$%v$gp5upuyd43drjRK(~ac<8CDhY>by|`tX z_0>5Le|N<2?F24b!<5F?-#-5M3Tfk!4d_auDS(XGY<}N)y_k!&<^=Uu$r~!TV}cr1 z*47vHf9x6*ONn-gocU=J`g8ilZ%421m40fDLgF$^cWc-)ueG~@BP;k4_o(F)@u9b< zcX{Bk%?{VJ7DxRXu&>>EIR|*pnJ>OZJ&U?^G!kOuh(=3PeqQp!)BbrPOEDpj6!4M( z1#-Ecy+21jT@CLx2-9M+0Up-~zKp5i(o3sY+9Pc(1%BOK6(Ms(XCa(QLBw0%?+Afs zht?4!`VHP?$LW#H3thDnazbrbJ;;D{bEnpA+qKErvMf}1+yRle^l@?jfDfLIY#%Wa zu;HE8+(`1(gO#bARrc@BR*b1;V+@@HbJRE#o>*4;?!sE0(*^_Kx}h`U7z)v^Z^bG{ ztuc10-%zhh9md^TbN+tgC(Th(&UuM8K5_22Dk4VwA_5r>MCcOCiAN+qx#mRTy}Rmc z2pKgHc0ed|XljGxrlI!M#R0(?R}kN)84sk!!G<4v)8B%DY{)RJ4L4CC^(VGj@_Jk( zjRim-QAAjnw>ZD=s{N6WzlbTEPTLJ_wcM~;%T{iVxJU2T9(;;F4n|>%>d~g03GYw9 zA&o(d)Yzyxung1^JR{v)$<&6Gqc8P0UPd>t-7gG5Ifb!H8%+OrY%{c%@y7M15MrDv zSI3-{s@)^VraiziDJ9xX7sC>#k8^UwMhzL8bhX5hRt28tB@evby$y^`igab+Z7wp| zw3A5RU_p)St<7;TnP~L89(X$bEFa=@SdUvKpt~_{zF469Z+>~`&}#qEp<+f$a!^#% zqX?&xUq9RQ5Q27AofB&5y%A)pi^&Llb(sPz1jz2`kWe-i1Yo?LpK$a=*iA z8)rf3&9Ac;ewlLd|2S<^B5;^&nYLboSM|h>R1pU)$gIyT^fP+N#3-52-q7Uk%iW(< z%Nlxv6C>K{hrviyrchvNXg|9Sn>1V-drQW;Adb>_uL1|;}|ULyzHr7owj_-e-Belq*oici9sg(xR-GJAG@OZsnN1c ztU`-o9ZAS};itcF`n1f)Paw=Q0PeeRuQ>}IPtQz^YgiUuYzo2kG<=PzMwiY@iyr8` zXMyo!>yD)bn@%&9B?*iD=!l5?m88FVc^d4^3P7U0aH?e_i?*x1DxY=Q(%kV!>)V^Q zJ)QSD*?X?GpF>btp!7NwTQfI~UX5N2?C+FNRz`zphgFHya6Q@vXvAeE)DOZo#QXU! znkE3%E`OVg1n|M}Vq~fJdHz3HjB)a}_0{vWCpcomOSFr8%H#?0meX5_0{?HuEGL!vi}f4I%gX=1tH&WqA_3Z=KehNkee+ zq?4-NN9sUSW35pX83K1oFy>IT>M&+xPlCx+?JTH0UUD3#T>8xrEBK?vmHOY?K+ABk zK_dmu1Hd?&(ATxABbztqE?yB;GnMXx^gl@~C6oKeVurtJ77GU@6aBnbb;3(w-uar1@PQ$MI1Y7h5VL4Ko+i_oD`^ z>jFruRm~~cbCD_DI#6Ry=Q-hUl)iB#nQ0w-aKmC_Y1YyQjdnPu#|&?A8*5gl&A_<5 z+D3i0c)BEl4sqFI%)NhlV(N7Dar^JSR0nR{q6;Ay54c2%%~!UVY0FQ54fl7M(t3;^ ztgN|_S>>cu&Di3u+?o-wYI(FF4;#jV&6*0t&T_xJ&eZsn(#51)pDXY=H9^C=yt$+G zuWJ!{E~^$k$ZtkOzn+4O?2lef`NiG1*Ef?0d~q51KBwfC-QE0(NDViNe!91u!MoqW zyqBpfHu$UQ+P2B)qW76M-k>gWKSOleJlUpg`}KOqo7{~Z;YbW}tR<6N4cL=_fB<@P zjc@ug+g#R8)3a7N4XhgNU>$pOVxG=4X4c$m!YwX#a`pp#t=xXw!;7w8qI=oAb1g_9 z3JLU3c&;(+=f9C4EG;`{|IEh~DTL{? zwPbUN(DfjcVq{-nfHPz>Rc8XDZF-!>K2cz87Q;ZI55h1jwK{%y9f}K!`!vRl&LfMg z2;2WeSnLqHuj(c>Yx?D&^=$J4z_sGkV8(KQKK9A7zGu(k&En>UwLzLRm%Z|ypGH*EV8EWfHdzDM2uurpO7pQFDqM ziRth$)_mZ8fj-LWOK}G=5qUvPPBS^k__o9DtIfK}tk^h94ex~Aj@MwM2UHrWl8$OW zn5{W6gO&KjiumK!4&D~yey<1E`RK6EGWXLA?n@BNbG)UNMwxkvjfd8NOzk( z-R#9Y?i@rPFbF$nvarPiOgEviKE9gBOsh9=Q+8E1yzja%h% z=JcrnGos$^y@jQtZJX5;N^Sntw2>&WQn-Y@;{slEHA8Me*E0>SDc8>e6)$P2bevPN z=SL){H@!N715%Cqt9knTjj)4e5<)}*h&Jwx6*wDCNaJXGC{%_*bsyu{oJs@i4l!>Q z!{KkpbZJh7o(adlO5XSPOREi<<@_UV`p&7q52srIeGmUPT;zWvoC;1LHJ3__1luer zFVzbb?!P|N@@u$t*i!LV!FCy}G^O zkMIi3{#cl+oI!b5=e+LfYBv2rpYL;;WiHhfI zbOYb&W_lQC9lTu93yDLRc2IZ+3PM6>SFqLSwN&V zB_bZJ`czEPtUULF(VqR+88oUA;FtV>D4!X?xGCH04g5km*_4_J69=s~U+%E0RVlH} zDEtQBoo{lDZF^sjH{141=7if$=eddw4B-6DAV32m(LR34?N=HGs~2HE!*5lC*ym_cr5H@fbH6H`W=#;8bWcAs7*pPRuZ#=PY;aOQZM1m_3J z26MqU2?jk{kOHxegOoc6v0B`$+R^Wr+P3y$(ns9sWzIo`(2}2eZ-vAwHS<^-)0~9Oq1m5Q|2n6vH5265VWdtbsFe zimIO$+gq}6Ej96qiF|LzXr7rP2=7@8N=`n@zAmzA_m5ub`<_gwNlZ%LS8W(Pm%)^T ze#wERIa5N42OQDQgAolH8gJkytLT%;Ey#C=u(FomsEFY7-vUl7k=G!T6365HGu0Dk zB%AzC-s%4C5*XI263_pkQ?n$Cv^m5fAvSRkKSh;Q9+Wb$`Xq-6t@PB6r14he6M7Jo z-fQ=4rW|H&p4^ELh~#a&$_jct2{Dm0unOR?u|Y$UG|C<@FmP!>k>+r|O6-3Yb<*kY_@NSUJ|Zf?uK2UXe>*Ri#HmOa z->d70PV5h2L)!^h5qN_LrmPKMQc`V6;jkj=?SbBMDYUy8#?@)tT>NWpK8~sQyRrI; zvCF9dY`2=|Nez}%7zM-FxY3;G3gfU0J8oVgmn(63Q%xy1-*`0DcjQwZe(L@6)e_}e{TA_i>|;4vv)&abg3+ek{16e;Ro zV%A8~N|7x6l-9>-AfsZsT`p!vP(x38>ZRfYb`Po;)hpHEC<-!+Oj9lUX}10gSAATo z!LsIdU92Y`25!p{{d=14zAqS~mpyyYi;-A8b(1Jyc}H&p_-wsK2tLF!+ZI0b>-X|5 zh_G%3U~*>-#z^|=1$6QN?-MF|40D3UoLjSRA=8x~>=Cwch;)o>lF3g_S zg+!OcyRv$^Z6DT^j){LN)h zdY8bjm6{sp5v+Q2S-m14)$p;8R=AxKwwlYCMWxeW_xjA~6gWw@rm8CiEbWxEE~V1r zv;ni_GO(eu8~rBkl3FZ(&p{l7kC5@`lx==cWS7%F0*VZU_z=SN+H^i4vMgx%j_p#s zSL{4Nj`%Lf4kph#>ebM@FE^&ohpycO` z)9;V3Mu{_lG8CV=2&F_Qy#_}@H7tpK(^D!;B+cBr9PxD6-mgC+2@}M0e`p_Sz-1dI z6EKTd;W7qv=pDr$fI}gi324rUz4p@2s*@D&N-Cl6M;i3PLcd3#%C&9j?@|uu`qxz>GK|h`G$X>*%-ri*U?G-<41#48J(|9YAZB^IEAL10!Z-I? zoh8XpR_}O^S9+Olbz@CMgO;8WvA2+M0XK+=l*{+l*;!bs+a&4K`Q)CoNe{4LKtps_ zx#b`d^4j6|d@6m`uBtsM7sColkG+5$#$S+G>gNzb>8hN-21sRf-8#D61A};0Kf-M> z^xicL<{t3MOTdSV-1ut3fU&GYHEvyVOvaZRu;{w4(zg9z5x+6vnpQ$}2!g+%6uP(r zG!|W98>*Gv)M^PAz&&GP4%+|?%OkX&hP>~aT;pNTY*0I&EPKn3Q$AiP1;dR8<>*{eV}_YL#O~#cq1@$Kz8_29fH_ z&d{(p`|#SFHty*6fRp-u_jg+0g~YJ2VY=21U-4A+_u9T1XtvHG1(~f;pH2<|CAUgP z7OhLd`E=9-dTf;Tb_hpGOMC21Ud?1vx~ zDTR-+pn8v0^2OdFQoS|d{ixUcn3+NukD^WaKbqOR*Gv5|C3cC&XBC?bRh9RaBYZUW zd{#(cfcP4-!A3TXZ=nSIgO2hYbPeJsTW1y3r-OFr>cWlI1V@vLQxqv*Y+Mm+Z1_le zhAnnV2GDtaG#?+|aZ^-lbo6TEsPF1wH8R5?C4YXZ*n(wj)~QtS?2(tx^K;I{g5d2$ zS>>YElyEFxr*3D9Q)4Ng)5*`<*9jN7Fm%BFmp=w-{RdRAyB~1QbVv?hi#81LZ-i_l z66~&+ood7_)nP$sI@mS$dNjI3)>8{PVFFRuk+?Yl&^i&cno ziQm}K$6E6YltM~_;TCp|3GQe6l79|hdK)S|{Z)%+OyVaC02mn&$hllge=aA$XC(~Y zHO}CtuS>xYC$vOB<8|MM4exvtVDMP~fm)F!x%?^VgGT=&8$|t&o~1}lQy%1}+slu^ z?|?C7yw0XQsc4HX8cnHNl7Q%ara>&n?l>Q|w}7dCleDbCJR7e4e`R~D?l%i1kj1OmUh3Y(XA zv}5k;xIf4$79LziM|TP?+&hso*`8=q7HkAPPWbyxnxOn@Wi5TLlnRRyEJL9k`8!?cEE=4u|ee5LVXJ zG<}J{&yU3~i~!m|83MsH=(`)vR2IT;(8ZOm_-<6kD2Z!avr77 z7OZcQui(RPf~++WQD;xVY0s%9dhu7aFxB&r^gW(A5-Ypc* z)Mg#$$|CMXycQ3eQ?ZB_;93@Im-NMu6{{!l&l!vy>Qp3??|4Z_BY``GzW?`<+BGhu zK(XEz&vz5KwXXzxtOeA@9}|ri*x&wnA#m{m7Lf;!nGG-bxLmm8!4m*^r}~e?F;t(J zJXI>1_C2}pSS!hxUc$mRUvihnru&O$ZY(yfTPFXt{@#7tB*w4VyxJqWZsEqVD>rUn zvwJ!`r6Edai9v=_Y$hMPwcSZ}O5|U#3g7M^8q*ZWuSwy#Mp&9SI+G--XYy?{K4s3e z?>0dF`wc?=V`EaJj`KU}HBT^=_~xQ@{*$gv(b^UH58<~+k_^E)1<{X-I=S*DGG;K; z`fR)528^Rk^Ab$I56C3-%6grgL)Y`s@|Vx5#CqgIlx`;_(F`>}m5MCZcR&`0m)E>c zuMgG)r%1})dF-ii8iiA$>^gdh&wk@iT3;tAg2)GQW(>7_%G^EDbp+E4run>mQ2PVaap$hGG@ltz00oy+nE-Ix7e76AWbN3*%n2Z1#%zeqp{$ zPz|AR*s`1HtzGvI7i4Z}!u`)u@t@j3{|lzoR;S*#a_ueIv|k1w&it)VQ9Y{g$&KZ2 z0ND;ID{Xk90iX0^Y6E)d-YOaZTeT!eP990zy3Py#o51|KHcVO^5ce8ZkD$QxD(Y*g zj9SR>{hN_%4d3dl)tWq3Et;kmsm=QI9S+>wN5qxYk5gb}RrMvulLy+o?Vk4OetT`e zR7QF_dfA6^Mc)zWWG2YnA*!a=g1KgcClM!*kiM(tyfuI? zW4_$8mF?_MKKeNkakgLvW)_LzieeA!5Kb+Cb?xLD8 zC}(fWtQ(xiqJjEq^-G?P6vjlZ<7oVWCrMgc)cRlfXCL5wwth6`m_-AksN^tkZx~5vbuERJ>vG}WxBqb%yEiaqh;O|}u7!EkX&Kz z%SD4`e(LJ>MR$IUUPZxS`>S46_x`KUq)FTBpoC6Va}e6eUq@}`Rfb&T*QWQp+)QPY zS+}}?EYR~bj{X`t_J=ul3h?YfPje_+0yc|zH+_%=cvtT0(ioV|#PAO!x?TzYDpi9P zAG!jA0As3o=P3dsHN2_M*o3+0U)jX35iIc63(xnAqX6L-4%w_Tru2IuucaunQbAk* za=PM~fO06pipAG)_}0vOR9_Ixm+?n;#@}85ag?%ro;p5l#l^#YJJ?F^ZV2Kk`$){q z=sr_{nd<4&JZ$!k5MSNNZ!>(z6!Yp<)5^RhWKq1-sZr}~0ByaO5Wl8%&;jt&h&#z= zNLrIV$O!wvse1IKy{>4w+YEzaD?OE`z1ylm4YA`&%iqH|)H&_EqIghyzLKU$-GI{L zB;Csxfr^rPmV6oeS9Vl1LpVA!ph3bl5}=1K!J4{Z>=Z5SG3Kz`p|jch0Aav44m}Wx zRL0?MXfld4%%~eMw{>C3+XZ3CW{FOZRu+YljS5;&*dLgd*fhAmxJAOSEktJ6s_eNd zQc&VfGJtJpAhm1!)#mFbMiP|hq+;<{1p7FI|A@Fx{-Z2Xc4s5m`s|$EwePDQD0m)O zBH9x9?k{t6JU7`1ZrrnSOR2#R)DxgPqe*@rY7-c2DcV@DYa9XXV5QC4-p*O~c2ew;W{R?T!6*G-{xrr2bWn| z2zZ=)#cZU!jynUH`$6jG$?+U@T}@70>RCL53TE$~{*qXZ9YnrkopFESoFH}pHSWX- z%FP_Sr%rKF>=88I7Tj)G^#kMAF?sZ(K8uE+1*`5xPe#5a>Q}kGP<39XuN1_P7rTt9ZFM1F&ri((K=fBHu7juEaz?mE78{=~R~RS8^1tIX`$ zNn1r~HFnUBG>oeY)M~)9%cy{1zi$#kfuV4EMTZ++DdfBsSxc4zFgw>EZ4p9W%a1kS zH3>th%O0#JoRSI!zLYV=29&=)l$Jg>u{61Y6&ATqA6%-GMSEEGGT<% z(nE)TIaOoiog2=9Ji8WhhO9biu3W@cNjul6|GJk^i&M=Fh;U2#8=H=UH+ z6o(>rKPh9$ykH>RD-h)@MwoCkvq&3z#+XnYt5Zw5{NedUgo*Xf$=y!|v3`q-yRJB> zc96`ORt{DVkM?yB1c{(v^}xzi<{fmZcw76Ua(#PJ@Ru#m-2gN_C7L^HjgI(D>!3Ibz&t^o8=uM zM9L&SFN)`&QHi9s8q5A_$;GqvhtO7%tj55WZ-3`58IYFb?8a6mo_!9IrD1D&#lP(c zX|lUosE<1fuLu_Wc;FnV!WJlFYnlQkz_448Nu*5DvmGs-+Yfs8!L~!;GBZ*oxBRm2 z(@*B%<-d#avpS3JUhq!yI%fr~y}Q!*^Gqg+moygIE427(#IQs>+<*Mi&L6g$<=UZOl-EY&bX58Y!uZHfAcrJbj7M!_62ebv(4J= zbo7_MPmh_TjD%N(X)p}r+?R5sN)mpiWt|j-toM&8kwEJ@QVFX0k?S{+_fTfU`TJ}Y z_^p?Q*-5U}6C5DdljqucV4qck^{|7;;lGo$%r)js`&n@m51)UqnmKx&kl9AxMWF*@unD6=%OTi5 zO9YNC4iVKRGvP2VKpNx!+m-y^I-&PMj9f?>tfeS@_ETn!pFow+jZPS5e``qa?N&PI z%ZCBjL}UIfCi_$S$3Xbp41|qHkL?wlwQ1QYtA_iRK*6K&!4AZ!K-D8Bv~=3`t;0S# zd^TLKTrzxePKC&qX)!oF+blu0Lnb{nzi|OSV4~`nzSlS`{)j)@1Y=A~&z4$cz9hfN zmwUMMLi8Fxs@K;yv_knWE(0?~b6g)N__wmnEtroXY&v?)-8{M9>7q!{mRfFtEi9PX zKj(5!la0VEiQ0Bb!e+>Rg7|$4WENEUDd#qtClLmbKI*rcHT4$`rD4G}!2hIP0=O1? zBGMzP8Uj)AU0KBJ0>lKG%t*wamzeqM{>f=ncg;6$+TFHe#}av26sh3sZjvuysmD9S zU&Zi@w3W&YLX9}fzjMK6a~l_6pS-fsy$-`+Gx(IvFNoCdA%>hJi_@ZVWNc|cHEySi z@1oB_uil!^W6t5%?NxF`hv~|4DV0*{N4xspy^KACK|NW|#s(4$hB4Ll^A=q;e@E1P zXJ`W$s5@%DSD>wt!b!TJkwdv{_=e-+qsXVa-zO;=Nq*J=Zh?r;Kx+m)CWT=jt?0yc zWJ}56<$)p?GatN$L?b9eI7SkRKR|PRj^bMy>iRX-%hIRDt4<$8^IBwV!ea?Jr5`>O zFt{6WonX@X6WgT@$Hug%sfGiU)wP?oV$%W`QlCEBxQC&^W0qd~-uq=DjE&gKt-}a& zuN{-d-nc*es>M>#3-(D`BU><0a$nX70D*u~a6Pe*4VANFl$=8TYO!L%W~YEoRF)n9&#ybi zSSO;!$cCgE`XA-NpmfnO-;k5*LTEOk> z<^NR=D5tvmIDCVsHJJYCV?-{P(F=NunA8isul&^!k;G4tKNL_;ar<9vorPCaVcYcw zkWfmxK}4isVCYt)MY_9&E@5bfp}VBJ8|m&w>4u@ZQ@TIi^{sb(@jm~;S?Ap6y7#sB z{?!5TQaEz6%rYZigF~^dT@wSpQ|0k^WHns=*pm z8^v|Y0iQX6fqjyg-`%6Om*+aa5uzu~78!CN)fpT1>}dq9v|qKCq9g0=CRL%?FA`8K zH=1&1Ljsr`GFe_vUmQ5VO9yLBcfd^INHiFj0{O0?Y>y~n;XJThQx4F=JPb|#aKgLx zb*bU(lJ5tXv(0aD{X)QR`b>7efl>nf8~7|OO-W<3>W6y6p!sW@KJuxs%zD?asnEW( zGzC-|&dKIj%by*1Vs97f9MB;re8ZxSp(WKgTAXI(D#jn`0i2D=Y2*E*zbZ26Y=Wt` zNp*e+!Uyj<#}V%BC`@t*6Nr(@2#%DT6qYu%#1fN-*W8YCwgU~rs$5ZPQjm$QJ4yi( zv`r$t;?Gz05h$)nT{oHoohGrEGzSR_39|!mf1y zc|OJUr-8`;K+#m0wDt(ZCsif<+A{;wC<%g9Y$9RsIOzD@Js1-imz>OXJORNx5MZ6r z&l=Jd=^dJ!^%0l?MD$~xC}!aV6ubtylR4n)HqR>~JsUKoM$XGAg;aLS2Gu~9)?JKU z&lqY4qw^yZJ}Aql!3&P0L4z_2^|@Fk67!wI-+y=|OuOG<&!{HfHkp@dj))bPktw%* zJgn`S$5|u28u-|M+=6&GF41Y2_iA}V7(eS`zOmh+ay0^%n4o5+=pC>PKqg!|I zx*-!7F7Urao9P7|1u>SR&X@d725eV0t|~n1endM(A1hU7-l+?e+u+dfy^O0Ff10=% z6X7W@Lv4TX7=)WCg`=n_)BXM6b#&zRIe}frAXm&((fRRoh~qc_iYE2@MlOQksG*i)_e(q-mUyLXHFF^N7ndP>yVRAU*glW5rA z%Px@){MOFKA_FXsP=u zId%~TyK4-uYOlzQkR8=Fn7`caA(s$t*Tg7=2NwQWbpgfPd;hKNdm(0=MtAVseTyC* zEE%mJw(jBLZ}~+r%P00L62iEr($db_$N!*JJR);_P+JNy;t4V4|A<63W~G>AoTNz} zT{$C}usrZXBW~!(lci-1pW?yEdAO7Dai#!$^0B>u9c7<5;FUHC;DiSwZ!yn`%C zTO5tl3!pD8Dgt^dF{4LSi_9JaTJT2Z`$U<+k>bKnyFq)(kGpjD%_cZ1esh6kIfUs? z^SRI`8Oly8gp?RM1JES<5R7Wgbyn-L`&{`LnJ}Z=uhyBQslf}z&2uxka{a}wF6Su{ z6)K4&kij?@+h-VSp(&U{1W2Jaw5LxHIQKB?=iM#*)XZ&M4a-AQ_k6=`1m z9N#s1w`r%hGIdQfY-wv@MF&t_#$L6Th9I*wrDSB71%m>u$>wkY zW7-|rm19DBn3MmPj=_rrVs4XPnxPaOdh%|suUHgsC((hNdX-%jwsh~&WAB9|4)HdA zqLWV=mCR(8Dd(mJJasmikOa^tymo1Kb7KFc(8WRUXdzAOpoSiSxO+b$Qg}lymg0Ss zNBr$DaIeTGsemsck|46W2H7?T^&8T{?{%Dto^mtR*IvZ!@=$E{wjPJg&_ z>hDt;qmzDC;TflRGyC5+Z9EuL#n2V82NTxq+at#Ud>{C|=XX-$uoqxKH^?e^QD`f& z)DR+T@~y;b`PX@6idYKf(1{N<@K@1Y!{PFCKVF3x z)g#KnC-1N?I)+EMB0R+MZKo|0PlxT#Ez=GwbVY|H6-r~;FH?Y_yBGKIUZdB@97|)y zLPeXn89_dRk>r?;!BTv#&9%jV6kA}MYBSviM@B3$V>BkCO3(*$s+=z+4o3= zK~*@Jf1c~1{L@_DMwW#$V)JnAJnkr9P0TYBqw9jahP1Dy%k$&hRXfrTeJxjU(wLVM zHLO{7I!=7QlNneKU@xfaK_B( zwXB6|f197Frm}vOEP6>5^fT$I2z_O-|I+|sut91N-5-w|F4(XXOMgGGtbFY`&w@z7 zVqT<4iq{+njRaYK@i1=EA3$fM32{#K8a1Vvxn#jp4@6`xh~#>x_UEdMH$};VRq+$j zvb7OV&=kXn@y)>n%)EqL^i{b&A;Ku8U2A@wkb2e&E36%CBa)Td%h=1a7$m6blHf$Z zD~pHCvZ+jaWhU%e{7PbeLex>VrKj@SRS^ZqfU^O3n^KKlcnYqRG6@?PsoRowTD)3Y z=A7PS{wYgk;VjSSi_DL9!gG??WQNG;2-WMeNMQH7*ITwwyExy>?cFu*d1sjSX*V7;LiN6Oq2@vT zUFC@UH74$BZO?vhX#0s2(NBIAb?J3Y2*x}9EYk%DUMiiPC%AzDAPxf$FAyN)YQ70K z02*vsjb>qtAp@PHmrr5Z$6h4v_vTa-$I_Lh2c%GN+TAI`H7S53R1L_xFR0xONQ736 zI1`ElDWR;%Y=G!aJ=2VYB5~BO6;jbP&{IioP7=~1*IyYer`Tp*2KJ zeck<~OfDxL$OGCDyJ=?Mh)0SrczVy(%Q=qyXVOfW(!$ew6yDdlPcd6e8DNOGW@5N? zil(K`+0^qCSkH*G1sd(LaY>5m_5x>fxNzX^Ug)}t<#Px#xaVTh93Z;h+ z`R6R}>!~rrJyvnEmMiOtW7TTOOeiWy<`!N87K0EDCx6&IVJP~KguCB~_c_`=$AOAG zBa!lISD(m?6*jKTFe$ppGf7UC@Q&V*!9dT|!r?!A(SteWV~Es|vCSR}UP&J{uh#A*GKFy>4J93Y%6%!ywDJ z&E_yPvhC2{bjcs(KMr;R0)wEoRWI{+90rclq{9}c=ou%O4J`{rQO8gHEO#1rXWR#i z4zAfFip*EPAV)80>#A(DT5H6lI3B%!MV<{D@IuCzA)&GZZA3~Lu0=V`6ZuJUPo&5i-UH@C)c)iesSc+ER2K!|E%K6=8lb_?gB+Kmy#rG!> z^fjM@_tO^fdohng@_z2f&myX_)5u8|v}%3$l}t??86}W{-!!5ITQfh-(?Rktp3OxO zWvyG=N9;>L2oVNw4jH*?kx|%da^!@+chzTOjYKu?cL)bYPfbnHc&I2J_8K^WJaKQx zUHeC#CO5IC+E-ZnOVax6@EhlPEhYj`DlRkxmBPUt;vP2u?sa4ouJNUzux+i%q_=aw z-s<%ZvNI!BN`X>toLp{wqnfePCDKNeCZTi3{vK(2)=cF&gnz!yYP^{Ph)xHC6U<%w zb?EOeR^&sb!mop{skoPKpZo_&{wUhk{Oxav?R(d_jX&X_O)GEbp%FEJaxd{1D{jC1 zV-j)Y@3Tfj$_R_`>U58qC|(}ZT4(~%Y`{d?h=c`#$XK+cUL(=EdEw_K@X1F@ zYo~b!Z1M%!Ln>Xnf9viplj3ZJKTyzl)Z@s^Asj88I@8d!`^*JV?Q;H1er_R#WrC{d z+aRO0FL@$U5s-nx8UR zW|97#m)$pwByi9BK50Xj1BMlBfpCBz7m`-S%~3X1qK`(GH5h0026(S}QpF`of85_3 z@xyr({R))P)S*Hp&RWb;$pnG4f?r`@vk3fApEyLaur@BghHil5Q*Hij6*5uf|7Gh? zaxT6~ph~R`mpd|XrposjK{aRdAlTn=rliiF7LrY=U^1^|6Q-JIF^u{!S0O_Ds>%Fc%f4M{ zqeSgU)nmNjJ26fh`@WxqLG45-uA?pin=N4m7(;ERMYcfO7aSi7rTS_hs+89$;c7*H zkwROKf}~$X{Ph$0hMW2~5#{ae$Lq>fc?-xGt^C3s%SQjh+YHmjhXJbA52BwW1Ywr0 z>rxKsJx`k485>r$fg(_^zc&Gy57tv`W3kaRvjHgGA6mVo2~^n+LV2eT7vY^|l3lPL zJ0w$k$Y-w^#?^1E>~=zI5%aHxtxnN&CFZTx=8AQm){60Tj^_L}?d8XDBf6EARQ47B zd*OtF^+Vxr**9MCUr(Pxd&+kZFFJfx(CU3qekfu7S#tlS2epU)2VV#xW-tl>e_ehF zRkq!w6rNsyaZdMp3lEtvZL3LpduMb+tQ!@^%IJ-CYW~?!s_cl1=Bsw+1;pw69Z4td z;~ndF2mxVvQ6vIICUWFQ2#orS`4t3^sX_mpDFKa;xXrik3(~iOH1R&Pmax8VNKvm_ z!QeY%Bx9@9cCT8)9+ZXGwFrrsp8ceUARLux0PT?YNdNU$8$F>DXGIiS^b!+v%7tN; zC;sNoMWk0#dFxMIR`iC+Sv#huDmjEJb^#m=3J2QdiIH#!(+q|d#EG{YQF}7-M<3=+ z_1}ns*{N3g7G0t_w zG`PURB!CSWUicq?rnZ2Sy|i>#4CqAe2xNDg1WSnujQ}jyMRZp>_VBjt{OhYm1korf zf@{L8iNHV<{^Q!Iy|is6o%E~<@_~c^bDrPOSArz0c~8He=$abQ|LQCUDiBr7jgp3! z^6o?h)ZxyIpyGcC0)^4&Dd{#LaTs^$5s%=YI1SA-zqIH(wOjaQuKuv%uy~!k+@D=t zI}9a_L!KE?gaQcOe%?5V>ImXLeMm3X-~@6+TuGxbv6yK#Eu>qfeW`d4`iNPYJiw)MS1@gCB5|RYtAhGAIajFhkbYqU%IWiaeHU=%wUp!IqC-pijwbfAjC4P#rUMf8YX1 zu#vqA8E4Y>E1FHNG9&$N-cF{ZL{9UvWpE4R&K)qUM*p7NHXqrOpx^m=%^_4fi-~jD z%_R$a^`>(1?(EwiUvQ7?qvPOh)1KbVdy2d3M05L7+ZP#VlabUqLW-j5fE7yR3gl`o zbVJ!=br}i(pY}^Gr>tVxQqn z7jep7{W7+7JkSr&|Lz}Q@VVinPJco;=sQ{=)%~5vxj#g-m?8AHqA|@yCSLjNnnYw)?A!g$VUYS#{4oRmjQ;Iji>eD z?XjEVny&?vBHVc&2Y3W@#UuZ}*0ujVLjgZy0y=v#QT!iCKMJeGocT6L1uwfsivJ^A z143jG#*O#)UL4cO{R;Ko76%Yue#^~38GI)T`+@D&`x#G^0R3#{YNb5r*h<|Y`)%V0 zp~3sAlYd8gT49-C=180uMpaTyzkogO&|yk}EU<*^I3!?&F;O=l#o>GJv5?bVwDjS9 z{v_hbXV+}CQFyPX8U{&6y}g}Vg%M{imd*(DDWuN!yYiOd1l~t4bdC51^lX%+nj?YN znQCf&w=lkHhUSTHp{EKdU`8-WrpbUW1?@v}B?g7&Fm%Ex$TaZ6#xUW;{1>5U7!%eV z3=h6JP-NGWYs;f4uVWq(#@x(mG@=Fs(uBD!5c_)IEoU1W`VW11W8N>kB$fEs9|04lez%l3|FK{UFuvztFrdDp9dwL1S@s3#q z9=@jBgj6WCLGshV#u3Im%c4Of_F-5Flw%E`SU34hq<3XyQIi1?$k8NE_1GAwpJLd2 zlk%c#BgVp=OzxPiWkU5-=px(p8>e@-M6Xj0 zU&0ZR6NR}0hR$HZ7`Pxa4&d@mu?}T;I*lK8J9GqX@HqCXeekj?c*=Z16W4Q0S!{gZ ziAtW&Z>mJ99*BEbn%LmX#cNCmtit`)vd>NO7`rFiC<-F3(QAMg(G4qB>Tgy!!<-wh zDVrhb`=7hYovE98hRy5Q*7nLsV|iw&lJOMv{WfXpsFvE6_pCOD)Fvm$+Qk9R+IGzj zd7s5iU(d3(#3KK5HUx%!Pw3wdhsdGy=_m z8vqMHDm5T^9g}A4^rw{NG8Vs6Wf%w7@R^`DiFm^3$4Z5UhD&Tm4{M#kR5ih^JH4<0 zBA^o92r5Ox()F@gY1KOE7?1T5!e13*N6tt}hpjfF0=IrnO_0YDW55S&Sfk@#nVn6MM@Puiv(N=%@AO2Hg{B$8T< zloG-S@3AG<+s}>xH>s`_I4*ZVsMRW9AuiQ~01F2>60hfQ_Y#9;L>Nj9347{*RprOs zE1hLV)y#2*zyj`wHlfSm425tF8t&Ep!P}2xH#4TfrSF;V#E^3-8s?%!GZYaB&x!p!IkYN2hS zv?=w4&3&X{=g5z=HeEs^F7w$*;UCCnI!K@k^h@gYEv=NmeDyF+s9hc*r#Q|w7S2_d zDY$$(@6SA0@6)YJUM%t@tX@Zh75uf>C6N@tK}oqt27=Pk1H5ZrIyrawd}Vh9)H;$F z6PXLeFj}RoH)K-?$CpTIMjn9|x>Pxur+4&z#*viwnL6@|E06D1m5+9fALEQcVrw~< z`ad9|e`@H6=DWpDYP{Tif{^w&+Z;L=xLD)qh<4s(eiqLPT*F>y6Yd-iH3{vGsKf6# z;(5$am|A-mV+Xwb8(iv*OLm>oIRA&K z!>EpxF^|Bp_OWianRT)Y1$B*CUgtI$JcTlRIUkNVu47`NuvbS<+fOc@OmjrucD@J> z7t;@XYklZk;nfK%rQu}3{|ni#Ql{t166gdQCgm2rgmrLu?{C_~t-GWJqYTp8oh2WC ze%o-Pi9Tz{%%euI)5%~}?xbteuyT)w;zPd0dcH_!{-OW8kYu>beMlU?!I5F-JFzO4 zOU;)gh!FE!lm{j@YJ6CNl9No=8tN`zV-$R3!S9_$enN!DW5%L6P~SSwf0ufx^CBcN zhMA~;u_T{qcx9ZDuDphk|NN8RuREtDz{pA1+qSPfvuJNx7OwcO*-y4xj0_5mHMrvJ z#Bq@Jt~hIL3PTF5IVA2T^t7Bj!JK$(BtVrvSok{*?5!55%inM!<1zo1-n9Qcd&IA6 zc&*EC81!hIBpu4q6x<%hlX?(R2Bd6j10YVM4+P0ZJ@luKJ}!RbL|1rK?+zl=l#%^* zH+-qe_Y3FxEq-_{HF5P6;&ajxmm`=bu)*x}06$XSJ;rYCVr65a{Ekdvq!E;$@M29- zlB3d96Tjkaebc#W;=~@2Xs63RF^8TT9WMncW>YvKhgD6r>y_k-F=z_-G7^8^d)n z`T3c0muz+=LJ!NxgixotGo}g)5X?>y*^JJx@bvx+_TcLK>sG%l{aWqWprKH8{IxLi zP}`I_nOYBkiOJhp=t0$#y;`>o36~}tA{YRSqo@ad6k?GyAKGE5wL29)XkeyiX7+_Q zdEWgjmhiYap&+oHMIZMIdBbMJKNL|{hh-lyD#Maw2_#|t{BqSQyJUPgKZ3ZC4Fu&8 zV*D0x0tB;u$O%VZ8ui3|D&FwW)!qe8;|(Vr)wuf~8UaS$ddNxFoq4R6HQ81ywz9|P z=k+$Z{uOo8`yeN@4tyNv9145hukTLsla#?DQog?e5l@7+a}{HQ@WM{ z(QSgSJ)`aTV9YcY+Zzf15&XTr(buJ8Ve*4OGzmP{7g*H^o_%VeDEh|Gsjlh}+wG5< zN`gY5tBdsqiBLci-T5#89?^_bC(0JUZsi$k6c`EPd>ttJi%5cI>Aw!X!PvW~>;d53 zhcu3I+kS28#*`QOB9z@|Sn$J`=XPq4Pr{DdA_Xh%9P}Hmmlk#*`*OzQbe)Y<@I!=c za&@pu!A>m@J#kFiWU%*r{z+??`K(!oF|2^NMMLi2y2#$+m`;kYTAe^78_K+9dn$m%bxpGLBL9Q0jB0u~(i_ zI8_o*{1mP+eHDt5(V`iN?bO1|3(WHHz_)@U24_oS1xMcBv7)0PsF+k*o;5^~-7L|U zHf}jFBBo&1kwhP!o;+ZNMtGh-4t>&Wt=q&ni5E92OJ1=j@YDN?;guVY9`KJ>j@$Mf+8ALtTS|e7qA>&^ z%a%-PVukxUdTQp_x741R71t`Q-?7UVu_d_!0WauUF-3?e7*-gr(eH;b_`30tt!MxA zeup1sD^jfGo|5`o*S{s%SgN_2mrD@C z*`vYI-l@7F*U)9yLB0;76_UU*OY8U=MM%d)FShxt4N7t{W^ttCJCrEFNc)w#G@kfl z*MA4X)cC&KMPk|xnGw8KhTPL(A#KKAoWJP_-ysNSe)Lw<^U4g|VP=Sv19E+Y zm0^P1THn0h08QpZ&+yZZXg)MP|Az?Em@i7GXo(W67IETdOp%8Q>_<166X-?et>I$Y z-ntBn=%KhCxtO1ctWB@)T}#E2;Ty{LJ&f@Mi@E+e{=ou!cFV4DcE zA5a8}V{8xXHMUCLw&;2VoXM~pcs$UGY+@sGDqpPReD417uX!5n!SWVU zf~0`8cc6lc??G@heV1sM8+-`dppS_mF2QmCAo0DT<*fio#SMKab3clw-BSnse{z zqdBXu)^)N)(V0JJv}NP6@?Ge7#OZF-My1P<-w4fnXAFBHee8%^vMZ@=l;hnHb6E0S zCw_Vh4D5ZTO#YJiWpUi(pncQ(?U4@P!(BPT!gPE=oeh@MTiD%i^ml8tOYxzXXxMU1 z0r4EkHJvNyAXh8~0Y@MF#H9mCRTx;8gdH{n-xlhvOi|A?5)GdRqYU5&GubrXzgph) zBTuzm^buh1U0MRq&AWQZkxt$NLW!}3UUqvE`W)ywZsNsRb6t)Fq!OPG3R&kbH%R0z zL*2r*$NRJoakV$dgUBq4jNBX|HKaJ*+FDbyUPz=@=#R9Z!}n2nc$0!^J#eLaqGZENz&0g(oQ z1Ic&HtoaX_!dsQ)B<5k7JwDZ@HGH~_RFeZz+9c|ReR&tNM1-JDFxuas_|SM${u+G9!76V$*`)%0u#Pka>|)g^&pkjzk9WPo7xe$J zO<%aY>_4{ctQH-r>KC*(Ji-e6)oVZpj3q5O044Rlw5lwU6HIkos~<>@V;Le(RJ6$> zOF=i(V?4m-_sOd2KQ3O=pwXmmjW2EK$Z8O$pSdbr+QeI`tQy}<2MsVge{OVA9vti@ zos)mgKIZ8FLg0V7Cp-rfN*^)Voacw>&)K;{D$P(|w;dDfA3xbKYgb5yt3d;?A(&0; z$n}s~zUAOAfR3b}xC>poty`%Gtvc-g4u)zxJV}91-?XY(iH~?*hWKch` zEIa*mu4fG7-XXaYmRj!k`4oIKy=`w(e)a zHDbv7$`mmxZF^e(HGa@{F61kidK(&5lU;VbVjJKsO)mnw-FSIEDh>#UT~Wo}sUxuvD(F3`@AdLA;dld=} z0y6zd4#UL6bh;k|VRkYbd}6IAE)D^YW!RMCuWbcllF9gv@T*;l_9G}DS4L=TB4b7d z-*?{Qe7GaHK<~VsK~Iz>xTgiNQ>RR%saDxscv2|_A}fuwZU*%p=c?qa)|4b~GzJ

CvX^?SFK2CGtw@Tki?(x132l0U59fMb>& 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 X%B8h@;;vZ7XIdC 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 JoS{L6tfS0>7^AidGbVn*QH~~ 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 yB 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 P@KRUSQYyM*{_1}Ke7SX4 diff --git a/agents/requirements.txt b/agents/requirements.txt deleted file mode 100644 index bf1790ba..00000000 --- a/agents/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ --e git://github.com/tensorflow/agents.git@459c4f88ece996eac3489e6e97a6ee0b30bdd6b3#egg=agents -pybullet==1.7.5 -gym==0.9.4 -tensorflow==1.4.1 -google-cloud-storage==1.7.0 diff --git a/agents/trainer/__init__.py b/agents/trainer/__init__.py deleted file mode 100644 index 8ee3e1e5..00000000 --- a/agents/trainer/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2017 The TensorFlow Agents Authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Proximal Policy Optimization algorithm.""" - -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function diff --git a/agents/trainer/task.py b/agents/trainer/task.py deleted file mode 100644 index 35afea96..00000000 --- a/agents/trainer/task.py +++ /dev/null @@ -1,320 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Provides an entrypoint for the training and rendering tasks. - -Usage: python -m trainer.task [options] - -""" - -from __future__ import absolute_import, division, print_function - -import datetime -import logging -import os -import pprint -import uuid -import shutil - -from google.cloud import storage -import tensorflow as tf - -#pylint: disable=unused-import -import pybullet_envs - -import agents - - -flags = tf.app.flags - -flags.DEFINE_string("run_mode", "train", - "Run mode, one of [train, render, train_and_render].") -flags.DEFINE_string("logdir", '/tmp/test', - "The base directory in which to write logs and " - "checkpoints.") -flags.DEFINE_string("hparam_set_id", "pybullet_kuka_ff", - "The name of the config object to be used to parameterize " - "the run.") -flags.DEFINE_string("run_base_tag", - datetime.datetime.now().strftime('%Y%m%dT%H%M%S'), - "Base tag to prepend to logs dir folder name. Defaults " - "to timestamp.") -flags.DEFINE_boolean("env_processes", True, - "Step environments in separate processes to circumvent " - "the GIL.") -flags.DEFINE_integer("num_gpus", 0, - "Total number of gpus for each machine." - "If you don't use GPU, please set it to '0'") -flags.DEFINE_integer("save_checkpoint_secs", 600, - "Number of seconds between checkpoint save.") -flags.DEFINE_boolean("log_device_placement", False, - "Whether to output logs listing the devices on which " - "variables are placed.") -flags.DEFINE_boolean("debug", True, - "Run in debug mode.") - -# Render -flags.DEFINE_integer("render_secs", 600, - "Number of seconds between triggering render jobs.") -flags.DEFINE_string("render_out_dir", None, - "The path to which to copy generated renders.") - -# Algorithm -flags.DEFINE_string("algorithm", "agents.ppo.PPOAlgorithm", - "The name of the algorithm to use.") -flags.DEFINE_integer("num_agents", 30, - "The number of agents to use.") -flags.DEFINE_integer("eval_episodes", 25, - "The number of eval episodes to use.") -flags.DEFINE_string("env", "AntBulletEnv-v0", - "The gym / bullet simulation environment to use.") -flags.DEFINE_integer("max_length", 1000, - "The maximum length of an episode.") -flags.DEFINE_integer("steps", 10000000, - "The number of steps.") - -# Network -flags.DEFINE_string("network", "agents.scripts.networks.feed_forward_gaussian", - "The registered network name to use for policy and value.") -flags.DEFINE_float("init_mean_factor", 0.1, - "") -flags.DEFINE_float("init_std", 0.35, - "") - -# Optimization -flags.DEFINE_float("learning_rate", 1e-4, - "The learning rate of the optimizer.") -flags.DEFINE_string("optimizer", "tensorflow.train.AdamOptimizer", - "The import path of the optimizer to use.") -flags.DEFINE_integer("update_epochs", 25, - "The number of update epochs.") -flags.DEFINE_integer("update_every", 60, - "The update frequency.") - -# Losses -flags.DEFINE_float("discount", 0.995, - "The discount.") -flags.DEFINE_float("kl_target", 1e-2, - "the KL target.") -flags.DEFINE_integer("kl_cutoff_factor", 2, - "The KL cutoff factor.") -flags.DEFINE_integer("kl_cutoff_coef", 1000, - "The KL cutoff coefficient.") -flags.DEFINE_integer("kl_init_penalty", 1, - "The initial KL penalty?.") - -FLAGS = flags.FLAGS - - -hparams_base = { - - # General - "algorithm": agents.ppo.PPOAlgorithm, - "num_agents": 30, - "eval_episodes": 30, - "use_gpu": False, - - # Environment - "env": 'KukaBulletEnv-v0', - "normalize_ranges": True, - "max_length": 1000, - - # Network - "network": agents.scripts.networks.feed_forward_gaussian, - "weight_summaries": dict( - all=r'.*', policy=r'.*/policy/.*', value=r'.*/value/.*'), - "policy_layers": (200, 100), - "value_layers": (200, 100), - "init_output_factor": 0.1, - "init_logstd": -1, - "init_std": 0.35, - - # Optimization - "update_every": 60, - "update_epochs": 25, - "optimizer": tf.train.AdamOptimizer, - "learning_rate": 1e-4, - "steps": 3e7, # 30M - - # Losses - "discount": 0.995, - "kl_target": 1e-2, - "kl_cutoff_factor": 2, - "kl_cutoff_coef": 1000, - "kl_init_penalty": 1, -} - - -def _object_import_from_string(name): - """Import and return an object from a string import path. - - Args: - name (str): A string import path - (e.g. "tf.train.AdamOptimizer") - - Returns: - obj: The imported Python object - - """ - components = name.split('.') - mod = __import__(components[0]) - for comp in components[1:]: - mod = getattr(mod, comp) - return mod - - -def _realize_import_attrs(d, hparam_filter): - """Import objects from string paths in dict if in `hparam_filter`. - - Notes: - The following call with an optimizer object referenced as a str: - _realize_import_attrs( - {"optimizer":"tf.train.AdamOptimizer"}, - ["optimizer"]) - returns {"optimizer": tf.train.AdamOptimizer} - - This is part of an experiment on how to make all hyperparameters - configurable, including python objects, towards more flexible - tuning. - - """ - for k, v in d.items(): - if k in hparam_filter: - imported = _object_import_from_string(v) - # TODO: Provide an appropriately informative error if the import fails - # except ImportError as e: - # msg = ("Failed to realize import path %s." % v) - # raise e - d[k] = imported - return d - - -def _get_agents_configuration(log_dir=None): - """Load hyperparameter config. - - Args: - log_dir (str): The directory in which to search for a - tensorflow/agents config file. - - Returns: - dict: A dictionary storing the hyperparameter config. - for this run. - - """ - try: - # Try to resume training. - hparams = agents.scripts.utility.load_config(log_dir) - except IOError: - - hparams = hparams_base - - # -------- - # Experimental - for k, v in FLAGS.__dict__['__flags'].items(): - hparams[k] = v - hparams = _realize_import_attrs( - hparams, ["network", "algorithm", "optimizer"]) - # -------- - - hparams = agents.tools.AttrDict(hparams) - hparams = agents.scripts.utility.save_config(hparams, log_dir) - - pprint.pprint(hparams) - return hparams - - -def gcs_upload(local_dir, gcs_out_dir): - """Upload the contents of a local directory to a specific GCS path. - - Args: - local_dir (str): The local directory containing files to upload. - gcs_out_dir (str): The target Google Cloud Storage directory path. - - Raises: - ValueError: If `gcs_out_dir` does not start with "gs://". - - """ - - # Get a list of all files in the local_dir - local_files = [f for f in os.listdir( - local_dir) if os.path.isfile(os.path.join(local_dir, f))] - tf.logging.info("Preparing local files for upload:\n %s" % local_files) - - # Initialize the GCS API client - storage_client = storage.Client() - - # Raise an error if the target directory cannot be a GCS path - if not gcs_out_dir.startswith("gs://"): - raise ValueError( - "gcs_upload expected gcs_out_dir argument to start with gs://, saw %s" % gcs_out_dir) - - # TODO: Detect and handle case where a GCS path has been provdied - # corresponding to a bucket that does not exist or for which the user does - # not have permissions. - - # Obtain the bucket path from the total path - bucket_path = gcs_out_dir.split('/')[2] - bucket = storage_client.get_bucket(bucket_path) - - # Construct a target upload path that excludes the initial gs://bucket-name - blob_base_path = '/'.join(gcs_out_dir.split('/')[3:]) - - # For each local file *name* in the list of local file names - for local_filename in local_files: - - # Construct the target and local *paths* - blob_path = os.path.join(blob_base_path, local_filename) - blob = bucket.blob(blob_path) - local_file_path = os.path.join(local_dir, local_filename) - - # Perform the upload operation - blob.upload_from_filename(local_file_path) - - -def main(_): - """Configures run and initiates either training or rendering.""" - - tf.logging.set_verbosity(tf.logging.INFO) - - if FLAGS.debug: - tf.logging.set_verbosity(tf.logging.DEBUG) - - log_dir = FLAGS.logdir - - agents_config = _get_agents_configuration(log_dir) - - if FLAGS.run_mode == 'train': - for score in agents.scripts.train.train(agents_config, env_processes=True): - logging.info('Score %s.', score) - if FLAGS.run_mode == 'render': - now = datetime.datetime.now() - subdir = now.strftime("%m%d-%H%M") + "-" + uuid.uuid4().hex[0:4] - render_tmp_dir = "/tmp/agents-render/" - os.system('mkdir -p %s' % render_tmp_dir) - agents.scripts.visualize.visualize( - logdir=FLAGS.logdir, outdir=render_tmp_dir, num_agents=1, num_episodes=1, - checkpoint=None, env_processes=True) - render_out_dir = FLAGS.render_out_dir - # Unless a render out dir is specified explicitly upload to a unique subdir - # of the log dir with the parent render/ - if render_out_dir is None: - render_out_dir = os.path.join(FLAGS.logdir, "render", subdir) - if render_out_dir.startswith("gs://"): - gcs_upload(render_tmp_dir, render_out_dir) - else: - shutil.copytree(render_tmp_dir, render_out_dir) - - return True - - -if __name__ == '__main__': - tf.app.run()

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