NetApp Community Update
This site will enter Read Only mode on July 23 as we prepare to move to a new platform. You will still be able to view content, but posting and replying will be temporarily disabled.
We're excited to launch our new Community experience on July 30 and more information will follow soon.
Stay connected during the transition - Join our Discord community today.

Microsoft Virtualization Discussions

Mounting flexclone of SMVI snapshot into vcenter

ROBHOLLOMAN
5,213 Views

I am working on automating our test environment refresh, which spins up a flexclone from a SMVI backup, then mounts the NFS volume into VMware vCenter.  Once mounted I will use PowerCLI to register the .vmx files and modify the VM's.  The NFS volumes are spread over two controllers, thus requiring the -Controller property to be called in New-NaVolClone and Add-NaNfsExport, which is forcing me to wrap the entire script in my Foreach controller loop.

Here's my the first part of my script that I'm having problems with:

$Snapshot = @()

$FlexClone = @()

#Create Object that connects to both FAS controllers

[object[]]$CDCFAS=$null

Foreach ($FAS in @("CDCFAS01", "CDCFAS02")) {

          $NewFAS=Connect-nacontroller $FAS

          $CDCFAS=$CDCFAS+$NewFAS

          }

#Gets weekley snapshot names of vmds_nfs volumes and creates flexclones from those volumes

Foreach ($ProdFAS in $CDCFAS) {

          $NFSVol = Get-NaVol -Controller $ProdFAS | where { $_.Name -like 'vmds_nfs_*'}

          $Snapshot += Foreach ($Vol in $NFSVol) {

                    Get-NaSnapshot -TargetName $Vol.Name -Controller $ProdFAS | where { $_.Name -notlike 'ATLFAS*' } | Sort-Object -Descending -Property Created | select -First 1

                    }

          Foreach ($Snap in $Snapshot) {

                    $NewClone = $ProdFAS.Name+'_'+($Snap.Created.ToShortDateString()).Replace("/","_")+'_'+$Snap.TargetName

                    New-NaVolClone -ParentVolume $Snap.TargetName -ParentSnapshot $Snap.Name -CloneVolume $NewClone -Controller $ProdFAS

                    Add-NaNfsExport -Persistent -Path /$NewClone -ActualPath /vol/$NewClone -ReadOnly $esxtststorage -Controller $ProdFAS

                    $NFSObject = New-Object System.Object

                    $NFSObject | Add-Member -MemberType NoteProperty -Name DatastoreName -Value $NewClone

                    $NFSObject | Add-Member -MemberType NoteProperty -Name Volume -Value $NewClone

                    $NFSObject | Add-Member -MemberType NoteProperty -Name NFSPath -Value /$NewClone

                    $NFSObject | Add-Member -MemberType NoteProperty -Name NFSHost -Value ($ProdFAS.ToString()+"d")

                    $NFSObject | Add-Member -MemberType NoteProperty -Name Controller -Value $ProdFAS

                    $FlexClone += $NFSObject

          }

}

The problem is that while my $Snapshot variable is populating with the 4 correct current snapshots, my Foreach-Object ($Snap ...) loop is populating my $Flexclone array with 6 objects.  I've listed the results of $Snapshot and $Flexclone below and highlighted the additional 2 objects that should not be there (Dark blue).  *Note:  If the volume name is like nfs_01, then the controller should be CDCFAS01.  Nfs02 = CDCFAS02.

PS C:\> $Snapshot | select Name,Created

Name                                                                                    Created

----                                                                                    -------

2012-07-11_0200-0400_weekly_VMware_nfs_01_1_CDCFAS01_vmds_nfs_01_1_                     7/11/2012 6:08:23 AM

2012-07-12_0400-0400_weekly_VMware_nfs_01_3_CDCFAS01_vmds_nfs_01_3_                     7/12/2012 8:05:52 AM

2012-07-12_0200-0400_weekly_VMware_nfs_02_1_CDCFAS02_vmds_nfs_02_1_                     7/12/2012 6:05:49 AM

2012-07-11_0400-0400_weekly_VMware_nfs_02_2_CDCFAS02_vmds_nfs_02_2_                     7/11/2012 8:04:02 AM

PS C:\> $FlexClone

DatastoreName : CDCFAS01_7_11_2012_vmds_nfs_01_1

Volume        : CDCFAS01_7_11_2012_vmds_nfs_01_1

NFSPath       : /CDCFAS01_7_11_2012_vmds_nfs_01_1

NFSHost       : CDCFAS01d

Controller    : CDCFAS01

DatastoreName : CDCFAS01_7_12_2012_vmds_nfs_01_3

Volume        : CDCFAS01_7_12_2012_vmds_nfs_01_3

NFSPath       : /CDCFAS01_7_12_2012_vmds_nfs_01_3

NFSHost       : CDCFAS01d

Controller    : CDCFAS01

DatastoreName : CDCFAS02_7_11_2012_vmds_nfs_01_1

Volume        : CDCFAS02_7_11_2012_vmds_nfs_01_1

NFSPath       : /CDCFAS02_7_11_2012_vmds_nfs_01_1

NFSHost       : CDCFAS02d

Controller    : CDCFAS02

DatastoreName : CDCFAS02_7_12_2012_vmds_nfs_01_3

Volume        : CDCFAS02_7_12_2012_vmds_nfs_01_3

NFSPath       : /CDCFAS02_7_12_2012_vmds_nfs_01_3

NFSHost       : CDCFAS02d

Controller    : CDCFAS02

DatastoreName : CDCFAS02_7_12_2012_vmds_nfs_02_1

Volume        : CDCFAS02_7_12_2012_vmds_nfs_02_1

NFSPath       : /CDCFAS02_7_12_2012_vmds_nfs_02_1

NFSHost       : CDCFAS02d

Controller    : CDCFAS02

DatastoreName : CDCFAS02_7_11_2012_vmds_nfs_02_2

Volume        : CDCFAS02_7_11_2012_vmds_nfs_02_2

NFSPath       : /CDCFAS02_7_11_2012_vmds_nfs_02_2

NFSHost       : CDCFAS02d

Controller    : CDCFAS02

Thanks for the help!

1 ACCEPTED SOLUTION

ROBHOLLOMAN
5,213 Views

My problem was a code problem.  I wasn't clearing my $Snapshot array variable in each loop, I was adding each result to the array.

Incorrect Code -->  $Snapshot += Foreach

Foreach ($ProdFAS in $CDCFAS) {

          $NFSVol = Get-NaVol -Controller $ProdFAS | where { $_.Name -like 'vmds_nfs_*'}

          $Snapshot += Foreach ($Vol in $NFSVol) {

                    Get-NaSnapshot -TargetName $Vol.Name -Controller $ProdFAS | where { $_.Name -notlike 'ATLFAS*' } | Sort-Object -Descending -Property Created | select -First 1

                    }

Correct Code --> $Snapshot = Foreach

Foreach ($ProdFAS in $CDCFAS) {

          $NFSVol = Get-NaVol -Controller $ProdFAS | where { $_.Name -like 'vmds_nfs_*'}

          $Snapshot = Foreach ($Vol in $NFSVol) {

                    Get-NaSnapshot -TargetName $Vol.Name -Controller $ProdFAS | where { $_.Name -notlike 'ATLFAS*' } | Sort-Object -Descending -Property Created | select -First 1

                    }

Thanks,

Robbie

View solution in original post

3 REPLIES 3

NEILLEVIEN
5,213 Views

Do you have any VMs that span filers and/or datastores?

Check your weekly job in SMVI and check the "Spanning" tab.

ROBHOLLOMAN
5,214 Views

My problem was a code problem.  I wasn't clearing my $Snapshot array variable in each loop, I was adding each result to the array.

Incorrect Code -->  $Snapshot += Foreach

Foreach ($ProdFAS in $CDCFAS) {

          $NFSVol = Get-NaVol -Controller $ProdFAS | where { $_.Name -like 'vmds_nfs_*'}

          $Snapshot += Foreach ($Vol in $NFSVol) {

                    Get-NaSnapshot -TargetName $Vol.Name -Controller $ProdFAS | where { $_.Name -notlike 'ATLFAS*' } | Sort-Object -Descending -Property Created | select -First 1

                    }

Correct Code --> $Snapshot = Foreach

Foreach ($ProdFAS in $CDCFAS) {

          $NFSVol = Get-NaVol -Controller $ProdFAS | where { $_.Name -like 'vmds_nfs_*'}

          $Snapshot = Foreach ($Vol in $NFSVol) {

                    Get-NaSnapshot -TargetName $Vol.Name -Controller $ProdFAS | where { $_.Name -notlike 'ATLFAS*' } | Sort-Object -Descending -Property Created | select -First 1

                    }

Thanks,

Robbie

richewalt
5,213 Views

Nice script. Did you also write a script to reverse everything after the test is complete?

Public