pulumi/sdk/nodejs/tests/runtime/deploymentOnlyModule/config.ts

65 lines
2.4 KiB
TypeScript

// Copyright 2016-2018, 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.
// Copy of real 'config.ts' file to ensure that if we capture somehting marked as
// deployment-time that any code it captures (even through modules), should be captured by value.
import { getConfig } from "./runtimeConfig";
/**
* Config is a bag of related configuration state. Each bag contains any number of configuration variables, indexed by
* simple keys, and each has a name that uniquely identifies it; two bags with different names do not share values for
* variables that otherwise share the same key. For example, a bag whose name is `pulumi:foo`, with keys `a`, `b`,
* and `c`, is entirely separate from a bag whose name is `pulumi:bar` with the same simple key names. Each key has a
* fully qualified names, such as `pulumi:foo:a`, ..., and `pulumi:bar:a`, respectively.
*/
export class Config {
/**
* name is the configuration bag's logical name and uniquely identifies it. The default is the name of the current
* project.
*/
public readonly name: string;
constructor(name: string) {
if (name.endsWith(":config")) {
name = name.replace(/:config$/, "");
}
this.name = name;
}
/**
* get loads an optional configuration value by its key, or undefined if it doesn't exist.
*
* @param key The key to lookup.
* @param opts An options bag to constrain legal values.
*/
public get(key: string): string | undefined {
const v = getConfig(this.fullKey(key));
if (v === undefined) {
return undefined;
}
return v;
}
/**
* fullKey turns a simple configuration key into a fully resolved one, by prepending the bag's name.
*
* @param key The key to lookup.
*/
private fullKey(key: string): string {
return this.name + ":" + key;
}
}