VMware Cloud Community
Colesy1411
Contributor
Contributor
Jump to solution

Working with arrays in vro

I was wondering if anyone could offer some advice or guidance why this code is not working as expected or im approaching it the wrong way...

I have the following code that is calling a configuration element that contains an attribute called “activedirectory” which is a array\composite type that contains 2 values (2 different environments which contain the AD controller and OU container for that domain)

I input the environment variable into this code (Prod or Non-Prod) and expect the code to match the environment name with the relevant value in the array but this is not case as the first value always gets returned regardless of environment name.

var configelement = System.getModule("company.vro.helpers").getConfigElement("activedirectory");

var domains = configelement.getAttributeWithKey("domains").value;

var domain;

for each (var obj in domains) {

                if (obj.environment == environment);

                domain = obj;

                                }

if (domain) {

                sddcBuildOu = domain.sddcBuildOu;

                } else {

                throw "Domain not found - please ensure environment is supplied as 'Prod' or 'Non-Prod'"

                }

Any feedback would be greatly appreciated

Reply
0 Kudos
1 Solution

Accepted Solutions
iiliev
VMware Employee
VMware Employee
Jump to solution

It surely has an effect as it makes the if statement effectively a no-op, causing the assignment domain = obj; to happen on each for loop iteration, and so when the loop ends, the value of the domain variable will always be set to the last element from domains array. Which is clearly incorrect.

View solution in original post

Reply
0 Kudos
3 Replies
eoinbyrne
Expert
Expert
Jump to solution

Try it with some logging to see whats happening?

pastedImage_0.png

Also, at this line

if (obj.environment == environment); // <----- semi-colon here

Note sure if this is having an effect on your processing (it might not but you don't need it there)

Reply
0 Kudos
iiliev
VMware Employee
VMware Employee
Jump to solution

It surely has an effect as it makes the if statement effectively a no-op, causing the assignment domain = obj; to happen on each for loop iteration, and so when the loop ends, the value of the domain variable will always be set to the last element from domains array. Which is clearly incorrect.

Reply
0 Kudos
Colesy1411
Contributor
Contributor
Jump to solution

Thanks guys for the responses, it has been very helpful.

You are right that i am missing curly braces on the if statement around the domain object, once i added them it has fixed the issue.

Thanks again.

Reply
0 Kudos