Initial commit; will fail :)
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Danny Bessems 2021-02-02 13:06:52 +01:00
parent 125179c28e
commit e5d4c577f8
6 changed files with 211 additions and 0 deletions

52
.drone.yml Normal file
View File

@ -0,0 +1,52 @@
kind: pipeline
type: kubernetes
name: Terraform
steps:
- name: Terraform Init
image: bv11-cr01.bessems.eu/library/packer-extended
commands:
- |
terraform init \
-chdir=terraform \
-input=false \
-backend-config="conn_str=${PG_CONNECTIONSTRING}"
environment:
PG_CONNECTIONSTRING: postgres://${PG_USERNAME}:${PG_PASSWORD}@${PG_HOST}/${PG_DATABASE}?sslmode=disable
PG_HOST: tfstate.default.svc.cluster.local
PG_DATABASE: terraform_backend
PG_USERNAME: terraform
PG_PASSWORD: terraform
TF_AUTOMATION: yes
# TF_LOG: TRACE
- name: Terraform Plan
image: bv11-cr01.bessems.eu/library/packer-extended
commands:
- |
terraform plan \
-var='vsphere_password=$${VSPHERE_PASSWORD}' -var='repo_username=$${REPO_USERNAME}' -var='repo_password=$${REPO_PASSWORD}' \
-var-file='vsphere.tfvars' \
-chdir=terraform \
-input=false \
-out=terraform.plan
environment:
TF_AUTOMATION: yes
VSPHERE_PASSWORD:
from_secret: vsphere_password
REPO_USERNAME:
from_secret: repo_username
REPO_PASSWORD:
from_secret: repo_password
# TF_LOG: TRACE
- name: Terraform Apply
image: bv11-cr01.bessems.eu/library/packer-extended
commands:
- |
terraform apply \
-chdir=terraform \
-input=false \
-auto-approve \
terraform.plan
environment:
TF_AUTOMATION: yes
# TF_LOG: TRACE

View File

@ -0,0 +1,28 @@
resource "vsphere_content_library" "library" {
name = "OVA appliances"
storage_backing = flatten([
data.vsphere_datastore.cldatastore.id
])
}
resource "vsphere_content_library_item" "Server2019" {
name = "Windows-Server-2019-LTSC"
library_id = vsphere_content_library.library.id
file_url = "https://{{user `repo_username`}}:{{user `repo_password`}}@sn.itch.fyi/Repository/rel/Windows-Server-2019-LTSC.ova"
}
resource "vsphere_content_library_item" "ADCS" {
name = "ADCS-appliance"
library_id = vsphere_content_library.library.id
file_url = "https://{{user `repo_username`}}:{{user `repo_password`}}@sn.itch.fyi/Repository/rel/ADCS-appliance.ova"
}
resource "vsphere_content_library_item" "ADDS" {
name = "ADDS-appliance"
library_id = vsphere_content_library.library.id
file_url = "https://{{user `repo_username`}}:{{user `repo_password`}}@sn.itch.fyi/Repository/rel/ADDS-appliance.ova"
}
resource "vsphere_content_library_item" "Win10" {
name = "Windows 10"
library_id = vsphere_content_library.library.id
file_url = "https://{{user `repo_username`}}:{{user `repo_password`}}@sn.itch.fyi/Repository/rel/Windows10.ova"
}

36
terraform/main.tf Normal file
View File

@ -0,0 +1,36 @@
terraform {
backend "pg" {}
}
provider "vsphere" {
version = "1.24.1"
vsphere_server = var.vcenter_server
user = var.vsphere_username
password = var.vsphere_password
allow_unverified_ssl = true
}
data "vsphere_datacenter" "dc" {
name = var.vsphere_datacenter
}
data "vsphere_resource_pool" "pool" {
name = "/${var.vsphere_datacenter}/host/${var.vsphere_hostip}/Resources"
datacenter_id = data.vsphere_datacenter.dc.id
}
data "vsphere_datastore" "vmdatastore" {
name = var.vsphere_vmdatastore
datacenter_id = data.vsphere_datacenter.dc.id
}
data "vsphere_datastore" "cldatastore" {
name = var.vsphere_cldatastore
datacenter_id = data.vsphere_datacenter.dc.id
}
data "vsphere_network" "network" {
name = var.vsphere_network
datacenter_id = data.vsphere_datacenter.dc.id
}

29
terraform/variables.tf Normal file
View File

@ -0,0 +1,29 @@
variable "vcenter_server" {
}
variable "vsphere_username" {
}
variable "vsphere_password" {
}
variable "vsphere_datacenter" {
}
variable "vsphere_host" {
}
variable "vsphere_hostip" {
}
variable "vsphere_datastore" {
}
variable "vsphere_folder" {
}
variable "vsphere_templatefolder" {
}
variable "vsphere_network" {
}

57
terraform/vm.tf Normal file
View File

@ -0,0 +1,57 @@
resource "vsphere_virtual_machine" "TF-Windows2019" {
name = "TF-Windows2019"
resource_pool_id = data.vsphere_resource_pool.pool.id
datastore_id = data.vsphere_datastore.datastore.id
folder = var.vsphere_vmfolder
num_cpus = 2
memory = 4096
network_interface {
network_id = data.vsphere_network.network.id
}
disk {
label = "disk0"
unit_number = 0
size = 150
thin_provisioned = true
}
disk {
label = "disk1"
unit_number = 1
size = 225
thin_provisioned = true
}
vapp {
properties = {
"guestinfo.hostname" = "<<vm-hostname>>"
"guestinfo.ipaddress" = "<<vm-ipaddress>>"
"guestinfo.netmask" = "<<vm-netmask>>"
"guestinfo.gateway" = "<<vm-gateway>>"
"guestinfo.dns" = "<<vm-dns>>"
"guestinfo.domain_name" = "<<vm-searchdomain>>"
"guestinfo.ntp" = "<<vm-ntp>>"
"guestinfo.enable_domain_join" = "<<ad-enable-domain-join>>"
"guestinfo.domain_short_name" = "<<ad-netbios>>"
"guestinfo.domain_join_user" = "<<ad-user>>"
"guestinfo.domain_join_password" = "<<ad-password>>"
"guestinfo.domain_controller" = "<<ad-domaincontroller>>"
"guestinfo.viadmin_password" = "<<pass-viadmin>>"
"guestinfo.viuser_password" = "<<pass-viuser>>"
"guestinfo.viservice_password" = "<<pass-viservice>>"
"guestinfo.project_name" = "<<proj-name>>"
"guestinfo.monitor_server" = "<<mon-address>>"
}
}
clone {
template_uuid = vsphere_content_library_item.Server2019.id
}
# # This does not actually achieve protection from destruction, see https://github.com/hashicorp/terraform/issues/17599
# lifecycle {
# prevent_destroy = true
# }
}

9
terraform/vsphere.tfvars Normal file
View File

@ -0,0 +1,9 @@
vcenter_server = "bv11-vc01.bessems.lan"
vsphere_username = "administrator@vsphere.local"
vsphere_datacenter = "DeSchakel"
vsphere_host = "bv11-esx.bessems.eu"
vsphere_hostip = "192.168.11.200"
vsphere_vmdatastore = "Datastore02.SSD"
vsphere_cldatastore = "Datastore01.NAS"
vsphere_vmfolder = "/Terraform"
vsphere_network = "LAN"