UNPKG

@pulumi/kubernetes

Version:

[![Build Status](https://travis-ci.com/pulumi/pulumi-kubernetes.svg?token=eHg7Zp5zdDDJfTjY8ejq&branch=master)](https://travis-ci.com/pulumi/pulumi-kubernetes) [![Slack](http://www.pulumi.com/images/docs/badges/slack.svg)](https://slack.pulumi.com) [![NPM

1,016 lines • 70.4 kB
"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