london hashicorp meetup (8th mar 2016)

36
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Developing a (VCD) Terraform Provider Brett Mack Nicki Watt @phpops @techiewatt 28/01/2016 1

Upload: brett-mack

Post on 16-Apr-2017

128 views

Category:

Technology


0 download

TRANSCRIPT

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Developing a (VCD) Terraform Provider

Brett Mack Nicki Watt @phpops @techiewatt

28/01/2016

1

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 2

Who are we?

• Hands on consultants

• Worked with a variety of clients using various HashiCorp products

• HashiCorp partner

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 3

https://www.opencredo.com/2015/08/10/boot-my-secure-government-cloud

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 4

Agenda

• Terraform Introduction

• The VCD Terraform provider approach and lessons learned

• Conclusion

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

The

Super Quick

5

Terraform Introduction^

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 6

Creates, manages, and manipulates infrastructure resources.

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 7

Multiple Infrastructure Providers - IAAS, PAAS, SAAS

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 8

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 9

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 10

Developing a (VCD) Terraform provider

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 11

What is a Terraform Provider Plugin?

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 12

Atlas DNSMadeEasy PowerDNS

AWS Docker Rundeck

Azure Dyn StatusCake

CloudFlare Google Cloud Template

CloudStack Heroku Terraform

Consul Mailgun TLS

Datadog OpenStack VMware vCloud Director

DigitalOcean Packet VMware vSphere

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 13

Atlas DNSMadeEasy PowerDNS

AWS Docker Rundeck

Azure Dyn StatusCake

CloudFlare Google Cloud Template

CloudStack Heroku Terraform

Consul Mailgun TLS

Datadog OpenStack VMware vCloud Director

DigitalOcean Packet VMware vSphere

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 14

Define what you want to control with Terraform

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

vCloud Director

15

Edge Gateway

Internal Network

Destination NAT Source NATFirewall Rules

VApp VApp

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

vCloud Director

16

Edge Gateway

Internal Network

Destination NAT Source NATFirewall Rules

VApp VApp

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 17

Core Terraform Provider Plugin Concepts

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 18

Provider

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 19

Provider

Resource

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 20

Resource

Schema

Provider

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Plugin

21

Resource

Schema

Provider

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 22

provider "vcd" { …}

resource “vcd_vapp” “web” …}

vms.tf

VCD Provider

Terraform launches provider binary

Preferred method of communicationStarts listeningAddress given back to Terraform

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 23

How do these concepts map to VCD?

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 24

vCloud DirectorEdge Gateway

VDC NetworkDestinati Source Firewall

VApp VApp

Plugin

Details to establish connection

Individual componentswhich can be controlled

Contractdefining rules

when interactingwith resources

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 25

Schema

Provider

userpasswordorgurlvdc

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 26

Schemauser

ValueType

Flags

Description

Default

Computed

Required

Optional

ForceNew

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 27

Schemauser

ValueType

Flags

Description

Default

Computed

Required

Optional

ValueType: TypeStringDescription: vCD UsernameRequired: True

Computed

ForceNew

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 28

Resource

Provider NetworkVAppFirewall RulesDNATSNAT

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 29

Resource

CreateReadUpdateDelete

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 30

Resource

CreateReadUpdateDeleteExists

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 31

Defining the Provider in Go

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 32

func Provider() terraform.ResourceProvider { return &schema.Provider{ Schema: map[string]*schema.Schema{ "user": &schema.Schema{ Type: schema.TypeString, Required: true, Description: “vCloud Director Username.", }, "password": &schema.Schema{ Type: schema.TypeString, Required: true, Description: “vCloud Director Password.", }, …

provider.go

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 33

func Provider() terraform.ResourceProvider { return &schema.Provider{ Schema: …,

ResourcesMap: map[string]*schema.Resource{ "vcd_network": resourceVcdNetwork(), "vcd_vapp": resourceVcdVApp(), "vcd_firewall_rules": resourceVcdFirewallRules(), "vcd_dnat": resourceVcdDNAT(), "vcd_snat": resourceVcdSNAT(),

},}

provider.go

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 34

Issues we encountered

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 35

Conclusion

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 36

Thanks Questions