github.com/gophercloud/gophercloud@v1.14.1/internal/acceptance/openstack/baremetal/v1/nodes_test.go (about)

     1  //go:build acceptance || baremetal || nodes
     2  // +build acceptance baremetal nodes
     3  
     4  package v1
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/gophercloud/gophercloud/internal/acceptance/clients"
    10  	"github.com/gophercloud/gophercloud/openstack/baremetal/v1/nodes"
    11  	"github.com/gophercloud/gophercloud/pagination"
    12  
    13  	th "github.com/gophercloud/gophercloud/testhelper"
    14  )
    15  
    16  func TestNodesCreateDestroy(t *testing.T) {
    17  	clients.RequireLong(t)
    18  
    19  	client, err := clients.NewBareMetalV1Client()
    20  	th.AssertNoErr(t, err)
    21  	client.Microversion = "1.38"
    22  
    23  	node, err := CreateNode(t, client)
    24  	th.AssertNoErr(t, err)
    25  	defer DeleteNode(t, client, node)
    26  
    27  	found := false
    28  	err = nodes.List(client, nodes.ListOpts{}).EachPage(func(page pagination.Page) (bool, error) {
    29  		nodeList, err := nodes.ExtractNodes(page)
    30  		if err != nil {
    31  			return false, err
    32  		}
    33  
    34  		for _, n := range nodeList {
    35  			if n.UUID == node.UUID {
    36  				found = true
    37  				return true, nil
    38  			}
    39  		}
    40  
    41  		return false, nil
    42  	})
    43  	th.AssertNoErr(t, err)
    44  
    45  	th.AssertEquals(t, found, true)
    46  }
    47  
    48  func TestNodesFields(t *testing.T) {
    49  	clients.RequireLong(t)
    50  
    51  	client, err := clients.NewBareMetalV1Client()
    52  	th.AssertNoErr(t, err)
    53  	client.Microversion = "1.38"
    54  
    55  	node, err := CreateNode(t, client)
    56  	th.AssertNoErr(t, err)
    57  	defer DeleteNode(t, client, node)
    58  	err = nodes.List(client, nodes.ListOpts{
    59  		Fields: []string{"uuid", "deploy_interface"},
    60  	}).EachPage(func(page pagination.Page) (bool, error) {
    61  		nodeList, err := nodes.ExtractNodes(page)
    62  		if err != nil {
    63  			return false, err
    64  		}
    65  
    66  		for _, n := range nodeList {
    67  			if n.UUID == "" || n.DeployInterface == "" {
    68  				t.Errorf("UUID or DeployInterface empty on %+v", n)
    69  			}
    70  			if n.BootInterface != "" {
    71  				t.Errorf("BootInterface was not fetched but is not empty on %+v", n)
    72  			}
    73  		}
    74  
    75  		return true, nil
    76  	})
    77  	th.AssertNoErr(t, err)
    78  }
    79  
    80  func TestNodesUpdate(t *testing.T) {
    81  	clients.RequireLong(t)
    82  
    83  	client, err := clients.NewBareMetalV1Client()
    84  	th.AssertNoErr(t, err)
    85  	client.Microversion = "1.38"
    86  
    87  	node, err := CreateNode(t, client)
    88  	th.AssertNoErr(t, err)
    89  	defer DeleteNode(t, client, node)
    90  
    91  	updated, err := nodes.Update(client, node.UUID, nodes.UpdateOpts{
    92  		nodes.UpdateOperation{
    93  			Op:    nodes.ReplaceOp,
    94  			Path:  "/maintenance",
    95  			Value: "true",
    96  		},
    97  	}).Extract()
    98  	th.AssertNoErr(t, err)
    99  
   100  	th.AssertEquals(t, updated.Maintenance, true)
   101  }
   102  
   103  func TestNodesMaintenance(t *testing.T) {
   104  	clients.RequireLong(t)
   105  
   106  	client, err := clients.NewBareMetalV1Client()
   107  	th.AssertNoErr(t, err)
   108  	client.Microversion = "1.38"
   109  
   110  	node, err := CreateNode(t, client)
   111  	th.AssertNoErr(t, err)
   112  	defer DeleteNode(t, client, node)
   113  
   114  	err = nodes.SetMaintenance(client, node.UUID, nodes.MaintenanceOpts{
   115  		Reason: "I'm tired",
   116  	}).ExtractErr()
   117  	th.AssertNoErr(t, err)
   118  
   119  	updated, err := nodes.Get(client, node.UUID).Extract()
   120  	th.AssertNoErr(t, err)
   121  
   122  	th.AssertEquals(t, updated.Maintenance, true)
   123  	th.AssertEquals(t, updated.MaintenanceReason, "I'm tired")
   124  
   125  	err = nodes.UnsetMaintenance(client, node.UUID).ExtractErr()
   126  	th.AssertNoErr(t, err)
   127  
   128  	updated, err = nodes.Get(client, node.UUID).Extract()
   129  	th.AssertNoErr(t, err)
   130  
   131  	th.AssertEquals(t, updated.Maintenance, false)
   132  	th.AssertEquals(t, updated.MaintenanceReason, "")
   133  }
   134  
   135  func TestNodesRAIDConfig(t *testing.T) {
   136  	clients.SkipReleasesBelow(t, "stable/ussuri")
   137  	clients.RequireLong(t)
   138  
   139  	client, err := clients.NewBareMetalV1Client()
   140  	th.AssertNoErr(t, err)
   141  	client.Microversion = "1.50"
   142  
   143  	node, err := CreateNode(t, client)
   144  	th.AssertNoErr(t, err)
   145  	defer DeleteNode(t, client, node)
   146  
   147  	sizeGB := 100
   148  	isTrue := true
   149  
   150  	err = nodes.SetRAIDConfig(client, node.UUID, nodes.RAIDConfigOpts{
   151  		LogicalDisks: []nodes.LogicalDisk{
   152  			{
   153  				SizeGB:       &sizeGB,
   154  				IsRootVolume: &isTrue,
   155  				RAIDLevel:    nodes.RAID5,
   156  				Controller:   "software",
   157  				PhysicalDisks: []interface{}{
   158  					map[string]string{
   159  						"size": "> 100",
   160  					},
   161  					map[string]string{
   162  						"size": "> 100",
   163  					},
   164  				},
   165  			},
   166  		},
   167  	}).ExtractErr()
   168  	th.AssertNoErr(t, err)
   169  
   170  	err = nodes.SetRAIDConfig(client, node.UUID, nodes.RAIDConfigOpts{
   171  		LogicalDisks: []nodes.LogicalDisk{
   172  			{
   173  				SizeGB:                &sizeGB,
   174  				IsRootVolume:          &isTrue,
   175  				RAIDLevel:             nodes.RAID5,
   176  				DiskType:              nodes.HDD,
   177  				NumberOfPhysicalDisks: 5,
   178  			},
   179  		},
   180  	}).ExtractErr()
   181  	th.AssertNoErr(t, err)
   182  }