Trabajando con VM Folders con PowerCLI

En este post, hablaré sobre las VM Folders y sobre qué uso podemos darles. También incluiré algunos comandos para trabajar con ellos usando PowerCLI.

Para empezar, ¿sabemos qué es una carpeta vCenter y que función tiene? Una carpeta es un contenedor que se utiliza para mejorar la agrupación de objetos dentro de su inventario. Las carpetas proporcionan una estructura natural sobre la que aplicar permisos.

Un ejemplo, podría ser, organizar máquinas virtuales o plantillas según el sistema operativo, la aplicación o la función que tengan. Otro ejemplo, podría organizar los centros de datos por ubicación geográfica.

Bien, la siguiente pregunta es, ¿Qué tipo de carpetas podemos crear?

Existe la posibilidad de crear los siguientes tipos de carpetas:

  • Host and Cluster Folder
  • Network Folder
  • Storage Folder
  • VM and Template Folder

Debemos recordar que los objetos que ubiquemos dentro de una carpeta deben ser del mismo tipo. Por ejemplo, no podemos colocar objetos de tipo Host y objetos de tipo máquinas virtuales juntas en la misma carpeta.

Dependiendo del tipo de carpeta, podemos visualizarla desde una vista de inventario u otra. Debemos recordar que existen los siguientes tipos de vistas de inventario (Host and Clusters, Virtual Machines and Templates, Networks y Datastores and Datastores Clusters).

En alguna ocasión, me he encontrado la necesidad de agrupar las máquinas según el entorno o la aplicación, con el fin de organizarlas para un movimiento orquestado de máquinas a través de centros de datos con almacenamiento extendido.

En ese momento surgió la idea de organizar las máquinas virtuales por carpetas, de esa manera podría escribir un script, el cual, recogería el nombre de las máquinas virtuales dentro de una carpeta y podría realizar acciones con ellas. Por ejemplo, si necesitamos apagar las máquinas virtuales por entorno o aplicación, o bien la función que yo buscaba, modificar las máquinas dentro de un grupo DRS para realizar vMotion en el centro de datos opuesto, etc.

Para poder trabajar con carpetas de VMs y Plantillas, tenemos disponibles cmdlet de PowerCLI muy útiles, que detallaré a continuación

  • Recoger datos a partir de una VM Folder

Como mencioné anteriormente, es posible que tengamos la necesidad de saber qué objetos contiene una carpeta. Por ejemplo, podemos crear una estructura de carpetas de máquinas virtuales para establecer un apagado de máquinas virtuales orquestado.

### Function que devuelve la lista de VMs que contiene una Folder VM pasada como parámetro.

Function Get-VMs([string]$folder)
{
               $List_VMs = Get-Folder –Name $folder | Get-VM
               return $List_VMs
}

### Function que devuelve la lista de Folder VM contenidas en un Datacenter pasado como parámetro.

Function Get-FoldersVM([string]$datacenter)
{
               $List_Folders = Get-Folder –Location $datacenter –Type “VM”
               return $List_Folders
}
  • Crear una Folder VM

Crear Folder VMs no es fácil. No hay un cmdlet exclusivo para crear Folders de tipo VM. Existe un cmdlet «New-Folder», el problema es que no podemos especificar qué tipo de carpeta queremos crear y, en el caso de este cmdlet de forma predeterminada, crea carpetas de tipo Host.

Por lo que para crear una Folder VM, deberemos jugar con Get-View para el objeto Datacenter.

### Comandos para crear una Folder VM

$folder = “MyFolderVMS”

$Datacenter = “Just2Kloud-Datacenter”

Write-Host "Create Folder VM with name $folder at Datacenter with name $Datacenter ..."

(Get-View (Get-View -viewtype datacenter –filter @{"name"=$Datacenter}).vmfolder).CreateFolder($folder)
  • Mover Folder VM

También podemos encontrarnos con la necesidad de tener que mover Folders VM a otras ubicaciones.

### Comandos para mover una Folder VM a otra ubicación

$Folder = “FolderVMtoMove”

$ObjectDestination = “NameObjDestination”

Move-Folder -Folder $Folder -Destination $ObjectDestination

**Especificaremos el nombre de la ubicación final sobre la cuál queremos ubicar la Folder VM.
  • Eliminar Folder VM

Otra necesidad que se nos puede presentar es la de Eliminar Folder VMs

### Command to remove Folder.

$Folder = “FolderVMtoRemove”

Remove-Folder -Folder $Folder

** Si tiene la necesidad de autoconfirmar la eliminación de la Folder VM, tendrías que añadir "-confirm: $ false"

Os dejo el enlace a documentación de VMware, que a mi me resultó útil.

https://www.vmware.com/support/developer/PowerCLI/PowerCLI41/html/Move-Folder.html

Espero que os sea de utilidad. Si os gusta, no dudéis en compartir 😉

6 comments

  1. Hello,

    When I’m running your command to create a vm folder from the command line directly, it works.
    But from a ps1 script it returns:
    PS C:\Users\Administrateur.CLOUDIS> ./createFolder.ps1
    Au caract?re C:\Users\Administrateur.CLOUDIS\createFolder.ps1:4 : 59
    + … nter ???filter @{«name»=$Datacenter}).vmfolder).CreateFolder($folder)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Le terminateur » est manquant dans la cha?ne.
    Au caract?re C:\Users\Administrateur.CLOUDIS\createFolder.ps1:4 : 106
    + … nter ???filter @{«name»=$Datacenter}).vmfolder).CreateFolder($folder)
    + ~
    Parenth?se fermante ??)?? manquante dans l?expression.
    + CategoryInfo : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

    And I don’t know why…

    Any idea ? Thanks 🙂

    1. I believe that the problem in your script is the Next:

      Line un your script
      @{«name»=$Datacenter}).vmfolder).CreateFolder($folder)

      The issue are the chars <>

      You must try with this

      @{«name»=$Datacenter}).vmfolder).CreateFolder($folder)

      Please let me know

      1. Hello and thanks for your answer. I think the copy / paste here created this <> but actually it’s «». The two line of code face the same problem on your message and are exactly the same 😀
        So I suppose while I’m writing this answer, the problem will be present here as well when I’ll throw my today’s message.

        Anyway, let’s use words. I’m using already double quotation mark but it have been translated here to angle quotes. Using double quotation generate the same error. So the problem should be in another location.

        I’m trying to dig more into this problem today.

        Thanks!

        1. I finally found it was a copy / paste problem inside my text editor that cause the problem. Writing manually all the create folder line manually resolved the problem.

          Thanks 🙂

        2. Hi Thierry,

          I have executed the commands of my post, and it’s working fine.

          PS C:\> $folder = «MyFolderVMs»
          PS C:\> $Datacenter = «PRUEBA»
          PS C:\> Write-Host «Create Folder VM with name $folder at Datacenter with name $Datacenter …»
          Create Folder VM with name MyFolderVMs at Datacenter with name PRUEBA …
          PS C:\> (Get-View (Get-View -viewtype datacenter -filter @{«name»=$Datacenter}).vmfolder).CreateFolder($folder)

          Type Value
          —- —–
          Folder group-v950

          PS C:\> Get-Folder -Type VM -Name MyFolderVMs

          Name Type
          —- —-
          MyFolderVMs VM

          Also I have created a Script with this lines:

          $folder = «MyFolderVMs-Test1»
          $Datacenter = «PRUEBA»
          Write-Host «Create Folder VM with name $folder at Datacenter with name $Datacenter …»
          (Get-View (Get-View -viewtype datacenter -filter @{«name»=$Datacenter}).vmfolder).CreateFolder($folder)

          And it’s working fine.

          If you want you can send me your script and I could review it.

  2. ### This is the right syntaxt to create a folder

    ### Command to create a Folder VM

    $folder = “MyFolderVMS”

    $Datacenter = “MyDatacenter”

    Write-Host «Create Folder VM with name $folder at Datacenter with name $Datacenter …»

    (get-view ((Get-View -viewtype datacenter –filter @{«name»=$Datacenter}).vmfolder)).CreateFolder($folder)

Responder a Ivo Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.