@pulumi/kubernetes
Version:
[](https://travis-ci.com/pulumi/pulumi-kubernetes) [](https://slack.pulumi.com) [![NPM
1,016 lines • 70.4 kB
JavaScript
"use strict";
// Copyright 2016-2022, Pulumi Corporation.
//
// 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.
Object.defineProperty(exports, "__esModule", { value: true });
exports.parse = exports.skipAwait = exports.getInvokeOpts = exports.getChildOpts = exports.ConfigFile = exports.ConfigGroup = exports.CollectionComponentResource = void 0;
// *** WARNING: this file was generated by pulumigen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
const pulumi = require("@pulumi/pulumi");
const fs = require("fs");
const glob = require("glob");
const admissionregistration = require("../admissionregistration");
const apiextensions = require("../apiextensions");
const apiregistration = require("../apiregistration");
const apps = require("../apps");
const auditregistration = require("../auditregistration");
const autoscaling = require("../autoscaling");
const batch = require("../batch");
const certificates = require("../certificates");
const coordination = require("../coordination");
const core = require("../core");
const discovery = require("../discovery");
const events = require("../events");
const extensions = require("../extensions");
const flowcontrol = require("../flowcontrol");
const meta = require("../meta");
const networking = require("../networking");
const node = require("../node");
const policy = require("../policy");
const rbac = require("../rbac");
const resource = require("../resource");
const scheduling = require("../scheduling");
const settings = require("../settings");
const storage = require("../storage");
const storagemigration = require("../storagemigration");
const utilities_1 = require("../utilities");
class CollectionComponentResource extends pulumi.ComponentResource {
constructor(resourceType, name, config, opts) {
super(resourceType, name, config, opts);
}
getResource(groupVersionKind, namespaceOrName, name) {
return this.getResourceImpl(groupVersionKind, namespaceOrName, name);
}
getResourceProperty(groupVersionKind, namespaceOrName, nameOrProperty, property) {
const name = property !== undefined ? nameOrProperty : undefined;
return this.getResourceImpl(groupVersionKind, namespaceOrName, name)
.apply(r => r[property || nameOrProperty]);
}
getCustomResource(groupVersionKind, namespaceOrName, name) {
return this.getResourceImpl(groupVersionKind, namespaceOrName, name);
}
getResourceImpl(groupVersionKind, namespaceOrName, name) {
// `id` will either be `${name}` or `${namespace}/${name}`.
let id = namespaceOrName;
if (name !== undefined) {
id = `${namespaceOrName}/${name}`;
}
return this.resources.apply(r => r[`${groupVersionKind}::${id}`]);
}
}
exports.CollectionComponentResource = CollectionComponentResource;
/**
* ConfigGroup creates a set of Kubernetes resources from Kubernetes YAML text. The YAML text
* may be supplied using any of the following `ConfigGroupOpts`:
*
* 1. Using a filename or a list of filenames:
* a. `{files: "foo.yaml"}`
* b. `{files: ["foo.yaml", "bar.yaml"]}`
* 2. Using a file pattern or a list of file patterns:
* a. `{files: "*.yaml"}`
* b. `{files: ["foo/*.yaml", "bar/*.yaml"]}`
* 3. Using a literal string containing YAML, or a list of such strings:
* a. `{yaml: "(LITERAL YAML HERE)"}`
* b. `{yaml: ["(LITERAL YAML HERE)", "(MORE YAML)"]}`
* 4. Any combination of files, patterns, or YAML strings:
* a. `{files: "foo.yaml", yaml: "(LITERAL YAML HERE)"}`
*
* ## Example Usage
* ### Local File
*
* ```typescript
* import * as k8s from "@pulumi/kubernetes";
*
* const example = new k8s.yaml.ConfigGroup("example", {
* files: "foo.yaml",
* });
* ```
* ### Multiple Local Files
*
* ```typescript
* import * as k8s from "@pulumi/kubernetes";
*
* const example = new k8s.yaml.ConfigGroup("example", {
* files: ["foo.yaml", "bar.yaml"],
* });
* ```
* ### Local File Pattern
*
* ```typescript
* import * as k8s from "@pulumi/kubernetes";
*
* const example = new k8s.yaml.ConfigGroup("example", {
* files: "yaml/*.yaml",
* });
* ```
* ### Multiple Local File Patterns
*
* ```typescript
* import * as k8s from "@pulumi/kubernetes";
*
* const example = new k8s.yaml.ConfigGroup("example", {
* files: ["foo/*.yaml", "bar/*.yaml"],
* });
* ```
* ### Literal YAML String
*
* ```typescript
* import * as k8s from "@pulumi/kubernetes";
*
* const example = new k8s.yaml.ConfigGroup("example", {
* yaml: `
* apiVersion: v1
* kind: Namespace
* metadata:
* name: foo
* `,
* })
* ```
* ### YAML with Transformations
*
* ```typescript
* import * as k8s from "@pulumi/kubernetes";
*
* const example = new k8s.yaml.ConfigGroup("example", {
* files: "foo.yaml",
* transformations: [
* // Make every service private to the cluster, i.e., turn all services into ClusterIP instead of LoadBalancer.
* (obj: any, opts: pulumi.CustomResourceOptions) => {
* if (obj.kind === "Service" && obj.apiVersion === "v1") {
* if (obj.spec && obj.spec.type && obj.spec.type === "LoadBalancer") {
* obj.spec.type = "ClusterIP";
* }
* }
* },
*
* // Set a resource alias for a previous name.
* (obj: any, opts: pulumi.CustomResourceOptions) => {
* if (obj.kind === "Deployment") {
* opts.aliases = [{ name: "oldName" }]
* },
*
* // Omit a resource from the Chart by transforming the specified resource definition to an empty List.
* (obj: any, opts: pulumi.CustomResourceOptions) => {
* if (obj.kind === "Pod" && obj.metadata.name === "test") {
* obj.apiVersion = "v1"
* obj.kind = "List"
* },
* ],
* });
* ```
*/
class ConfigGroup extends CollectionComponentResource {
/**
* Create a ConfigGroup resource with the given unique name, arguments, and options.
*
* @param name The _unique_ name of the resource.
* @param config The arguments to use to populate this resource's properties.
* @param opts A bag of options that control this resource's behavior.
*/
constructor(name, config, opts) {
super("kubernetes:yaml:ConfigGroup", name, config, opts);
const childOpts = getChildOpts(this, opts);
this.resources = parse(config, childOpts);
}
}
exports.ConfigGroup = ConfigGroup;
/**
* ConfigFile creates a set of Kubernetes resources from Kubernetes YAML file. If `config.name`
* is not specified, `ConfigFile` assumes the argument `name` is the filename.
*
* ## Example Usage
* ### Local File
*
* ```typescript
* import * as k8s from "@pulumi/kubernetes";
*
* const example = new k8s.yaml.ConfigFile("example", {
* file: "foo.yaml",
* });
* ```
* ### YAML with Transformations
*
* ```typescript
* import * as k8s from "@pulumi/kubernetes";
*
* const example = new k8s.yaml.ConfigFile("example", {
* file: "foo.yaml",
* transformations: [
* // Make every service private to the cluster, i.e., turn all services into ClusterIP instead of LoadBalancer.
* (obj: any, opts: pulumi.CustomResourceOptions) => {
* if (obj.kind === "Service" && obj.apiVersion === "v1") {
* if (obj.spec && obj.spec.type && obj.spec.type === "LoadBalancer") {
* obj.spec.type = "ClusterIP";
* }
* }
* },
*
* // Set a resource alias for a previous name.
* (obj: any, opts: pulumi.CustomResourceOptions) => {
* if (obj.kind === "Deployment") {
* opts.aliases = [{name: "oldName"}]
* }
* },
*
* // Omit a resource from the Chart by transforming the specified resource definition to an empty List.
* (obj: any, opts: pulumi.CustomResourceOptions) => {
* if (obj.kind === "Pod" && obj.metadata.name === "test") {
* obj.apiVersion = "v1"
* obj.kind = "List"
* }
* },
* ],
* });
* ```
*/
class ConfigFile extends CollectionComponentResource {
/**
* Create a ConfigFile resource with the given unique name, arguments, and options.
*
* @param name The _unique_ name of the resource.
* @param config The arguments to use to populate this resource's properties.
* @param opts A bag of options that control this resource's behavior.
*/
constructor(name, config, opts) {
var _a;
if (config && config.resourcePrefix !== undefined) {
name = `${config.resourcePrefix}-${name}`;
}
super("kubernetes:yaml:ConfigFile", name, config, opts);
const fileId = config && config.file || name;
let text;
if (isUrl(fileId)) {
text = fetch(fileId).then(r => {
if (r.ok) {
return r.text();
}
else {
throw Error(`Error fetching YAML file '${fileId}': ${r.status} ${r.statusText}`);
}
});
}
else {
text = Promise.resolve(fs.readFileSync(fileId).toString());
}
const transformations = (_a = config === null || config === void 0 ? void 0 : config.transformations) !== null && _a !== void 0 ? _a : [];
if (config === null || config === void 0 ? void 0 : config.skipAwait) {
transformations.push(skipAwait);
}
const childOpts = getChildOpts(this, opts);
this.resources = pulumi.output(text.then(t => {
try {
const parsed = parseYamlDocument({
objs: yamlLoadAll(t, childOpts),
transformations,
resourcePrefix: config && config.resourcePrefix || undefined
}, childOpts);
// If the provider is not fully initialized, the engine skips invoking on the provider and returns an
// empty result. This may change based on how https://github.com/pulumi/pulumi/issues/10209 is addressed.
parsed.apply(p => {
if ((opts === null || opts === void 0 ? void 0 : opts.provider) !== undefined && (Object.entries(p).length == 0)) {
pulumi.log.info("Can't decode yaml config when provider is not fully initialized. " +
"This can result in empty previews but should resolve correctly during apply.", this);
}
});
return parsed;
}
catch (e) {
throw Error(`Error fetching YAML file '${fileId}': ${e}`);
}
}));
}
}
exports.ConfigFile = ConfigFile;
/** @ignore */ function getChildOpts(parent, opts) {
return Object.assign(Object.assign({ parent: parent }, (opts === null || opts === void 0 ? void 0 : opts.version) && { version: opts.version }), (opts === null || opts === void 0 ? void 0 : opts.pluginDownloadURL) && { pluginDownloadURL: opts.pluginDownloadURL });
}
exports.getChildOpts = getChildOpts;
/** @ignore */ function getInvokeOpts(opts) {
var _a;
return {
parent: opts === null || opts === void 0 ? void 0 : opts.parent,
provider: opts === null || opts === void 0 ? void 0 : opts.provider,
version: (_a = opts === null || opts === void 0 ? void 0 : opts.version) !== null && _a !== void 0 ? _a : (0, utilities_1.getVersion)(),
pluginDownloadURL: opts === null || opts === void 0 ? void 0 : opts.pluginDownloadURL,
async: true
};
}
exports.getInvokeOpts = getInvokeOpts;
/** @ignore */ function yamlLoadAll(text, opts) {
const invokeOpts = getInvokeOpts(opts);
return pulumi.runtime.invoke("kubernetes:yaml:decode", { text }, invokeOpts)
.then(p => p.result);
}
/** @ignore */ function skipAwait(o, opts) {
if (o.metadata.annotations === undefined) {
o.metadata.annotations = { "pulumi.com/skipAwait": "true" };
}
else {
o.metadata.annotations["pulumi.com/skipAwait"] = "true";
}
}
exports.skipAwait = skipAwait;
/** @ignore */ function parse(config, opts) {
var _a;
let resources = pulumi.output({});
const transformations = (_a = config.transformations) !== null && _a !== void 0 ? _a : [];
if (config.skipAwait) {
transformations.push(skipAwait);
}
if (config.files !== undefined) {
let files = [];
if (typeof config.files === 'string') {
if (isUrl(config.files)) {
files = [config.files];
}
else {
files = glob.sync(config.files, { dotRelative: true });
}
}
else {
for (const file of config.files) {
if (isUrl(file)) {
files.push(file);
}
else {
files.push(...glob.sync(file, { dotRelative: true }));
}
}
}
for (const file of files) {
const cf = new ConfigFile(file, {
file: file,
transformations,
resourcePrefix: config.resourcePrefix
}, opts);
resources = pulumi.all([resources, cf.resources]).apply(([rs, cfrs]) => (Object.assign(Object.assign({}, rs), cfrs)));
}
}
if (config.yaml !== undefined) {
let yamlTexts = [];
if (typeof config.yaml === 'string') {
yamlTexts.push(config.yaml);
}
else {
yamlTexts.push(...config.yaml);
}
for (const text of yamlTexts) {
const docResources = parseYamlDocument({
objs: yamlLoadAll(text, opts),
transformations,
resourcePrefix: config.resourcePrefix
}, opts);
resources = pulumi.all([resources, docResources]).apply(([rs, drs]) => (Object.assign(Object.assign({}, rs), drs)));
}
}
if (config.objs !== undefined) {
const objs = Array.isArray(config.objs) ? Promise.resolve(config.objs) : Promise.resolve([config.objs]);
const docResources = parseYamlDocument({
objs,
transformations,
resourcePrefix: config.resourcePrefix
}, opts);
resources = pulumi.all([resources, docResources]).apply(([rs, drs]) => (Object.assign(Object.assign({}, rs), drs)));
}
return resources;
}
exports.parse = parse;
/** @ignore */ function isUrl(s) {
return s.startsWith("http://") || s.startsWith("https://");
}
/** @ignore */ function parseYamlDocument(config, opts) {
const objs = config.objs.then(configObjs => {
return Array.isArray(configObjs) ? configObjs
.map(obj => parseYamlObject(obj, config.transformations, config.resourcePrefix, opts))
.reduce((array, objs) => (array.concat(...objs)), []) : [];
});
return pulumi.output(objs).apply(objs => objs
.reduce((map, val) => (map[val.name] = val.resource, map), {}));
}
/** @ignore */ function parseYamlObject(obj, transformations, resourcePrefix, opts) {
if (obj == null || Object.keys(obj).length == 0) {
return [];
}
// Create a copy of opts to pass into potentially mutating transforms that will be applied to this resource.
opts = Object.assign({}, opts);
// Allow users to change API objects before any validation.
for (const t of transformations || []) {
t(obj, opts);
}
if (!("kind" in obj && "apiVersion" in obj)) {
throw new Error(`Kubernetes resources require a kind and apiVersion: ${JSON.stringify(obj)}`);
}
const kind = obj["kind"];
const apiVersion = obj["apiVersion"];
const gvk = `${apiVersion}/${kind}`;
// Recursively traverse built-in Kubernetes list types into a single set of "naked" resource
// definitions that we can register with the Pulumi engine.
//
// Kubernetes does not instantiate list types like `v1.List`. When the API server receives
// a list, it will recursively traverse it and perform the necessary operations on the
// each "instantiable" resource it finds. For example, `kubectl apply` on a
// `v1.ConfigMapList` will cause the API server to traverse the list, and `apply` each
// `v1.ConfigMap` it finds.
//
// Since Kubernetes does not instantiate list types directly, Pulumi also traverses lists
// for resource definitions that can be managed by Kubernetes, and registers those with the
// engine instead.
if ((gvk === "v1/List")
|| (gvk === "admissionregistration.k8s.io/v1/MutatingWebhookConfigurationList")
|| (gvk === "admissionregistration.k8s.io/v1/ValidatingAdmissionPolicyBindingList")
|| (gvk === "admissionregistration.k8s.io/v1/ValidatingAdmissionPolicyList")
|| (gvk === "admissionregistration.k8s.io/v1/ValidatingWebhookConfigurationList")
|| (gvk === "admissionregistration.k8s.io/v1alpha1/MutatingAdmissionPolicyBindingList")
|| (gvk === "admissionregistration.k8s.io/v1alpha1/MutatingAdmissionPolicyList")
|| (gvk === "admissionregistration.k8s.io/v1alpha1/ValidatingAdmissionPolicyBindingList")
|| (gvk === "admissionregistration.k8s.io/v1alpha1/ValidatingAdmissionPolicyList")
|| (gvk === "admissionregistration.k8s.io/v1beta1/MutatingWebhookConfigurationList")
|| (gvk === "admissionregistration.k8s.io/v1beta1/ValidatingAdmissionPolicyBindingList")
|| (gvk === "admissionregistration.k8s.io/v1beta1/ValidatingAdmissionPolicyList")
|| (gvk === "admissionregistration.k8s.io/v1beta1/ValidatingWebhookConfigurationList")
|| (gvk === "apiextensions.k8s.io/v1/CustomResourceDefinitionList")
|| (gvk === "apiextensions.k8s.io/v1beta1/CustomResourceDefinitionList")
|| (gvk === "apiregistration.k8s.io/v1/APIServiceList")
|| (gvk === "apiregistration.k8s.io/v1beta1/APIServiceList")
|| (gvk === "apps/v1/ControllerRevisionList")
|| (gvk === "apps/v1/DaemonSetList")
|| (gvk === "apps/v1/DeploymentList")
|| (gvk === "apps/v1/ReplicaSetList")
|| (gvk === "apps/v1/StatefulSetList")
|| (gvk === "apps/v1beta1/ControllerRevisionList")
|| (gvk === "apps/v1beta1/DeploymentList")
|| (gvk === "apps/v1beta1/StatefulSetList")
|| (gvk === "apps/v1beta2/ControllerRevisionList")
|| (gvk === "apps/v1beta2/DaemonSetList")
|| (gvk === "apps/v1beta2/DeploymentList")
|| (gvk === "apps/v1beta2/ReplicaSetList")
|| (gvk === "apps/v1beta2/StatefulSetList")
|| (gvk === "auditregistration.k8s.io/v1alpha1/AuditSinkList")
|| (gvk === "autoscaling/v1/HorizontalPodAutoscalerList")
|| (gvk === "autoscaling/v2/HorizontalPodAutoscalerList")
|| (gvk === "autoscaling/v2beta1/HorizontalPodAutoscalerList")
|| (gvk === "autoscaling/v2beta2/HorizontalPodAutoscalerList")
|| (gvk === "batch/v1/CronJobList")
|| (gvk === "batch/v1/JobList")
|| (gvk === "batch/v1beta1/CronJobList")
|| (gvk === "batch/v2alpha1/CronJobList")
|| (gvk === "certificates.k8s.io/v1/CertificateSigningRequestList")
|| (gvk === "certificates.k8s.io/v1alpha1/ClusterTrustBundleList")
|| (gvk === "certificates.k8s.io/v1beta1/CertificateSigningRequestList")
|| (gvk === "certificates.k8s.io/v1beta1/ClusterTrustBundleList")
|| (gvk === "coordination.k8s.io/v1/LeaseList")
|| (gvk === "coordination.k8s.io/v1alpha1/LeaseCandidateList")
|| (gvk === "coordination.k8s.io/v1alpha2/LeaseCandidateList")
|| (gvk === "coordination.k8s.io/v1beta1/LeaseCandidateList")
|| (gvk === "coordination.k8s.io/v1beta1/LeaseList")
|| (gvk === "v1/ConfigMapList")
|| (gvk === "v1/EndpointsList")
|| (gvk === "v1/EventList")
|| (gvk === "v1/LimitRangeList")
|| (gvk === "v1/NamespaceList")
|| (gvk === "v1/NodeList")
|| (gvk === "v1/PersistentVolumeClaimList")
|| (gvk === "v1/PersistentVolumeList")
|| (gvk === "v1/PodList")
|| (gvk === "v1/PodTemplateList")
|| (gvk === "v1/ReplicationControllerList")
|| (gvk === "v1/ResourceQuotaList")
|| (gvk === "v1/SecretList")
|| (gvk === "v1/ServiceAccountList")
|| (gvk === "v1/ServiceList")
|| (gvk === "discovery.k8s.io/v1/EndpointSliceList")
|| (gvk === "discovery.k8s.io/v1beta1/EndpointSliceList")
|| (gvk === "events.k8s.io/v1/EventList")
|| (gvk === "events.k8s.io/v1beta1/EventList")
|| (gvk === "extensions/v1beta1/DaemonSetList")
|| (gvk === "extensions/v1beta1/DeploymentList")
|| (gvk === "extensions/v1beta1/IngressList")
|| (gvk === "extensions/v1beta1/NetworkPolicyList")
|| (gvk === "extensions/v1beta1/PodSecurityPolicyList")
|| (gvk === "extensions/v1beta1/ReplicaSetList")
|| (gvk === "flowcontrol.apiserver.k8s.io/v1/FlowSchemaList")
|| (gvk === "flowcontrol.apiserver.k8s.io/v1/PriorityLevelConfigurationList")
|| (gvk === "flowcontrol.apiserver.k8s.io/v1alpha1/FlowSchemaList")
|| (gvk === "flowcontrol.apiserver.k8s.io/v1alpha1/PriorityLevelConfigurationList")
|| (gvk === "flowcontrol.apiserver.k8s.io/v1beta1/FlowSchemaList")
|| (gvk === "flowcontrol.apiserver.k8s.io/v1beta1/PriorityLevelConfigurationList")
|| (gvk === "flowcontrol.apiserver.k8s.io/v1beta2/FlowSchemaList")
|| (gvk === "flowcontrol.apiserver.k8s.io/v1beta2/PriorityLevelConfigurationList")
|| (gvk === "flowcontrol.apiserver.k8s.io/v1beta3/FlowSchemaList")
|| (gvk === "flowcontrol.apiserver.k8s.io/v1beta3/PriorityLevelConfigurationList")
|| (gvk === "networking.k8s.io/v1/IPAddressList")
|| (gvk === "networking.k8s.io/v1/IngressClassList")
|| (gvk === "networking.k8s.io/v1/IngressList")
|| (gvk === "networking.k8s.io/v1/NetworkPolicyList")
|| (gvk === "networking.k8s.io/v1/ServiceCIDRList")
|| (gvk === "networking.k8s.io/v1alpha1/ClusterCIDRList")
|| (gvk === "networking.k8s.io/v1alpha1/IPAddressList")
|| (gvk === "networking.k8s.io/v1alpha1/ServiceCIDRList")
|| (gvk === "networking.k8s.io/v1beta1/IPAddressList")
|| (gvk === "networking.k8s.io/v1beta1/IngressClassList")
|| (gvk === "networking.k8s.io/v1beta1/IngressList")
|| (gvk === "networking.k8s.io/v1beta1/ServiceCIDRList")
|| (gvk === "node.k8s.io/v1/RuntimeClassList")
|| (gvk === "node.k8s.io/v1alpha1/RuntimeClassList")
|| (gvk === "node.k8s.io/v1beta1/RuntimeClassList")
|| (gvk === "policy/v1/PodDisruptionBudgetList")
|| (gvk === "policy/v1beta1/PodDisruptionBudgetList")
|| (gvk === "policy/v1beta1/PodSecurityPolicyList")
|| (gvk === "rbac.authorization.k8s.io/v1/ClusterRoleBindingList")
|| (gvk === "rbac.authorization.k8s.io/v1/ClusterRoleList")
|| (gvk === "rbac.authorization.k8s.io/v1/RoleBindingList")
|| (gvk === "rbac.authorization.k8s.io/v1/RoleList")
|| (gvk === "rbac.authorization.k8s.io/v1alpha1/ClusterRoleBindingList")
|| (gvk === "rbac.authorization.k8s.io/v1alpha1/ClusterRoleList")
|| (gvk === "rbac.authorization.k8s.io/v1alpha1/RoleBindingList")
|| (gvk === "rbac.authorization.k8s.io/v1alpha1/RoleList")
|| (gvk === "rbac.authorization.k8s.io/v1beta1/ClusterRoleBindingList")
|| (gvk === "rbac.authorization.k8s.io/v1beta1/ClusterRoleList")
|| (gvk === "rbac.authorization.k8s.io/v1beta1/RoleBindingList")
|| (gvk === "rbac.authorization.k8s.io/v1beta1/RoleList")
|| (gvk === "resource.k8s.io/v1alpha1/PodSchedulingList")
|| (gvk === "resource.k8s.io/v1alpha1/ResourceClaimList")
|| (gvk === "resource.k8s.io/v1alpha1/ResourceClaimTemplateList")
|| (gvk === "resource.k8s.io/v1alpha1/ResourceClassList")
|| (gvk === "resource.k8s.io/v1alpha2/PodSchedulingContextList")
|| (gvk === "resource.k8s.io/v1alpha2/ResourceClaimList")
|| (gvk === "resource.k8s.io/v1alpha2/ResourceClaimParametersList")
|| (gvk === "resource.k8s.io/v1alpha2/ResourceClaimTemplateList")
|| (gvk === "resource.k8s.io/v1alpha2/ResourceClassList")
|| (gvk === "resource.k8s.io/v1alpha2/ResourceClassParametersList")
|| (gvk === "resource.k8s.io/v1alpha2/ResourceSliceList")
|| (gvk === "resource.k8s.io/v1alpha3/DeviceClassList")
|| (gvk === "resource.k8s.io/v1alpha3/DeviceTaintRuleList")
|| (gvk === "resource.k8s.io/v1alpha3/PodSchedulingContextList")
|| (gvk === "resource.k8s.io/v1alpha3/ResourceClaimList")
|| (gvk === "resource.k8s.io/v1alpha3/ResourceClaimTemplateList")
|| (gvk === "resource.k8s.io/v1alpha3/ResourceSliceList")
|| (gvk === "resource.k8s.io/v1beta1/DeviceClassList")
|| (gvk === "resource.k8s.io/v1beta1/ResourceClaimList")
|| (gvk === "resource.k8s.io/v1beta1/ResourceClaimTemplateList")
|| (gvk === "resource.k8s.io/v1beta1/ResourceSliceList")
|| (gvk === "resource.k8s.io/v1beta2/DeviceClassList")
|| (gvk === "resource.k8s.io/v1beta2/ResourceClaimList")
|| (gvk === "resource.k8s.io/v1beta2/ResourceClaimTemplateList")
|| (gvk === "resource.k8s.io/v1beta2/ResourceSliceList")
|| (gvk === "scheduling.k8s.io/v1/PriorityClassList")
|| (gvk === "scheduling.k8s.io/v1alpha1/PriorityClassList")
|| (gvk === "scheduling.k8s.io/v1beta1/PriorityClassList")
|| (gvk === "settings.k8s.io/v1alpha1/PodPresetList")
|| (gvk === "storage.k8s.io/v1/CSIDriverList")
|| (gvk === "storage.k8s.io/v1/CSINodeList")
|| (gvk === "storage.k8s.io/v1/CSIStorageCapacityList")
|| (gvk === "storage.k8s.io/v1/StorageClassList")
|| (gvk === "storage.k8s.io/v1/VolumeAttachmentList")
|| (gvk === "storage.k8s.io/v1alpha1/VolumeAttachmentList")
|| (gvk === "storage.k8s.io/v1alpha1/VolumeAttributesClassList")
|| (gvk === "storage.k8s.io/v1beta1/CSIDriverList")
|| (gvk === "storage.k8s.io/v1beta1/CSINodeList")
|| (gvk === "storage.k8s.io/v1beta1/CSIStorageCapacityList")
|| (gvk === "storage.k8s.io/v1beta1/StorageClassList")
|| (gvk === "storage.k8s.io/v1beta1/VolumeAttachmentList")
|| (gvk === "storage.k8s.io/v1beta1/VolumeAttributesClassList")
|| (gvk === "storagemigration.k8s.io/v1alpha1/StorageVersionMigrationList")) {
const objs = [];
const items = obj["items"] || [];
for (const item of items) {
objs.push(...parseYamlObject(item, transformations, resourcePrefix, opts));
}
return objs;
}
if (!("metadata" in obj) || !("name" in obj["metadata"])) {
throw new Error(`YAML object does not have a .metadata.name: ${obj.apiVersion}/${obj.kind} ${JSON.stringify(obj.metadata)}`);
}
const metadata = obj["metadata"];
let id = pulumi.output(metadata["name"]);
const namespace = metadata["namespace"] || undefined;
if (namespace !== undefined) {
id = pulumi.concat(namespace, "/", id);
}
if (resourcePrefix !== undefined) {
id = pulumi.concat(resourcePrefix, "-", id);
}
switch (gvk) {
case "admissionregistration.k8s.io/v1/MutatingWebhookConfiguration":
return [id.apply(id => ({
name: `admissionregistration.k8s.io/v1/MutatingWebhookConfiguration::${id}`,
resource: new admissionregistration.v1.MutatingWebhookConfiguration(id, obj, opts),
}))];
case "admissionregistration.k8s.io/v1/ValidatingAdmissionPolicy":
return [id.apply(id => ({
name: `admissionregistration.k8s.io/v1/ValidatingAdmissionPolicy::${id}`,
resource: new admissionregistration.v1.ValidatingAdmissionPolicy(id, obj, opts),
}))];
case "admissionregistration.k8s.io/v1/ValidatingAdmissionPolicyBinding":
return [id.apply(id => ({
name: `admissionregistration.k8s.io/v1/ValidatingAdmissionPolicyBinding::${id}`,
resource: new admissionregistration.v1.ValidatingAdmissionPolicyBinding(id, obj, opts),
}))];
case "admissionregistration.k8s.io/v1/ValidatingWebhookConfiguration":
return [id.apply(id => ({
name: `admissionregistration.k8s.io/v1/ValidatingWebhookConfiguration::${id}`,
resource: new admissionregistration.v1.ValidatingWebhookConfiguration(id, obj, opts),
}))];
case "admissionregistration.k8s.io/v1alpha1/MutatingAdmissionPolicy":
return [id.apply(id => ({
name: `admissionregistration.k8s.io/v1alpha1/MutatingAdmissionPolicy::${id}`,
resource: new admissionregistration.v1alpha1.MutatingAdmissionPolicy(id, obj, opts),
}))];
case "admissionregistration.k8s.io/v1alpha1/MutatingAdmissionPolicyBinding":
return [id.apply(id => ({
name: `admissionregistration.k8s.io/v1alpha1/MutatingAdmissionPolicyBinding::${id}`,
resource: new admissionregistration.v1alpha1.MutatingAdmissionPolicyBinding(id, obj, opts),
}))];
case "admissionregistration.k8s.io/v1alpha1/ValidatingAdmissionPolicy":
return [id.apply(id => ({
name: `admissionregistration.k8s.io/v1alpha1/ValidatingAdmissionPolicy::${id}`,
resource: new admissionregistration.v1alpha1.ValidatingAdmissionPolicy(id, obj, opts),
}))];
case "admissionregistration.k8s.io/v1alpha1/ValidatingAdmissionPolicyBinding":
return [id.apply(id => ({
name: `admissionregistration.k8s.io/v1alpha1/ValidatingAdmissionPolicyBinding::${id}`,
resource: new admissionregistration.v1alpha1.ValidatingAdmissionPolicyBinding(id, obj, opts),
}))];
case "admissionregistration.k8s.io/v1beta1/MutatingWebhookConfiguration":
return [id.apply(id => ({
name: `admissionregistration.k8s.io/v1beta1/MutatingWebhookConfiguration::${id}`,
resource: new admissionregistration.v1beta1.MutatingWebhookConfiguration(id, obj, opts),
}))];
case "admissionregistration.k8s.io/v1beta1/ValidatingAdmissionPolicy":
return [id.apply(id => ({
name: `admissionregistration.k8s.io/v1beta1/ValidatingAdmissionPolicy::${id}`,
resource: new admissionregistration.v1beta1.ValidatingAdmissionPolicy(id, obj, opts),
}))];
case "admissionregistration.k8s.io/v1beta1/ValidatingAdmissionPolicyBinding":
return [id.apply(id => ({
name: `admissionregistration.k8s.io/v1beta1/ValidatingAdmissionPolicyBinding::${id}`,
resource: new admissionregistration.v1beta1.ValidatingAdmissionPolicyBinding(id, obj, opts),
}))];
case "admissionregistration.k8s.io/v1beta1/ValidatingWebhookConfiguration":
return [id.apply(id => ({
name: `admissionregistration.k8s.io/v1beta1/ValidatingWebhookConfiguration::${id}`,
resource: new admissionregistration.v1beta1.ValidatingWebhookConfiguration(id, obj, opts),
}))];
case "apiextensions.k8s.io/v1/CustomResourceDefinition":
return [id.apply(id => ({
name: `apiextensions.k8s.io/v1/CustomResourceDefinition::${id}`,
resource: new apiextensions.v1.CustomResourceDefinition(id, obj, opts),
}))];
case "apiextensions.k8s.io/v1beta1/CustomResourceDefinition":
return [id.apply(id => ({
name: `apiextensions.k8s.io/v1beta1/CustomResourceDefinition::${id}`,
resource: new apiextensions.v1beta1.CustomResourceDefinition(id, obj, opts),
}))];
case "apiregistration.k8s.io/v1/APIService":
return [id.apply(id => ({
name: `apiregistration.k8s.io/v1/APIService::${id}`,
resource: new apiregistration.v1.APIService(id, obj, opts),
}))];
case "apiregistration.k8s.io/v1beta1/APIService":
return [id.apply(id => ({
name: `apiregistration.k8s.io/v1beta1/APIService::${id}`,
resource: new apiregistration.v1beta1.APIService(id, obj, opts),
}))];
case "apps/v1/ControllerRevision":
return [id.apply(id => ({
name: `apps/v1/ControllerRevision::${id}`,
resource: new apps.v1.ControllerRevision(id, obj, opts),
}))];
case "apps/v1/DaemonSet":
return [id.apply(id => ({
name: `apps/v1/DaemonSet::${id}`,
resource: new apps.v1.DaemonSet(id, obj, opts),
}))];
case "apps/v1/Deployment":
return [id.apply(id => ({
name: `apps/v1/Deployment::${id}`,
resource: new apps.v1.Deployment(id, obj, opts),
}))];
case "apps/v1/ReplicaSet":
return [id.apply(id => ({
name: `apps/v1/ReplicaSet::${id}`,
resource: new apps.v1.ReplicaSet(id, obj, opts),
}))];
case "apps/v1/StatefulSet":
return [id.apply(id => ({
name: `apps/v1/StatefulSet::${id}`,
resource: new apps.v1.StatefulSet(id, obj, opts),
}))];
case "apps/v1beta1/ControllerRevision":
return [id.apply(id => ({
name: `apps/v1beta1/ControllerRevision::${id}`,
resource: new apps.v1beta1.ControllerRevision(id, obj, opts),
}))];
case "apps/v1beta1/Deployment":
return [id.apply(id => ({
name: `apps/v1beta1/Deployment::${id}`,
resource: new apps.v1beta1.Deployment(id, obj, opts),
}))];
case "apps/v1beta1/StatefulSet":
return [id.apply(id => ({
name: `apps/v1beta1/StatefulSet::${id}`,
resource: new apps.v1beta1.StatefulSet(id, obj, opts),
}))];
case "apps/v1beta2/ControllerRevision":
return [id.apply(id => ({
name: `apps/v1beta2/ControllerRevision::${id}`,
resource: new apps.v1beta2.ControllerRevision(id, obj, opts),
}))];
case "apps/v1beta2/DaemonSet":
return [id.apply(id => ({
name: `apps/v1beta2/DaemonSet::${id}`,
resource: new apps.v1beta2.DaemonSet(id, obj, opts),
}))];
case "apps/v1beta2/Deployment":
return [id.apply(id => ({
name: `apps/v1beta2/Deployment::${id}`,
resource: new apps.v1beta2.Deployment(id, obj, opts),
}))];
case "apps/v1beta2/ReplicaSet":
return [id.apply(id => ({
name: `apps/v1beta2/ReplicaSet::${id}`,
resource: new apps.v1beta2.ReplicaSet(id, obj, opts),
}))];
case "apps/v1beta2/StatefulSet":
return [id.apply(id => ({
name: `apps/v1beta2/StatefulSet::${id}`,
resource: new apps.v1beta2.StatefulSet(id, obj, opts),
}))];
case "auditregistration.k8s.io/v1alpha1/AuditSink":
return [id.apply(id => ({
name: `auditregistration.k8s.io/v1alpha1/AuditSink::${id}`,
resource: new auditregistration.v1alpha1.AuditSink(id, obj, opts),
}))];
case "autoscaling/v1/HorizontalPodAutoscaler":
return [id.apply(id => ({
name: `autoscaling/v1/HorizontalPodAutoscaler::${id}`,
resource: new autoscaling.v1.HorizontalPodAutoscaler(id, obj, opts),
}))];
case "autoscaling/v2/HorizontalPodAutoscaler":
return [id.apply(id => ({
name: `autoscaling/v2/HorizontalPodAutoscaler::${id}`,
resource: new autoscaling.v2.HorizontalPodAutoscaler(id, obj, opts),
}))];
case "autoscaling/v2beta1/HorizontalPodAutoscaler":
return [id.apply(id => ({
name: `autoscaling/v2beta1/HorizontalPodAutoscaler::${id}`,
resource: new autoscaling.v2beta1.HorizontalPodAutoscaler(id, obj, opts),
}))];
case "autoscaling/v2beta2/HorizontalPodAutoscaler":
return [id.apply(id => ({
name: `autoscaling/v2beta2/HorizontalPodAutoscaler::${id}`,
resource: new autoscaling.v2beta2.HorizontalPodAutoscaler(id, obj, opts),
}))];
case "batch/v1/CronJob":
return [id.apply(id => ({
name: `batch/v1/CronJob::${id}`,
resource: new batch.v1.CronJob(id, obj, opts),
}))];
case "batch/v1/Job":
return [id.apply(id => ({
name: `batch/v1/Job::${id}`,
resource: new batch.v1.Job(id, obj, opts),
}))];
case "batch/v1beta1/CronJob":
return [id.apply(id => ({
name: `batch/v1beta1/CronJob::${id}`,
resource: new batch.v1beta1.CronJob(id, obj, opts),
}))];
case "batch/v2alpha1/CronJob":
return [id.apply(id => ({
name: `batch/v2alpha1/CronJob::${id}`,
resource: new batch.v2alpha1.CronJob(id, obj, opts),
}))];
case "certificates.k8s.io/v1/CertificateSigningRequest":
return [id.apply(id => ({
name: `certificates.k8s.io/v1/CertificateSigningRequest::${id}`,
resource: new certificates.v1.CertificateSigningRequest(id, obj, opts),
}))];
case "certificates.k8s.io/v1alpha1/ClusterTrustBundle":
return [id.apply(id => ({
name: `certificates.k8s.io/v1alpha1/ClusterTrustBundle::${id}`,
resource: new certificates.v1alpha1.ClusterTrustBundle(id, obj, opts),
}))];
case "certificates.k8s.io/v1beta1/CertificateSigningRequest":
return [id.apply(id => ({
name: `certificates.k8s.io/v1beta1/CertificateSigningRequest::${id}`,
resource: new certificates.v1beta1.CertificateSigningRequest(id, obj, opts),
}))];
case "certificates.k8s.io/v1beta1/ClusterTrustBundle":
return [id.apply(id => ({
name: `certificates.k8s.io/v1beta1/ClusterTrustBundle::${id}`,
resource: new certificates.v1beta1.ClusterTrustBundle(id, obj, opts),
}))];
case "coordination.k8s.io/v1/Lease":
return [id.apply(id => ({
name: `coordination.k8s.io/v1/Lease::${id}`,
resource: new coordination.v1.Lease(id, obj, opts),
}))];
case "coordination.k8s.io/v1alpha1/LeaseCandidate":
return [id.apply(id => ({
name: `coordination.k8s.io/v1alpha1/LeaseCandidate::${id}`,
resource: new coordination.v1alpha1.LeaseCandidate(id, obj, opts),
}))];
case "coordination.k8s.io/v1alpha2/LeaseCandidate":
return [id.apply(id => ({
name: `coordination.k8s.io/v1alpha2/LeaseCandidate::${id}`,
resource: new coordination.v1alpha2.LeaseCandidate(id, obj, opts),
}))];
case "coordination.k8s.io/v1beta1/Lease":
return [id.apply(id => ({
name: `coordination.k8s.io/v1beta1/Lease::${id}`,
resource: new coordination.v1beta1.Lease(id, obj, opts),
}))];
case "coordination.k8s.io/v1beta1/LeaseCandidate":
return [id.apply(id => ({
name: `coordination.k8s.io/v1beta1/LeaseCandidate::${id}`,
resource: new coordination.v1beta1.LeaseCandidate(id, obj, opts),
}))];
case "v1/Binding":
return [id.apply(id => ({
name: `v1/Binding::${id}`,
resource: new core.v1.Binding(id, obj, opts),
}))];
case "v1/ConfigMap":
return [id.apply(id => ({
name: `v1/ConfigMap::${id}`,
resource: new core.v1.ConfigMap(id, obj, opts),
}))];
case "v1/Endpoints":
return [id.apply(id => ({
name: `v1/Endpoints::${id}`,
resource: new core.v1.Endpoints(id, obj, opts),
}))];
case "v1/Event":
return [id.apply(id => ({
name: `v1/Event::${id}`,
resource: new core.v1.Event(id, obj, opts),
}))];
case "v1/LimitRange":
return [id.apply(id => ({
name: `v1/LimitRange::${id}`,
resource: new core.v1.LimitRange(id, obj, opts),
}))];
case "v1/Namespace":
return [id.apply(id => ({
name: `v1/Namespace::${id}`,
resource: new core.v1.Namespace(id, obj, opts),
}))];
case "v1/Node":
return [id.apply(id => ({
name: `v1/Node::${id}`,
resource: new core.v1.Node(id, obj, opts),
}))];
case "v1/PersistentVolume":
return [id.apply(id => ({
name: `v1/PersistentVolume::${id}`,
resource: new core.v1.PersistentVolume(id, obj, opts),
}))];
case "v1/PersistentVolumeClaim":
return [id.apply(id => ({
name: `v1/PersistentVolumeClaim::${id}`,
resource: new core.v1.PersistentVolumeClaim(id, obj, opts),
}))];
case "v1/Pod":
return [id.apply(id => ({
name: `v1/Pod::${id}`,
resource: new core.v1.Pod(id, obj, opts),
}))];
case "v1/PodTemplate":
return [id.apply(id => ({
name: `v1/PodTemplate::${id}`,
resource: new core.v1.PodTemplate(id, obj, opts),
}))];
case "v1/ReplicationController":
return [id.apply(id => ({
name: `v1/ReplicationController::${id}`,
resource: new core.v1.ReplicationController(id, obj, opts),
}))];
case "v1/ResourceQuota":
return [id.apply(id => ({
name: `v1/ResourceQuota::${id}`,
resource: new core.v1.ResourceQuota(id, obj, opts),
}))];
case "v1/Secret":
return [id.apply(id => ({
name: `v1/Secret::${id}`,
resource: new core.v1.Secret(id, obj, opts),
}))];
case "v1/Service":
return [id.apply(id => ({
name: `v1/Service::${id}`,
resource: new core.v1.Service(id, obj, opts),
}))];
case "v1/ServiceAccount":
return [id.apply(id => ({
name: `v1/ServiceAccount::${id}`,
resource: new core.v1.ServiceAccount(id, obj, opts),
}))];
case "discovery.k8s.io/v1/EndpointSlice":
return [id.apply(id => ({
name: `discovery.k8s.io/v1/EndpointSlice::${id}`,
resource: new discovery.v1.EndpointSlice(id, obj, opts),
}))];
case "discovery.k8s.io/v1beta1/EndpointSlice":
return [id.apply(id => ({
name: `discovery.k8s.io/v1beta1/EndpointSlice::${id}`,
resource: new discovery.v1beta1.EndpointSlice(id, obj, opts),
}))];
case "events.k8s.io/v1/Event":
return [id.apply(id => ({
name: `events.k8s.io/v1/Event::${id}`,
resource: new events.v1.Event(id, obj, opts),
}))];
case "events.k8s.io/v1beta1/Event":
return [id.apply(id => ({
name: `events.k8s.io/v1beta1/Event::${id}`,
resource: new events.v1beta1.Event(id, obj, opts),
}))];
case "extensions/v1beta1/DaemonSet":
return [id.apply(id => ({
name: `extensions/v1beta1/DaemonSet::${id}`,
resource: new extensions.v1beta1.DaemonSet(id, obj, opts),
}))];
case "extensions/v1beta1/Deployment":
return [id.apply(id => ({
name: `extensions/v1beta1/Deployment::${id}`,
resource: new extensions.v1beta1.Deployment(id, obj, opts),
}))];
case "extensions/v1beta1/Ingress":
return [id.apply(id => ({
name: `extensions/v1beta1/Ingress::${id}`,
resource: new extensions.v1beta1.Ingress(id, obj, opts),
}))];
case "extensions/v1beta1/NetworkPolicy":
return [id.apply(id => ({
name: `extensions/v1beta1/NetworkPolicy::${id}`,
resource: new extensions.v1beta1.NetworkPolicy(id, obj, opts),
}))];
case "extensions/v1beta1/PodSecurityPolicy":
return [id.apply(id => ({
name: `extensions/v1beta1/PodSecurityPolicy::${id}`,
resource: new extensions.v1beta1.PodSecurityPolicy(id, obj, opts),
}))];
case "extensions/v1beta1/ReplicaSet":
return [id.apply(id => ({
name: `extensions/v1beta1/ReplicaSet::${id}`,
resource: new extensions.v1beta1.ReplicaSet(id, obj, opts),
}))];
case "flowcontrol.apiserver.k8s.io/v1/FlowSchema":
return [id.apply(id => ({
name: `flowcontrol.apiserver.k8s.io/v1/FlowSchema::${id}`,
resource: new flowcontrol.v1.FlowSchema(id, obj, opts),
}))];
case "flowcontrol.apiserver.k8s.io/v1/PriorityLevelConfiguration":
return [id.apply(id => ({
name: `flowcontrol.apiserver.k8s.io/v1/PriorityLevelConfiguration::${id}`,
resource: new flowcontrol.v1.PriorityLevelConfiguration(id, obj, opts),
}))];
case "flowcontrol.apiserver.k8s.io/v1alpha1/FlowSchema":
return [id.apply(id => ({
name: `flowcontrol.apiserver.k8s.io/v1alpha1/FlowSchema::${id}`,
resource: new flowcontrol.v1alpha1.FlowSchema(id, obj, opts),
}))];
case "flowcontrol.apiserver.k8s.io/v1alpha1/PriorityLevelConfiguration":
return [id.apply(id => ({
name: `flowcontrol.apiserver.k8s.io/v1alpha1/PriorityLevelConfiguration::${id}`,
resource: new flowcontrol.v1alpha1.PriorityLevelConfiguration(id, obj, opts),
}))];
case "flowcontrol.apiserver.k8s.io/v1beta1/FlowSchema":
return [id.apply(id => ({
name: `flowcontrol.apiserver.k8s.io/v1beta1/FlowSchema::${id}`,
resource: new flowcontrol.v1beta1.FlowSchema(id, obj, opts),
}))];
case "flowcontrol.apiserver.k8s.io/v1beta1/PriorityLevelConfiguration":
return [id.apply(id => ({
name: `flowcontrol.apiserver.k8s.io/v1beta1/PriorityLevelConfiguration::${id}`,
resource: new flowcontrol.v1beta1.PriorityLevelConfiguration(id, obj, opts),
}))];
case "flowcontrol.apiserver.k8s.io/v1beta2/FlowSchema":
return [id.apply(id => ({
name: `flowcontrol.apiserver.k8s.io/v1beta2/FlowSchema::${id}`,
resource: new flowcontrol.v1beta2.FlowSchema(id, obj, opts),
}))];
case "flowcontrol.apiserver.k8s.io/v1beta2/PriorityLevelConfiguration":
return [id.apply(id => ({
name: `flowcontrol.apiserver.k8s.io/v1beta2/PriorityLevelConfiguration::${id}`,
resource: new flowcontrol.v1beta2.PriorityLevelConfiguration(id, obj, opts),
}))];
case "flowcontrol.apiserver.k8s.io/v1beta3/FlowSchema":
return [id.apply(id => ({
name: `flowcontrol.apiserver.k8s.io/v1beta3/FlowSchema::${id}`,
resource: new flowcontrol.v1beta3.FlowSchema(id, obj, opts),
}))];
case "flowcontrol.apiserver.k8s.io/v1beta3/PriorityLevelConfiguration":
return [id.apply(id => ({
name: `flowcontrol.apiserver.k8s.io/v1