我有一个包含以下资源的模块:
在我的一个 env 目录中,我可以有 0-N 个 .tf 文件,它是该模块的一个实例,每个文件都指定了数据库名称等。因此,如果我添加另一个具有新名称的 .tf 文件,那么带有数据库的新数据库服务器将被提供。所有这些工作正常。
但是,如果我现在删除现有的数据库模块(我的 env 目录中的 .tf 文件之一),我会遇到问题。Terraform 现在将尝试获取所有先前存在的资源的状态,并且由于该特定提供程序(针对该 postgres 服务器)现在已经消失,因此 terraform 无法获取创建的 postgres 角色的状态,所有输出都需要提供程序配置块操作。
我明白为什么会发生这种情况,但我不知道如何解决这个问题。我想“动态”创建(和删除)带有数据库的 postgres 服务器,但这需要“动态”提供程序,这让我陷入困境。
外观示例
resource "azurerm_postgresql_server" "postgresserver" {
name = "${var.db_name}-server"
location = "${var.location}"
resource_group_name = "${var.resource_group}"
sku = ["${var.vmSize}"]
storage_profile = ["${var.storage}"]
administrator_login = "psqladminun"
administrator_login_password = "${random_string.db-password.result}"
version = "${var.postgres_version}"
ssl_enforcement = "Disabled"
}
provider "postgresql" {
version = "0.1.0"
host = …Run Code Online (Sandbox Code Playgroud) 我正在从多个字符串计算 sha256。我以特定方式将它们转换为字节切片并将它们全部附加在一起,然后使用内置库计算散列。但是,根据我是否在计算 sha256 之前打印出切片,我会得到不同的结果。在操场上测试时,我无法重现它。
可以在https://play.golang.org/p/z8XKx-p9huG上查看并运行经过测试的代码,在这两种情况下,它实际上给出了相同的结果。
func getHash(input1 string, input2hex string, input3hex string, input4 string) (string, error) {
input1bytes := []byte(input1)
firstHalfinput1Bytes := input1bytes[:8]
secondHalfinput1Bytes := input1bytes[8:16]
input4Bytes := []byte(input4)
input3Bytes, err := hex.DecodeString(input3hex)
if err != nil {
fmt.Println("err " + err.Error())
}
input2Bytes, err := hex.DecodeString(input2hex)
if err != nil {
fmt.Println("err " + err.Error())
}
fullHashInputBytes := append(firstHalfinput1Bytes, input2Bytes...)
// THIS IS THE OPTIONAL PRINT WHICH CHANGES OUTPUT LOCALLY:
fmt.Println("fullHashInputBytes", fullHashInputBytes)
fullHashInputBytes = append(fullHashInputBytes, secondHalfinput1Bytes...)
fullHashInputBytes …Run Code Online (Sandbox Code Playgroud)