Terraform 0.11 - Input Variable Configuration

इनपुट चर विन्यास




terraform

इनपुट चर विन्यास

इनपुट चर एक टेराफॉर्म मॉड्यूल के लिए मापदंडों के रूप में कार्य करते हैं।

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

इनपुट वैरिएबल का उपयोग गेटिंग स्टार्टेड गाइड सेक्शन इनपुट वेरिएबल्स में किया जाता है

यह पृष्ठ मानता है कि आप पहले से ही विन्यास वाक्य रचना से परिचित हैं।

उदाहरण

इनपुट चर को निम्नानुसार परिभाषित किया जा सकता है:

variable "key" {
  type = "string"
}

variable "images" {
  type = "map"

  default = {
    us-east-1 = "image-1234"
    us-west-2 = "image-4567"
  }
}

variable "zones" {
  default = ["us-east-1a", "us-east-1b"]
}

विवरण

variable ब्लॉक टेराफ़ॉर्म मॉड्यूल के लिए एकल इनपुट चर को कॉन्फ़िगर करता है। प्रत्येक ब्लॉक एक एकल चर घोषित करता है।

ब्लॉक हेडर में दिए गए नाम का उपयोग सीएलआई के माध्यम से वेरिएबल के लिए एक मान असाइन करने और कॉन्फ़िगरेशन में अन्यत्र वेरिएबल को संदर्भित करने के लिए किया जाता है।

ब्लॉक बॉडी के भीतर ( { } बीच) चर के लिए कॉन्फ़िगरेशन है, जो निम्नलिखित तर्कों को स्वीकार करता है:

  • type (वैकल्पिक) - यदि यह सेट करता है तो यह चर के प्रकार को परिभाषित करता है। मान्य मान string , list और map । यदि यह फ़ील्ड छोड़ा गया है, तो चर प्रकार default आधार पर अनुमान लगाया जाएगा। यदि कोई default प्रदान नहीं किया जाता है, तो प्रकार को string माना जाता है।

  • default (वैकल्पिक) - यह चर के लिए एक डिफ़ॉल्ट मान सेट करता है। यदि कोई डिफ़ॉल्ट प्रदान नहीं किया जाता है, तो कॉलर द्वारा कोई मान प्रदान नहीं किए जाने पर टेराफ़ॉर्म एक त्रुटि उत्पन्न करेगा। डिफ़ॉल्ट मान किसी भी समर्थित डेटा प्रकार का हो सकता है, जैसा कि नीचे वर्णित है। यदि type भी सेट है, तो दिए गए मान निर्दिष्ट प्रकार के होने चाहिए।

  • description (वैकल्पिक) - चर के लिए एक मानव-अनुकूल वर्णन। यह मुख्य रूप से आपके टेराफ़ॉर्म कॉन्फ़िगरेशन का उपयोग करने वाले उपयोगकर्ताओं के लिए प्रलेखन के लिए है। जब एक मॉड्यूल टेराफॉर्म रजिस्ट्री में प्रकाशित होता है, तो दिए गए विवरण को प्रलेखन के भाग के रूप में दिखाया गया है।

एक चर का नाम किसी भी मान्य पहचानकर्ता हो सकता है। हालाँकि, मॉड्यूल कॉन्फ़िगरेशन ब्लॉक की व्याख्या के कारण, नाम source , version और providers टेराफॉर्म के स्वयं के उपयोग के लिए आरक्षित हैं और इस प्रकार किसी भी मॉड्यूल को चाइल्ड मॉड्यूल के रूप में उपयोग करने के लिए अनुशंसित नहीं किया जाता है।

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

स्ट्रिंग्स

स्ट्रिंग मान सरल हैं और मान मैपिंग के लिए एक मूल कुंजी का प्रतिनिधित्व करते हैं जहां कुंजी चर नाम है। एक उदाहरण है:

variable "key" {
  type    = "string"
  default = "value"
}

एक बहु-पंक्ति स्ट्रिंग मान heredoc सिंटैक्स का उपयोग करके प्रदान किया जा सकता है।

variable "long_key" {
  type = "string"
  default = <<EOF
This is a long key.
Running over several lines.
EOF
}

Terraform स्ट्रिंग मानों से लेकर संख्यात्मक और बूलियन मानों के संदर्भ के आधार पर स्वचालित रूपांतरण करता है, इसलिए व्यवहार में स्ट्रिंग चर का उपयोग किसी भी आदिम प्रकार के तर्क सेट करने के लिए किया जा सकता है। बूलियन मूल्यों के लिए विशेष रूप से कुछ गुच्छे हैं, नीचे बूलियन के तहत वर्णित हैं।

मैप्स

नक्शा मान स्ट्रिंग कुंजियों से स्ट्रिंग मानों के लिए एक लुकअप तालिका है। यह कुछ अन्य प्रदान किए गए मूल्य के आधार पर एक मूल्य का चयन करने के लिए उपयोगी है।

नक्शे का एक सामान्य उपयोग प्रति क्षेत्र मशीन छवियों की एक तालिका बनाने के लिए है, इस प्रकार है:

variable "images" {
  type    = "map"
  default = {
    "us-east-1" = "image-1234"
    "us-west-2" = "image-4567"
  }
}

सूचियाँ

एक सूची मान शून्य से शुरू होने वाले पूर्णांकों द्वारा अनुक्रमित तार का एक क्रमबद्ध क्रम है। उदाहरण के लिए:

variable "users" {
  type    = "list"
  default = ["admin", "ubuntu"]
}

बूलियन्स

हालांकि टेराफॉर्म स्वचालित रूप से बूलियन और स्ट्रिंग मानों के बीच परिवर्तित हो सकता है, इन रूपांतरणों के कुछ सूक्ष्म निहितार्थ हैं जो इनपुट चर के साथ बूलियन मानों का उपयोग करते समय पूरी तरह से समझा जाना चाहिए।

रूपांतरण की प्रक्रिया में कुछ गुहाओं से बचने के लिए, स्ट्रिंग को "true" और "false" रूप में चर के लिए बूलियन मान निर्दिष्ट करने की अनुशंसा की जाती है। टेराफॉर्म का एक भविष्य संस्करण बूलियन मूल्यों का ठीक से समर्थन करेगा और इसलिए वर्तमान व्यवहार पर भरोसा करने से उस समय पीछे-असंगतता हो सकती है।

निम्नलिखित जैसे एक विन्यास के लिए:

variable "active" {
  default = false
}

टेराफ़ॉर्म चलाते समय झूठी "0" स्ट्रिंग में बदल जाती है।

फिर, जहाँ आप ओवरराइड निर्दिष्ट करते हैं, उसके आधार पर व्यवहार भिन्न हो सकता है:

  • एक tfvars फ़ाइल में बूलियन मूल्यों के साथ चर इसी तरह "0" और "1" मूल्यों में परिवर्तित किया जाएगा।

  • -var कमांड लाइन फ्लैग के माध्यम से निर्दिष्ट चर "सच" और "झूठे" होंगे, इसलिए स्पष्ट रूप से "0" या "1" का उपयोग करना चाहिए।

  • TF_VAR_ पर्यावरण चर के साथ निर्दिष्ट चर, -var तरह ही शाब्दिक स्ट्रिंग मान -var

टेराफॉर्म का एक भविष्य का संस्करण पूरी तरह से प्रथम श्रेणी के बूलियन प्रकारों का समर्थन करेगा जो बूलियंस के व्यवहार को सुसंगत बना देगा जैसा कि आप उम्मीद करेंगे। यह ऊपर दिए गए कुछ व्यवहार को तोड़ सकता है।

बूलियन जैसे चर को संसाधन कॉन्फ़िगरेशन के मापदंडों के रूप में पारित करना, जो बूलियन मूल्यों की अपेक्षा करते हैं, वे लगातार परिवर्तित होते हैं:

  • "1" और "सत्य" true हो जाते true
  • "0" और "असत्य" false हो जाते हैं

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

पर्यावरण चर

रूट वेरिएबल में इनपुट वैरिएबल के मान को सेट करने के लिए एनवायरमेंट वेरिएबल्स का उपयोग किया जा सकता है। पर्यावरण चर का नाम TF_VAR_ होना चाहिए और चर नाम के बाद चर का मान होना चाहिए।

उदाहरण के लिए, नीचे दिया गया कॉन्फ़िगरेशन:

variable "image" {}

चर को पर्यावरण चर के माध्यम से सेट किया जा सकता है:

$ TF_VAR_image=foo terraform apply

मूल्य में HCL सिंटैक्स का उपयोग करते हुए मैप्स और सूचियों को पर्यावरण चर के साथ निर्दिष्ट किया जा सकता है।

सूची चर जैसे:

variable "somelist" {
  type = "list"
}

चर को इस तरह सेट किया जा सकता है:

$ TF_VAR_somelist='["ami-abc123", "ami-bcd234"]' terraform plan

इसी तरह, जैसे एक मानचित्र घोषित किया गया है:

variable "somemap" {
  type = "map"
}

मान को इस तरह सेट किया जा सकता है:

$ TF_VAR_somemap='{foo = "bar", baz = "qux"}' terraform plan

चर फ़ाइलें

रूट मॉड्यूल के इनपुट चर के मान को चर परिभाषा फ़ाइलों में इकट्ठा किया जा सकता है और -var-file=FILE विकल्प का उपयोग करके एक साथ पारित किया जाता है।

वे सभी फाइलें जो terraform.tfvars या *.auto.tfvars हैं, जो मौजूदा डायरेक्टरी में मौजूद हैं, *.auto.tfvars अपने आप उन्हें वेरिएबल को पॉप्युलेट करने के लिए लोड करता है। यदि फ़ाइल कहीं और स्थित है, तो आप -var-file ध्वज का उपयोग करके फ़ाइल में पथ पास कर सकते हैं। ऐसी फ़ाइलों को .tfvars में समाप्त होने वाले नामों के साथ नाम देने की सिफारिश की जाती है।

चर फ़ाइलों को परिभाषित करने के लिए चर फ़ाइलें HCL या JSON सिंटैक्स का उपयोग करती हैं। टेराफ़ॉर्म कॉन्फ़िगरेशन में variable ब्लॉक में डिफ़ॉल्ट मान के समान स्ट्रिंग्स, सूची या मानचित्र सेट किए जा सकते हैं। उदाहरण के लिए:

foo = "bar"
xyz = "abc"

somelist = [
  "one",
  "two",
]

somemap = {
  foo = "bar"
  bax = "qux"
}

-var-file फ़्लैग का उपयोग कई बार प्रति आदेश मंगलाचरण में किया जा सकता है:

$ terraform apply -var-file=foo.tfvars -var-file=bar.tfvars

परिवर्तनशील विलय

जब एक ही इनपुट वैरिएबल के लिए कई मान प्रदान किए जाते हैं, तो मानचित्र मानों को विलय कर दिया जाता है, जबकि अन्य परिभाषाएं अंतिम परिभाषा द्वारा ओवरराइड की जाती हैं।

उदाहरण के लिए, यदि आप कमांड लाइन पर दो बार एक चर को परिभाषित करते हैं:

$ terraform apply -var foo=bar -var foo=baz

तब foo का मूल्य foo होगा, क्योंकि यह अंतिम परिभाषा देखी गई थी।

हालाँकि, मानचित्रों के लिए, मान विलय किए गए हैं:

$ terraform apply -var 'foo={quux="bar"}' -var 'foo={bar="baz"}'

foo का परिणामी मूल्य होगा:

{
  quux = "bar"
  bar = "baz"
}

टेराफ़ॉर्म में मानचित्र मानों को अनसेट करने का वर्तमान में कोई तरीका नहीं है। जब भी किसी नक्शे को परिवर्तनशील इनपुट के माध्यम से संशोधित किया जाता है या एक मॉड्यूल में पारित किया जाता है, तो मान हमेशा विलय होते हैं।

परिवर्तनशील प्राथमिकता

इन दोनों फाइलों में परिवर्तनीय baz परिभाषित है:

foo.tfvars

baz = "foo"

bar.tfvars

baz = "bar"

जब वे निम्नलिखित क्रम में पारित हो जाते हैं:

$ terraform apply -var-file=foo.tfvars -var-file=bar.tfvars

इसका परिणाम यह होगा कि baz में वैल्यू bar समाहित होगा क्योंकि bar.tfvars में अंतिम परिभाषा भरी हुई है।

कार्य-निर्देशिका में उन फ़ाइलों के बाद -var-file ध्वज का उपयोग करके पास की गई परिभाषा फ़ाइलों का हमेशा मूल्यांकन किया जाएगा।

परिभाषा फ़ाइलों या -var साथ पारित मान, TF_VAR_ पर्यावरण चर पर पूर्वता TF_VAR_ , क्योंकि पर्यावरण चर को चूक माना जाता है।