Add VIRL double-ring (load-balancing) topology with nested VM support
[csit.git] / resources / tools / virl / topologies / double-ring-nested.virl
1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2 <topology xmlns="http://www.cisco.com/VIRL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaVersion="0.9" xsi:schemaLocation="http://www.cisco.com/VIRL https://raw.github.com/CiscoVIRL/schema/v0.9/virl.xsd">
3     <extensions>
4         <entry key="management_network" type="String">flat</entry>
5     </extensions>
6     <node name="tg1" type="SIMPLE" subtype="server" location="570,238" vmImage="server-java-nested">
7         <extensions>
8             <entry key="config" type="String">#cloud-config&#xD;
9 bootcmd:&#xD;
10 - ln -s -t /etc/rc.d /etc/rc.local&#xD;
11 hostname: tg1&#xD;
12 manage_etc_hosts: true&#xD;
13 nfs_server_scratch: $$NFS_SERVER_SCRATCH$$
14 nfs_server_common: $$NFS_SERVER_COMMON$$
15 runcmd:&#xD;
16 - start ttyS0&#xD;
17 - systemctl start getty@ttyS0.service&#xD;
18 - systemctl start rc-local&#xD;
19 - touch /tmp/before-sed&#xD;
20 - sed -i 's/^\s*PasswordAuthentication\s\+no/PasswordAuthentication yes/' /etc/ssh/sshd_config&#xD;
21 - echo "UseDNS no" &gt;&gt; /etc/ssh/sshd_config&#xD;
22 - service ssh restart&#xD;
23 - service sshd restart&#xD;
24 users:&#xD;
25 - default&#xD;
26 - gecos: User configured by VIRL Configuration Engine 0.21.4&#xD;
27   lock-passwd: false&#xD;
28   name: cisco&#xD;
29   plain-text-passwd: cisco&#xD;
30   shell: /bin/bash&#xD;
31   ssh-authorized-keys:&#xD;
32   - VIRL-USER-SSH-PUBLIC-KEY&#xD;
33   - VIRL-USER-SSH-PUBLIC-KEY&#xD;
34   sudo: ALL=(ALL) NOPASSWD:ALL&#xD;
35 write_files:&#xD;
36 - path: /etc/init/ttyS0.conf&#xD;
37   owner: root:root&#xD;
38   content: |&#xD;
39     # ttyS0 - getty&#xD;
40     # This service maintains a getty on ttyS0 from the point the system is&#xD;
41     # started until it is shut down again.&#xD;
42     start on stopped rc or RUNLEVEL=[12345]&#xD;
43     stop on runlevel [!12345]&#xD;
44     respawn&#xD;
45     exec /sbin/getty -L 115200 ttyS0 vt102&#xD;
46   permissions: '0644'&#xD;
47 - path: /etc/systemd/system/dhclient@.service&#xD;
48   content: |&#xD;
49     [Unit]&#xD;
50     Description=Run dhclient on %i interface&#xD;
51     After=network.target&#xD;
52     [Service]&#xD;
53     Type=oneshot&#xD;
54     ExecStart=/sbin/dhclient %i -pf /var/run/dhclient.%i.pid -lf /var/lib/dhclient/dhclient.%i.lease&#xD;
55     RemainAfterExit=yes&#xD;
56   owner: root:root&#xD;
57   permissions: '0644'&#xD;
58 - path: /usr/local/sbin/cloud-instance-name
59   content: |
60     #!/usr/bin/python
61     import pickle
62     print pickle.loads(open('/var/lib/cloud/instance/obj.pkl').read()).metadata['name']
63   owner: root:root
64   permissions: '0755'
65 - path: /etc/rc.local&#xD;
66   owner: root:root&#xD;
67   permissions: '0755'&#xD;
68   content: |-&#xD;
69     #!/bin/sh&#xD;
70     grep -q nfs_server_scratch /var/lib/cloud/instance/user-data.txt || exit 1
71     grep -q nfs_server_common /var/lib/cloud/instance/user-data.txt || exit 1
72     nfs_server_scratch=$(grep -E '^nfs_server_scratch:' /var/lib/cloud/instance/user-data.txt | awk '{ print $2 }')
73     nfs_server_common=$(grep -E '^nfs_server_common:' /var/lib/cloud/instance/user-data.txt | awk '{ print $2 }')
74     instance_name=$(/usr/local/sbin/cloud-instance-name | cut -f 3 -d '&lt;' | cut -f 1 -d '&gt;')
75     echo My instance name is $instance_name
76
77     MAXCOUNT=12
78     RETRY=5
79
80     mkdir -p /scratch
81     mkdir -p /mnt/common
82
83     echo "Mounting NFS directories"
84     count=0
85     while [ $count -lt $MAXCOUNT ] &amp;&amp; ! mount -t nfs "${nfs_server_scratch}/${instance_name}" /scratch
86     do
87       sleep 5
88       count=$[$count+1]
89     done
90
91     mount -t nfs "${nfs_server_common}" /mnt/common
92
93     mkdir /scratch/$(hostname)
94
95     exit 0&#xD;
96 </entry>
97             <entry key="Auto-generate config" type="Boolean">false</entry>
98         </extensions>
99         <interface id="0" name="eth1"/>
100         <interface id="1" name="eth2"/>
101         <interface id="2" name="eth3"/>
102         <interface id="3" name="eth4"/>
103         <interface id="4" name="eth5"/>
104         <interface id="5" name="eth6"/>
105     </node>
106     <node name="sut1" type="SIMPLE" subtype="vPP" location="425,26" vmImage="server-java-nested">
107         <extensions>
108             <entry key="config" type="string">#cloud-config
109 bootcmd:
110 - ln -s -t /etc/rc.d /etc/rc.local
111 hostname: sut1
112 manage_etc_hosts: true
113 nfs_server_scratch: $$NFS_SERVER_SCRATCH$$
114 nfs_server_common: $$NFS_SERVER_COMMON$$
115 runcmd:
116 - start ttyS0
117 - systemctl start getty@ttyS0.service
118 - systemctl start rc-local
119 - sed -i '/^\s*PasswordAuthentication\s\+no/d' /etc/ssh/sshd_config
120 - echo "UseDNS no" &gt;&gt; /etc/ssh/sshd_config
121 - service ssh restart
122 - service sshd restart
123 - sed -i 's/no-pci//' /opt/cisco/vpe/etc/qn.conf
124 - sed -i 's/1024/1024 decimal-interface-names/g' /opt/cisco/vpe/etc/qn.conf
125 users:
126 - default
127 - gecos: User configured by VIRL Configuration Engine 0.21.4
128   lock-passwd: false
129   name: cisco
130   plain-text-passwd: cisco
131   shell: /bin/bash
132   ssh-authorized-keys:
133   - VIRL-USER-SSH-PUBLIC-KEY
134   - VIRL-USER-SSH-PUBLIC-KEY
135   sudo: ALL=(ALL) NOPASSWD:ALL
136 write_files:
137 - path: /etc/init/ttyS0.conf
138   owner: root:root
139   content: |
140     # ttyS0 - getty
141     # This service maintains a getty on ttyS0 from the point the system is
142     # started until it is shut down again.
143     start on stopped rc or RUNLEVEL=[12345]
144     stop on runlevel [!12345]
145     respawn
146     exec /sbin/getty -L 115200 ttyS0 vt102
147   permissions: '0644'
148 - path: /etc/systemd/system/dhclient@.service
149   content: |
150     [Unit]
151     Description=Run dhclient on %i interface
152     After=network.target
153     [Service]
154     Type=oneshot
155     ExecStart=/sbin/dhclient %i -pf /var/run/dhclient.%i.pid -lf /var/lib/dhclient/dhclient.%i.lease
156     RemainAfterExit=yes
157   owner: root:root
158   permissions: '0644'
159 - path: /usr/local/sbin/cloud-instance-name
160   content: |
161     #!/usr/bin/python
162     import pickle
163     print pickle.loads(open('/var/lib/cloud/instance/obj.pkl').read()).metadata['name']
164   owner: root:root
165   permissions: '0755'
166 - path: /etc/rc.local&#xD;
167   owner: root:root&#xD;
168   permissions: '0755'&#xD;
169   content: |-&#xD;
170     #!/bin/sh&#xD;
171     grep -q nfs_server_scratch /var/lib/cloud/instance/user-data.txt || exit 1
172     grep -q nfs_server_common /var/lib/cloud/instance/user-data.txt || exit 1
173     nfs_server_scratch=$(grep -E '^nfs_server_scratch:' /var/lib/cloud/instance/user-data.txt | awk '{ print $2 }')
174     nfs_server_common=$(grep -E '^nfs_server_common:' /var/lib/cloud/instance/user-data.txt | awk '{ print $2 }')
175     instance_name=$(/usr/local/sbin/cloud-instance-name | cut -f 3 -d '&lt;' | cut -f 1 -d '&gt;')
176     echo My instance name is $instance_name
177
178     MAXCOUNT=12
179     RETRY=5
180
181     mkdir -p /scratch
182     mkdir -p /mnt/common
183
184     echo "Mounting NFS directories"
185     count=0
186     while [ $count -lt $MAXCOUNT ] &amp;&amp; ! mount -t nfs "${nfs_server_scratch}/${instance_name}" /scratch
187     do
188       sleep 5
189       count=$[$count+1]
190     done
191
192     mount -t nfs "${nfs_server_common}" /mnt/common
193
194     mkdir /scratch/$(hostname)
195
196     exit 0&#xD;
197 </entry>
198         </extensions>
199         <interface id="0" name="GigabitEthernet0/4/0"/>
200         <interface id="1" name="GigabitEthernet0/5/0"/>
201         <interface id="2" name="GigabitEthernet0/6/0"/>
202         <interface id="3" name="GigabitEthernet0/7/0"/>
203     </node>
204     <node name="sut2" type="SIMPLE" subtype="vPP" location="748,26" vmImage="server-java-nested">
205         <extensions>
206             <entry key="config" type="string">#cloud-config
207 bootcmd:
208 - ln -s -t /etc/rc.d /etc/rc.local
209 hostname: sut2
210 manage_etc_hosts: true
211 nfs_server_scratch: $$NFS_SERVER_SCRATCH$$
212 nfs_server_common: $$NFS_SERVER_COMMON$$
213 runcmd:
214 - start ttyS0
215 - systemctl start getty@ttyS0.service
216 - systemctl start rc-local
217 - sed -i '/^\s*PasswordAuthentication\s\+no/d' /etc/ssh/sshd_config
218 - echo "UseDNS no" &gt;&gt; /etc/ssh/sshd_config
219 - service ssh restart
220 - service sshd restart
221 - sed -i 's/no-pci//' /opt/cisco/vpe/etc/qn.conf
222 - sed -i 's/1024/1024 decimal-interface-names/g' /opt/cisco/vpe/etc/qn.conf
223 users:
224 - default
225 - gecos: User configured by VIRL Configuration Engine 0.21.4
226   lock-passwd: false
227   name: cisco
228   plain-text-passwd: cisco
229   shell: /bin/bash
230   ssh-authorized-keys:
231   - VIRL-USER-SSH-PUBLIC-KEY
232   - VIRL-USER-SSH-PUBLIC-KEY
233   sudo: ALL=(ALL) NOPASSWD:ALL
234 write_files:
235 - path: /etc/init/ttyS0.conf
236   owner: root:root
237   content: |
238     # ttyS0 - getty
239     # This service maintains a getty on ttyS0 from the point the system is
240     # started until it is shut down again.
241     start on stopped rc or RUNLEVEL=[12345]
242     stop on runlevel [!12345]
243     respawn
244     exec /sbin/getty -L 115200 ttyS0 vt102
245   permissions: '0644'
246 - path: /etc/systemd/system/dhclient@.service
247   content: |
248     [Unit]
249     Description=Run dhclient on %i interface
250     After=network.target
251     [Service]
252     Type=oneshot
253     ExecStart=/sbin/dhclient %i -pf /var/run/dhclient.%i.pid -lf /var/lib/dhclient/dhclient.%i.lease
254     RemainAfterExit=yes
255   owner: root:root
256   permissions: '0644'
257 - path: /usr/local/sbin/cloud-instance-name
258   content: |
259     #!/usr/bin/python
260     import pickle
261     print pickle.loads(open('/var/lib/cloud/instance/obj.pkl').read()).metadata['name']
262   owner: root:root
263   permissions: '0755'
264 - path: /etc/rc.local&#xD;
265   owner: root:root&#xD;
266   permissions: '0755'&#xD;
267   content: |-&#xD;
268     #!/bin/sh&#xD;
269     grep -q nfs_server_scratch /var/lib/cloud/instance/user-data.txt || exit 1
270     grep -q nfs_server_common /var/lib/cloud/instance/user-data.txt || exit 1
271     nfs_server_scratch=$(grep -E '^nfs_server_scratch:' /var/lib/cloud/instance/user-data.txt | awk '{ print $2 }')
272     nfs_server_common=$(grep -E '^nfs_server_common:' /var/lib/cloud/instance/user-data.txt | awk '{ print $2 }')
273     instance_name=$(/usr/local/sbin/cloud-instance-name | cut -f 3 -d '&lt;' | cut -f 1 -d '&gt;')
274     echo My instance name is $instance_name
275
276     MAXCOUNT=12
277     RETRY=5
278
279     mkdir -p /scratch
280     mkdir -p /mnt/common
281
282     echo "Mounting NFS directories"
283     count=0
284     while [ $count -lt $MAXCOUNT ] &amp;&amp; ! mount -t nfs "${nfs_server_scratch}/${instance_name}" /scratch
285     do
286       sleep 5
287       count=$[$count+1]
288     done
289
290     mount -t nfs "${nfs_server_common}" /mnt/common
291
292     mkdir /scratch/$(hostname)
293
294     exit 0&#xD;
295 </entry>
296         </extensions>
297         <interface id="0" name="GigabitEthernet0/4/0"/>
298         <interface id="1" name="GigabitEthernet0/5/0"/>
299         <interface id="2" name="GigabitEthernet0/6/0"/>
300         <interface id="3" name="GigabitEthernet0/7/0"/>
301     </node>
302     <connection dst="/virl:topology/virl:node[1]/virl:interface[3]" src="/virl:topology/virl:node[2]/virl:interface[1]"/>
303     <connection dst="/virl:topology/virl:node[1]/virl:interface[4]" src="/virl:topology/virl:node[2]/virl:interface[2]"/>
304     <connection dst="/virl:topology/virl:node[2]/virl:interface[3]" src="/virl:topology/virl:node[3]/virl:interface[3]"/>
305     <connection dst="/virl:topology/virl:node[2]/virl:interface[4]" src="/virl:topology/virl:node[3]/virl:interface[4]"/>
306     <connection dst="/virl:topology/virl:node[1]/virl:interface[5]" src="/virl:topology/virl:node[3]/virl:interface[1]"/>
307     <connection dst="/virl:topology/virl:node[1]/virl:interface[6]" src="/virl:topology/virl:node[3]/virl:interface[2]"/>
308 </topology>