Add VIRL server-side framework and topology templates.
[csit.git] / resources / tools / virl / topologies / simple-ring.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">
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     ifconfig eth1 up 10.0.0.6 netmask 255.255.255.252&#xD;
71     ifconfig eth2 up 10.0.0.14 netmask 255.255.255.252&#xD;
72
73     grep -q nfs_server_scratch /var/lib/cloud/instance/user-data.txt || exit 1
74     grep -q nfs_server_common /var/lib/cloud/instance/user-data.txt || exit 1
75     nfs_server_scratch=$(grep -E '^nfs_server_scratch:' /var/lib/cloud/instance/user-data.txt | awk '{ print $2 }')
76     nfs_server_common=$(grep -E '^nfs_server_common:' /var/lib/cloud/instance/user-data.txt | awk '{ print $2 }')
77     instance_name=$(/usr/local/sbin/cloud-instance-name | cut -f 3 -d '&lt;' | cut -f 1 -d '&gt;')
78     echo My instance name is $instance_name
79
80     MAXCOUNT=12
81     RETRY=5
82
83     mkdir -p /scratch
84     mkdir -p /mnt/common
85
86     echo "Mounting NFS directories"
87     count=0
88     while [ $count -lt $MAXCOUNT ] &amp;&amp; ! mount -t nfs "${nfs_server_scratch}/${instance_name}" /scratch
89     do
90       sleep 5
91       count=$[$count+1]
92     done
93
94     mount -t nfs "${nfs_server_common}" /mnt/common
95
96     mkdir /scratch/$(hostname)
97
98     exit 0&#xD;
99 </entry>
100             <entry key="Auto-generate config" type="Boolean">false</entry>
101         </extensions>
102         <interface id="0" name="eth1" ipv4="10.0.0.6" netPrefixLenV4="30"/>
103         <interface id="1" name="eth2" ipv4="10.0.0.14" netPrefixLenV4="30"/>
104     </node>
105     <node name="sut1" type="SIMPLE" subtype="vPP" location="425,26"  vmImage="server-java">
106         <extensions>
107             <entry key="config" type="string">#cloud-config
108 bootcmd:
109 - ln -s -t /etc/rc.d /etc/rc.local
110 hostname: sut1
111 manage_etc_hosts: true
112 nfs_server_scratch: $$NFS_SERVER_SCRATCH$$
113 nfs_server_common: $$NFS_SERVER_COMMON$$
114 runcmd:
115 - start ttyS0
116 - systemctl start getty@ttyS0.service
117 - systemctl start rc-local
118 - sed -i '/^\s*PasswordAuthentication\s\+no/d' /etc/ssh/sshd_config
119 - echo "UseDNS no" &gt;&gt; /etc/ssh/sshd_config
120 - service ssh restart
121 - service sshd restart
122 - sed -i 's/no-pci//' /opt/cisco/vpe/etc/qn.conf
123 - sed -i 's/1024/1024 decimal-interface-names/g' /opt/cisco/vpe/etc/qn.conf
124 users:
125 - default
126 - gecos: User configured by VIRL Configuration Engine 0.21.4
127   lock-passwd: false
128   name: cisco
129   plain-text-passwd: cisco
130   shell: /bin/bash
131   ssh-authorized-keys:
132   - VIRL-USER-SSH-PUBLIC-KEY
133   - VIRL-USER-SSH-PUBLIC-KEY
134   sudo: ALL=(ALL) NOPASSWD:ALL
135 write_files:
136 - path: /etc/init/ttyS0.conf
137   owner: root:root
138   content: |
139     # ttyS0 - getty
140     # This service maintains a getty on ttyS0 from the point the system is
141     # started until it is shut down again.
142     start on stopped rc or RUNLEVEL=[12345]
143     stop on runlevel [!12345]
144     respawn
145     exec /sbin/getty -L 115200 ttyS0 vt102
146   permissions: '0644'
147 - path: /etc/systemd/system/dhclient@.service
148   content: |
149     [Unit]
150     Description=Run dhclient on %i interface
151     After=network.target
152     [Service]
153     Type=oneshot
154     ExecStart=/sbin/dhclient %i -pf /var/run/dhclient.%i.pid -lf /var/lib/dhclient/dhclient.%i.lease
155     RemainAfterExit=yes
156   owner: root:root
157   permissions: '0644'
158 - path: /usr/local/sbin/cloud-instance-name
159   content: |
160     #!/usr/bin/python
161     import pickle
162     print pickle.loads(open('/var/lib/cloud/instance/obj.pkl').read()).metadata['name']
163   owner: root:root
164   permissions: '0755'
165 - path: /etc/rc.local&#xD;
166   owner: root:root&#xD;
167   permissions: '0755'&#xD;
168   content: |-&#xD;
169     #!/bin/sh&#xD;
170     grep -q nfs_server_scratch /var/lib/cloud/instance/user-data.txt || exit 1
171     grep -q nfs_server_common /var/lib/cloud/instance/user-data.txt || exit 1
172     nfs_server_scratch=$(grep -E '^nfs_server_scratch:' /var/lib/cloud/instance/user-data.txt | awk '{ print $2 }')
173     nfs_server_common=$(grep -E '^nfs_server_common:' /var/lib/cloud/instance/user-data.txt | awk '{ print $2 }')
174     instance_name=$(/usr/local/sbin/cloud-instance-name | cut -f 3 -d '&lt;' | cut -f 1 -d '&gt;')
175     echo My instance name is $instance_name
176
177     MAXCOUNT=12
178     RETRY=5
179
180     mkdir -p /scratch
181     mkdir -p /mnt/common
182
183     echo "Mounting NFS directories"
184     count=0
185     while [ $count -lt $MAXCOUNT ] &amp;&amp; ! mount -t nfs "${nfs_server_scratch}/${instance_name}" /scratch
186     do
187       sleep 5
188       count=$[$count+1]
189     done
190
191     mount -t nfs "${nfs_server_common}" /mnt/common
192
193     mkdir /scratch/$(hostname)
194
195     exit 0&#xD;
196 </entry>
197         </extensions>
198         <interface id="0" name="GigabitEthernet0/4/0" ipv4="10.0.0.9" netPrefixLenV4="30"/>
199         <interface id="1" name="GigabitEthernet0/5/0" ipv4="10.0.0.5" netPrefixLenV4="30"/>
200     </node>
201     <node name="sut2" type="SIMPLE" subtype="vPP" location="748,26" vmImage="server-java">
202         <extensions>
203             <entry key="config" type="string">#cloud-config
204 bootcmd:
205 - ln -s -t /etc/rc.d /etc/rc.local
206 hostname: sut2
207 manage_etc_hosts: true
208 nfs_server_scratch: $$NFS_SERVER_SCRATCH$$
209 nfs_server_common: $$NFS_SERVER_COMMON$$
210 runcmd:
211 - start ttyS0
212 - systemctl start getty@ttyS0.service
213 - systemctl start rc-local
214 - sed -i '/^\s*PasswordAuthentication\s\+no/d' /etc/ssh/sshd_config
215 - echo "UseDNS no" &gt;&gt; /etc/ssh/sshd_config
216 - service ssh restart
217 - service sshd restart
218 - sed -i 's/no-pci//' /opt/cisco/vpe/etc/qn.conf
219 - sed -i 's/1024/1024 decimal-interface-names/g' /opt/cisco/vpe/etc/qn.conf
220 users:
221 - default
222 - gecos: User configured by VIRL Configuration Engine 0.21.4
223   lock-passwd: false
224   name: cisco
225   plain-text-passwd: cisco
226   shell: /bin/bash
227   ssh-authorized-keys:
228   - VIRL-USER-SSH-PUBLIC-KEY
229   - VIRL-USER-SSH-PUBLIC-KEY
230   sudo: ALL=(ALL) NOPASSWD:ALL
231 write_files:
232 - path: /etc/init/ttyS0.conf
233   owner: root:root
234   content: |
235     # ttyS0 - getty
236     # This service maintains a getty on ttyS0 from the point the system is
237     # started until it is shut down again.
238     start on stopped rc or RUNLEVEL=[12345]
239     stop on runlevel [!12345]
240     respawn
241     exec /sbin/getty -L 115200 ttyS0 vt102
242   permissions: '0644'
243 - path: /etc/systemd/system/dhclient@.service
244   content: |
245     [Unit]
246     Description=Run dhclient on %i interface
247     After=network.target
248     [Service]
249     Type=oneshot
250     ExecStart=/sbin/dhclient %i -pf /var/run/dhclient.%i.pid -lf /var/lib/dhclient/dhclient.%i.lease
251     RemainAfterExit=yes
252   owner: root:root
253   permissions: '0644'
254 - path: /usr/local/sbin/cloud-instance-name
255   content: |
256     #!/usr/bin/python
257     import pickle
258     print pickle.loads(open('/var/lib/cloud/instance/obj.pkl').read()).metadata['name']
259   owner: root:root
260   permissions: '0755'
261 - path: /etc/rc.local&#xD;
262   owner: root:root&#xD;
263   permissions: '0755'&#xD;
264   content: |-&#xD;
265     #!/bin/sh&#xD;
266     grep -q nfs_server_scratch /var/lib/cloud/instance/user-data.txt || exit 1
267     grep -q nfs_server_common /var/lib/cloud/instance/user-data.txt || exit 1
268     nfs_server_scratch=$(grep -E '^nfs_server_scratch:' /var/lib/cloud/instance/user-data.txt | awk '{ print $2 }')
269     nfs_server_common=$(grep -E '^nfs_server_common:' /var/lib/cloud/instance/user-data.txt | awk '{ print $2 }')
270     instance_name=$(/usr/local/sbin/cloud-instance-name | cut -f 3 -d '&lt;' | cut -f 1 -d '&gt;')
271     echo My instance name is $instance_name
272
273     MAXCOUNT=12
274     RETRY=5
275
276     mkdir -p /scratch
277     mkdir -p /mnt/common
278
279     echo "Mounting NFS directories"
280     count=0
281     while [ $count -lt $MAXCOUNT ] &amp;&amp; ! mount -t nfs "${nfs_server_scratch}/${instance_name}" /scratch
282     do
283       sleep 5
284       count=$[$count+1]
285     done
286
287     mount -t nfs "${nfs_server_common}" /mnt/common
288
289     mkdir /scratch/$(hostname)
290
291     exit 0&#xD;
292 </entry>
293         </extensions>
294         <interface id="0" name="GigabitEthernet0/4/0" ipv4="10.0.0.13" netPrefixLenV4="30"/>
295         <interface id="1" name="GigabitEthernet0/5/0" ipv4="10.0.0.10" netPrefixLenV4="30"/>
296     </node>
297     <connection dst="/virl:topology/virl:node[1]/virl:interface[2]" src="/virl:topology/virl:node[3]/virl:interface[1]"/>
298     <connection dst="/virl:topology/virl:node[2]/virl:interface[2]" src="/virl:topology/virl:node[1]/virl:interface[1]"/>
299     <connection dst="/virl:topology/virl:node[3]/virl:interface[2]" src="/virl:topology/virl:node[2]/virl:interface[1]"/>
300 </topology>