Terraform 0.11 - Schema Attributes and Types

स्कीमा विशेषताएँ और प्रकार




terraform

स्कीमा विशेषताएँ और प्रकार

लगभग हर टेराफ़ॉर्म प्लगइन उपयोगकर्ता को कॉन्फ़िगर करने योग्य पैरामीटर, उदाहरण जैसे कि प्रोविज़न secret_key , एक प्रदाता का region या एक संसाधन name । प्रत्येक पैरामीटर को आइटम स्कीमा में परिभाषित किया गया है, जो स्कीमा संरचनाओं के लिए स्ट्रिंग नामों का एक नक्शा है।

एक संसाधन के नीचे दिए गए उदाहरण के कार्यान्वयन में आप मानकों को परिभाषित और name परिभाषित करते हुए देखते हैं:

func resourceExampleResource() *schema.Resource {
    return &schema.Resource{
        // ... //
        Schema: map[string]*schema.Schema{
            "uuid": {
                Type:     schema.TypeString,
                Computed: true,
            },

            "name": {
                Type:         schema.TypeString,
                Required:     true,
                ForceNew:     true,
                ValidateFunc: validatName,
            },
            // ... //
        },
    }
}

स्कीमा विशेषता Type परिभाषित करता है कि उपयोगकर्ता इस तत्व के लिए किस प्रकार के मान प्रदान कर सकते हैं। यहाँ हम उपलब्ध स्कीमा प्रकार को परिभाषित करते हैं जो समर्थित है। तत्व व्यवहार को कॉन्फ़िगर करने के बारे में अधिक जानकारी के लिए स्कीमा व्यवहार देखें।

प्रकार

स्कीमा विशेषता Type यह निर्धारित करता है कि तत्व को कॉन्फ़िगर करने में कौन सा डेटा मान्य है, साथ ही साथ interpolation में उपयोग किए जाने पर डेटा का प्रकार वापस आ गया interpolation । स्कीमा विशेषताएँ नीचे दिए गए प्रकारों में से एक होनी चाहिए, और इन्हें प्राथमिक या सकल प्रकारों के रूप में शिथिल रूप से वर्गीकृत किया जा सकता है:

आदिम प्रकार

आदिम प्रकार सरल मान हैं जैसे पूर्णांक, बूलियन और तार। प्रिमिटिव्स को स्टेट फाइल में "key": "value" स्ट्रिंग जोड़े के रूप में स्टोर किया जाता है, जहां की और value दोनों स्ट्रिंग प्रेजेंटेशन होते हैं।

अलग प्रकार के

एग्रीगेट प्रकार आदिम प्रकार के संयोजन से अधिक जटिल डेटा प्रकार बनाते हैं। एलीगेट प्रकार उन तत्वों के प्रकार को परिभाषित कर सकते हैं जो Elem संपत्ति का उपयोग करके होते हैं। यदि Elem संपत्ति को छोड़ दिया जाता है, तो डिफ़ॉल्ट तत्व डेटा प्रकार एक string

राज्य में सकल प्रकारों को एक key.index रूप में संग्रहीत किया जाता है। संपत्ति के प्रत्येक तत्व के लिए value जोड़ी, प्रकार के आधार पर key लिए एक अद्वितीय index संलग्न है। राज्य में एक अतिरिक्त key.index आइटम शामिल है जो उन संपत्तियों की संख्या को ट्रैक करता है जिनमें संपत्ति शामिल है।

आदिम प्रकार

TypeBool

डेटा संरचना: bool
उदाहरण: true या false

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

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

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

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

राज्य का प्रतिनिधित्व:

"encrypted": "true",

TypeInt

डेटा संरचना: int
उदाहरण: -9 , 0 , 1 , 2 , 9

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

"cores": {
  Type:     schema.TypeInt,
},

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

resource "example_compute_instance" "ex" {
  cores = 16
}

राज्य का प्रतिनिधित्व:

"cores": "16",

TypeFloat

डेटा संरचना: float64
उदाहरण: 1.0 , 7.19009

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

"price": {
  Type:     schema.TypeFloat,
},

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

resource "example_spot_request" "ex" {
  price = 0.37
}

राज्य का प्रतिनिधित्व:

"price": "0.37",

TypeString

डेटा संरचना: string
उदाहरण: "Hello, world!"

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

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

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

resource "example_spot_request" "ex" {
  description = "Managed by Terraform"
}

राज्य का प्रतिनिधित्व:

"description": "Managed by Terraform",

दिनांक और समय डेटा

TypeString का उपयोग दिनांक / समय डेटा के लिए भी किया जाता है, पसंदीदा प्रारूप RFC 3339 है (आप प्रदान किए गए सत्यापन फ़ंक्शन का उपयोग कर सकते हैं)।

उदाहरण: 2006-01-02T15:04:05Z07:00

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

"expiration": {
  Type:         schema.TypeString,
  ValidateFunc: validation.ValidateRFC3339TimeString,
},

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

resource "example_resource" "ex" {
  expiration = "2006-01-02T15:04:05Z07:00"
}

राज्य का प्रतिनिधित्व:

"expiration": "2006-01-02T15:04:05Z07:00",

सकल प्रकार

TypeMap

डेटा संरचना: map : map[string]interface{}
उदाहरण: key = value

Elem संपत्ति द्वारा परिभाषित स्ट्रिंग कुंजी और मूल्यों के साथ एक प्रमुख आधारित नक्शा (एक शब्दकोश के रूप में भी जाना जाता है)।

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

"tags": {
  Type:     schema.TypeMap,
},

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

resource "example_compute_instance" "ex" {
  tags {
    env = "development"
    name = "example tag"
  }
}

राज्य का प्रतिनिधित्व:

अनुक्रमणिका के रूप में कुंजी के साथ TypeMap आइटम राज्य में संग्रहीत किए जाते हैं। किसी मानचित्र में वस्तुओं की गिनती को % सूचकांक द्वारा निरूपित किया जाता है:

"tags.%": "2",
"tags.env": "development",
"tags.name": "example tag",

TypeList

डेटा संरचना: Slice : []interface{}
उदाहरण: []interface{"2", "3", "4"}

वस्तुओं के एक ऑर्डर किए गए संग्रह का प्रतिनिधित्व करने के लिए उपयोग किया जाता है, जहां आइटम प्रस्तुत किए जाने वाले ऑर्डर मॉडल के संसाधन के व्यवहार को प्रभावित कर सकते हैं। ऑर्डर की गई वस्तुओं का एक उदाहरण नेटवर्क रूटिंग नियम होगा, जहां नियमों का परीक्षण उस क्रम में किया जाता है जब तक कि उन्हें मैच नहीं मिला। आइटम सभी उसी प्रकार के हैं जो Elem संपत्ति द्वारा परिभाषित किए गए हैं।

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

"termination_policies": {
  Type:     schema.TypeList,
  Elem: &schema.Schema{
    Type: schema.TypeString,
  },
},

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

resource "example_compute_instance" "ex" {
  termination_policies = ["OldestInstance","ClosestToNextInstanceHour"]
}

राज्य का प्रतिनिधित्व:

TypeList आइटम राज्य में एक शून्य आधारित सूचकांक डेटा संरचना में संग्रहीत किए जाते हैं।

"name_servers.#": "4",
"name_servers.0": "ns-1508.awsdns-60.org",
"name_servers.1": "ns-1956.awsdns-52.co.uk",
"name_servers.2": "ns-469.awsdns-58.com",
"name_servers.3": "ns-564.awsdns-06.net",

टाइपसेट

डेटा संरचना: *schema.Set
उदाहरण: []string{"one", "two", "three"}

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

एक सेट के तत्व टेराफॉर्म द्वारा अनुमत अन्य प्रकारों में से कोई भी हो सकते हैं, जिसमें एक और schema । सेट आइटम दोहराए नहीं जा सकते।

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

"ingress_rule": {
  Type:     schema.TypeSet,
  Elem: &schema.Resource{
    Schema: map[string]*schema.Schema{
      "from_port": {
        Type:     schema.TypeInt,
        Required: true,
      },

      "to_port": {
        Type:     schema.TypeInt,
        Required: true,
      },

      "protocol": {
        Type:      schema.TypeString,
        Required:  true,
        StateFunc: protocolStateFunc,
      },

      "cidr_blocks": {
        Type:     schema.TypeList,
        Optional: true,
        Elem: &schema.Schema{
          Type:         schema.TypeString,
        },
      },
    },
  },
}

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

resource "example_security_group" "ex" {
  name        = "sg_test"              
  description = "managed by Terraform" 

  ingress {                            
    protocol    = "tcp"                
    from_port   = 80                   
    to_port     = 9000                 
    cidr_blocks = ["10.0.0.0/8"]       
  }                                    

  ingress {                            
    protocol    = "tcp"                
    from_port   = 80                   
    to_port     = 8000                 
    cidr_blocks = ["0.0.0.0/0", "10.0.0.0/8"]
  }                                    
}                                      

राज्य का प्रतिनिधित्व:

TypeSet आइटम राज्य में संग्रहित किए जाते हैं, जिसमें एक इंडेक्स वैल्यू की गणना सेट की विशेषताओं के हैश द्वारा की जाती है।

"ingress.#": "2",
"ingress.1061987227.cidr_blocks.#": "1",
"ingress.1061987227.cidr_blocks.0": "10.0.0.0/8",
"ingress.1061987227.description": "",
"ingress.1061987227.from_port": "80",
"ingress.1061987227.ipv6_cidr_blocks.#": "0",
"ingress.1061987227.protocol": "tcp",
"ingress.1061987227.security_groups.#": "0",
"ingress.1061987227.self": "false",
"ingress.1061987227.to_port": "9000",
"ingress.493694946.cidr_blocks.#": "2",
"ingress.493694946.cidr_blocks.0": "0.0.0.0/0",
"ingress.493694946.cidr_blocks.1": "10.0.0.0/8",
"ingress.493694946.description": "",
"ingress.493694946.from_port": "80",
"ingress.493694946.ipv6_cidr_blocks.#": "0",
"ingress.493694946.protocol": "tcp",
"ingress.493694946.security_groups.#": "0",
"ingress.493694946.self": "false",
"ingress.493694946.to_port": "8000",

अगला कदम

प्रत्येक स्कीमा तत्वों के व्यवहार को अनुकूलित करने के तरीके के बारे में जानने के लिए चेकआउट स्कीम व्यवहार।