Skip to main content

Convert string to OU object in vRO

When you put virtual machine to particular OU, you may refer to virtual machine properties, such as 'server role', 'server group' or 'user group'...etc. It's easy to set a drop-list in blueprint of vRealize Automation Center (vRA) to let users choose this kind of properties but hard to create a computer account in corresponded OU location in vRO. That's because vRA passes most of values to vRO as strings, Active Directory workflows in vRO do not provide a way to convert string to OU.



[do_widget "Language Switcher" wrap=aside title=false]

I found a nice article explains how to convert string to OU object in vRO. I may use this feature frequently in vRA so I decided to create a workflow to make it reusable.


  1. Please make sure you read the article above and understand what it's talking about.

  2. I put virtual machine to OU base upon server role. Like "Production", "Development" and "POC"...etc.OUs

  3. I created customized action below to convert string to OU object.WorkFlow2



The code is:

Temp = "OU="+targetOU+",OU=Server,DC=CONTOSO,DC=COM";

var searchOU = Temp.split("=")[1].split(",")[0];
System.log("Search OU: " +searchOU);

var ouArray = ActiveDirectory.search("OrganizationalUnit", searchOU);
System.log("ouArray is:"+ouArray);


var ouIndex = ouArray.map(function(e) { return e.distinguishedName.toLowerCase(); }).indexOf(Temp.toLowerCase());

if (ouIndex > -1) {
ou = ouArray[ouIndex];
System.log("Found OU: " +ou.distinguishedName);
return ou;
} else {
throw("OU not found");
}


Basically you need to create a input parameter - "targetOU", it bring string into the action. Then variable "Temp" hard code the distinguish name with "targetOU". Rest of codes are same like the article above, just one thing, I added "return ou" in if section to make sure the action can returns object of AD:OrganizationUnit type.

Life is easy after the customized action is created. You just need to drop the action to a new workflow, define input parameter and run it!

Popular posts from this blog

Connect-NsxtServer shows "Unable to connect to the remote server"

When you run Connect-NsxtServer in the PowerCLI, it may show "Unable to connect to the remote server".  Because the error message is a little bit confusing with other login issues. It's not easy to troubleshoot. The actual reason is the NSX-T uses a self-signed certificate, and the PowerCLI cannot accept the certificate automatically. The fix is super easy. You need to set the PowerCLI to ignore the invalid certificate with the following command: Set-PowerCLIConfiguration -Scope User -InvalidCertificateAction:Ignore -Confirm:$false

Setup Terraform and Ansible for Windows provisionon CentOS

Provisioning Windows machines with Terraform is easy. Configuring Windows machines with Ansible is also not complex. However, it's a little bit challenging to combine them. The following steps are some ideas about handling a Windows machine from provisioning to post configuration without modifying the winrm configuration on the guest operating system. Install required repos for yum. yum -y install https://repo.ius.io/ius-release-el7.rpm yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum -y install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm yum -y install epel-release yum -y install yum-utils yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo Install  Terraform . sudo yum -y install terraform Install  Ansible . sudo yum -y install ansible Install  Kerberos . yum -y install gcc python-devel krb5-devel krb5-libs krb5-workstation

How to List All Users in Terraform Cloud

Terraform has a rich API. However, the API documentation does not mention how to list all users. We can leverage the organization membership API and the PowerShell command  Invoke-RestMethod  to get a user list. 1. Create an organization token in Terraform Cloud. 2. Create the token variable ( $Token ) in PowerShell. $Token = "abcde" 3. Create the API parameters variable in PowerShell. $params = @{ Uri = "https://app.terraform.io/api/v2/organizations/ZHENGWU/organization-memberships?page%5Bsize%5D=100" Authentication = "Bearer" Token = $Token ContentType = "application/vnd.api+json" } Note: You need to replace ZHENGWU with your own organization name. And I used 100 at the end of the URI to retrieve the first 100 users. It can be any number.  4. Retrieve the API return and list the user's email address. $Test = Invoke-RestMethod @params $Test.data.attributes.email