From 3f78f83f984553f775f63caaff32dc3c48efff1e Mon Sep 17 00:00:00 2001
From: Ana C <ana.cunha@ericsson.com>
Date: Fri, 11 Dec 2015 15:56:08 +0100
Subject: Adapt documentation to latest guidelines

Adapt Yardstick documentation according to the latest guidelines from the
Releng project.

The only change in test case description TC001 and TC002 is to remove logo.
The same for the test case description v2 template.

The previous version of test case description is deleted from repo.

The Yardstick_task_template is edited to keep line lenght 80 char.

This commit also adds index for docs/yardstick and for
docs/user_guides/framework.

The overview for the vTC .rst file has been fixed to enable the .pdf
generation.

Change-Id: Ib6480c3c29ce0f0ee22c9ad717439f6a293ab842
Signed-off-by: Ana C <ana.cunha@ericsson.com>
---
 docs/templates/Yardstick_task_templates.rst | 48 +++++++++++++++++++----------
 1 file changed, 31 insertions(+), 17 deletions(-)

(limited to 'docs/templates/Yardstick_task_templates.rst')

diff --git a/docs/templates/Yardstick_task_templates.rst b/docs/templates/Yardstick_task_templates.rst
index 538937fd7..d2c2b7ec9 100755
--- a/docs/templates/Yardstick_task_templates.rst
+++ b/docs/templates/Yardstick_task_templates.rst
@@ -3,10 +3,12 @@ Task Template Syntax
 
 Basic template syntax
 ---------------------
-A nice feature of the input task format used in Yardstick is that it supports the template syntax based on Jinja2.
-This turns out to be extremely useful when, say, you have a fixed structure of your task but you want to
-parameterize this task in some way.
-For example, imagine your input task file (task.yaml) runs a set of Ping scenarios:
+A nice feature of the input task format used in Yardstick is that it supports
+the template syntax based on Jinja2.
+This turns out to be extremely useful when, say, you have a fixed structure of
+your task but you want to parameterize this task in some way.
+For example, imagine your input task file (task.yaml) runs a set of Ping
+scenarios:
 
 ::
 
@@ -34,9 +36,10 @@ For example, imagine your input task file (task.yaml) runs a set of Ping scenari
   context:
       ...
 
-Let's say you want to run the same set of scenarios with the same runner/context/sla,
-but you want to try another packetsize to compare the performance.
-The most elegant solution is then to turn the packetsize name into a template variable:
+Let's say you want to run the same set of scenarios with the same runner/
+context/sla, but you want to try another packetsize to compare the performance.
+The most elegant solution is then to turn the packetsize name into a template
+variable:
 
 ::
 
@@ -64,14 +67,17 @@ The most elegant solution is then to turn the packetsize name into a template va
   context:
       ...
 
-and then pass the argument value for {{packetsize}} when starting a task with this configuration file.
+and then pass the argument value for {{packetsize}} when starting a task with
+this configuration file.
 Yardstick provides you with different ways to do that:
 
-1.Pass the argument values directly in the command-line interface (with either a JSON or YAML dictionary):
+1.Pass the argument values directly in the command-line interface (with either
+a JSON or YAML dictionary):
 
 ::
 
- yardstick task start samples/ping-template.yaml --task-args '{"packetsize": "200"}'
+ yardstick task start samples/ping-template.yaml
+ --task-args'{"packetsize":"200"}'
 
 2.Refer to a file that specifies the argument values (JSON/YAML):
 
@@ -81,9 +87,12 @@ Yardstick provides you with different ways to do that:
 
 Using the default values
 ------------------------
-Note that the Jinja2 template syntax allows you to set the default values for your parameters.
-With default values set, your task file will work even if you don't parameterize it explicitly while starting a task.
-The default values should be set using the {% set ... %} clause (task.yaml).For example:
+Note that the Jinja2 template syntax allows you to set the default values for
+your parameters.
+With default values set, your task file will work even if you don't
+parameterize it explicitly while starting a task.
+The default values should be set using the {% set ... %} clause (task.yaml).
+For example:
 
 ::
 
@@ -105,13 +114,18 @@ The default values should be set using the {% set ... %} clause (task.yaml).For
       interval: 1
     ...
 
-If you don't pass the value for {{packetsize}} while starting a task, the default one will be used.
+If you don't pass the value for {{packetsize}} while starting a task, the
+default one will be used.
 
 Advanced templates
 ------------------
-Yardstick makes it possible to use all the power of Jinja2 template syntax, including the mechanism of built-in functions.
-As an example, let us make up a task file that will do a block storage performance test.
-The input task file (fio-template.yaml) below uses the Jinja2 for-endfor construct to accomplish that:
+
+Yardstick makes it possible to use all the power of Jinja2 template syntax,
+including the mechanism of built-in functions.
+As an example, let us make up a task file that will do a block storage
+performance test.
+The input task file (fio-template.yaml) below uses the Jinja2 for-endfor
+construct to accomplish that:
 
 ::
 
-- 
cgit 1.2.3-korg

3' href='#n53'>53</a>
<a id='n54' href='#n54'>54</a>
<a id='n55' href='#n55'>55</a>
<a id='n56' href='#n56'>56</a>
<a id='n57' href='#n57'>57</a>
<a id='n58' href='#n58'>58</a>
<a id='n59' href='#n59'>59</a>
<a id='n60' href='#n60'>60</a>
<a id='n61' href='#n61'>61</a>
<a id='n62' href='#n62'>62</a>
<a id='n63' href='#n63'>63</a>
<a id='n64' href='#n64'>64</a>
<a id='n65' href='#n65'>65</a>
<a id='n66' href='#n66'>66</a>
<a id='n67' href='#n67'>67</a>
<a id='n68' href='#n68'>68</a>
<a id='n69' href='#n69'>69</a>
<a id='n70' href='#n70'>70</a>
<a id='n71' href='#n71'>71</a>
<a id='n72' href='#n72'>72</a>
<a id='n73' href='#n73'>73</a>
<a id='n74' href='#n74'>74</a>
<a id='n75' href='#n75'>75</a>
<a id='n76' href='#n76'>76</a>
<a id='n77' href='#n77'>77</a>
<a id='n78' href='#n78'>78</a>
<a id='n79' href='#n79'>79</a>
<a id='n80' href='#n80'>80</a>
<a id='n81' href='#n81'>81</a>
<a id='n82' href='#n82'>82</a>
<a id='n83' href='#n83'>83</a>
<a id='n84' href='#n84'>84</a>
<a id='n85' href='#n85'>85</a>
<a id='n86' href='#n86'>86</a>
<a id='n87' href='#n87'>87</a>
<a id='n88' href='#n88'>88</a>
<a id='n89' href='#n89'>89</a>
<a id='n90' href='#n90'>90</a>
<a id='n91' href='#n91'>91</a>
<a id='n92' href='#n92'>92</a>
<a id='n93' href='#n93'>93</a>
<a id='n94' href='#n94'>94</a>
<a id='n95' href='#n95'>95</a>
<a id='n96' href='#n96'>96</a>
<a id='n97' href='#n97'>97</a>
<a id='n98' href='#n98'>98</a>
<a id='n99' href='#n99'>99</a>
<a id='n100' href='#n100'>100</a>
<a id='n101' href='#n101'>101</a>
<a id='n102' href='#n102'>102</a>
<a id='n103' href='#n103'>103</a>
<a id='n104' href='#n104'>104</a>
<a id='n105' href='#n105'>105</a>
<a id='n106' href='#n106'>106</a>
<a id='n107' href='#n107'>107</a>
<a id='n108' href='#n108'>108</a>
<a id='n109' href='#n109'>109</a>
<a id='n110' href='#n110'>110</a>
<a id='n111' href='#n111'>111</a>
<a id='n112' href='#n112'>112</a>
<a id='n113' href='#n113'>113</a>
<a id='n114' href='#n114'>114</a>
<a id='n115' href='#n115'>115</a>
<a id='n116' href='#n116'>116</a>
<a id='n117' href='#n117'>117</a>
<a id='n118' href='#n118'>118</a>
<a id='n119' href='#n119'>119</a>
<a id='n120' href='#n120'>120</a>
<a id='n121' href='#n121'>121</a>
<a id='n122' href='#n122'>122</a>
<a id='n123' href='#n123'>123</a>
<a id='n124' href='#n124'>124</a>
<a id='n125' href='#n125'>125</a>
<a id='n126' href='#n126'>126</a>
<a id='n127' href='#n127'>127</a>
<a id='n128' href='#n128'>128</a>
<a id='n129' href='#n129'>129</a>
<a id='n130' href='#n130'>130</a>
<a id='n131' href='#n131'>131</a>
<a id='n132' href='#n132'>132</a>
<a id='n133' href='#n133'>133</a>
<a id='n134' href='#n134'>134</a>
<a id='n135' href='#n135'>135</a>
<a id='n136' href='#n136'>136</a>
<a id='n137' href='#n137'>137</a>
<a id='n138' href='#n138'>138</a>
<a id='n139' href='#n139'>139</a>
<a id='n140' href='#n140'>140</a>
<a id='n141' href='#n141'>141</a>
<a id='n142' href='#n142'>142</a>
<a id='n143' href='#n143'>143</a>
<a id='n144' href='#n144'>144</a>
<a id='n145' href='#n145'>145</a>
<a id='n146' href='#n146'>146</a>
<a id='n147' href='#n147'>147</a>
<a id='n148' href='#n148'>148</a>
<a id='n149' href='#n149'>149</a>
<a id='n150' href='#n150'>150</a>
<a id='n151' href='#n151'>151</a>
<a id='n152' href='#n152'>152</a>
<a id='n153' href='#n153'>153</a>
<a id='n154' href='#n154'>154</a>
<a id='n155' href='#n155'>155</a>
<a id='n156' href='#n156'>156</a>
<a id='n157' href='#n157'>157</a>
<a id='n158' href='#n158'>158</a>
<a id='n159' href='#n159'>159</a>
<a id='n160' href='#n160'>160</a>
<a id='n161' href='#n161'>161</a>
<a id='n162' href='#n162'>162</a>
<a id='n163' href='#n163'>163</a>
<a id='n164' href='#n164'>164</a>
<a id='n165' href='#n165'>165</a>
<a id='n166' href='#n166'>166</a>
<a id='n167' href='#n167'>167</a>
<a id='n168' href='#n168'>168</a>
<a id='n169' href='#n169'>169</a>
<a id='n170' href='#n170'>170</a>
<a id='n171' href='#n171'>171</a>
<a id='n172' href='#n172'>172</a>
<a id='n173' href='#n173'>173</a>
<a id='n174' href='#n174'>174</a>
<a id='n175' href='#n175'>175</a>
<a id='n176' href='#n176'>176</a>
<a id='n177' href='#n177'>177</a>
<a id='n178' href='#n178'>178</a>
<a id='n179' href='#n179'>179</a>
<a id='n180' href='#n180'>180</a>
<a id='n181' href='#n181'>181</a>
<a id='n182' href='#n182'>182</a>
<a id='n183' href='#n183'>183</a>
<a id='n184' href='#n184'>184</a>
<a id='n185' href='#n185'>185</a>
<a id='n186' href='#n186'>186</a>
<a id='n187' href='#n187'>187</a>
<a id='n188' href='#n188'>188</a>
<a id='n189' href='#n189'>189</a>
<a id='n190' href='#n190'>190</a>
<a id='n191' href='#n191'>191</a>
<a id='n192' href='#n192'>192</a>
<a id='n193' href='#n193'>193</a>
<a id='n194' href='#n194'>194</a>
<a id='n195' href='#n195'>195</a>
<a id='n196' href='#n196'>196</a>
<a id='n197' href='#n197'>197</a>
<a id='n198' href='#n198'>198</a>
<a id='n199' href='#n199'>199</a>
<a id='n200' href='#n200'>200</a>
<a id='n201' href='#n201'>201</a>
<a id='n202' href='#n202'>202</a>
<a id='n203' href='#n203'>203</a>
<a id='n204' href='#n204'>204</a>
<a id='n205' href='#n205'>205</a>
<a id='n206' href='#n206'>206</a>
<a id='n207' href='#n207'>207</a>
<a id='n208' href='#n208'>208</a>
<a id='n209' href='#n209'>209</a>
<a id='n210' href='#n210'>210</a>
<a id='n211' href='#n211'>211</a>
<a id='n212' href='#n212'>212</a>
<a id='n213' href='#n213'>213</a>
<a id='n214' href='#n214'>214</a>
<a id='n215' href='#n215'>215</a>
<a id='n216' href='#n216'>216</a>
<a id='n217' href='#n217'>217</a>
<a id='n218' href='#n218'>218</a>
<a id='n219' href='#n219'>219</a>
<a id='n220' href='#n220'>220</a>
<a id='n221' href='#n221'>221</a>
<a id='n222' href='#n222'>222</a>
<a id='n223' href='#n223'>223</a>
<a id='n224' href='#n224'>224</a>
<a id='n225' href='#n225'>225</a>
<a id='n226' href='#n226'>226</a>
<a id='n227' href='#n227'>227</a>
<a id='n228' href='#n228'>228</a>
<a id='n229' href='#n229'>229</a>
<a id='n230' href='#n230'>230</a>
<a id='n231' href='#n231'>231</a>
<a id='n232' href='#n232'>232</a>
<a id='n233' href='#n233'>233</a>
<a id='n234' href='#n234'>234</a>
<a id='n235' href='#n235'>235</a>
<a id='n236' href='#n236'>236</a>
<a id='n237' href='#n237'>237</a>
<a id='n238' href='#n238'>238</a>
<a id='n239' href='#n239'>239</a>
<a id='n240' href='#n240'>240</a>
<a id='n241' href='#n241'>241</a>
<a id='n242' href='#n242'>242</a>
<a id='n243' href='#n243'>243</a>
<a id='n244' href='#n244'>244</a>
<a id='n245' href='#n245'>245</a>
<a id='n246' href='#n246'>246</a>
<a id='n247' href='#n247'>247</a>
<a id='n248' href='#n248'>248</a>
<a id='n249' href='#n249'>249</a>
<a id='n250' href='#n250'>250</a>
<a id='n251' href='#n251'>251</a>
<a id='n252' href='#n252'>252</a>
<a id='n253' href='#n253'>253</a>
<a id='n254' href='#n254'>254</a>
<a id='n255' href='#n255'>255</a>
<a id='n256' href='#n256'>256</a>
<a id='n257' href='#n257'>257</a>
<a id='n258' href='#n258'>258</a>
<a id='n259' href='#n259'>259</a>
<a id='n260' href='#n260'>260</a>
<a id='n261' href='#n261'>261</a>
<a id='n262' href='#n262'>262</a>
<a id='n263' href='#n263'>263</a>
<a id='n264' href='#n264'>264</a>
<a id='n265' href='#n265'>265</a>
<a id='n266' href='#n266'>266</a>
<a id='n267' href='#n267'>267</a>
<a id='n268' href='#n268'>268</a>
<a id='n269' href='#n269'>269</a>
<a id='n270' href='#n270'>270</a>
<a id='n271' href='#n271'>271</a>
<a id='n272' href='#n272'>272</a>
<a id='n273' href='#n273'>273</a>
<a id='n274' href='#n274'>274</a>
<a id='n275' href='#n275'>275</a>
<a id='n276' href='#n276'>276</a>
<a id='n277' href='#n277'>277</a>
<a id='n278' href='#n278'>278</a>
<a id='n279' href='#n279'>279</a>
<a id='n280' href='#n280'>280</a>
<a id='n281' href='#n281'>281</a>
<a id='n282' href='#n282'>282</a>
<a id='n283' href='#n283'>283</a>
<a id='n284' href='#n284'>284</a>
<a id='n285' href='#n285'>285</a>
<a id='n286' href='#n286'>286</a>
<a id='n287' href='#n287'>287</a>
<a id='n288' href='#n288'>288</a>
<a id='n289' href='#n289'>289</a>
<a id='n290' href='#n290'>290</a>
<a id='n291' href='#n291'>291</a>
<a id='n292' href='#n292'>292</a>
<a id='n293' href='#n293'>293</a>
<a id='n294' href='#n294'>294</a>
<a id='n295' href='#n295'>295</a>
<a id='n296' href='#n296'>296</a>
<a id='n297' href='#n297'>297</a>
<a id='n298' href='#n298'>298</a>
<a id='n299' href='#n299'>299</a>
<a id='n300' href='#n300'>300</a>
<a id='n301' href='#n301'>301</a>
<a id='n302' href='#n302'>302</a>
<a id='n303' href='#n303'>303</a>
<a id='n304' href='#n304'>304</a>
<a id='n305' href='#n305'>305</a>
<a id='n306' href='#n306'>306</a>
<a id='n307' href='#n307'>307</a>
<a id='n308' href='#n308'>308</a>
<a id='n309' href='#n309'>309</a>
<a id='n310' href='#n310'>310</a>
<a id='n311' href='#n311'>311</a>
<a id='n312' href='#n312'>312</a>
<a id='n313' href='#n313'>313</a>
<a id='n314' href='#n314'>314</a>
<a id='n315' href='#n315'>315</a>
<a id='n316' href='#n316'>316</a>
<a id='n317' href='#n317'>317</a>
<a id='n318' href='#n318'>318</a>
<a id='n319' href='#n319'>319</a>
<a id='n320' href='#n320'>320</a>
<a id='n321' href='#n321'>321</a>
<a id='n322' href='#n322'>322</a>
<a id='n323' href='#n323'>323</a>
<a id='n324' href='#n324'>324</a>
<a id='n325' href='#n325'>325</a>
<a id='n326' href='#n326'>326</a>
<a id='n327' href='#n327'>327</a>
<a id='n328' href='#n328'>328</a>
<a id='n329' href='#n329'>329</a>
<a id='n330' href='#n330'>330</a>
<a id='n331' href='#n331'>331</a>
<a id='n332' href='#n332'>332</a>
<a id='n333' href='#n333'>333</a>
<a id='n334' href='#n334'>334</a>
<a id='n335' href='#n335'>335</a>
<a id='n336' href='#n336'>336</a>
<a id='n337' href='#n337'>337</a>
<a id='n338' href='#n338'>338</a>
<a id='n339' href='#n339'>339</a>
<a id='n340' href='#n340'>340</a>
<a id='n341' href='#n341'>341</a>
<a id='n342' href='#n342'>342</a>
<a id='n343' href='#n343'>343</a>
<a id='n344' href='#n344'>344</a>
<a id='n345' href='#n345'>345</a>
<a id='n346' href='#n346'>346</a>
<a id='n347' href='#n347'>347</a>
<a id='n348' href='#n348'>348</a>
<a id='n349' href='#n349'>349</a>
<a id='n350' href='#n350'>350</a>
<a id='n351' href='#n351'>351</a>
<a id='n352' href='#n352'>352</a>
<a id='n353' href='#n353'>353</a>
<a id='n354' href='#n354'>354</a>
<a id='n355' href='#n355'>355</a>
</pre></td>
<td class='lines'><pre><code><style>
@media only all and (prefers-color-scheme: dark) {
.highlight .hll { background-color: #49483e }
.highlight .c { color: #75715e } /* Comment */
.highlight .err { color: #960050; background-color: #1e0010 } /* Error */
.highlight .k { color: #66d9ef } /* Keyword */
.highlight .l { color: #ae81ff } /* Literal */
.highlight .n { color: #f8f8f2 } /* Name */
.highlight .o { color: #f92672 } /* Operator */
.highlight .p { color: #f8f8f2 } /* Punctuation */
.highlight .ch { color: #75715e } /* Comment.Hashbang */
.highlight .cm { color: #75715e } /* Comment.Multiline */
.highlight .cp { color: #75715e } /* Comment.Preproc */
.highlight .cpf { color: #75715e } /* Comment.PreprocFile */
.highlight .c1 { color: #75715e } /* Comment.Single */
.highlight .cs { color: #75715e } /* Comment.Special */
.highlight .gd { color: #f92672 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gi { color: #a6e22e } /* Generic.Inserted */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #75715e } /* Generic.Subheading */
.highlight .kc { color: #66d9ef } /* Keyword.Constant */
.highlight .kd { color: #66d9ef } /* Keyword.Declaration */
.highlight .kn { color: #f92672 } /* Keyword.Namespace */
.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */
.highlight .kr { color: #66d9ef } /* Keyword.Reserved */
.highlight .kt { color: #66d9ef } /* Keyword.Type */
.highlight .ld { color: #e6db74 } /* Literal.Date */
.highlight .m { color: #ae81ff } /* Literal.Number */
.highlight .s { color: #e6db74 } /* Literal.String */
.highlight .na { color: #a6e22e } /* Name.Attribute */
.highlight .nb { color: #f8f8f2 } /* Name.Builtin */
.highlight .nc { color: #a6e22e } /* Name.Class */
.highlight .no { color: #66d9ef } /* Name.Constant */
.highlight .nd { color: #a6e22e } /* Name.Decorator */
.highlight .ni { color: #f8f8f2 } /* Name.Entity */
.highlight .ne { color: #a6e22e } /* Name.Exception */
.highlight .nf { color: #a6e22e } /* Name.Function */
.highlight .nl { color: #f8f8f2 } /* Name.Label */
.highlight .nn { color: #f8f8f2 } /* Name.Namespace */
.highlight .nx { color: #a6e22e } /* Name.Other */
.highlight .py { color: #f8f8f2 } /* Name.Property */
.highlight .nt { color: #f92672 } /* Name.Tag */
.highlight .nv { color: #f8f8f2 } /* Name.Variable */
.highlight .ow { color: #f92672 } /* Operator.Word */
.highlight .w { color: #f8f8f2 } /* Text.Whitespace */
.highlight .mb { color: #ae81ff } /* Literal.Number.Bin */
.highlight .mf { color: #ae81ff } /* Literal.Number.Float */
.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */
.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */
.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */
.highlight .sa { color: #e6db74 } /* Literal.String.Affix */
.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */
.highlight .sc { color: #e6db74 } /* Literal.String.Char */
.highlight .dl { color: #e6db74 } /* Literal.String.Delimiter */
.highlight .sd { color: #e6db74 } /* Literal.String.Doc */
.highlight .s2 { color: #e6db74 } /* Literal.String.Double */
.highlight .se { color: #ae81ff } /* Literal.String.Escape */
.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */
.highlight .si { color: #e6db74 } /* Literal.String.Interpol */
.highlight .sx { color: #e6db74 } /* Literal.String.Other */
.highlight .sr { color: #e6db74 } /* Literal.String.Regex */
.highlight .s1 { color: #e6db74 } /* Literal.String.Single */
.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */
.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #a6e22e } /* Name.Function.Magic */
.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */
.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */
.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */
.highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */
.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */
}
@media (prefers-color-scheme: light) {
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
.highlight .na { color: #336699 } /* Name.Attribute */
.highlight .nb { color: #003388 } /* Name.Builtin */
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555555 } /* Name.Decorator */
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
}
</style><div class="highlight"><pre><span></span><span class="ch">#!/usr/bin/env bash</span>
<span class="c1">##############################################################################</span>
<span class="c1"># Copyright (c) 2015 Tim Rozet (Red Hat), Dan Radez (Red Hat) and others.</span>
<span class="c1">#</span>
<span class="c1"># All rights reserved. This program and the accompanying materials</span>
<span class="c1"># are made available under the terms of the Apache License, Version 2.0</span>
<span class="c1"># which accompanies this distribution, and is available at</span>
<span class="c1"># http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="c1">##############################################################################</span>

<span class="c1">##preping it for deployment and launch the deploy</span>
<span class="c1">##params: none</span>
<span class="k">function</span> overcloud_deploy <span class="o">{</span>
  <span class="nb">local</span> num_compute_nodes
  <span class="nb">local</span> num_control_nodes

  <span class="k">if</span> <span class="o">[[</span> <span class="s2">&quot;</span><span class="si">${#</span><span class="nv">deploy_options_array</span><span class="p">[@]</span><span class="si">}</span><span class="s2">&quot;</span> -eq <span class="m">0</span> <span class="o">||</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;sdn_controller&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;opendaylight&#39;</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
    <span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;sfc&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;True&#39;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
      <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; -e /usr/share/openstack-tripleo-heat-templates/environments/opendaylight_sfc.yaml&quot;</span>
    <span class="k">elif</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;vpn&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;True&#39;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
      <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; -e /usr/share/openstack-tripleo-heat-templates/environments/opendaylight_sdnvpn.yaml&quot;</span>
    <span class="k">elif</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;vpp&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;True&#39;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
      <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; -e /usr/share/openstack-tripleo-heat-templates/environments/opendaylight_fdio.yaml&quot;</span>
    <span class="k">elif</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;vpn&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;true&#39;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
      <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; -e /usr/share/openstack-tripleo-heat-templates/environments/opendaylight_sdnvpn.yaml&quot;</span>
    <span class="k">else</span>
      <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; -e /usr/share/openstack-tripleo-heat-templates/environments/neutron-opendaylight-l3.yaml&quot;</span>
    <span class="k">fi</span>
    <span class="nv">SDN_IMAGE</span><span class="o">=</span>opendaylight
  <span class="k">elif</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;sdn_controller&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;opendaylight-external&#39;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
    <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; -e /usr/share/openstack-tripleo-heat-templates/environments/opendaylight-external.yaml&quot;</span>
    <span class="nv">SDN_IMAGE</span><span class="o">=</span>opendaylight
  <span class="k">elif</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;sdn_controller&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;onos&#39;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
    <span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;sfc&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;True&#39;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
      <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; -e /usr/share/openstack-tripleo-heat-templates/environments/onos_sfc.yaml&quot;</span>
    <span class="k">else</span>
      <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; -e /usr/share/openstack-tripleo-heat-templates/environments/onos.yaml&quot;</span>
    <span class="k">fi</span>
    <span class="nv">SDN_IMAGE</span><span class="o">=</span>onos
  <span class="k">elif</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;sdn_controller&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;opencontrail&#39;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
    <span class="nb">echo</span> -e <span class="s2">&quot;</span><span class="si">${</span><span class="nv">red</span><span class="si">}</span><span class="s2">ERROR: OpenContrail is currently unsupported...exiting</span><span class="si">${</span><span class="nv">reset</span><span class="si">}</span><span class="s2">&quot;</span>
    <span class="nb">exit</span> <span class="m">1</span>
  <span class="k">elif</span> <span class="o">[[</span> -z <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;sdn_controller&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">||</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;sdn_controller&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;False&#39;</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
    <span class="nb">echo</span> -e <span class="s2">&quot;</span><span class="si">${</span><span class="nv">blue</span><span class="si">}</span><span class="s2">INFO: SDN Controller disabled...will deploy nosdn scenario</span><span class="si">${</span><span class="nv">reset</span><span class="si">}</span><span class="s2">&quot;</span>
    <span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;vpp&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;True&#39;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
      <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; -e /usr/share/openstack-tripleo-heat-templates/environments/neutron-ml2-networking-vpp.yaml&quot;</span>
    <span class="k">fi</span>
    <span class="nv">SDN_IMAGE</span><span class="o">=</span>opendaylight
  <span class="k">else</span>
    <span class="nb">echo</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">red</span><span class="si">}</span><span class="s2">Invalid sdn_controller: </span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;sdn_controller&#39;</span><span class="p">]</span><span class="si">}${</span><span class="nv">reset</span><span class="si">}</span><span class="s2">&quot;</span>
    <span class="nb">echo</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">red</span><span class="si">}</span><span class="s2">Valid choices are opendaylight, opendaylight-external, onos, opencontrail, False, or null</span><span class="si">${</span><span class="nv">reset</span><span class="si">}</span><span class="s2">&quot;</span>
    <span class="nb">exit</span> <span class="m">1</span>
  <span class="k">fi</span>



  <span class="c1"># Make sure the correct overcloud image is available</span>
  <span class="k">if</span> <span class="o">[</span> ! -f <span class="nv">$RESOURCES</span>/overcloud-full-<span class="si">${</span><span class="nv">SDN_IMAGE</span><span class="si">}</span>.qcow2 <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
      <span class="nb">echo</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">red</span><span class="si">}</span><span class="s2"> </span><span class="nv">$RESOURCES</span><span class="s2">/overcloud-full-</span><span class="si">${</span><span class="nv">SDN_IMAGE</span><span class="si">}</span><span class="s2">.qcow2 is required to execute your deployment.&quot;</span>
      <span class="nb">echo</span> <span class="s2">&quot;Please install the opnfv-apex package to provide this overcloud image for deployment.</span><span class="si">${</span><span class="nv">reset</span><span class="si">}</span><span class="s2">&quot;</span>
      <span class="nb">exit</span> <span class="m">1</span>
  <span class="k">fi</span>

  <span class="nb">echo</span> <span class="s2">&quot;Copying overcloud image to Undercloud&quot;</span>
  ssh -T <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="s2">&quot;stack@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span> <span class="s2">&quot;rm -f overcloud-full.qcow2&quot;</span>
  scp <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="nv">$RESOURCES</span>/overcloud-full-<span class="si">${</span><span class="nv">SDN_IMAGE</span><span class="si">}</span>.qcow2 <span class="s2">&quot;stack@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span>:overcloud-full.qcow2

  <span class="c1"># Install ovs-dpdk inside the overcloud image if it is enabled.</span>
  <span class="k">if</span> <span class="o">[[</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;dataplane&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;ovs_dpdk&#39;</span> <span class="o">||</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;dataplane&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;fdio&#39;</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
    <span class="c1"># install dpdk packages before ovs</span>
    <span class="nb">echo</span> -e <span class="s2">&quot;</span><span class="si">${</span><span class="nv">blue</span><span class="si">}</span><span class="s2">INFO: Enabling kernel modules for dpdk inside overcloud image</span><span class="si">${</span><span class="nv">reset</span><span class="si">}</span><span class="s2">&quot;</span>

    ssh -T <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="s2">&quot;stack@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span> <span class="s">&lt;&lt;EOI</span>
<span class="s">      cat &lt;&lt; EOF &gt; vfio_pci.modules</span>
<span class="s">#!/bin/bash</span>
<span class="s">exec /sbin/modprobe vfio_pci &gt;/dev/null 2&gt;&amp;1</span>
<span class="s">EOF</span>

<span class="s">      cat &lt;&lt; EOF &gt; uio_pci_generic.modules</span>
<span class="s">#!/bin/bash</span>
<span class="s">exec /sbin/modprobe uio_pci_generic &gt;/dev/null 2&gt;&amp;1</span>
<span class="s">EOF</span>

<span class="s">      LIBGUESTFS_BACKEND=direct virt-customize --upload vfio_pci.modules:/etc/sysconfig/modules/ \</span>
<span class="s">                                               --upload uio_pci_generic.modules:/etc/sysconfig/modules/ \</span>
<span class="s">                                               --run-command &quot;chmod 0755 /etc/sysconfig/modules/vfio_pci.modules&quot; \</span>
<span class="s">                                               --run-command &quot;chmod 0755 /etc/sysconfig/modules/uio_pci_generic.modules&quot; \</span>
<span class="s">                                               -a overcloud-full.qcow2</span>

<span class="s">      if [ &quot;${deploy_options_array[&#39;dataplane&#39;]}&quot; == &#39;fdio&#39; ]; then</span>
<span class="s">        sudo sed -i &#39;/FdioEnabled:/c\  FdioEnabled: true&#39; /usr/share/openstack-tripleo-heat-templates/environments/numa.yaml</span>
<span class="s">        LIBGUESTFS_BACKEND=direct virt-customize --run-command &quot;cp -f /root/fdio_neutron_l3/namespaces.py /usr/lib/python2.7/site-packages/neutron/agent/l3/&quot; \</span>
<span class="s">                                                 --run-command &quot;cp -f /root/fdio_neutron_l3/router_info.py /usr/lib/python2.7/site-packages/neutron/agent/l3/&quot; \</span>
<span class="s">                                                 -a overcloud-full.qcow2</span>
<span class="s">        if [ &quot;${deploy_options_array[&#39;sdn_controller&#39;]}&quot; == &#39;opendaylight&#39; ]; then</span>
<span class="s">          LIBGUESTFS_BACKEND=direct virt-customize --run-command &quot;cd /root/ &amp;&amp; tar zxvf networking-odl.tar.gz&quot; \</span>
<span class="s">                                                   --run-command &quot;cd /root/networking-odl &amp;&amp; git init &amp;&amp; pip install -r requirements.txt&quot; \</span>
<span class="s">                                                   --run-command &quot;cd /root/networking-odl &amp;&amp; python setup.py build &amp;&amp; python setup.py install&quot; \</span>
<span class="s">                                                   -a overcloud-full.qcow2</span>
<span class="s">        fi</span>
<span class="s">      else</span>
<span class="s">        sudo sed -i &#39;/NeutronOVSDataPathType:/c\  NeutronOVSDataPathType: netdev&#39; /usr/share/openstack-tripleo-heat-templates/environments/numa.yaml</span>
<span class="s">        LIBGUESTFS_BACKEND=direct virt-customize --run-command &quot;yum install -y /root/dpdk_rpms/*&quot; \</span>
<span class="s">                                                 --run-command &quot;sed -i &#39;/RuntimeDirectoryMode=.*/d&#39; /usr/lib/systemd/system/openvswitch-nonetwork.service&quot; \</span>
<span class="s">                                                 --run-command &quot;printf \&quot;%s\\n\&quot; RuntimeDirectoryMode=0775 Group=qemu UMask=0002 &gt;&gt; /usr/lib/systemd/system/openvswitch-nonetwork.service&quot; \</span>
<span class="s">                                                 --run-command &quot;sed -i &#39;s/\\(^\\s\\+\\)\\(start_daemon &quot;$OVS_VSWITCHD_PRIORITY&quot;\\)/\\1umask 0002 \\&amp;\\&amp; \\2/&#39; /usr/share/openvswitch/scripts/ovs-ctl&quot; \</span>
<span class="s">                                                 -a overcloud-full.qcow2</span>
<span class="s">      fi</span>

<span class="s">EOI</span>

  <span class="k">elif</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;dataplane&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> !<span class="o">=</span> <span class="s1">&#39;ovs&#39;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
    <span class="nb">echo</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">red</span><span class="si">}${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;dataplane&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"> not supported</span><span class="si">${</span><span class="nv">reset</span><span class="si">}</span><span class="s2">&quot;</span>
    <span class="nb">exit</span> <span class="m">1</span>
  <span class="k">fi</span>

  <span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="nv">$debug</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;TRUE&#39;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
    ssh -T <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="s2">&quot;stack@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span> <span class="s2">&quot;LIBGUESTFS_BACKEND=direct virt-customize -a overcloud-full.qcow2 --root-password password:opnfvapex&quot;</span>
  <span class="k">fi</span>

  <span class="c1"># upgrade ovs into ovs 2.5.90 with NSH function if SFC is enabled</span>
  <span class="k">if</span> <span class="o">[[</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;sfc&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;True&#39;</span> <span class="o">&amp;&amp;</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;dataplane&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;ovs&#39;</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
    ssh -T <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="s2">&quot;stack@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span> <span class="s">&lt;&lt;EOI</span>
<span class="s">         LIBGUESTFS_BACKEND=direct virt-customize --run-command &quot;yum install -y /root/ovs/rpm/rpmbuild/RPMS/x86_64/${ovs_kmod_rpm_name}&quot; \</span>
<span class="s">                                                  --run-command &quot;yum upgrade -y /root/ovs/rpm/rpmbuild/RPMS/x86_64/${ovs_rpm_name}&quot; \</span>
<span class="s">                                                  -a overcloud-full.qcow2</span>
<span class="s">EOI</span>
  <span class="k">fi</span>

  <span class="c1"># Set ODL version accordingly</span>
  <span class="k">if</span> <span class="o">[[</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;sdn_controller&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;opendaylight&#39;</span> <span class="o">&amp;&amp;</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;odl_version&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;boron&#39;</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
    ssh -T <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="s2">&quot;stack@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span> <span class="s">&lt;&lt;EOI</span>
<span class="s">      LIBGUESTFS_BACKEND=direct virt-customize --run-command &quot;yum -y remove opendaylight&quot; \</span>
<span class="s">                                               --run-command &quot;yum -y install /root/boron/*&quot; \</span>
<span class="s">                                               -a overcloud-full.qcow2</span>
<span class="s">EOI</span>
  <span class="k">fi</span>

  <span class="c1"># Add performance deploy options if they have been set</span>
  <span class="k">if</span> <span class="o">[</span> ! -z <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;performance&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>

    <span class="c1"># Remove previous kernel args files per role</span>
    ssh -T <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="s2">&quot;stack@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span> <span class="s2">&quot;rm -f Compute-kernel_params.txt&quot;</span>
    ssh -T <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="s2">&quot;stack@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span> <span class="s2">&quot;rm -f Controller-kernel_params.txt&quot;</span>

    <span class="c1"># Push performance options to subscript to modify per-role images as needed</span>
    <span class="k">for</span> option in <span class="s2">&quot;</span><span class="si">${</span><span class="nv">performance_options</span><span class="p">[@]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="p">;</span> <span class="k">do</span>
      <span class="nb">echo</span> -e <span class="s2">&quot;</span><span class="si">${</span><span class="nv">blue</span><span class="si">}</span><span class="s2">Setting performance option </span><span class="nv">$option</span><span class="si">${</span><span class="nv">reset</span><span class="si">}</span><span class="s2">&quot;</span>
      ssh -T <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="s2">&quot;stack@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span> <span class="s2">&quot;dataplane=</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;dataplane&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"> bash build_perf_image.sh </span><span class="nv">$option</span><span class="s2">&quot;</span>
    <span class="k">done</span>

    <span class="c1"># Build IPA kernel option ramdisks</span>
    ssh -T <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="s2">&quot;root@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span> <span class="s">&lt;&lt;EOI</span>
<span class="s">/bin/cp -f /home/stack/ironic-python-agent.initramfs /root/</span>
<span class="s">mkdir -p ipa/</span>
<span class="s">pushd ipa</span>
<span class="s">gunzip -c ../ironic-python-agent.initramfs | cpio -i</span>
<span class="s">if [ ! -f /home/stack/Compute-kernel_params.txt ]; then</span>
<span class="s">  touch /home/stack/Compute-kernel_params.txt</span>
<span class="s">  chown stack /home/stack/Compute-kernel_params.txt</span>
<span class="s">fi</span>
<span class="s">/bin/cp -f /home/stack/Compute-kernel_params.txt tmp/kernel_params.txt</span>
<span class="s">echo &quot;Compute params set: &quot;</span>
<span class="s">cat tmp/kernel_params.txt</span>
<span class="s">/bin/cp -f /root/image.py usr/lib/python2.7/site-packages/ironic_python_agent/extensions/image.py</span>
<span class="s">/bin/cp -f /root/image.pyc usr/lib/python2.7/site-packages/ironic_python_agent/extensions/image.pyc</span>
<span class="s">find . | cpio -o -H newc | gzip &gt; /home/stack/Compute-ironic-python-agent.initramfs</span>
<span class="s">chown stack /home/stack/Compute-ironic-python-agent.initramfs</span>
<span class="s">if [ ! -f /home/stack/Controller-kernel_params.txt ]; then</span>
<span class="s">  touch /home/stack/Controller-kernel_params.txt</span>
<span class="s">  chown stack /home/stack/Controller-kernel_params.txt</span>
<span class="s">fi</span>
<span class="s">/bin/cp -f /home/stack/Controller-kernel_params.txt tmp/kernel_params.txt</span>
<span class="s">echo &quot;Controller params set: &quot;</span>
<span class="s">cat tmp/kernel_params.txt</span>
<span class="s">find . | cpio -o -H newc | gzip &gt; /home/stack/Controller-ironic-python-agent.initramfs</span>
<span class="s">chown stack /home/stack/Controller-ironic-python-agent.initramfs</span>
<span class="s">popd</span>
<span class="s">/bin/rm -rf ipa/</span>
<span class="s">EOI</span>

    <span class="c1"># set NIC heat params and resource registry</span>
    ssh -T <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="s2">&quot;stack@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span> <span class="s">&lt;&lt;EOI</span>
<span class="s">if [ -n &quot;${private_network_compute_interface}&quot; ]; then</span>
<span class="s">  sudo sed -i &#39;/ComputeTenantNIC:/c\  ComputeTenantNIC: &#39;${private_network_compute_interface} /usr/share/openstack-tripleo-heat-templates/environments/numa.yaml</span>
<span class="s">fi</span>
<span class="s">if [ -n &quot;${private_network_controller_interface}&quot; ]; then</span>
<span class="s">  sudo sed -i &#39;/ControllerTenantNIC:/c\  ControllerTenantNIC: &#39;${private_network_controller_interface} /usr/share/openstack-tripleo-heat-templates/environments/numa.yaml</span>
<span class="s">fi</span>
<span class="s"># TODO: PublicNIC is not used today, however, in the future, we&#39;ll bind public nic to DPDK as well for certain scenarios. At that time,</span>
<span class="s"># we&#39;ll need to make sure public network is enabled.</span>
<span class="s">if [ -n &quot;${public_network_compute_interface}&quot; ]; then</span>
<span class="s">  sudo sed -i &#39;/ComputePublicNIC:/c\  ComputePublicNIC: &#39;${public_network_compute_interface} /usr/share/openstack-tripleo-heat-templates/environments/numa.yaml</span>
<span class="s">fi</span>
<span class="s">if [ -n &quot;${public_network_controller_interface}&quot; ]; then</span>
<span class="s">  sudo sed -i &#39;/ControllerPublicNIC:/c\  ControllerPublicNIC: &#39;${public_network_controller_interface} /usr/share/openstack-tripleo-heat-templates/environments/numa.yaml</span>
<span class="s">fi</span>
<span class="s">EOI</span>

    <span class="nb">echo</span> -e <span class="s2">&quot;</span><span class="si">${</span><span class="nv">blue</span><span class="si">}</span><span class="s2">INFO: Including /usr/share/openstack-tripleo-heat-templates/environments/numa.yaml </span><span class="si">${</span><span class="nv">reset</span><span class="si">}</span><span class="s2">&quot;</span>
    <span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="nv">$debug</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;TRUE&#39;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
      ssh -T <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="s2">&quot;stack@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span> <span class="s2">&quot;cat /usr/share/openstack-tripleo-heat-templates/environments/numa.yaml&quot;</span>
    <span class="k">fi</span>
    <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; -e /usr/share/openstack-tripleo-heat-templates/environments/numa.yaml&quot;</span>
  <span class="k">fi</span>

  <span class="c1"># make sure ceph is installed</span>
  <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; -e /usr/share/openstack-tripleo-heat-templates/environments/storage-environment.yaml&quot;</span>

  <span class="c1">#DEPLOY_OPTIONS+=&quot; -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml&quot;</span>
  <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; -e network-environment.yaml&quot;</span>


  <span class="c1"># get number of nodes available in inventory</span>
  <span class="nv">num_control_nodes</span><span class="o">=</span><span class="k">$(</span>ssh -T <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="s2">&quot;root@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span> <span class="s2">&quot;grep -c profile:control /home/stack/instackenv.json&quot;</span><span class="k">)</span>
  <span class="nv">num_compute_nodes</span><span class="o">=</span><span class="k">$(</span>ssh -T <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="s2">&quot;root@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span> <span class="s2">&quot;grep -c profile:compute /home/stack/instackenv.json&quot;</span><span class="k">)</span>

  <span class="c1"># check if HA is enabled</span>
  <span class="k">if</span> <span class="o">[[</span> <span class="s2">&quot;</span><span class="nv">$ha_enabled</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s2">&quot;True&quot;</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
    <span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="nv">$num_control_nodes</span><span class="s2">&quot;</span> -lt <span class="m">3</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
      <span class="nb">echo</span> -e <span class="s2">&quot;</span><span class="si">${</span><span class="nv">red</span><span class="si">}</span><span class="s2">ERROR: Number of control nodes in inventory is less than 3 and HA is enabled: </span><span class="si">${</span><span class="nv">num_control_nodes</span><span class="si">}</span><span class="s2">. Check your inventory file.</span><span class="si">${</span><span class="nv">reset</span><span class="si">}</span><span class="s2">&quot;</span>
      <span class="nb">exit</span> <span class="m">1</span>
    <span class="k">else</span>
     <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; --control-scale </span><span class="si">${</span><span class="nv">num_control_nodes</span><span class="si">}</span><span class="s2">&quot;</span>
     <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; -e /usr/share/openstack-tripleo-heat-templates/environments/puppet-pacemaker.yaml&quot;</span>
     <span class="nb">echo</span> -e <span class="s2">&quot;</span><span class="si">${</span><span class="nv">blue</span><span class="si">}</span><span class="s2">INFO: Number of control nodes set for deployment: </span><span class="si">${</span><span class="nv">num_control_nodes</span><span class="si">}${</span><span class="nv">reset</span><span class="si">}</span><span class="s2">&quot;</span>
    <span class="k">fi</span>
  <span class="k">else</span>
    <span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="nv">$num_control_nodes</span><span class="s2">&quot;</span> -lt <span class="m">1</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
      <span class="nb">echo</span> -e <span class="s2">&quot;</span><span class="si">${</span><span class="nv">red</span><span class="si">}</span><span class="s2">ERROR: Number of control nodes in inventory is less than 1: </span><span class="si">${</span><span class="nv">num_control_nodes</span><span class="si">}</span><span class="s2">. Check your inventory file.</span><span class="si">${</span><span class="nv">reset</span><span class="si">}</span><span class="s2">&quot;</span>
      <span class="nb">exit</span> <span class="m">1</span>
    <span class="k">fi</span>
  <span class="k">fi</span>

  <span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="nv">$num_compute_nodes</span><span class="s2">&quot;</span> -le <span class="m">0</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
    <span class="nb">echo</span> -e <span class="s2">&quot;</span><span class="si">${</span><span class="nv">red</span><span class="si">}</span><span class="s2">ERROR: Invalid number of compute nodes: </span><span class="si">${</span><span class="nv">num_compute_nodes</span><span class="si">}</span><span class="s2">. Check your inventory file.</span><span class="si">${</span><span class="nv">reset</span><span class="si">}</span><span class="s2">&quot;</span>
    <span class="nb">exit</span> <span class="m">1</span>
  <span class="k">else</span>
    <span class="nb">echo</span> -e <span class="s2">&quot;</span><span class="si">${</span><span class="nv">blue</span><span class="si">}</span><span class="s2">INFO: Number of compute nodes set for deployment: </span><span class="si">${</span><span class="nv">num_compute_nodes</span><span class="si">}${</span><span class="nv">reset</span><span class="si">}</span><span class="s2">&quot;</span>
    <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; --compute-scale </span><span class="si">${</span><span class="nv">num_compute_nodes</span><span class="si">}</span><span class="s2">&quot;</span>
  <span class="k">fi</span>

  <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; --ntp-server </span><span class="nv">$ntp_server</span><span class="s2">&quot;</span>

  <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; --control-flavor control --compute-flavor compute&quot;</span>
  <span class="k">if</span> <span class="o">[[</span> <span class="s2">&quot;</span><span class="nv">$virtual</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s2">&quot;TRUE&quot;</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
     <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; -e virtual-environment.yaml&quot;</span>
  <span class="k">fi</span>

  <span class="nv">DEPLOY_OPTIONS</span><span class="o">+=</span><span class="s2">&quot; -e opnfv-environment.yaml&quot;</span>

  <span class="nb">echo</span> -e <span class="s2">&quot;</span><span class="si">${</span><span class="nv">blue</span><span class="si">}</span><span class="s2">INFO: Deploy options set:\n</span><span class="si">${</span><span class="nv">DEPLOY_OPTIONS</span><span class="si">}${</span><span class="nv">reset</span><span class="si">}</span><span class="s2">&quot;</span>

  ssh -T <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="s2">&quot;stack@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span> <span class="s">&lt;&lt;EOI</span>
<span class="s">if [ &quot;${deploy_options_array[&#39;tacker&#39;]}&quot; == &#39;False&#39; ]; then</span>
<span class="s">    sed -i &#39;/EnableTacker:/c\  EnableTacker: false&#39; opnfv-environment.yaml</span>
<span class="s">fi</span>

<span class="s"># Create a key for use by nova for live migration</span>
<span class="s">echo &quot;Creating nova SSH key for nova resize support&quot;</span>
<span class="s">ssh-keygen -f nova_id_rsa -b 1024 -P &quot;&quot;</span>
<span class="s">public_key=\&#39;\$(cat nova_id_rsa.pub | cut -d &#39; &#39; -f 2)\&#39;</span>
<span class="s">sed -i &quot;s#replace_public_key:#key: \$public_key#g&quot; opnfv-environment.yaml</span>
<span class="s">python -c &#39;open(&quot;opnfv-environment-new.yaml&quot;, &quot;w&quot;).write((open(&quot;opnfv-environment.yaml&quot;).read().replace(&quot;replace_private_key:&quot;, &quot;key: \&quot;&quot; + &quot;&quot;.join(open(&quot;nova_id_rsa&quot;).readlines()).replace(&quot;\\n&quot;,&quot;\\\n&quot;) + &quot;\&quot;&quot;)))&#39;</span>
<span class="s">mv -f opnfv-environment-new.yaml opnfv-environment.yaml</span>

<span class="s">source stackrc</span>
<span class="s">set -o errexit</span>
<span class="s"># Workaround for APEX-207 where sometimes swift proxy is down</span>
<span class="s">if ! sudo systemctl status openstack-swift-proxy &gt; /dev/null; then</span>
<span class="s">  sudo systemctl restart openstack-swift-proxy</span>
<span class="s">fi</span>
<span class="s">echo &quot;Uploading overcloud glance images&quot;</span>
<span class="s">openstack overcloud image upload</span>

<span class="s">echo &quot;Configuring undercloud and discovering nodes&quot;</span>
<span class="s">openstack baremetal import --json instackenv.json</span>
<span class="s">openstack baremetal configure boot</span>
<span class="s">bash -x set_perf_images.sh ${performance_roles[@]}</span>
<span class="s">#if [[ -z &quot;$virtual&quot; ]]; then</span>
<span class="s">#  openstack baremetal introspection bulk start</span>
<span class="s">#fi</span>
<span class="s">echo &quot;Configuring flavors&quot;</span>
<span class="s">for flavor in baremetal control compute; do</span>
<span class="s">  echo -e &quot;${blue}INFO: Updating flavor: \${flavor}${reset}&quot;</span>
<span class="s">  if openstack flavor list | grep \${flavor}; then</span>
<span class="s">    openstack flavor delete \${flavor}</span>
<span class="s">  fi</span>
<span class="s">  openstack flavor create --id auto --ram 4096 --disk 39 --vcpus 1 \${flavor}</span>
<span class="s">  if ! openstack flavor list | grep \${flavor}; then</span>
<span class="s">    echo -e &quot;${red}ERROR: Unable to create flavor \${flavor}${reset}&quot;</span>
<span class="s">  fi</span>
<span class="s">done</span>
<span class="s">openstack flavor set --property &quot;cpu_arch&quot;=&quot;x86_64&quot; --property &quot;capabilities:boot_option&quot;=&quot;local&quot; baremetal</span>
<span class="s">openstack flavor set --property &quot;cpu_arch&quot;=&quot;x86_64&quot; --property &quot;capabilities:boot_option&quot;=&quot;local&quot; --property &quot;capabilities:profile&quot;=&quot;control&quot; control</span>
<span class="s">openstack flavor set --property &quot;cpu_arch&quot;=&quot;x86_64&quot; --property &quot;capabilities:boot_option&quot;=&quot;local&quot; --property &quot;capabilities:profile&quot;=&quot;compute&quot; compute</span>
<span class="s">echo &quot;Configuring nameserver on ctlplane network&quot;</span>
<span class="s">dns_server_ext=&#39;&#39;</span>
<span class="s">for dns_server in ${dns_servers}; do</span>
<span class="s">  dns_server_ext=&quot;\${dns_server_ext} --dns-nameserver \${dns_server}&quot;</span>
<span class="s">done</span>
<span class="s">neutron subnet-update \$(neutron subnet-list | grep -Ev &quot;id|tenant|external|storage&quot; | grep -v \\\\-\\\\- | awk {&#39;print \$2&#39;}) \${dns_server_ext}</span>
<span class="s">sed -i &#39;/CloudDomain:/c\  CloudDomain: &#39;${domain_name} opnfv-environment.yaml</span>
<span class="s">echo &quot;Executing overcloud deployment, this should run for an extended period without output.&quot;</span>
<span class="s">sleep 60 #wait for Hypervisor stats to check-in to nova</span>
<span class="s"># save deploy command so it can be used for debugging</span>
<span class="s">cat &gt; deploy_command &lt;&lt; EOF</span>
<span class="s">openstack overcloud deploy --templates $DEPLOY_OPTIONS --timeout 90</span>
<span class="s">EOF</span>
<span class="s">EOI</span>

  <span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="nv">$interactive</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s2">&quot;TRUE&quot;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
    <span class="k">if</span> ! prompt_user <span class="s2">&quot;Overcloud Deployment&quot;</span><span class="p">;</span> <span class="k">then</span>
      <span class="nb">echo</span> -e <span class="s2">&quot;</span><span class="si">${</span><span class="nv">blue</span><span class="si">}</span><span class="s2">INFO: User requests exit</span><span class="si">${</span><span class="nv">reset</span><span class="si">}</span><span class="s2">&quot;</span>
      <span class="nb">exit</span> <span class="m">0</span>
    <span class="k">fi</span>
  <span class="k">fi</span>

  ssh -T <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="s2">&quot;stack@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span> <span class="s">&lt;&lt;EOI</span>
<span class="s">source stackrc</span>
<span class="s">openstack overcloud deploy --templates $DEPLOY_OPTIONS --timeout 90</span>
<span class="s">if ! openstack stack list | grep CREATE_COMPLETE 1&gt;/dev/null; then</span>
<span class="s">  $(typeset -f debug_stack)</span>
<span class="s">  debug_stack</span>
<span class="s">  exit 1</span>
<span class="s">fi</span>
<span class="s">EOI</span>

  <span class="c1"># Configure DPDK</span>
  <span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">deploy_options_array</span><span class="p">[</span><span class="s1">&#39;dataplane&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;ovs_dpdk&#39;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
    ssh -T <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="s2">&quot;stack@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span> <span class="s">&lt;&lt;EOI || (echo &quot;DPDK config failed, exiting...&quot;; exit 1)</span>
<span class="s">source stackrc</span>
<span class="s">set -o errexit</span>
<span class="s">for node in \$(nova list | grep novacompute | grep -Eo &quot;[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+&quot;); do</span>
<span class="s">echo &quot;Running DPDK test app on \$node&quot;</span>
<span class="s">ssh -T ${SSH_OPTIONS[@]} &quot;heat-admin@\$node&quot; &lt;&lt;EOF</span>
<span class="s">set -o errexit</span>
<span class="s">sudo dpdk_helloworld --no-pci</span>
<span class="s">sudo dpdk_nic_bind -s</span>
<span class="s">EOF</span>
<span class="s">done</span>
<span class="s">EOI</span>
  <span class="k">fi</span>

  <span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="nv">$debug</span><span class="s2">&quot;</span> <span class="o">==</span> <span class="s1">&#39;TRUE&#39;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
      ssh -T <span class="si">${</span><span class="nv">SSH_OPTIONS</span><span class="p">[@]</span><span class="si">}</span> <span class="s2">&quot;stack@</span><span class="nv">$UNDERCLOUD</span><span class="s2">&quot;</span> <span class="s">&lt;&lt;EOI</span>
<span class="s">source overcloudrc</span>
<span class="s">echo &quot;Keystone Endpoint List:&quot;</span>
<span class="s">openstack endpoint list</span>
<span class="s">echo &quot;Keystone Service List&quot;</span>
<span class="s">openstack service list</span>
<span class="s">cinder quota-show \$(openstack project list | grep admin | awk {&#39;print \$2&#39;})</span>
<span class="s">EOI</span>
  <span class="k">fi</span>
<span class="o">}</span>
</pre></div>
</code></pre></td></tr></table>
</div> <!-- class=content -->
<div id="lfcollabprojects-footer">
  <div class="gray-diagonal">
    <div class="footer-inner">
      <p>
        &copy; 2015
        <a href="https://opnfv.org/">Open Platform for NFV Project, Inc</a>., a
        Linux Foundation Collaborative Project. All Rights Reserved.
      </p>
      <p>
        Open Platform for NFV and OPNFV are trademarks of the Open Platform for
        NFV Project, Inc.
      </p>
      <p>
        Linux Foundation is a registered trademark of The Linux Foundation.
        Linux is a registered
        <a
          href="http://www.linuxfoundation.org/programs/legal/trademark"
          title="Linux Mark Institute"
          >trademark</a
        >
        of Linus Torvalds.
      </p>
      <p>
        Please see our
        <a href="https://opnfv.org/about/bylaws-and-policies/terms-use"
          >terms of use</a
        >,
        <a href="https://opnfv.org/about/bylaws-and-policies/trademarks"
          >trademark policy</a
        >, and
        <a href="https://opnfv.org/about/bylaws-and-policies/privacy-policy"
          >privacy policy</a
        >.
      </p>
    </div>
  </div>
</div>
</div> <!-- id=cgit -->
</body>
</html>
