cdktf命令可以在python代码中执行吗?

问题描述 投票:0回答:2

我正在使用 cdktf 使用 Python 和 Terraform 来配置我的资源。我想自动化整个过程,因此要求“cdktf部署”成为Python代码的一部分,如下所示:

from constructs import Construct
from cdktf import App, TerraformStack
from imports.azurerm import AzurermProvider, ResourceGroup
import subprocess


class MyStack(TerraformStack):
    def __init__(self, scope: Construct, ns: str):
        super().__init__(scope, ns)

        # define resources here
        loca="West Europe"
        rg_name="example-rg1"
        tag = {
            "ENV": "Dev",
            "PROJECT": "AZ_TF"
        }
        AzurermProvider(self, "Azurerm", \
                        features={}
                        )

        example_rg = ResourceGroup(self, 'example-rg1', \
                                   name=rg_name,
                                   location = loca,
                                   tags = tag
                                   )

app = App()
name = "cdktf5"
MyStack(app, name)
app.synth()
subprocess.run(["cdktf", "deploy"])

但是,这并没有按预期工作,输出如下:


⠼ synthesizing...

⠙ synthesizing...

⠇ synthesizing...

⠸ synthesizing...

⠇ synthesizing...

⠦ synthesizing...

不用说,资源并没有被创建。

python python-3.x terraform subprocess terraform-cdk
2个回答
0
投票

CDKTF 程序中不能执行任何 cdktf 命令。您需要一个单独的 python 文件来运行部署。原因是您正在执行的程序正在调用自身,从而创建了无限循环。 CDKTF CLI 在计划/应用/合成操作中调用您的 cdktf 程序作为合成步骤的一部分。这意味着当您从该程序启动进程时,您可以通过 CDKTF CLI 再次启动它。


0
投票

尝试 subprocess.run(["cdktf", "部署", "--skip-synth"]) 代替 subprocess.run(["cdktf", "部署"])

© www.soinside.com 2019 - 2024. All rights reserved.