Skip to content

Commit 5ed3c53

Browse files
committed
Add GM support to upgrade components
Support the upgrade of Global Manager using the Terraform provider. Signed-off-by: Kobi Samoray <[email protected]>
1 parent 9157478 commit 5ed3c53

File tree

4 files changed

+81
-12
lines changed

4 files changed

+81
-12
lines changed

nsxt/resource_nsxt_upgrade_prepare.go

+10-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ import (
2525
"github.com/vmware/vsphere-automation-sdk-go/services/nsxt-mp/nsx/upgrade/pre_upgrade_checks"
2626
)
2727

28-
var precheckComponentTypes = []string{"EDGE", "HOST", "MP"}
28+
var lmPrecheckComponentTypes = []string{"EDGE", "HOST", "MP"}
29+
var gmPrecheckComponentTypes = []string{"MP"}
2930

3031
const bundleUploadTimeout int = 3600
3132
const ucUpgradeTimeout int = 3600
@@ -399,7 +400,7 @@ func executePreupgradeChecks(d *schema.ResourceData, m interface{}) error {
399400
return err
400401
}
401402
timeout := d.Get("precheck_timeout").(int)
402-
for _, componentType := range precheckComponentTypes {
403+
for _, componentType := range getPrecheckComponentTypes(m) {
403404
log.Printf("Execute pre-upgrade check on %s", componentType)
404405
err = waitForPrecheckComplete(m, componentType, timeout)
405406
if err != nil {
@@ -409,6 +410,13 @@ func executePreupgradeChecks(d *schema.ResourceData, m interface{}) error {
409410
return nil
410411
}
411412

413+
func getPrecheckComponentTypes(m interface{}) []string {
414+
if isPolicyGlobalManager(m) {
415+
return gmPrecheckComponentTypes
416+
}
417+
return lmPrecheckComponentTypes
418+
}
419+
412420
func getPrecheckErrors(m interface{}, typeParam *string) ([]nsxModel.UpgradeCheckFailure, error) {
413421
connector := getPolicyConnector(m)
414422
client := pre_upgrade_checks.NewFailuresClient(connector)

nsxt/resource_nsxt_upgrade_run.go

+26-9
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ var upgradeComponentListPost9 = []string{
3535
finalizeUpgradeGroup,
3636
}
3737

38+
var upgradeComponentListGlobalManager = []string{
39+
mpUpgradeGroup,
40+
}
41+
3842
var postCheckComponentList = []string{
3943
edgeUpgradeGroup,
4044
hostUpgradeGroup,
@@ -52,6 +56,7 @@ var componentToSettingKey = map[string]string{
5256

5357
var supportedUpgradeMode = []string{"maintenance_mode", "in_place", "stage_in_vlcm"}
5458
var supportedMaintenanceModeConfigVsanMode = []string{"evacuate_all_data", "ensure_object_accessibility", "no_action"}
59+
var lmOnlyAttributes = []string{"edge_group", "host_group", "finalize_upgrade_setting", "edge_upgrade_setting", "host_upgrade_setting"}
5560

5661
var (
5762
// Default waiting setup in seconds
@@ -100,7 +105,10 @@ func getTargetVersion(m interface{}) (string, error) {
100105
return *obj.TargetVersion, nil
101106
}
102107

103-
func getUpgradeComponentList(targetVersion string) []string {
108+
func getUpgradeComponentList(targetVersion string, m interface{}) []string {
109+
if isPolicyGlobalManager(m) {
110+
return upgradeComponentListGlobalManager
111+
}
104112
if util.VersionHigherOrEqual(targetVersion, "9.0.0") {
105113
return upgradeComponentListPost9
106114
}
@@ -412,6 +420,15 @@ func upgradeRunCreateOrUpdate(d *schema.ResourceData, m interface{}) error {
412420
id = newUUID()
413421
}
414422

423+
// Fail if upgrade groups are configured for global manager
424+
if isPolicyGlobalManager(m) {
425+
for _, attr := range lmOnlyAttributes {
426+
if d.HasChange(attr) {
427+
return fmt.Errorf("attribute %s is not supported for Global Manager", attr)
428+
}
429+
}
430+
}
431+
415432
// Validate that upgrade_prepare_id is actually from the nsxt_upgrade_prepare_ready data source
416433
upgradePrepareReadyID := d.Get("upgrade_prepare_ready_id").(string)
417434
if !util.VerifyVerifiableID(upgradePrepareReadyID, "nsxt_upgrade_prepare_ready") {
@@ -427,7 +444,7 @@ func upgradeRunCreateOrUpdate(d *schema.ResourceData, m interface{}) error {
427444

428445
log.Printf("[INFO] Updating UpgradeUnitGroup and UpgradePlanSetting.")
429446
var hasVLCM bool
430-
err = prepareUpgrade(upgradeClientSet, d, targetVersion, &hasVLCM)
447+
err = prepareUpgrade(upgradeClientSet, d, m, targetVersion, &hasVLCM)
431448
if err != nil {
432449
return handleCreateError("NsxtUpgradeRun", id, err)
433450
}
@@ -442,7 +459,7 @@ func upgradeRunCreateOrUpdate(d *schema.ResourceData, m interface{}) error {
442459
}
443460
}
444461

445-
err = runUpgrade(upgradeClientSet, getPartialUpgradeMap(d, targetVersion), targetVersion, hasVLCM, finalizeUpgrade)
462+
err = runUpgrade(upgradeClientSet, m, getPartialUpgradeMap(d, m, targetVersion), targetVersion, hasVLCM, finalizeUpgrade)
446463
if err != nil {
447464
return handleCreateError("NsxtUpgradeRun", id, err)
448465
}
@@ -453,8 +470,8 @@ func upgradeRunCreateOrUpdate(d *schema.ResourceData, m interface{}) error {
453470
return resourceNsxtUpgradeRunRead(d, m)
454471
}
455472

456-
func prepareUpgrade(upgradeClientSet *upgradeClientSet, d *schema.ResourceData, targetVersion string, hasVLCM *bool) error {
457-
for _, component := range getUpgradeComponentList(targetVersion) {
473+
func prepareUpgrade(upgradeClientSet *upgradeClientSet, d *schema.ResourceData, m interface{}, targetVersion string, hasVLCM *bool) error {
474+
for _, component := range getUpgradeComponentList(targetVersion, m) {
458475
// Customize MP upgrade is not allowed
459476
if component == mpUpgradeGroup || component == finalizeUpgradeGroup {
460477
continue
@@ -515,12 +532,12 @@ func prepareUpgrade(upgradeClientSet *upgradeClientSet, d *schema.ResourceData,
515532
return nil
516533
}
517534

518-
func getPartialUpgradeMap(d *schema.ResourceData, targetVersion string) map[string]bool {
535+
func getPartialUpgradeMap(d *schema.ResourceData, m interface{}, targetVersion string) map[string]bool {
519536
isPartialUpgradeMap := map[string]bool{
520537
edgeUpgradeGroup: false,
521538
hostUpgradeGroup: false,
522539
}
523-
for _, component := range getUpgradeComponentList(targetVersion) {
540+
for _, component := range getUpgradeComponentList(targetVersion, m) {
524541
if component == mpUpgradeGroup || component == finalizeUpgradeGroup {
525542
continue
526543
}
@@ -808,10 +825,10 @@ func updateComponentUpgradePlanSetting(settingClient plan.SettingsClient, d *sch
808825
return err
809826
}
810827

811-
func runUpgrade(upgradeClientSet *upgradeClientSet, partialUpgradeMap map[string]bool, targetVersion string, hasVLCM, finalizeUpgrade bool) error {
828+
func runUpgrade(upgradeClientSet *upgradeClientSet, m interface{}, partialUpgradeMap map[string]bool, targetVersion string, hasVLCM, finalizeUpgrade bool) error {
812829
partialUpgradeExist := false
813830
prevComponent := ""
814-
for _, c := range getUpgradeComponentList(targetVersion) {
831+
for _, c := range getUpgradeComponentList(targetVersion, m) {
815832
component := c
816833
if !finalizeUpgrade && component == finalizeUpgradeGroup {
817834
continue

website/docs/guides/upgrade.html.markdown

+41
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,47 @@ When the ESXi software is not upgraded, the finalization stage will fail. There
192192
the NSX management plane, the Edge appliances and the NSX bits on the ESXi hosts, and postpone the ESXi OS upgrade to
193193
a later time.
194194

195+
### Upgrading Global Manager
196+
197+
NSX Global Manager upgrade is similar to Local Manager. Yet, Global Manager has no Edge or Host components and therefore
198+
Doesn't allow the configuration of these components in upgrade groups in the `nsxt_upgrade_run` resource.
199+
200+
The example below uses Terraform to upgrade a Global Manager.
201+
202+
```hcl
203+
provider "nsxt" {
204+
host = "global.manager.somedomain.org"
205+
username = "admin"
206+
password = "AdminPassword"
207+
allow_unverified_ssl = true
208+
global_manager = true // This is required to indicate that we upgrade a Global Manager
209+
}
210+
211+
resource "nsxt_upgrade_prepare" "gm_prepare_res" {
212+
upgrade_bundle_url = var.upgrade_bundle_url
213+
accept_user_agreement = true
214+
}
215+
216+
resource "nsxt_upgrade_precheck_acknowledge" "gm_precheck_ack" {
217+
provider = nsxt.gm_nsxt
218+
219+
precheck_ids = var.gm_precheck_warns
220+
target_version = nsxt_upgrade_prepare.gm_prepare_res.target_version
221+
}
222+
223+
data "nsxt_upgrade_prepare_ready" "gm_ready" {
224+
provider = nsxt.gm_nsxt
225+
226+
upgrade_prepare_id = nsxt_upgrade_prepare.gm_prepare_res.id
227+
depends_on = [nsxt_upgrade_precheck_acknowledge.gm_precheck_ack]
228+
}
229+
230+
resource "nsxt_upgrade_run" "gm_run" {
231+
provider = nsxt.gm_nsxt
232+
upgrade_prepare_ready_id = data.nsxt_upgrade_prepare_ready.gm_ready.id
233+
}
234+
```
235+
195236
### Post upgrade checks
196237

197238
Upgrade post check data sources can be used to examine the results of the edge and host upgrades, to conclude if the

website/docs/r/upgrade_run.html.markdown

+4-1
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,15 @@ The following arguments are supported:
9393
* `timeout` - (Optional) Upgrade status check timeout in seconds. Default: 3600 seconds.
9494
* `interval` - (Optional) Interval to check upgrade status in seconds. Default: 30 seconds.
9595
* `delay` - (Optional) Initial delay to start upgrade status checks in seconds. Default: 300 seconds.
96+
* `max_retries` - (Optional) Maximum number of retries before failing the upgrade operation. Default: 100.
97+
98+
**NOTE:** With Global Manager, `edge_group`, `host_group`, `finalize_upgrade_setting`, `edge_upgrade_setting`, `host_upgrade_setting` attributes are not supported.
9699

97100
## Argument Reference
98101

99102
In addition to arguments listed above, the following attributes are exported:
100103

101-
* `upgrade_plan` - (Computed) Upgrade plan for current upgrade. Upgrade unit groups that are not defined in `edge_group` or `host_group` will also be included here.
104+
* `upgrade_group_plan` - (Computed) Upgrade plan for current upgrade. Upgrade unit groups that are not defined in `edge_group` or `host_group` will also be included here.
102105
* `type` - Component type.
103106
* `id` - ID of the upgrade unit group.
104107
* `enabled` - Flag to indicate whether upgrade of this group is enabled or not.

0 commit comments

Comments
 (0)