Terraform 0.11 - Schema Behaviors

स्कीम बिहेवियर




terraform

स्कीम बिहेवियर

स्कीमा फ़ील्ड जिनका योजना या समय पर प्रभाव हो सकता है, को सामूहिक रूप से "व्यवहार फ़ील्ड" या एक तत्व व्यवहार के रूप में जाना जाता है। इन क्षेत्रों को अक्सर अलग-अलग व्यवहार बनाने के लिए कई तरीकों से जोड़ा जाता है, जो कि प्रश्न में तत्व की आवश्यकता पर निर्भर करता है, आमतौर पर क्लाउड सेवा एपीआई के व्यवहार से मेल खाने के लिए अनुकूलित होता है। उदाहरण के लिए, AWS लॉन्च कॉन्फ़िगरेशन लिखने के समय AWS API के माध्यम से अपडेट नहीं किया जा सकता है। परिणामस्वरूप संबंधित टेराफॉर्म प्रदाता संसाधन aws_launch_configuration में स्कीमा तत्वों के सभी को aws_launch_configuration ForceNew: true के रूप में चिह्नित किया गया ForceNew: true । यह व्यवहार टेराफ़ॉर्म को पहले संसाधन को नष्ट करने और फिर संसाधन को फिर से बनाने का निर्देश देता है, यदि कोई भी कॉन्फ़िगरेशन में परिवर्तन होता है, जैसा कि मौजूदा संसाधन को अपडेट करने की कोशिश के विपरीत है।

आदिम व्यवहार

ऐच्छिक

डेटा संरचना: bool
मान: true या false
प्रतिबंध:

  • यदि Required हो तो उपयोग नहीं किया जा सकता true
  • आवश्यक होने पर छोड़ दिया जाना चाहिए और तत्व की Computed नहीं की जानी चाहिए

इंगित करता है कि यह तत्व कॉन्फ़िगरेशन में शामिल करने के लिए वैकल्पिक है। ध्यान दें कि Optional स्वयं एक डिफ़ॉल्ट मान स्थापित नहीं करता है। नीचे Default देखें।

स्कीमा उदाहरण:

"encrypted": {
  Type:     schema.TypeBool,
  Optional: true,
},

कॉन्फ़िगरेशन उदाहरण:

resource "example_volume" "ex" {
  encrypted = true
}

अपेक्षित

डेटा संरचना: bool
मान: true या false
प्रतिबंध:

  • यदि Optional true है, तो इसका उपयोग नहीं किया जा सकता true
  • यदि Computed true है, तो इसका उपयोग नहीं किया जा सकता true
  • यदि Optional छोड़ दिया गया है और तत्व की Computed नहीं की गई है, तो इसे सेट किया जाना चाहिए

इंगित करता है कि इस तत्व को कॉन्फ़िगरेशन में प्रदान किया जाना चाहिए। कॉन्फ़िगरेशन से इस विशेषता को स्वीकार करना, या बाद में इसे हटाने से Default त्रुटि हो जाएगी।

स्कीमा उदाहरण:

"name": {
  Type:     schema.TypeString,
  Required: true,
},

कॉन्फ़िगरेशन उदाहरण:

resource "example_volume" "ex" {
  name = "swap volume"
}

चूक

डेटा संरचना: interface
मूल्य: तत्वों का कोई भी मूल्य आदिम प्रकारों के लिए Type , या जटिल प्रकारों के लिए Elem द्वारा परिभाषित प्रकार।
प्रतिबंध:

  • यदि Required हो तो उपयोग नहीं किया जा सकता true
  • DefaultFunc साथ प्रयोग नहीं किया जा सकता है

यदि Default निर्दिष्ट किया गया है, तो वह मान जो इस आइटम को कॉन्फ़िगरेशन में सेट नहीं होने पर उपयोग किया जाता है।

स्कीमा उदाहरण:

"encrypted": {
  Type:     schema.TypeBool,
  Optional: true,
  Default: false,
},

कॉन्फ़िगरेशन उदाहरण (निर्दिष्ट):

resource "example_volume" "ex" {
  name = "swap volume"
  encrypted = true
}

कॉन्फ़िगरेशन उदाहरण (छोड़ा गया):

resource "example_volume" "ex" {
  name = "swap volume"
  # encrypted receives its default value, false
}

अभिकलन

डेटा संरचना: bool
मूल्य: true या false
प्रतिबंध:

  • जब Required हो true उपयोग नहीं किया जा सकता
  • Default specified होने पर उपयोग नहीं किया जा सकता है
  • DefaultFunc साथ प्रयोग नहीं किया जा सकता है

Computed अक्सर उन मूल्यों का प्रतिनिधित्व करने के लिए किया जाता है जो उपयोगकर्ता कॉन्फ़िगर करने योग्य नहीं हैं या terraform plan समय ज्ञात नहीं हो सकते हैं या apply नहीं हो apply , जैसे कि निर्माण की तारीख या सेवा विशिष्ट यूयूआईडी। विशिष्ट व्यवहारों को प्राप्त करने के लिए Computed को अन्य विशेषताओं के साथ जोड़ा जा सकता है, और अन्य संसाधनों में प्रक्षेप के लिए आउटपुट के रूप में उपयोग किया जा सकता है

स्कीमा उदाहरण:

"uuid": {
  Type:     schema.TypeString,
  Computed: true,
},

कॉन्फ़िगरेशन उदाहरण:

resource "example_volume" "ex" {
  name = "swap volume"
  encrypted = true
}

output "volume_uuid" {
  value = "${example_volume.ex.uuid}"
}

ForceNew

डेटा संरचना: bool
मूल्य: true या false

ForceNew इंगित करता है कि इस क्षेत्र में किसी भी परिवर्तन के लिए संसाधन को नष्ट करने और पुन: निर्मित करने की आवश्यकता होती है।

स्कीमा उदाहरण:

"base_image": {
  Type:     schema.TypeString,
  Required: true,
  ForceNew: true,
},

कॉन्फ़िगरेशन उदाहरण:

resource "example_instance" "ex" {
  name = "bastion host"
  base_image = "ubuntu_17.10" 
}

समारोह व्यवहार

DiffSuppressFunc

डेटा संरचना: SchemaDiffSuppressFunc

जब प्रदान किया जाता है तो DiffSuppressFunc का उपयोग टेराफॉर्म द्वारा इस क्षेत्र के अंतर की गणना करने के लिए किया जाएगा। सामान्य उपयोग के मामले स्ट्रिंग नामों में कैपिटलाइज़ेशन अंतर हैं, या JSON मूल्यों में तार्किक तुल्यताएं हैं।

स्कीमा उदाहरण:

"base_image": {
  Type:     schema.TypeString,
  Required: true,
  ForceNew: true,
  # Suppress the diff shown if the base_image name are equal when both compared in lower        #  case.
  DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool {
    if strings.ToLower(old) == strings.ToLower(new) {
      return true 
    }
    return false
  },
},

कॉन्फ़िगरेशन उदाहरण:

यहाँ हम मान लेते हैं कि API base_image नाम के कैपिटलाइज़ेशन को स्वीकार करता है और इसे लोअरकेस स्ट्रिंग में परिवर्तित करता है। एपीआई इसके बाद प्रतिक्रियाओं में कम मामले मूल्य देता है।

resource "example_instance" "ex" {
  name = "bastion host"
  base_image = "UBunTu_17.10" 
}

DefaultFunc

डेटा संरचना: SchemaDefaultFunc
प्रतिबंध:

  • Default निर्दिष्ट होने पर उपयोग नहीं किया जा सकता है

जब DefaultFunc का उपयोग इस तत्व के लिए एक गतिशील डिफ़ॉल्ट की गणना करने के लिए किया जाएगा। इस फ़ंक्शन का रिटर्न मान "स्थिर" होना चाहिए, जैसे कि किसी अन्य परिवर्तन के बिना बाद की योजनाओं में विभिन्न मूल्यों को वापस करने के लिए असामान्य है, ताकि terraform plan में अनावश्यक अंतर से बचा जा सके।

DefaultFunc प्रदाता स्कीमा में सबसे अधिक उपयोग किया जाता है, तत्वों को पर्यावरण से डिफ़ॉल्ट रूप से पढ़ने की अनुमति देता है।

स्कीमा उदाहरण:

इस उदाहरण में, टेराफॉर्म पर्यावरण से region को पढ़ने का प्रयास करेगा यदि यह कॉन्फ़िगरेशन से छोड़ा गया है। यदि यह पर्यावरण में नहीं पाया जाता है, तो us-west का एक डिफ़ॉल्ट मान दिया जाता है।

"region": {
  Type:     schema.TypeString,
  Required: true,
  DefaultFunc: func() (interface{}, error) {
    if v := os.Getenv("PROVIDER_REGION"); v != "" {
      return v, nil
    }

    return "us-west", nil
  },
},

कॉन्फ़िगरेशन उदाहरण (प्रदान):

provider "example" {
  api_key = "somesecretkey"
  region = "us-est"
}

कॉन्फ़िगरेशन उदाहरण (डिफ़ॉल्ट वातावरण के साथ PROVIDER_REGION us-west वातावरण में us-west में सेट):

provider "example" {
  api_key = "somesecretkey"
  # region is "us-west"
}

कॉन्फ़िगरेशन उदाहरण (वातावरण में PROVIDER_REGION साथ डिफ़ॉल्ट फ़ंक):

provider "example" {
  api_key = "somesecretkey"
  # region is "us-east" 
}