Harvester provider

Harvester is beschikbaar als provider in de officiële registry van Terraform -> https://registry.terraform.io/providers/harvester/harvester

Zoals in de documentatie te lezen is, kan de provider toegevoegd worden via de volgende code in terraform.tf:

terraform { 
  required_version = ">= 0.13" 
  required_providers { 
    harvester = { 
      source = "harvester/harvester" 
      version = "0.4.0" 
    } 
  } 
} 

provider "harvester" { 
}

Een ‘terraform init‘ zal de provider installeren:

$ terraform init

Initializing the backend…

Initializing provider plugins…
- Finding harvester/harvester versions matching "0.4.0"…
- Installing harvester/harvester v0.4.0…
- Installed harvester/harvester v0.4.0 (self-signed, key ID 09C96FC8D69CF335)

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 created a lock file .terraform.lock.hcl to record the provider 
selections it made above. Include this file in your version control repository 
so that Terraform can guarantee to make the same selections by default when 
you run "terraform init" in the future.

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.

Wat nu nodig is om met deze provider te kunnen communiceren met de Harvester API is de harvester kubeconfig. De verwijzing naar dit bestand wordt dan opgenomen in het provider-block:

provider "harvester" {
  kubeconfig = "[PATH NAAR KUBECONFIG FILE]"
}

Voor de resources kunnen vanuit de root-directory in de terraform-code modules aangeroepen worden wat handig is als deze meermaals gebruikt gaan worden.

Ik heb ter lering-ende-vermaeck de modules in mijn git-repo gezet en die kunnen dus aangeroepen worden als module.


De volgende resources kunnen aangemaakt worden in de Harvester server:

  • ssh-key
  • image
  • volume
  • network
  • cluster-network
  • virtual-machine

De data source die gebruikt kan worden voor de Harvester provider wordt beschreven in de documentatie van de provider op de registry pagina.


Hieronder een voorbeeld voor het aanmaken van een ssh-key waarbij mijn GitHub repo gebruikt wordt als source voor de module:

module "ssh-key" {
  source     = "github.com/nicooosterwijk/harvester-modules/ssh-key"
  name       = "rancher"                     // of welke naam dan ook
  namespace  = "default"                     // de namespace in Harvester
  public_key = "ssh-rsa AAAAB3Nz...a9Sdmk="  // zet hier jouw pubic-key
  kubeconfig = "path-to-your-harvester.yaml" // de kubeconfig file
}

De attributen dienen uiteraard voorzien te worden van waardes van je eigen keuze.

Op deze manier kunnen alle harvester-resources aangeroepen worden door ze als modules te gebruiken in jouw lokale HCL.

Meer info en voorbeelden vind je in de repo: https://github.com/NicoOosterwijk/harvester-modules