github.com/chalford/terraform@v0.3.7-0.20150113080010-a78c69a8c81f/builtin/providers/cloudstack/resource_cloudstack_nic_test.go (about)

     1  package cloudstack
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/helper/resource"
     8  	"github.com/hashicorp/terraform/terraform"
     9  	"github.com/xanzy/go-cloudstack/cloudstack"
    10  )
    11  
    12  func TestAccCloudStackNIC_basic(t *testing.T) {
    13  	var nic cloudstack.Nic
    14  
    15  	resource.Test(t, resource.TestCase{
    16  		PreCheck:     func() { testAccPreCheck(t) },
    17  		Providers:    testAccProviders,
    18  		CheckDestroy: testAccCheckCloudStackNICDestroy,
    19  		Steps: []resource.TestStep{
    20  			resource.TestStep{
    21  				Config: testAccCloudStackNIC_basic,
    22  				Check: resource.ComposeTestCheckFunc(
    23  					testAccCheckCloudStackNICExists(
    24  						"cloudstack_instance.foobar", "cloudstack_nic.foo", &nic),
    25  					testAccCheckCloudStackNICAttributes(&nic),
    26  				),
    27  			},
    28  		},
    29  	})
    30  }
    31  
    32  func TestAccCloudStackNIC_update(t *testing.T) {
    33  	var nic cloudstack.Nic
    34  
    35  	resource.Test(t, resource.TestCase{
    36  		PreCheck:     func() { testAccPreCheck(t) },
    37  		Providers:    testAccProviders,
    38  		CheckDestroy: testAccCheckCloudStackNICDestroy,
    39  		Steps: []resource.TestStep{
    40  			resource.TestStep{
    41  				Config: testAccCloudStackNIC_basic,
    42  				Check: resource.ComposeTestCheckFunc(
    43  					testAccCheckCloudStackNICExists(
    44  						"cloudstack_instance.foobar", "cloudstack_nic.foo", &nic),
    45  					testAccCheckCloudStackNICAttributes(&nic),
    46  				),
    47  			},
    48  
    49  			resource.TestStep{
    50  				Config: testAccCloudStackNIC_ipaddress,
    51  				Check: resource.ComposeTestCheckFunc(
    52  					testAccCheckCloudStackNICExists(
    53  						"cloudstack_instance.foobar", "cloudstack_nic.foo", &nic),
    54  					testAccCheckCloudStackNICIPAddress(&nic),
    55  					resource.TestCheckResourceAttr(
    56  						"cloudstack_nic.foo", "ipaddress", CLOUDSTACK_NETWORK_2_IPADDRESS),
    57  				),
    58  			},
    59  		},
    60  	})
    61  }
    62  
    63  func testAccCheckCloudStackNICExists(
    64  	v, n string, nic *cloudstack.Nic) resource.TestCheckFunc {
    65  	return func(s *terraform.State) error {
    66  		rsv, ok := s.RootModule().Resources[v]
    67  		if !ok {
    68  			return fmt.Errorf("Not found: %s", v)
    69  		}
    70  
    71  		if rsv.Primary.ID == "" {
    72  			return fmt.Errorf("No instance ID is set")
    73  		}
    74  
    75  		rsn, ok := s.RootModule().Resources[n]
    76  		if !ok {
    77  			return fmt.Errorf("Not found: %s", n)
    78  		}
    79  
    80  		if rsn.Primary.ID == "" {
    81  			return fmt.Errorf("No NIC ID is set")
    82  		}
    83  
    84  		cs := testAccProvider.Meta().(*cloudstack.CloudStackClient)
    85  		vm, _, err := cs.VirtualMachine.GetVirtualMachineByID(rsv.Primary.ID)
    86  
    87  		if err != nil {
    88  			return err
    89  		}
    90  
    91  		for _, n := range vm.Nic {
    92  			if n.Id == rsn.Primary.ID {
    93  				*nic = n
    94  				return nil
    95  			}
    96  		}
    97  
    98  		return fmt.Errorf("NIC not found")
    99  	}
   100  }
   101  
   102  func testAccCheckCloudStackNICAttributes(
   103  	nic *cloudstack.Nic) resource.TestCheckFunc {
   104  	return func(s *terraform.State) error {
   105  
   106  		if nic.Networkname != CLOUDSTACK_NETWORK_2 {
   107  			return fmt.Errorf("Bad network: %s", nic.Networkname)
   108  		}
   109  
   110  		return nil
   111  	}
   112  }
   113  
   114  func testAccCheckCloudStackNICIPAddress(
   115  	nic *cloudstack.Nic) resource.TestCheckFunc {
   116  	return func(s *terraform.State) error {
   117  
   118  		if nic.Networkname != CLOUDSTACK_NETWORK_2 {
   119  			return fmt.Errorf("Bad network: %s", nic.Networkname)
   120  		}
   121  
   122  		if nic.Ipaddress != CLOUDSTACK_NETWORK_2_IPADDRESS {
   123  			return fmt.Errorf("Bad IP address: %s", nic.Ipaddress)
   124  		}
   125  
   126  		return nil
   127  	}
   128  }
   129  
   130  func testAccCheckCloudStackNICDestroy(s *terraform.State) error {
   131  	cs := testAccProvider.Meta().(*cloudstack.CloudStackClient)
   132  
   133  	// Deleting the instance automatically deletes any additional NICs
   134  	for _, rs := range s.RootModule().Resources {
   135  		if rs.Type != "cloudstack_instance" {
   136  			continue
   137  		}
   138  
   139  		if rs.Primary.ID == "" {
   140  			return fmt.Errorf("No instance ID is set")
   141  		}
   142  
   143  		p := cs.VirtualMachine.NewDestroyVirtualMachineParams(rs.Primary.ID)
   144  		err, _ := cs.VirtualMachine.DestroyVirtualMachine(p)
   145  
   146  		if err != nil {
   147  			return fmt.Errorf(
   148  				"Error deleting instance (%s): %s",
   149  				rs.Primary.ID, err)
   150  		}
   151  	}
   152  
   153  	return nil
   154  }
   155  
   156  var testAccCloudStackNIC_basic = fmt.Sprintf(`
   157  resource "cloudstack_instance" "foobar" {
   158    name = "terraform-test"
   159    display_name = "terraform"
   160    service_offering= "%s"
   161    network = "%s"
   162    template = "%s"
   163    zone = "%s"
   164    expunge = true
   165  }
   166  
   167  resource "cloudstack_nic" "foo" {
   168    network = "%s"
   169    virtual_machine = "${cloudstack_instance.foobar.name}"
   170  }`,
   171  	CLOUDSTACK_SERVICE_OFFERING_1,
   172  	CLOUDSTACK_NETWORK_1,
   173  	CLOUDSTACK_TEMPLATE,
   174  	CLOUDSTACK_ZONE,
   175  	CLOUDSTACK_NETWORK_2)
   176  
   177  var testAccCloudStackNIC_ipaddress = fmt.Sprintf(`
   178  resource "cloudstack_instance" "foobar" {
   179    name = "terraform-test"
   180    display_name = "terraform"
   181    service_offering= "%s"
   182    network = "%s"
   183    template = "%s"
   184    zone = "%s"
   185    expunge = true
   186  }
   187  
   188  resource "cloudstack_nic" "foo" {
   189    network = "%s"
   190    ipaddress = "%s"
   191    virtual_machine = "${cloudstack_instance.foobar.name}"
   192  }`,
   193  	CLOUDSTACK_SERVICE_OFFERING_1,
   194  	CLOUDSTACK_NETWORK_1,
   195  	CLOUDSTACK_TEMPLATE,
   196  	CLOUDSTACK_ZONE,
   197  	CLOUDSTACK_NETWORK_2,
   198  	CLOUDSTACK_NETWORK_2_IPADDRESS)