Kom igång med Terraform i GleSYS Cloud

Inledning

GleSYS Provider låter dig hantera resurser i GleSYS Cloud. I dagsläget finns det stöd för bland annat virtuella servrar (KVM och VMware), nätverk, lastbalansering och objektlagring.

GitHub hittar du vårt repository för terraform-provider-glesys och tillhörande dokumentation.

Förutsättningar


Du behöver behörighet till GleSYS Cloud:

  • Öppna ett kostnadsfritt konto här

  • Ett projekt i kontrollpanelen (det är här dina tjänster huserar)

  • En API-nyckel. För detta exempel använder vi följande rättigheter för Server-modulen i GleSYS API:

    • create
    • destroy
    • details
    • edit
    • list

Exempel


Här kommer ett exempel där vi skapar en virtuell server som vi sedan uppdaterar diskstorleken på.

Du kan testa den här konfigurationen genom att skapa filen example.tf i en katalog som du sedan kör följande kommandon ifrån:

  • Initiera en arbetskatalog för Terraform: terraform init
  • Generera och visa en utförandeplan: terraform plan
  • Bygg din infrastruktur: terraform apply

Steg 1: Installera och konfigurera Terraform


För att Terraform ska kunna kommunicera med GleSYS API behöver du ange ett projekt-ID (clXXXXX) från GleSYS Cloud som användarnamn och en API-nyckel som kan autentisera mot detta projekt.

I det här exemplet kommer vi att exportera miljövariabler i ett skal för att slippa ange dessa varje gång ett kommando kommunicerar med GleSYS API.

$ export GLESYS_USERID=CL12345
$ export GLESYS_TOKEN=abc12345XYZ

Vi börjar med att skapa en katalog för det här exemplet:

~ $ mkdir glesys-terraform
~ $ cd glesys-terraform

I katalogen skapar vi filen example.tf som används när vi ska ladda ner GleSYS Provider:

example.tf

terraform {
  required_providers {
    glesys = {
      source = "glesys/glesys"
      version = "~> 0.4.6" # Här kan du ändra om du vill köra en särskild version av providern.
    }
  }
}

...

Med hjälp av kommandot terraform init initierar du en nedladdning av GleSYS Provider:

glesys-terraform $ terraform init
Initializing the backend...

Initializing provider plugins...
- Finding latest version of glesys/glesys...
- Installing glesys/glesys v0.4.6...
- Installed glesys/glesys v0.4.6 (self-signed, key ID 4B5E1D585D113D4D)

Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/cli/plugins/signing.html

Terraform has made some changes to the provider dependency selections recorded
in the .terraform.lock.hcl file. Review those changes and commit them to your
version control system if they represent changes you intended to make.

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

Nu är du redo att skapa resurser i GleSYS Cloud!

Steg 2: Skapa en virtuell server


För att skapa en server med resurser behöver vi lägga till ett antal parametrar i example.tf. Vi rekommenderar att du läser igenom dokumentation för glesys_server, där du också kan se vilka parametrar som är nödvändiga och vilka som är valfria.

Om vi vill spinna upp en Cloud VPS (KVM) med Debian 10 i vårt datacenter i Stockholm och även skapa två användare (alice och bob), skulle våra parametrar se ut som nedan. Du kan också tydligt se hur mycket resurser vi har valt att tilldela servern.

resource "glesys_server" "kvm" {
  count = 1
  datacenter = "Stockholm"
  memory = 1024
  storage = 20
  cpu = 1
  bandwidth = 100

  hostname = "www1"

  platform = "KVM"
  template = "debian-10"

  user {
        username = "alice"
        publickeys = [
          "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINOCh8br7CwZDMGmINyJgBip943QXgkf7XdXrDMJf5Dl alice@example.com",
          "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOfN4dBsS2p1UX+DP6RicdxAYCCeRK8mzCldCS0W9A+5 alice@ws.example.com"
        ]
        password = "hunter3!"
  }
  user {
        username = "bob"
        publickeys = ["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINOCh8br7CwZDMGmINyJgBip943QXgkf7XdXrDMJf5Dl bob@example.com"]
        password = "hunter333!"
  }
}

För att skapa servern behöver vi låta Terraform tolka vår konfigurationsfil och presentera vilka ändringar som behöver göras i din infrastruktur. Det gör du genom att köra terraform plan.

Sen kör vi kommandot terraform apply för att bygga infrastrukturen:

(12:14)$ terraform apply

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # glesys_server.kvm[0] will be created
  + resource "glesys_server" "kvm" {
      + bandwidth    = 100
      + cpu          = 1
      + datacenter   = "Stockholm"
      + hostname     = "www1"
      + id           = (known after apply)
      + ipv4_address = (known after apply)
      + ipv6_address = (known after apply)
      + memory       = 1024
      + platform     = "KVM"
      + storage      = 20
      + template     = "debian-10"

      + user {
          + password   = "hunter3!"
          + publickeys = [
              + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINOCh8br7CwZDMGmINyJgBip943QXgkf7XdXrDMJf5Dl alice@example.com",
              + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOfN4dBsS2p1UX+DP6RicdxAYCCeRK8mzCldCS0W9A+5 alice@ws.example.com",
            ]
          + username   = "alice"
        }
      + user {
          + password   = "hunter333!"
          + publickeys = [
              + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINOCh8br7CwZDMGmINyJgBip943QXgkf7XdXrDMJf5Dl bob@example.com",
            ]
          + username   = "bob"
        }
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

glesys_server.kvm[0]: Creating...
glesys_server.kvm[0]: Creation complete after 4s [id=kvm123456]

Efter en lyckad körning kan vi gå vidare till nästa steg.

Visa nuvarande tillstånd

Med kommandot terraform show kan vi se det slutgiltiga resultatet av körningen. Detaljer som IPv4-/IPv6-adresser har nu returnerats från API:et.

(11:32)$ terraform show
resource "glesys_server" "kvm" {
    bandwidth    = 100
    cpu          = 1
    datacenter   = "Stockholm"
    hostname     = "www1"
    id           = "kvm123456"
    ipv4_address = "46.246.39.1"
    ipv6_address = "2a00:1a28:1410:5::1"
    memory       = 1024
    platform     = "KVM"
    storage      = 20
    template     = "debian-10"

    user {
        password   = "hunter3!"
        publickeys = [
            "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINOCh8br7CwZDMGmINyJgBip943QXgkf7XdXrDMJf5Dl alice@example.com",
            "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOfN4dBsS2p1UX+DP6RicdxAYCCeRK8mzCldCS0W9A+5 alice@ws.example.com",
        ]
        username   = "alice"
    }
    user {
        password   = "hunter333!"
        publickeys = [
            "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINOCh8br7CwZDMGmINyJgBip943QXgkf7XdXrDMJf5Dl bob@example.com",
        ]
        username   = "bob"
    }
}

Steg 3: Uppdatera diskstorleken


För att ändra serverns hårddiskstorlek (storage) behöver du bara ändra värdet i example.tf och köra terraform apply på nytt. I exemplet har vi ändrat från 20 till 30 (GiB).

$ terraform apply
glesys_server.kvm[0]: Refreshing state... [id=kvm123456]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # glesys_server.kvm[0] will be updated in-place
  ~ resource "glesys_server" "kvm" {
        id           = "kvm123456"
      ~ storage      = 20 -> 30
        # (9 unchanged attributes hidden)

        # (2 unchanged blocks hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

glesys_server.kvm[0]: Modifying... [id=kvm123456]
glesys_server.kvm[0]: Modifications complete after 1s [id=kvm123456]

Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

Bidra med öppen källkod


Alla är välkomna att bidra till projektet med nya funktioner, förbättringar och buggfixar. Läs mer om hur du går tillväga här


Relaterade artiklar

Hittar du inte det du söker?

Kontakta oss gärna för mer information. Vi hjälper dig att komma fram till den bästa lösningen för dina behov.

Skicka e-post Ring 0200-23 88 00