Terraform 0.11

openstack_compute_instance_v2




terraform

openstack_compute_instance_v2

OpenStack के भीतर V2 VM इंस्टेंस संसाधन का प्रबंधन करता है।

उदाहरण उपयोग

मूल उदाहरण

resource "openstack_compute_instance_v2" "basic" {
  name            = "basic"
  image_id        = "ad091b52-742f-469e-8f3c-fd81cadf0743"
  flavor_id       = "3"
  key_pair        = "my_key_pair_name"
  security_groups = ["default"]

  metadata {
    this = "that"
  }

  network {
    name = "my_network"
  }
}

संलग्न मात्रा के साथ उदाहरण

resource "openstack_blockstorage_volume_v2" "myvol" {
  name = "myvol"
  size = 1
}

resource "openstack_compute_instance_v2" "myinstance" {
  name            = "myinstance"
  image_id        = "ad091b52-742f-469e-8f3c-fd81cadf0743"
  flavor_id       = "3"
  key_pair        = "my_key_pair_name"
  security_groups = ["default"]

  network {
    name = "my_network"
  }
}

resource "openstack_compute_volume_attach_v2" "attached" {
  compute_id = "${openstack_compute_instance_v2.myinstance.id}"
  volume_id = "${openstack_blockstorage_volume_v2.myvol.id}"
}

वॉल्यूम से बूट करें

resource "openstack_compute_instance_v2" "boot-from-volume" {
  name            = "boot-from-volume"
  flavor_id       = "3"
  key_pair        = "my_key_pair_name"
  security_groups = ["default"]

  block_device {
    uuid                  = "<image-id>"
    source_type           = "image"
    volume_size           = 5
    boot_index            = 0
    destination_type      = "volume"
    delete_on_termination = true
  }

  network {
    name = "my_network"
  }
}

मौजूदा वॉल्यूम से बूट करें

resource "openstack_blockstorage_volume_v1" "myvol" {
  name     = "myvol"
  size     = 5
  image_id = "<image-id>"
}

resource "openstack_compute_instance_v2" "boot-from-volume" {
  name            = "bootfromvolume"
  flavor_id       = "3"
  key_pair        = "my_key_pair_name"
  security_groups = ["default"]

  block_device {
    uuid                  = "${openstack_blockstorage_volume_v1.myvol.id}"
    source_type           = "volume"
    boot_index            = 0
    destination_type      = "volume"
    delete_on_termination = true
  }

  network {
    name = "my_network"
  }
}

बूट इंस्टेंस, वॉल्यूम बनाएँ, और वॉल्यूम को एक ब्लॉक डिवाइस के रूप में संलग्न करें

resource "openstack_compute_instance_v2" "instance_1" {
  name            = "instance_1"
  image_id        = "<image-id>"
  flavor_id       = "3"
  key_pair        = "my_key_pair_name"
  security_groups = ["default"]

  block_device {
    uuid                  = "<image-id>"
    source_type           = "image"
    destination_type      = "local"
    boot_index            = 0
    delete_on_termination = true
  }

  block_device {
    source_type           = "blank"
    destination_type      = "volume"
    volume_size           = 1
    boot_index            = 1
    delete_on_termination = true
  }
}

बूट इंस्टेंस और ब्लॉक डिवाइस के रूप में मौजूदा वॉल्यूम संलग्न करें

resource "openstack_blockstorage_volume_v2" "volume_1" {
  name = "volume_1"
  size = 1
}

resource "openstack_compute_instance_v2" "instance_1" {
  name            = "instance_1"
  image_id        = "<image-id>"
  flavor_id       = "3"
  key_pair        = "my_key_pair_name"
  security_groups = ["default"]

  block_device {
    uuid                  = "<image-id>"
    source_type           = "image"
    destination_type      = "local"
    boot_index            = 0
    delete_on_termination = true
  }

  block_device {
    uuid                  = "${openstack_blockstorage_volume_v2.volume_1.id}"
    source_type           = "volume"
    destination_type      = "volume"
    boot_index            = 1
    delete_on_termination = true
  }
}

कई नेटवर्क के साथ उदाहरण

resource "openstack_networking_floatingip_v2" "myip" {
  pool = "my_pool"
}

resource "openstack_compute_instance_v2" "multi-net" {
  name            = "multi-net"
  image_id        = "ad091b52-742f-469e-8f3c-fd81cadf0743"
  flavor_id       = "3"
  key_pair        = "my_key_pair_name"
  security_groups = ["default"]

  network {
    name = "my_first_network"
  }

  network {
    name = "my_second_network"
  }
}

resource "openstack_compute_floatingip_associate_v2" "myip" {
  floating_ip = "${openstack_networking_floatingip_v2.myip.address}"
  instance_id = "${openstack_compute_instance_v2.multi-net.id}"
  fixed_ip = "${openstack_compute_instance_v2.multi-net.network.1.fixed_ip_v4}"
}

व्यक्तित्व के साथ उदाहरण

resource "openstack_compute_instance_v2" "personality" {
  name            = "personality"
  image_id        = "ad091b52-742f-469e-8f3c-fd81cadf0743"
  flavor_id       = "3"
  key_pair        = "my_key_pair_name"
  security_groups = ["default"]

  personality {
    file    = "/path/to/file/on/instance.txt"
    content = "contents of file"
  }

  network {
    name = "my_network"
  }
}

कई पंचांग डिस्क के साथ उदाहरण

resource "openstack_compute_instance_v2" "multi-eph" {
  name            = "multi_eph"
  image_id        = "ad091b52-742f-469e-8f3c-fd81cadf0743"
  flavor_id       = "3"
  key_pair        = "my_key_pair_name"
  security_groups = ["default"]

  block_device {
    boot_index            = 0
    delete_on_termination = true
    destination_type      = "local"
    source_type           = "image"
    uuid                  = "<image-id>"
  }

  block_device {
    boot_index            = -1
    delete_on_termination = true
    destination_type      = "local"
    source_type           = "blank"
    volume_size           = 1
  }

  block_device {
    boot_index            = -1
    delete_on_termination = true
    destination_type      = "local"
    source_type           = "blank"
    volume_size           = 1
  }
}

उपयोगकर्ता डेटा (क्लाउड-इनिट) के साथ उदाहरण

resource "openstack_compute_instance_v2" "instance_1" {
  name            = "basic"
  image_id        = "ad091b52-742f-469e-8f3c-fd81cadf0743"
  flavor_id       = "3"
  key_pair        = "my_key_pair_name"
  security_groups = ["default"]
  user_data       = "#cloud-config\nhostname: instance_1.example.com\nfqdn: instance_1.example.com"

  network {
    name = "my_network"
  }
}

user_data विभिन्न स्रोतों से आ सकता है: इनलाइन, file फ़ंक्शन से पढ़ा जाता है, या template_cloudinit_config संसाधन।

तर्क संदर्भ

निम्नलिखित तर्क समर्थित हैं:

  • region - (वैकल्पिक) सर्वर आवृत्ति बनाने के लिए क्षेत्र। यदि छोड़ दिया जाता है, तो प्रदाता के region तर्क का उपयोग किया जाता है। इसे बदलने से एक नया सर्वर बनता है।

  • name - (आवश्यक) संसाधन के लिए एक अद्वितीय नाम।

  • image_id - (वैकल्पिक; आवश्यक है यदि image_name खाली है और वॉल्यूम से बूट नहीं हो रहा है। वॉल्यूम से बूटिंग निर्दिष्ट नहीं करें।) सर्वर के लिए वांछित छवि की छवि आईडी। इसे बदलने से एक नया सर्वर बनता है।

  • image_name - (वैकल्पिक; आवश्यक है यदि image_id खाली है और वॉल्यूम से बूटिंग नहीं है। वॉल्यूम से बूटिंग निर्दिष्ट नहीं करें।) सर्वर के लिए वांछित छवि का नाम। इसे बदलने से एक नया सर्वर बनता है।

  • flavor_id - (वैकल्पिक; आवश्यक है कि flavor_name खाली है) सर्वर के लिए वांछित स्वाद की स्वाद आईडी। इसे बदलने से मौजूदा सर्वर का आकार बदल जाता है।

  • flavor_name - (वैकल्पिक; आवश्यक है अगर flavor_id खाली हो) सर्वर के लिए वांछित स्वाद का नाम। इसे बदलने से मौजूदा सर्वर का आकार बदल जाता है।

  • user_data - (वैकल्पिक) उदाहरण लॉन्च करते समय प्रदान करने वाला उपयोगकर्ता डेटा। इसे बदलने से एक नया सर्वर बनता है।

  • security_groups - (वैकल्पिक) सर्वर के साथ जुड़ने के लिए एक या अधिक सुरक्षा समूह नामों की एक सरणी। मौजूदा सर्वर से सुरक्षा समूहों को जोड़ने / हटाने में इस परिणाम को बदलना। नोट : जब पोर्ट्स का उपयोग कर नेटवर्क पर इंस्टेंस को अटैच किया जाता है, तो पोर्ट पर सिक्योरिटी ग्रुप्स को रखें न कि इंस्टेंस को।

  • availability_zone - (वैकल्पिक) सर्वर बनाने के लिए उपलब्धता क्षेत्र। इसे बदलने से एक नया सर्वर बनता है।

  • network - (वैकल्पिक) उदाहरण के लिए संलग्न करने के लिए एक या अधिक नेटवर्क की एक सरणी। नेटवर्क ऑब्जेक्ट संरचना नीचे प्रलेखित है। इसे बदलने से एक नया सर्वर बनता है।

  • metadata - (वैकल्पिक) मेटाडेटा कुंजी / मूल्य जोड़े उदाहरण के भीतर से उपलब्ध कराने के लिए। इसे बदलने से मौजूदा सर्वर मेटाडेटा अपडेट हो जाता है।

  • config_drive - (वैकल्पिक) उदाहरण को कॉन्फ़िगर करने के लिए config_drive सुविधा का उपयोग करना है या नहीं। इसे बदलने से एक नया सर्वर बनता है।

  • admin_pass - (वैकल्पिक) सर्वर को असाइन करने के लिए प्रशासनिक पासवर्ड। इसे बदलने से मौजूदा सर्वर पर रूट पासवर्ड बदल जाता है।

  • key_pair - (वैकल्पिक) सर्वर पर डालने के लिए एक प्रमुख जोड़ी का नाम। मुख्य जोड़ी को पहले से ही बनाया जाना चाहिए और किरायेदार के खाते से जुड़ा होना चाहिए। इसे बदलने से एक नया सर्वर बनता है।

  • block_device - (वैकल्पिक) ब्लॉक डिवाइसेस का कॉन्फ़िगरेशन। ब्लॉक_देविस संरचना नीचे प्रलेखित है। इसे बदलने से एक नया सर्वर बनता है। आप कई ब्लॉक डिवाइस निर्दिष्ट कर सकते हैं जो कई डिस्क के साथ एक उदाहरण बनाएंगे। यह कॉन्फ़िगरेशन बहुत लचीला है, इसलिए कृपया अधिक जानकारी के लिए निम्न reference देखें।

  • scheduler_hints - (वैकल्पिक) नोवा अनुसूचक को संकेत के साथ प्रदान करें कि उदाहरण को कैसे लॉन्च किया जाना चाहिए। उपलब्ध संकेत नीचे वर्णित हैं।

  • personality - (वैकल्पिक) एक या अधिक फ़ाइलों और उनकी सामग्री को परिभाषित करके एक उदाहरण के व्यक्तित्व को अनुकूलित करें। व्यक्तित्व संरचना नीचे वर्णित है।

  • stop_before_destroy - (वैकल्पिक) क्या इसे नष्ट करने से पहले इनायत रोकने की कोशिश करना है, इस प्रकार अतिथि OS डेमॉन को सही तरीके से बंद करने का मौका देना। यदि समय-समय पर उदाहरण बंद नहीं होता है, तो यह वैसे भी नष्ट हो जाएगा।

  • force_delete - (वैकल्पिक) चाहे ओपनस्टैक उदाहरण को जबरदस्ती हटा दिया जाए। यह उन वातावरणों के लिए उपयोगी है, जिनकी पुनः प्राप्ति / नरम विलोपन सक्षम है।

network ब्लॉक का समर्थन करता है:

  • uuid - (आवश्यक है जब तक कि port या name प्रदान नहीं किया जाता है) सर्वर से संलग्न करने के लिए नेटवर्क UUID। इसे बदलने से एक नया सर्वर बनता है।

  • name - (आवश्यक नहीं जब तक कि uuid या port प्रदान नहीं किया जाता है) नेटवर्क का मानव-पठनीय नाम। इसे बदलने से एक नया सर्वर बनता है।

  • port - (आवश्यक नहीं है जब तक कि uuid या name प्रदान नहीं किया जाता है) सर्वर से संलग्न करने के लिए किसी नेटवर्क का पोर्ट UUID। इसे बदलने से एक नया सर्वर बनता है।

  • fixed_ip_v4 - (वैकल्पिक) इस नेटवर्क पर उपयोग किए जाने के लिए एक निश्चित IPv4 पता निर्दिष्ट करता है। इसे बदलने से एक नया सर्वर बनता है।

  • fixed_ip_v6 - (वैकल्पिक) इस नेटवर्क पर उपयोग किए जाने वाले एक निश्चित IPv6 पते को निर्दिष्ट करता है। इसे बदलने से एक नया सर्वर बनता है।

  • access_network - (वैकल्पिक) निर्दिष्ट करता है कि क्या इस नेटवर्क का उपयोग एक्सेस के प्रावधान के लिए किया जाना चाहिए। सही या गलत को स्वीकार करता है। झूठे की अवहेलना करता है।

block_device ब्लॉक का समर्थन करता है:

  • uuid - (आवश्यक है जब तक कि source_type "blank" सेट न हो) छवि, वॉल्यूम या स्नैपशॉट का UUID। इसे बदलने से एक नया सर्वर बनता है।

  • source_type - (आवश्यक) डिवाइस का स्रोत प्रकार। "रिक्त", "छवि", "वॉल्यूम", या "स्नैपशॉट" में से एक होना चाहिए। इसे बदलने से एक नया सर्वर बनता है।

  • volume_size - वॉल्यूम का आकार बनाने के लिए (गीगाबाइट में)। निम्नलिखित संयोजनों में आवश्यक: स्रोत = छवि और गंतव्य = मात्रा, स्रोत = रिक्त और गंतव्य = स्थानीय, और स्रोत = रिक्त और गंतव्य = मात्रा। इसे बदलने से एक नया सर्वर बनता है।

  • boot_index - (वैकल्पिक) वॉल्यूम का बूट इंडेक्स। यह डिफॉल्ट करता है 0. इसे बदलने से एक नया सर्वर बनता है।

  • destination_type - (ऑप्शनल) वह प्रकार जिसे बनाया जाता है। संभावित मान "वॉल्यूम" और "स्थानीय" हैं। इसे बदलने से एक नया सर्वर बनता है।

  • delete_on_termination - (वैकल्पिक) उदाहरण की समाप्ति पर वॉल्यूम / ब्लॉक डिवाइस हटाएं। झूठे की अवहेलना करता है। इसे बदलने से एक नया सर्वर बनता है।

scheduler_hints ब्लॉक का समर्थन करता है:

  • group - (वैकल्पिक) सर्वर समूह का एक यूयूआईडी। उदाहरण को उस समूह में रखा जाएगा।

  • different_host - (वैकल्पिक) उदाहरण UUIDs की एक सूची। उदाहरण अन्य सभी उदाहरणों की तुलना में भिन्न होस्ट पर शेड्यूल किया जाएगा।

  • same_host - (वैकल्पिक) उदाहरण UUIDs की एक सूची। उदाहरण निर्दिष्ट किए गए लोगों के एक ही मेजबान पर निर्धारित किया जाएगा।

  • query - (वैकल्पिक) एक सशर्त क्वेरी जिसे एक उदाहरण को होस्ट करने के लिए एक गणना नोड पास होना चाहिए।

  • target_cell - (वैकल्पिक) उदाहरण को होस्ट करने के लिए एक सेल का नाम।

  • build_near_host_ip - (वैकल्पिक) CIDR फ़ॉर्म में एक IP पता। उदाहरण एक गणना नोड पर रखा जाएगा जो एक ही सबनेट में है।

  • extra_properties - (वैकल्पिक) अनुसूचक को पारित करने के लिए अतिरिक्त संपत्तियों की कुंजी / मूल्य जोड़े।

personality ब्लॉक का समर्थन करता है:

  • file - (आवश्यक) गंतव्य फ़ाइल का पूर्ण पथ।

  • contents - (आवश्यक) फ़ाइल की सामग्री। 255 बाइट्स तक सीमित।

संदर्भ संदर्भित करता है

निम्नलिखित विशेषताएँ निर्यात की जाती हैं:

  • region - उपर्युक्त तर्क देखें।
  • name - उपर्युक्त तर्क देखें।
  • access_ip_v4 - पहला पता फिक्स्ड IPv4 एड्रेस या फ्लोटिंग आईपी।
  • access_ip_v6 - पहला पता फिक्स्ड IPv6 एड्रेस।
  • metadata - उपर्युक्त तर्क देखें।
  • security_groups - उपर्युक्त तर्क देखें।
  • flavor_id - उपर्युक्त तर्क देखें।
  • flavor_name - उपर्युक्त तर्क देखें।
  • network/uuid - उपर्युक्त तर्क देखें।
  • network/name - उपर्युक्त तर्क देखें।
  • network/port - उपर्युक्त तर्क देखें।
  • network/fixed_ip_v4 - उस नेटवर्क पर इंस्टेंस का निश्चित IPv4 पता।
  • network/fixed_ip_v6 - उस नेटवर्क पर इंस्टेंस का निश्चित IPv6 पता।
  • network/mac - उस नेटवर्क पर NIC का MAC एड्रेस।
  • all_metadata - इसमें सभी उदाहरण मेटाडेटा शामिल हैं, यहां तक ​​कि मेटाडेटा भी Terraform द्वारा सेट नहीं किया गया है।

टिप्पणियाँ

एकाधिक पंचांग डिस्क

एक से अधिक अल्पकालिक (स्थानीय) डिस्क के साथ एक उदाहरण बनाने के लिए कई block_device प्रविष्टियों को निर्दिष्ट करना संभव है। एकाधिक पंचांग डिस्क बनाने के लिए, चुने हुए स्वाद का समर्थन करने के लिए अल्पकालिक अंतरिक्ष की कुल राशि का योग कम या बराबर होना चाहिए।

निम्न उदाहरण से पता चलता है कि कई पंचांग डिस्क के साथ एक उदाहरण कैसे बनाया जाए:

resource "openstack_compute_instance_v2" "foo" {
  name            = "terraform-test"
  security_groups = ["default"]

  block_device {
    boot_index            = 0
    delete_on_termination = true
    destination_type      = "local"
    source_type           = "image"
    uuid                  = "<image uuid>"
  }

  block_device {
    boot_index            = -1
    delete_on_termination = true
    destination_type      = "local"
    source_type           = "blank"
    volume_size           = 1
  }

  block_device {
    boot_index            = -1
    delete_on_termination = true
    destination_type      = "local"
    source_type           = "blank"
    volume_size           = 1
  }
}

उदाहरण और सुरक्षा समूह

उदाहरण के संसाधन में सुरक्षा समूह संसाधन का संदर्भ देते समय, हमेशा सुरक्षा समूह के नाम का उपयोग करें। यदि आप सुरक्षा समूह की आईडी निर्दिष्ट करते हैं, तो Terraform प्रत्येक कॉल पर सुरक्षा समूह को हटा देगा और पुन: लागू करेगा। ऐसा इसलिए है क्योंकि OpenStack Compute API संबंधित सुरक्षा समूहों के नाम लौटाता है न कि उनकी आईडी।

निम्नलिखित उदाहरण पर ध्यान दें:

resource "openstack_networking_secgroup_v2" "sg_1" {
  name = "sg_1"
}

resource "openstack_compute_instance_v2" "foo" {
  name            = "terraform-test"
  security_groups = ["${openstack_networking_secgroup_v2.sg_1.name}"]
}

उदाहरण और बंदरगाह

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

  • किल्लो रिलीज से पहले ओपनस्टैक वातावरण में, एक इंस्टेंस को हटाने या पुनः बनाने से इंस्टेंस के पोर्ट (ओं) को हटा दिया जाएगा। इसके आसपास काम करने का एक तरीका इंस्टेंस में इस्तेमाल किए जाने वाले किसी भी पोर्ट (टोंस) को फिर से बनाना है। अधिक जानकारी के लिए here देखें।

  • पोर्ट्स का उपयोग कर एक या अधिक नेटवर्क के लिए एक इंस्टेंस संलग्न करते समय, पोर्ट पर सुरक्षा समूह रखें और इंस्टेंस नहीं। यदि आप सुरक्षा समूहों को इंस्टेंस पर रखते हैं, तो सुरक्षा समूहों को निर्माण पर लागू नहीं किया जाएगा, लेकिन उन्हें ताज़ा करने पर लागू किया जाएगा। यह एक ज्ञात ओपनस्टैक बग है।

  • नेटवर्क आईपी जानकारी पोर्ट्स के साथ संलग्न नेटवर्क के लिए एक उदाहरण के भीतर उपलब्ध नहीं है। यह ज्यादातर लचीलेपन के कारण होता है जब न्यूट्रॉन पोर्ट्स आईपी पते पर आते हैं। उदाहरण के लिए, एक न्यूट्रॉन पोर्ट में कई फिक्स्ड आईपी पते हो सकते हैं। यह जानना संभव नहीं है कि उपयोगकर्ता किस एकल आईपी पते पर इंस्टेंस की राज्य सूचना पर वापस लौटना चाहेगा। इसलिए, प्रोविजनर के लिए नेटवर्क पोर्ट के माध्यम से इंस्टेंस से कनेक्ट करने के लिए, connection जानकारी को अनुकूलित करें:

resource "openstack_networking_port_v2" "port_1" {
  name           = "port_1"
  admin_state_up = "true"

  network_id = "0a1d0a27-cffa-4de3-92c5-9d3fd3f2e74d"

  security_group_ids = [
    "2f02d20a-8dca-49b7-b26f-b6ce9fddaf4f",
    "ca1e5ed7-dae8-4605-987b-fadaeeb30461",
  ]
}

resource "openstack_compute_instance_v2" "instance_1" {
  name = "instance_1"

  network {
    port = "${openstack_networking_port_v2.port_1.id}"
  }

  connection {
    user        = "root"
    host        = "${openstack_networking_port_v2.port_1.fixed_ip.0.ip_address}"
    private_key = "~/path/to/key"
  }

  provisioner "remote-exec" {
    inline = [
      "echo terraform executed > /tmp/foo",
    ]
  }
}