NSX is a great technology and automating it with the REST API allows us to quickly provision networking. Here is a sample on how to create Logical Switches from a CSV file:
Contents of CSV file
ndaher@ubuntu:~$ cat ls.csv
name,description,tenantId
ls-1,ls-1 desc,virtual wire tenant
ls-2,ls-2 desc,virtual wire tenant
ls-3,ls-3 desc,virtual wire tenant
ls-4,ls-4 desc,virtual wire tenant
ls-5,ls-5 desc,virtual wire tenant
Contents of AWK script file, csv2xml2.awk
NR == 1 {for (i = 1; i <=NF; i++)
tag[i]=$i
}
NR != 1 {
printf "curl -k -u admin:Password! -H 'content-type: application/xml' -X " xtype " -d '"
if (node == "interface") printf "<interfaces>"
printf "<" node ">"
for (i = 1; i <= NF; i++) {
if (node == "interface" && tag[i] == "primaryAddress")
printf "<addressGroups><addressGroup>"
if (node == "interface" && tag[i] == "mtu")
printf "</addressGroup></addressGroups>"
printf "<" tag[i] ">" $i "</" tag[i] ">"
}
printf "</" node ">"
if (node == "interface") printf "</interfaces>"
printf "' "
print "https://" nsxmanager "/api/" api ".0" scope
}
How we execute command
ndaher@ubuntu:~$ awk -v xtype=POST -v node=virtualWireCreateSpec -v nsxmanager=nsxman.local -v scope=/vdn/scopes/vdnscope-1/virualwires -v api=2 -f csv2xml2.awk -F, ls.csv | sh
Output produced that is piped to SH
curl -k -u admin:Password! -H 'content-type: application/xml' -X POST -d '<virtualWireCreateSpec><name>ls-1</name><description>ls-1 desc</description><tenantId>virtual wire tenant</tenantId></virtualWireCreateSpec>' https//nsxman.local/api/2.0/vdn/scopes/vdnscope-1/virualwires
curl -k -u admin:Password! -H ‘content-type: application/xml’ -X POST -d ‘<virtualWireCreateSpec><name>ls-2</name><description>ls-2 desc</description><tenantId>virtual wire tenant</tenantId></virtualWireCreateSpec>’ https//nsxman.local/api/2.0/vdn/scopes/vdnscope-1/virualwires
curl -k -u admin:Password! -H ‘content-type: application/xml’ -X POST -d ‘<virtualWireCreateSpec><name>ls-3</name><description>ls-3 desc</description><tenantId>virtual wire tenant</tenantId></virtualWireCreateSpec>’ https//nsxman.local/api/2.0/vdn/scopes/vdnscope-1/virualwires
curl -k -u admin:Password! -H ‘content-type: application/xml’ -X POST -d ‘<virtualWireCreateSpec><name>ls-4</name><description>ls-4 desc</description><tenantId>virtual wire tenant</tenantId></virtualWireCreateSpec>’ https//nsxman.local/api/2.0/vdn/scopes/vdnscope-1/virualwires
curl -k -u admin:Password! -H ‘content-type: application/xml’ -X POST -d ‘<virtualWireCreateSpec><name>ls-5</name><description>ls-5 desc</description><tenantId>virtual wire tenant</tenantId></virtualWireCreateSpec>’ https//nsxman.local/api/2.0/vdn/scopes/vdnscope-1/virualwires