登录
首页 >  Golang >  Go问答

资源模式的另一个变量依赖性

来源:stackoverflow

时间:2024-03-20 08:00:33 312浏览 收藏

在 Terraform 中创建插件时,用户可能需要添加一个字段,该字段只有在提供另一个字段时才能调用。然而,Terraform 提供程序通常无法根据其他参数有条件地执行操作。尽管如此,可以使用 CustomizedDiff 来在计划时间验证交叉参数,例如 AWS Elasticache 集群资源中使用的示例。

问题内容

我正在 terraform 中创建一个插件,我想向架构添加一个字段,只有在提供另一个字段时才能调用该字段。

    "host_name": &schema.Schema{
        Type:        schema.TypeString,
        Optional:    true,
        DefaultFunc: schema.EnvDefaultFunc("host_name", nil),
        Description: "Should give name in FQDN if being used for DNS puposes .",
    },
    "enableDns": &schema.Schema{
       Type:        schema.TypeString,
       Required:    true,
       DefaultFunc: schema.EnvDefaultFunc("host_name", nil),
       Description: "Should give name in FQDN if being used for DNS puposes .",

这里我想仅在传递 host_name 时传递 .tf 文件中的 enabledns 字符串。如果没有给出并且我传递了 enabledns 它应该在计划期间抛出错误。


解决方案


terraform 提供程序实际上没有一流的方法来根据 conflictswith 属性以外的其他参数有条件地执行操作。

有一种使用 customizediff 做一些交叉参数的方法,但它只真正用在几个真正需要它的地方。

通常,提供程序只会验证各个参数,如果提供程序所使用的 api 需要交叉参数验证,则仅在 api 返回错误时的应用时才会看到这种情况。

有关在执行交叉参数验证时使用 customizediff 引发计划时间错误的示例,请参阅 the aws_elasticache_cluster resource

CustomizeDiff: customdiff.Sequence(
        func(diff *schema.ResourceDiff, v interface{}) error {
            // Plan time validation for az_mode
            // InvalidParameterCombination: Must specify at least two cache nodes in order to specify AZ Mode of 'cross-az'.
            if v, ok := diff.GetOk("az_mode"); !ok || v.(string) != elasticache.AZModeCrossAz {
                return nil
            }
            if v, ok := diff.GetOk("num_cache_nodes"); !ok || v.(int) != 1 {
                return nil
            }
            return errors.New(`az_mode "cross-az" is not supported with num_cache_nodes = 1`)
        },

今天关于《资源模式的另一个变量依赖性》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>