сделать схему ресурса зависимой от другой переменной - PullRequest
0 голосов
/ 28 декабря 2018

Я создаю плагин в 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 .",

, поэтому здесь я хочу передать строку enableDNs String вфайл .tf только когда передано имя_хоста, если оно не задано, и я передаю enableDN, оно должно выдать ошибку, может кто-нибудь указать мне, как это сделать

1 Ответ

0 голосов
/ 28 декабря 2018

У провайдеров Terraform на самом деле нет первоклассного способа делать вещи, условно основанные на других параметрах, кроме атрибута ConflictsWith.

Существует хакерский способ сделать некоторые вещи с несколькими параметрами, используя CustomizeDiff но он действительно используется только в нескольких местах, где он действительно необходим.

Обычно поставщик просто проверяет отдельные параметры, и если API, с которым работает поставщик, требует перекрестной проверки параметров, то это видно тольково время применения, когда API возвращает ошибку.

Пример использования CustomizeDiff для выдачи ошибки планового времени при выполнении перекрестной проверки параметров см. ресурс aws_elasticache_cluster :

    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`)
        },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...