github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/vcd/resource_vcd_vapp_test.go (about)

     1  package vcd
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/hashicorp/terraform/helper/resource"
     9  	"github.com/hashicorp/terraform/terraform"
    10  	govcd "github.com/ukcloud/govcloudair"
    11  )
    12  
    13  func TestAccVcdVApp_PowerOff(t *testing.T) {
    14  	var vapp govcd.VApp
    15  
    16  	resource.Test(t, resource.TestCase{
    17  		PreCheck:     func() { testAccPreCheck(t) },
    18  		Providers:    testAccProviders,
    19  		CheckDestroy: testAccCheckVcdVAppDestroy,
    20  		Steps: []resource.TestStep{
    21  			resource.TestStep{
    22  				Config: fmt.Sprintf(testAccCheckVcdVApp_basic, os.Getenv("VCD_EDGE_GATWEWAY")),
    23  				Check: resource.ComposeTestCheckFunc(
    24  					testAccCheckVcdVAppExists("vcd_vapp.foobar", &vapp),
    25  					testAccCheckVcdVAppAttributes(&vapp),
    26  					resource.TestCheckResourceAttr(
    27  						"vcd_vapp.foobar", "name", "foobar"),
    28  					resource.TestCheckResourceAttr(
    29  						"vcd_vapp.foobar", "ip", "10.10.102.160"),
    30  					resource.TestCheckResourceAttr(
    31  						"vcd_vapp.foobar", "power_on", "true"),
    32  				),
    33  			},
    34  			resource.TestStep{
    35  				Config: fmt.Sprintf(testAccCheckVcdVApp_powerOff, os.Getenv("VCD_EDGE_GATWEWAY")),
    36  				Check: resource.ComposeTestCheckFunc(
    37  					testAccCheckVcdVAppExists("vcd_vapp.foobar", &vapp),
    38  					testAccCheckVcdVAppAttributes_off(&vapp),
    39  					resource.TestCheckResourceAttr(
    40  						"vcd_vapp.foobar", "name", "foobar"),
    41  					resource.TestCheckResourceAttr(
    42  						"vcd_vapp.foobar", "ip", "10.10.102.160"),
    43  					resource.TestCheckResourceAttr(
    44  						"vcd_vapp.foobar", "power_on", "false"),
    45  				),
    46  			},
    47  		},
    48  	})
    49  }
    50  
    51  func testAccCheckVcdVAppExists(n string, vapp *govcd.VApp) resource.TestCheckFunc {
    52  	return func(s *terraform.State) error {
    53  		rs, ok := s.RootModule().Resources[n]
    54  		if !ok {
    55  			return fmt.Errorf("Not found: %s", n)
    56  		}
    57  
    58  		if rs.Primary.ID == "" {
    59  			return fmt.Errorf("No VAPP ID is set")
    60  		}
    61  
    62  		conn := testAccProvider.Meta().(*VCDClient)
    63  
    64  		resp, err := conn.OrgVdc.FindVAppByName(rs.Primary.ID)
    65  		if err != nil {
    66  			return err
    67  		}
    68  
    69  		*vapp = resp
    70  
    71  		return nil
    72  	}
    73  }
    74  
    75  func testAccCheckVcdVAppDestroy(s *terraform.State) error {
    76  	conn := testAccProvider.Meta().(*VCDClient)
    77  
    78  	for _, rs := range s.RootModule().Resources {
    79  		if rs.Type != "vcd_vapp" {
    80  			continue
    81  		}
    82  
    83  		_, err := conn.OrgVdc.FindVAppByName(rs.Primary.ID)
    84  
    85  		if err == nil {
    86  			return fmt.Errorf("VPCs still exist")
    87  		}
    88  
    89  		return nil
    90  	}
    91  
    92  	return nil
    93  }
    94  
    95  func testAccCheckVcdVAppAttributes(vapp *govcd.VApp) resource.TestCheckFunc {
    96  	return func(s *terraform.State) error {
    97  
    98  		if vapp.VApp.Name != "foobar" {
    99  			return fmt.Errorf("Bad name: %s", vapp.VApp.Name)
   100  		}
   101  
   102  		if vapp.VApp.Name != vapp.VApp.Children.VM[0].Name {
   103  			return fmt.Errorf("VApp and VM names do not match. %s != %s",
   104  				vapp.VApp.Name, vapp.VApp.Children.VM[0].Name)
   105  		}
   106  
   107  		status, _ := vapp.GetStatus()
   108  		if status != "POWERED_ON" {
   109  			return fmt.Errorf("VApp is not powered on")
   110  		}
   111  
   112  		return nil
   113  	}
   114  }
   115  
   116  func testAccCheckVcdVAppAttributes_off(vapp *govcd.VApp) resource.TestCheckFunc {
   117  	return func(s *terraform.State) error {
   118  
   119  		if vapp.VApp.Name != "foobar" {
   120  			return fmt.Errorf("Bad name: %s", vapp.VApp.Name)
   121  		}
   122  
   123  		if vapp.VApp.Name != vapp.VApp.Children.VM[0].Name {
   124  			return fmt.Errorf("VApp and VM names do not match. %s != %s",
   125  				vapp.VApp.Name, vapp.VApp.Children.VM[0].Name)
   126  		}
   127  
   128  		status, _ := vapp.GetStatus()
   129  		if status != "POWERED_OFF" {
   130  			return fmt.Errorf("VApp is still powered on")
   131  		}
   132  
   133  		return nil
   134  	}
   135  }
   136  
   137  const testAccCheckVcdVApp_basic = `
   138  resource "vcd_network" "foonet" {
   139  	name = "foonet"
   140  	edge_gateway = "%s"
   141  	gateway = "10.10.102.1"
   142  	static_ip_pool {
   143  		start_address = "10.10.102.2"
   144  		end_address = "10.10.102.254"
   145  	}
   146  }
   147  
   148  resource "vcd_vapp" "foobar" {
   149    name = "foobar"
   150    template_name = "base-centos-7.0-x86_64_v-0.1_b-74"
   151    catalog_name = "NubesLab"
   152    network_name = "${vcd_network.foonet.name}"
   153    memory = 1024
   154  	cpus = 1
   155  	ip = "10.10.102.160"
   156  }
   157  `
   158  
   159  const testAccCheckVcdVApp_powerOff = `
   160  resource "vcd_network" "foonet" {
   161  	name = "foonet"
   162  	edge_gateway = "%s"
   163  	gateway = "10.10.102.1"
   164  	static_ip_pool {
   165  		start_address = "10.10.102.2"
   166  		end_address = "10.10.102.254"
   167  	}
   168  }
   169  
   170  resource "vcd_vapp" "foobar" {
   171    name = "foobar"
   172    template_name = "base-centos-7.0-x86_64_v-0.1_b-74"
   173    catalog_name = "NubesLab"
   174    network_name = "${vcd_network.foonet.name}"
   175    memory = 1024
   176  	cpus = 1
   177  	ip = "10.10.102.160"
   178  	power_on = false
   179  }
   180  `