@cdktf/hcl2cdk (英语)
用途 @cdktf/hcl2cdk 将 HCL 配置转换为 CDK 构造.
使用量
yarn add @cdktf/hcl2cdk
将 HCL 字符串转换为构造
import { convert } from "@cdktf/hcl2cdk";
const hcl = `
variable "name" {
description = "Name to be used on all the resources as identifier"
type = string
default = ""
}
`(async () => {
const ts = await convert(hcl, { language: "typescript" });
console.log(ts.imports); // just the necessary imports
console.log(ts.code); // just the constructs
console.log(ts.all); // code with imports
})();
// =>
import * as cdktf from "cdktf";
new cdktf.TerraformVariable(this, "imageId", {
type: "string",
default: "ami-abcde123",
description: "What AMI to use to create an instance",
});
转换工程
import * as hcl2cdk from "@cdktf/hcl2cdk";
import {
readSchema,
ConstructsMakerProviderTarget,
LANGUAGES,
config,
} from "@cdktf/provider-generator";
(async () => {
const hcl = hcl2cdk.getTerraformConfigFromDir("/path/to/terraform/project");
const providerRequirements = await hcl2cdk.parseProviderRequirements(hcl);
const targets = Object.entries(providerRequirements).map(([name, version]) =>
ConstructsMakerProviderTarget.from(
new config.TerraformProviderConstraint(`${name}@ ${version}`),
LANGUAGES[0],
),
);
// Get all the provider schemas, making the conversion more precise
const { providerSchema } = await readSchema(targets);
const mainTs = await hcl2cdk.convert(hcl, {
language: "typescript",
providerSchema: providerSchema,
});
await hcl2cdk.convertProject(
hcl,
mainTs.code,
require("../cdktf.json"),
{ language: "typescript", providerSchema }, // Currently we only support Typescript for project conversion
);
})();
这将将您的 Terraform 项目转变为 Terraform 项目的 CDK, 除了 Terraform 内部的资源命名之外, 所部署的资源不应有差异 terraform plan 财务报告和审定财务报表 cdktf plan。 。 。 .
已知的限制
被猜测的提供者无法运行
如果您的《有害物质清单》中包含未在下文中提及的供应商 required_providers 我们推断这个名字,例如如果你使用 datadog_dashboard 我们推断提供方 datadog 这是正确的,但名称空间缺失, 因为DataDog 它会是 datadog/datadog相反,我们将尝试使用 hashicorp/datadog 并且由于登记处不知道该供应商而失败.
请看 需要的提供者文件 以获取更多关于如何指定提供者的信息.
本地模块和文件
我们不为您移动模块或文件,如果您引用本地模块,您必须移动这些模块,以便相对路径正确. 如果要使用文件,请将文件包入 TerraformAsset 在使用它们之前.
发展
我们有两种测试案例,一种在 lib 单位一级和单位内 test 通过转换然后合成产生的代码来测试整个软件包.
一般来说,两种测试类型都可以由 npx jest <pathToTestCase>。您可以添加 -u 以更新快照和 --watch 以监视模式运行测试.
在里面做测试 test 我们更快地默认禁用合成和多语言快照。 您可以通过设置嵌入变量来启用它们 CI=true显著改进业绩的另一种方式是确定 TF_PLUGIN_CACHE_DIR 到有效的目录,以缓存测试中使用的提供者二进制。 例如通过运行 TF_PLUGIN_CACHE_DIR=(mktemp -d) npx jest <pathToTestCase> --watch。 。 。 .