forked from sabre1041/managing-ocp-install-beyond
-
Notifications
You must be signed in to change notification settings - Fork 0
/
rhsummit17-lab-guide.html
executable file
·1 lines (1 loc) · 206 KB
/
rhsummit17-lab-guide.html
1
<html><head><meta content="text/html; charset=UTF-8" http-equiv="content-type"><style type="text/css">.lst-kix_uwmceys56l4r-4>li:before{content:"\0025cb "}.lst-kix_uwmceys56l4r-2>li:before{content:"\0025a0 "}.lst-kix_uwmceys56l4r-6>li:before{content:"\0025cf "}.lst-kix_uwmceys56l4r-3>li:before{content:"\0025cf "}.lst-kix_uwmceys56l4r-7>li:before{content:"\0025cb "}.lst-kix_k5995kebo24e-4>li{counter-increment:lst-ctn-kix_k5995kebo24e-4}ul.lst-kix_4duuyo76xxf-8{list-style-type:none}ol.lst-kix_r9mrl3bc9kny-8{list-style-type:none}ol.lst-kix_r9mrl3bc9kny-7{list-style-type:none}.lst-kix_uwmceys56l4r-5>li:before{content:"\0025a0 "}ol.lst-kix_r9mrl3bc9kny-6{list-style-type:none}ol.lst-kix_r9mrl3bc9kny-5{list-style-type:none}.lst-kix_rib4varkqord-3>li:before{content:"" counter(lst-ctn-kix_rib4varkqord-3,decimal) ". "}ul.lst-kix_4duuyo76xxf-4{list-style-type:none}ol.lst-kix_r9mrl3bc9kny-4{list-style-type:none}ul.lst-kix_4duuyo76xxf-5{list-style-type:none}ol.lst-kix_r9mrl3bc9kny-3{list-style-type:none}.lst-kix_rib4varkqord-4>li:before{content:"" counter(lst-ctn-kix_rib4varkqord-4,lower-latin) ". "}ul.lst-kix_4duuyo76xxf-6{list-style-type:none}ol.lst-kix_r9mrl3bc9kny-2{list-style-type:none}.lst-kix_81wncfoj1lvh-2>li{counter-increment:lst-ctn-kix_81wncfoj1lvh-2}ul.lst-kix_4duuyo76xxf-7{list-style-type:none}ol.lst-kix_r9mrl3bc9kny-1{list-style-type:none}.lst-kix_rib4varkqord-5>li:before{content:"" counter(lst-ctn-kix_rib4varkqord-5,lower-roman) ". "}ul.lst-kix_4duuyo76xxf-0{list-style-type:none}ol.lst-kix_r9mrl3bc9kny-0{list-style-type:none}.lst-kix_sii8ty3mzjal-8>li:before{content:"\0025a0 "}ul.lst-kix_4duuyo76xxf-1{list-style-type:none}ul.lst-kix_4duuyo76xxf-2{list-style-type:none}ul.lst-kix_4duuyo76xxf-3{list-style-type:none}.lst-kix_rib4varkqord-7>li:before{content:"" counter(lst-ctn-kix_rib4varkqord-7,lower-latin) ". "}.lst-kix_uwmceys56l4r-0>li:before{content:"\0025cf "}.lst-kix_rib4varkqord-6>li:before{content:"" counter(lst-ctn-kix_rib4varkqord-6,decimal) ". "}.lst-kix_rib4varkqord-8>li:before{content:"" counter(lst-ctn-kix_rib4varkqord-8,lower-roman) ". "}.lst-kix_uwmceys56l4r-1>li:before{content:"\0025cb "}.lst-kix_rib4varkqord-5>li{counter-increment:lst-ctn-kix_rib4varkqord-5}.lst-kix_sii8ty3mzjal-2>li:before{content:"\0025a0 "}.lst-kix_sii8ty3mzjal-3>li:before{content:"\0025cf "}ol.lst-kix_81wncfoj1lvh-8.start{counter-reset:lst-ctn-kix_81wncfoj1lvh-8 0}ol.lst-kix_k5995kebo24e-1.start{counter-reset:lst-ctn-kix_k5995kebo24e-1 0}.lst-kix_sii8ty3mzjal-0>li:before{content:"\0025cf "}.lst-kix_sii8ty3mzjal-4>li:before{content:"\0025cb "}.lst-kix_sii8ty3mzjal-6>li:before{content:"\0025cf "}.lst-kix_sii8ty3mzjal-7>li:before{content:"\0025cb "}.lst-kix_sii8ty3mzjal-5>li:before{content:"\0025a0 "}.lst-kix_rib4varkqord-2>li:before{content:"" counter(lst-ctn-kix_rib4varkqord-2,lower-roman) ". "}ol.lst-kix_q11obdjrtn0p-6.start{counter-reset:lst-ctn-kix_q11obdjrtn0p-6 0}.lst-kix_rib4varkqord-1>li:before{content:"" counter(lst-ctn-kix_rib4varkqord-1,lower-latin) ". "}.lst-kix_rib4varkqord-0>li:before{content:"" counter(lst-ctn-kix_rib4varkqord-0,decimal) ". "}.lst-kix_y07efju62o76-1>li{counter-increment:lst-ctn-kix_y07efju62o76-1}.lst-kix_sii8ty3mzjal-1>li:before{content:"\0025cb "}ol.lst-kix_81wncfoj1lvh-4{list-style-type:none}ol.lst-kix_wjfgr97v7ml1-5.start{counter-reset:lst-ctn-kix_wjfgr97v7ml1-5 0}ol.lst-kix_81wncfoj1lvh-5{list-style-type:none}ol.lst-kix_81wncfoj1lvh-6{list-style-type:none}ol.lst-kix_81wncfoj1lvh-7{list-style-type:none}ol.lst-kix_81wncfoj1lvh-8{list-style-type:none}ol.lst-kix_81wncfoj1lvh-0{list-style-type:none}ol.lst-kix_81wncfoj1lvh-1{list-style-type:none}ol.lst-kix_81wncfoj1lvh-2{list-style-type:none}ol.lst-kix_81wncfoj1lvh-3{list-style-type:none}.lst-kix_q11obdjrtn0p-2>li{counter-increment:lst-ctn-kix_q11obdjrtn0p-2}.lst-kix_r76arqd16m9k-3>li{counter-increment:lst-ctn-kix_r76arqd16m9k-3}ol.lst-kix_k5995kebo24e-8.start{counter-reset:lst-ctn-kix_k5995kebo24e-8 0}ol.lst-kix_m1g9hcptt0ak-6.start{counter-reset:lst-ctn-kix_m1g9hcptt0ak-6 0}.lst-kix_m1g9hcptt0ak-1>li{counter-increment:lst-ctn-kix_m1g9hcptt0ak-1}ol.lst-kix_rib4varkqord-5.start{counter-reset:lst-ctn-kix_rib4varkqord-5 0}.lst-kix_y07efju62o76-8>li{counter-increment:lst-ctn-kix_y07efju62o76-8}.lst-kix_y07efju62o76-5>li{counter-increment:lst-ctn-kix_y07efju62o76-5}.lst-kix_uwmceys56l4r-8>li:before{content:"\0025a0 "}ol.lst-kix_q11obdjrtn0p-1.start{counter-reset:lst-ctn-kix_q11obdjrtn0p-1 0}ol.lst-kix_y07efju62o76-5{list-style-type:none}ol.lst-kix_y07efju62o76-6{list-style-type:none}.lst-kix_41jf8tsuzet2-3>li:before{content:"\0025cf "}ol.lst-kix_y07efju62o76-7{list-style-type:none}ol.lst-kix_y07efju62o76-8{list-style-type:none}ol.lst-kix_y07efju62o76-1{list-style-type:none}ol.lst-kix_y07efju62o76-2{list-style-type:none}ol.lst-kix_y07efju62o76-3{list-style-type:none}.lst-kix_95j65yi3gg73-1>li:before{content:"\0025cb "}ol.lst-kix_y07efju62o76-4{list-style-type:none}.lst-kix_41jf8tsuzet2-7>li:before{content:"\0025cb "}.lst-kix_41jf8tsuzet2-5>li:before{content:"\0025a0 "}.lst-kix_95j65yi3gg73-3>li:before{content:"\0025cf "}ol.lst-kix_rib4varkqord-3.start{counter-reset:lst-ctn-kix_rib4varkqord-3 0}.lst-kix_q11obdjrtn0p-5>li{counter-increment:lst-ctn-kix_q11obdjrtn0p-5}.lst-kix_95j65yi3gg73-5>li:before{content:"\0025a0 "}.lst-kix_41jf8tsuzet2-1>li:before{content:"\0025cb "}.lst-kix_95j65yi3gg73-7>li:before{content:"\0025cb "}.lst-kix_rib4varkqord-1>li{counter-increment:lst-ctn-kix_rib4varkqord-1}.lst-kix_k5995kebo24e-8>li{counter-increment:lst-ctn-kix_k5995kebo24e-8}.lst-kix_rib4varkqord-2>li{counter-increment:lst-ctn-kix_rib4varkqord-2}ol.lst-kix_k5995kebo24e-3.start{counter-reset:lst-ctn-kix_k5995kebo24e-3 0}ol.lst-kix_m1g9hcptt0ak-1.start{counter-reset:lst-ctn-kix_m1g9hcptt0ak-1 0}ol.lst-kix_y07efju62o76-4.start{counter-reset:lst-ctn-kix_y07efju62o76-4 0}ol.lst-kix_m1g9hcptt0ak-4.start{counter-reset:lst-ctn-kix_m1g9hcptt0ak-4 0}ol.lst-kix_rib4varkqord-0.start{counter-reset:lst-ctn-kix_rib4varkqord-0 0}.lst-kix_4duuyo76xxf-7>li:before{content:"\0025cb "}.lst-kix_wjfgr97v7ml1-2>li{counter-increment:lst-ctn-kix_wjfgr97v7ml1-2}.lst-kix_m1g9hcptt0ak-8>li{counter-increment:lst-ctn-kix_m1g9hcptt0ak-8}.lst-kix_81wncfoj1lvh-6>li{counter-increment:lst-ctn-kix_81wncfoj1lvh-6}ol.lst-kix_r9mrl3bc9kny-2.start{counter-reset:lst-ctn-kix_r9mrl3bc9kny-2 0}ol.lst-kix_r76arqd16m9k-4.start{counter-reset:lst-ctn-kix_r76arqd16m9k-4 0}.lst-kix_dnda6h6kpsxq-1>li:before{content:"\0025cb "}.lst-kix_4duuyo76xxf-1>li:before{content:"\0025cb "}.lst-kix_y07efju62o76-4>li{counter-increment:lst-ctn-kix_y07efju62o76-4}.lst-kix_4duuyo76xxf-5>li:before{content:"\0025a0 "}.lst-kix_r9mrl3bc9kny-8>li{counter-increment:lst-ctn-kix_r9mrl3bc9kny-8}.lst-kix_dnda6h6kpsxq-7>li:before{content:"\0025cb "}ul.lst-kix_ewhb80igethu-3{list-style-type:none}ol.lst-kix_r9mrl3bc9kny-0.start{counter-reset:lst-ctn-kix_r9mrl3bc9kny-0 0}ul.lst-kix_ewhb80igethu-4{list-style-type:none}ul.lst-kix_ewhb80igethu-5{list-style-type:none}ul.lst-kix_ewhb80igethu-6{list-style-type:none}ul.lst-kix_ewhb80igethu-7{list-style-type:none}ol.lst-kix_q11obdjrtn0p-7{list-style-type:none}ul.lst-kix_ewhb80igethu-8{list-style-type:none}ol.lst-kix_q11obdjrtn0p-8{list-style-type:none}ol.lst-kix_q11obdjrtn0p-5{list-style-type:none}ol.lst-kix_q11obdjrtn0p-6{list-style-type:none}.lst-kix_4duuyo76xxf-3>li:before{content:"\0025cf "}.lst-kix_r9mrl3bc9kny-1>li{counter-increment:lst-ctn-kix_r9mrl3bc9kny-1}ol.lst-kix_k5995kebo24e-6.start{counter-reset:lst-ctn-kix_k5995kebo24e-6 0}.lst-kix_81wncfoj1lvh-3>li:before{content:"" counter(lst-ctn-kix_81wncfoj1lvh-3,decimal) ". "}.lst-kix_81wncfoj1lvh-1>li:before{content:"" counter(lst-ctn-kix_81wncfoj1lvh-1,lower-latin) ". "}.lst-kix_81wncfoj1lvh-5>li:before{content:"" counter(lst-ctn-kix_81wncfoj1lvh-5,lower-roman) ". "}ol.lst-kix_y07efju62o76-2.start{counter-reset:lst-ctn-kix_y07efju62o76-2 0}ol.lst-kix_q11obdjrtn0p-3{list-style-type:none}.lst-kix_q11obdjrtn0p-6>li{counter-increment:lst-ctn-kix_q11obdjrtn0p-6}.lst-kix_81wncfoj1lvh-7>li:before{content:"" counter(lst-ctn-kix_81wncfoj1lvh-7,lower-latin) ". "}ol.lst-kix_q11obdjrtn0p-4{list-style-type:none}.lst-kix_q11obdjrtn0p-8>li:before{content:"" counter(lst-ctn-kix_q11obdjrtn0p-8,lower-roman) ". "}ol.lst-kix_q11obdjrtn0p-1{list-style-type:none}.lst-kix_wjfgr97v7ml1-3>li{counter-increment:lst-ctn-kix_wjfgr97v7ml1-3}ol.lst-kix_q11obdjrtn0p-2{list-style-type:none}ul.lst-kix_ewhb80igethu-0{list-style-type:none}ol.lst-kix_r76arqd16m9k-6.start{counter-reset:lst-ctn-kix_r76arqd16m9k-6 0}ol.lst-kix_q11obdjrtn0p-0{list-style-type:none}ul.lst-kix_ewhb80igethu-1{list-style-type:none}.lst-kix_r76arqd16m9k-4>li{counter-increment:lst-ctn-kix_r76arqd16m9k-4}ul.lst-kix_ewhb80igethu-2{list-style-type:none}.lst-kix_q11obdjrtn0p-4>li:before{content:"" counter(lst-ctn-kix_q11obdjrtn0p-4,lower-latin) ". "}ol.lst-kix_wjfgr97v7ml1-8.start{counter-reset:lst-ctn-kix_wjfgr97v7ml1-8 0}.lst-kix_q11obdjrtn0p-2>li:before{content:"" counter(lst-ctn-kix_q11obdjrtn0p-2,lower-roman) ". "}.lst-kix_q11obdjrtn0p-6>li:before{content:"" counter(lst-ctn-kix_q11obdjrtn0p-6,decimal) ". "}.lst-kix_dnda6h6kpsxq-5>li:before{content:"\0025a0 "}ol.lst-kix_y07efju62o76-0{list-style-type:none}.lst-kix_dnda6h6kpsxq-3>li:before{content:"\0025cf "}.lst-kix_r76arqd16m9k-1>li:before{content:"" counter(lst-ctn-kix_r76arqd16m9k-1,lower-latin) ". "}ul.lst-kix_uwmceys56l4r-7{list-style-type:none}.lst-kix_r76arqd16m9k-0>li:before{content:"" counter(lst-ctn-kix_r76arqd16m9k-0,decimal) ". "}.lst-kix_r76arqd16m9k-4>li:before{content:"" counter(lst-ctn-kix_r76arqd16m9k-4,lower-latin) ". "}.lst-kix_81wncfoj1lvh-1>li{counter-increment:lst-ctn-kix_81wncfoj1lvh-1}ul.lst-kix_uwmceys56l4r-8{list-style-type:none}ul.lst-kix_uwmceys56l4r-5{list-style-type:none}ul.lst-kix_uwmceys56l4r-6{list-style-type:none}.lst-kix_q11obdjrtn0p-0>li:before{content:"" counter(lst-ctn-kix_q11obdjrtn0p-0,decimal) ". "}ul.lst-kix_uwmceys56l4r-3{list-style-type:none}ul.lst-kix_uwmceys56l4r-4{list-style-type:none}.lst-kix_y07efju62o76-2>li{counter-increment:lst-ctn-kix_y07efju62o76-2}ul.lst-kix_uwmceys56l4r-1{list-style-type:none}ul.lst-kix_uwmceys56l4r-2{list-style-type:none}ol.lst-kix_k5995kebo24e-4.start{counter-reset:lst-ctn-kix_k5995kebo24e-4 0}ul.lst-kix_uwmceys56l4r-0{list-style-type:none}ul.lst-kix_41jf8tsuzet2-7{list-style-type:none}ul.lst-kix_41jf8tsuzet2-8{list-style-type:none}ul.lst-kix_41jf8tsuzet2-5{list-style-type:none}ul.lst-kix_41jf8tsuzet2-6{list-style-type:none}ul.lst-kix_41jf8tsuzet2-3{list-style-type:none}ul.lst-kix_41jf8tsuzet2-4{list-style-type:none}ul.lst-kix_41jf8tsuzet2-1{list-style-type:none}ul.lst-kix_41jf8tsuzet2-2{list-style-type:none}.lst-kix_m1g9hcptt0ak-0>li{counter-increment:lst-ctn-kix_m1g9hcptt0ak-0}ol.lst-kix_rib4varkqord-7.start{counter-reset:lst-ctn-kix_rib4varkqord-7 0}.lst-kix_rib4varkqord-8>li{counter-increment:lst-ctn-kix_rib4varkqord-8}.lst-kix_cwmxupgthamg-3>li:before{content:"\0025cf "}ol.lst-kix_q11obdjrtn0p-3.start{counter-reset:lst-ctn-kix_q11obdjrtn0p-3 0}ul.lst-kix_41jf8tsuzet2-0{list-style-type:none}.lst-kix_cwmxupgthamg-7>li:before{content:"\0025cb "}ol.lst-kix_m1g9hcptt0ak-8.start{counter-reset:lst-ctn-kix_m1g9hcptt0ak-8 0}.lst-kix_cwmxupgthamg-0>li:before{content:"\0025cf "}.lst-kix_cwmxupgthamg-8>li:before{content:"\0025a0 "}.lst-kix_ewhb80igethu-2>li:before{content:"\0025a0 "}.lst-kix_wjfgr97v7ml1-0>li:before{content:"" counter(lst-ctn-kix_wjfgr97v7ml1-0,decimal) ". "}.lst-kix_wjfgr97v7ml1-1>li:before{content:"" counter(lst-ctn-kix_wjfgr97v7ml1-1,lower-latin) ". "}.lst-kix_ewhb80igethu-5>li:before{content:"\0025a0 "}.lst-kix_ewhb80igethu-6>li:before{content:"\0025cf "}.lst-kix_cwmxupgthamg-4>li:before{content:"\0025cb "}.lst-kix_81wncfoj1lvh-3>li{counter-increment:lst-ctn-kix_81wncfoj1lvh-3}.lst-kix_m1g9hcptt0ak-8>li:before{content:"" counter(lst-ctn-kix_m1g9hcptt0ak-8,lower-roman) ". "}.lst-kix_m1g9hcptt0ak-7>li:before{content:"" counter(lst-ctn-kix_m1g9hcptt0ak-7,lower-latin) ". "}.lst-kix_r76arqd16m9k-2>li{counter-increment:lst-ctn-kix_r76arqd16m9k-2}.lst-kix_q11obdjrtn0p-1>li{counter-increment:lst-ctn-kix_q11obdjrtn0p-1}.lst-kix_m1g9hcptt0ak-4>li:before{content:"" counter(lst-ctn-kix_m1g9hcptt0ak-4,lower-latin) ". "}ol.lst-kix_r9mrl3bc9kny-4.start{counter-reset:lst-ctn-kix_r9mrl3bc9kny-4 0}.lst-kix_m1g9hcptt0ak-3>li:before{content:"" counter(lst-ctn-kix_m1g9hcptt0ak-3,decimal) ". "}ol.lst-kix_y07efju62o76-6.start{counter-reset:lst-ctn-kix_y07efju62o76-6 0}.lst-kix_81wncfoj1lvh-5>li{counter-increment:lst-ctn-kix_81wncfoj1lvh-5}ol.lst-kix_r76arqd16m9k-8.start{counter-reset:lst-ctn-kix_r76arqd16m9k-8 0}ol.lst-kix_r9mrl3bc9kny-3.start{counter-reset:lst-ctn-kix_r9mrl3bc9kny-3 0}ol.lst-kix_q11obdjrtn0p-8.start{counter-reset:lst-ctn-kix_q11obdjrtn0p-8 0}.lst-kix_m1g9hcptt0ak-7>li{counter-increment:lst-ctn-kix_m1g9hcptt0ak-7}.lst-kix_q11obdjrtn0p-8>li{counter-increment:lst-ctn-kix_q11obdjrtn0p-8}.lst-kix_r9mrl3bc9kny-0>li{counter-increment:lst-ctn-kix_r9mrl3bc9kny-0}.lst-kix_m1g9hcptt0ak-0>li:before{content:"" counter(lst-ctn-kix_m1g9hcptt0ak-0,decimal) ". "}.lst-kix_r76arqd16m9k-8>li:before{content:"" counter(lst-ctn-kix_r76arqd16m9k-8,lower-roman) ". "}.lst-kix_k5995kebo24e-1>li{counter-increment:lst-ctn-kix_k5995kebo24e-1}.lst-kix_r76arqd16m9k-5>li:before{content:"" counter(lst-ctn-kix_r76arqd16m9k-5,lower-roman) ". "}ol.lst-kix_y07efju62o76-5.start{counter-reset:lst-ctn-kix_y07efju62o76-5 0}.lst-kix_41jf8tsuzet2-4>li:before{content:"\0025cb "}.lst-kix_95j65yi3gg73-2>li:before{content:"\0025a0 "}.lst-kix_m1g9hcptt0ak-5>li{counter-increment:lst-ctn-kix_m1g9hcptt0ak-5}.lst-kix_y07efju62o76-7>li{counter-increment:lst-ctn-kix_y07efju62o76-7}ol.lst-kix_k5995kebo24e-0.start{counter-reset:lst-ctn-kix_k5995kebo24e-0 0}.lst-kix_r9mrl3bc9kny-5>li{counter-increment:lst-ctn-kix_r9mrl3bc9kny-5}ol.lst-kix_q11obdjrtn0p-5.start{counter-reset:lst-ctn-kix_q11obdjrtn0p-5 0}.lst-kix_41jf8tsuzet2-0>li:before{content:"\0025cf "}ol.lst-kix_rib4varkqord-6.start{counter-reset:lst-ctn-kix_rib4varkqord-6 0}ol.lst-kix_m1g9hcptt0ak-7.start{counter-reset:lst-ctn-kix_m1g9hcptt0ak-7 0}.lst-kix_95j65yi3gg73-6>li:before{content:"\0025cf "}.lst-kix_y07efju62o76-5>li:before{content:"" counter(lst-ctn-kix_y07efju62o76-5,lower-roman) ". "}.lst-kix_r76arqd16m9k-0>li{counter-increment:lst-ctn-kix_r76arqd16m9k-0}ol.lst-kix_q11obdjrtn0p-2.start{counter-reset:lst-ctn-kix_q11obdjrtn0p-2 0}ol.lst-kix_r9mrl3bc9kny-8.start{counter-reset:lst-ctn-kix_r9mrl3bc9kny-8 0}ol.lst-kix_y07efju62o76-7.start{counter-reset:lst-ctn-kix_y07efju62o76-7 0}ol.lst-kix_r9mrl3bc9kny-5.start{counter-reset:lst-ctn-kix_r9mrl3bc9kny-5 0}.lst-kix_wjfgr97v7ml1-8>li:before{content:"" counter(lst-ctn-kix_wjfgr97v7ml1-8,lower-roman) ". "}.lst-kix_dnda6h6kpsxq-0>li:before{content:"\0025cf "}ol.lst-kix_rib4varkqord-8.start{counter-reset:lst-ctn-kix_rib4varkqord-8 0}.lst-kix_jiowd2t8g8cu-1>li:before{content:"\0025cb "}.lst-kix_jiowd2t8g8cu-5>li:before{content:"\0025a0 "}ol.lst-kix_q11obdjrtn0p-4.start{counter-reset:lst-ctn-kix_q11obdjrtn0p-4 0}.lst-kix_wjfgr97v7ml1-4>li:before{content:"" counter(lst-ctn-kix_wjfgr97v7ml1-4,lower-latin) ". "}.lst-kix_wdolg5yqtg2t-6>li:before{content:"\0025cf "}.lst-kix_4duuyo76xxf-6>li:before{content:"\0025cf "}.lst-kix_r76arqd16m9k-7>li{counter-increment:lst-ctn-kix_r76arqd16m9k-7}ul.lst-kix_cwmxupgthamg-8{list-style-type:none}.lst-kix_dnda6h6kpsxq-8>li:before{content:"\0025a0 "}ul.lst-kix_cwmxupgthamg-7{list-style-type:none}ol.lst-kix_rib4varkqord-1{list-style-type:none}ol.lst-kix_rib4varkqord-0{list-style-type:none}ol.lst-kix_rib4varkqord-5{list-style-type:none}ul.lst-kix_sii8ty3mzjal-3{list-style-type:none}ol.lst-kix_rib4varkqord-4{list-style-type:none}ul.lst-kix_sii8ty3mzjal-2{list-style-type:none}ol.lst-kix_rib4varkqord-3{list-style-type:none}ul.lst-kix_sii8ty3mzjal-5{list-style-type:none}.lst-kix_k5995kebo24e-6>li{counter-increment:lst-ctn-kix_k5995kebo24e-6}ol.lst-kix_rib4varkqord-2{list-style-type:none}ul.lst-kix_sii8ty3mzjal-4{list-style-type:none}ul.lst-kix_sii8ty3mzjal-7{list-style-type:none}.lst-kix_4duuyo76xxf-2>li:before{content:"\0025a0 "}ol.lst-kix_rib4varkqord-8{list-style-type:none}ul.lst-kix_sii8ty3mzjal-6{list-style-type:none}ol.lst-kix_rib4varkqord-7{list-style-type:none}.lst-kix_wdolg5yqtg2t-2>li:before{content:"\0025a0 "}ol.lst-kix_rib4varkqord-6{list-style-type:none}ul.lst-kix_sii8ty3mzjal-8{list-style-type:none}.lst-kix_y07efju62o76-0>li{counter-increment:lst-ctn-kix_y07efju62o76-0}.lst-kix_81wncfoj1lvh-2>li:before{content:"" counter(lst-ctn-kix_81wncfoj1lvh-2,lower-roman) ". "}ul.lst-kix_sii8ty3mzjal-1{list-style-type:none}ul.lst-kix_sii8ty3mzjal-0{list-style-type:none}ul.lst-kix_cwmxupgthamg-2{list-style-type:none}ul.lst-kix_cwmxupgthamg-1{list-style-type:none}.lst-kix_81wncfoj1lvh-6>li:before{content:"" counter(lst-ctn-kix_81wncfoj1lvh-6,decimal) ". "}.lst-kix_q11obdjrtn0p-7>li:before{content:"" counter(lst-ctn-kix_q11obdjrtn0p-7,lower-latin) ". "}ul.lst-kix_cwmxupgthamg-0{list-style-type:none}ul.lst-kix_cwmxupgthamg-6{list-style-type:none}.lst-kix_ho07urcltw0q-1>li:before{content:"\0025cb "}ul.lst-kix_cwmxupgthamg-5{list-style-type:none}ul.lst-kix_cwmxupgthamg-4{list-style-type:none}ul.lst-kix_cwmxupgthamg-3{list-style-type:none}.lst-kix_y07efju62o76-1>li:before{content:"" counter(lst-ctn-kix_y07efju62o76-1,lower-latin) ". "}.lst-kix_q11obdjrtn0p-3>li{counter-increment:lst-ctn-kix_q11obdjrtn0p-3}.lst-kix_q11obdjrtn0p-3>li:before{content:"" counter(lst-ctn-kix_q11obdjrtn0p-3,decimal) ". "}.lst-kix_wjfgr97v7ml1-6>li{counter-increment:lst-ctn-kix_wjfgr97v7ml1-6}.lst-kix_41jf8tsuzet2-8>li:before{content:"\0025a0 "}.lst-kix_dnda6h6kpsxq-4>li:before{content:"\0025cb "}.lst-kix_ho07urcltw0q-5>li:before{content:"\0025a0 "}ol.lst-kix_r9mrl3bc9kny-7.start{counter-reset:lst-ctn-kix_r9mrl3bc9kny-7 0}ol.lst-kix_m1g9hcptt0ak-0.start{counter-reset:lst-ctn-kix_m1g9hcptt0ak-0 0}ol.lst-kix_r76arqd16m9k-0.start{counter-reset:lst-ctn-kix_r76arqd16m9k-0 0}ol.lst-kix_y07efju62o76-8.start{counter-reset:lst-ctn-kix_y07efju62o76-8 0}ol.lst-kix_81wncfoj1lvh-2.start{counter-reset:lst-ctn-kix_81wncfoj1lvh-2 0}.lst-kix_hxumcxpys9ag-1>li:before{content:"\0025cb "}.lst-kix_hxumcxpys9ag-0>li:before{content:"\0025cf "}.lst-kix_hxumcxpys9ag-2>li:before{content:"\0025a0 "}ol.lst-kix_r9mrl3bc9kny-6.start{counter-reset:lst-ctn-kix_r9mrl3bc9kny-6 0}.lst-kix_hxumcxpys9ag-5>li:before{content:"\0025a0 "}.lst-kix_hxumcxpys9ag-4>li:before{content:"\0025cb "}.lst-kix_hxumcxpys9ag-6>li:before{content:"\0025cf "}.lst-kix_rib4varkqord-7>li{counter-increment:lst-ctn-kix_rib4varkqord-7}.lst-kix_hxumcxpys9ag-3>li:before{content:"\0025cf "}.lst-kix_hxumcxpys9ag-7>li:before{content:"\0025cb "}.lst-kix_r9mrl3bc9kny-0>li:before{content:"" counter(lst-ctn-kix_r9mrl3bc9kny-0,decimal) ". "}.lst-kix_r9mrl3bc9kny-1>li:before{content:"" counter(lst-ctn-kix_r9mrl3bc9kny-1,lower-latin) ". "}ul.lst-kix_dnda6h6kpsxq-3{list-style-type:none}ul.lst-kix_dnda6h6kpsxq-4{list-style-type:none}ul.lst-kix_dnda6h6kpsxq-5{list-style-type:none}.lst-kix_k5995kebo24e-2>li{counter-increment:lst-ctn-kix_k5995kebo24e-2}ul.lst-kix_dnda6h6kpsxq-6{list-style-type:none}ul.lst-kix_dnda6h6kpsxq-0{list-style-type:none}.lst-kix_r9mrl3bc9kny-2>li:before{content:"" counter(lst-ctn-kix_r9mrl3bc9kny-2,lower-roman) ". "}ul.lst-kix_dnda6h6kpsxq-1{list-style-type:none}ul.lst-kix_dnda6h6kpsxq-2{list-style-type:none}.lst-kix_r9mrl3bc9kny-5>li:before{content:"" counter(lst-ctn-kix_r9mrl3bc9kny-5,lower-roman) ". "}.lst-kix_r9mrl3bc9kny-3>li:before{content:"" counter(lst-ctn-kix_r9mrl3bc9kny-3,decimal) ". "}.lst-kix_r9mrl3bc9kny-4>li:before{content:"" counter(lst-ctn-kix_r9mrl3bc9kny-4,lower-latin) ". "}.lst-kix_wjfgr97v7ml1-8>li{counter-increment:lst-ctn-kix_wjfgr97v7ml1-8}ol.lst-kix_rib4varkqord-4.start{counter-reset:lst-ctn-kix_rib4varkqord-4 0}.lst-kix_r9mrl3bc9kny-6>li:before{content:"" counter(lst-ctn-kix_r9mrl3bc9kny-6,decimal) ". "}ol.lst-kix_k5995kebo24e-7.start{counter-reset:lst-ctn-kix_k5995kebo24e-7 0}.lst-kix_81wncfoj1lvh-0>li{counter-increment:lst-ctn-kix_81wncfoj1lvh-0}.lst-kix_r9mrl3bc9kny-7>li:before{content:"" counter(lst-ctn-kix_r9mrl3bc9kny-7,lower-latin) ". "}ul.lst-kix_dnda6h6kpsxq-7{list-style-type:none}.lst-kix_r76arqd16m9k-5>li{counter-increment:lst-ctn-kix_r76arqd16m9k-5}ul.lst-kix_dnda6h6kpsxq-8{list-style-type:none}.lst-kix_r9mrl3bc9kny-8>li:before{content:"" counter(lst-ctn-kix_r9mrl3bc9kny-8,lower-roman) ". "}ol.lst-kix_k5995kebo24e-2.start{counter-reset:lst-ctn-kix_k5995kebo24e-2 0}ul.lst-kix_wdolg5yqtg2t-1{list-style-type:none}ol.lst-kix_81wncfoj1lvh-7.start{counter-reset:lst-ctn-kix_81wncfoj1lvh-7 0}ul.lst-kix_wdolg5yqtg2t-0{list-style-type:none}.lst-kix_wjfgr97v7ml1-1>li{counter-increment:lst-ctn-kix_wjfgr97v7ml1-1}ul.lst-kix_wdolg5yqtg2t-3{list-style-type:none}ul.lst-kix_wdolg5yqtg2t-2{list-style-type:none}ol.lst-kix_m1g9hcptt0ak-5.start{counter-reset:lst-ctn-kix_m1g9hcptt0ak-5 0}.lst-kix_k5995kebo24e-0>li:before{content:"" counter(lst-ctn-kix_k5995kebo24e-0,decimal) ". "}.lst-kix_k5995kebo24e-1>li:before{content:"" counter(lst-ctn-kix_k5995kebo24e-1,lower-latin) ". "}ul.lst-kix_wdolg5yqtg2t-8{list-style-type:none}ul.lst-kix_wdolg5yqtg2t-5{list-style-type:none}.lst-kix_k5995kebo24e-2>li:before{content:"" counter(lst-ctn-kix_k5995kebo24e-2,lower-roman) ". "}ul.lst-kix_wdolg5yqtg2t-4{list-style-type:none}ol.lst-kix_q11obdjrtn0p-0.start{counter-reset:lst-ctn-kix_q11obdjrtn0p-0 0}ul.lst-kix_wdolg5yqtg2t-7{list-style-type:none}ul.lst-kix_wdolg5yqtg2t-6{list-style-type:none}.lst-kix_k5995kebo24e-4>li:before{content:"" counter(lst-ctn-kix_k5995kebo24e-4,lower-latin) ". "}.lst-kix_k5995kebo24e-5>li:before{content:"" counter(lst-ctn-kix_k5995kebo24e-5,lower-roman) ". "}.lst-kix_k5995kebo24e-3>li:before{content:"" counter(lst-ctn-kix_k5995kebo24e-3,decimal) ". "}.lst-kix_k5995kebo24e-7>li:before{content:"" counter(lst-ctn-kix_k5995kebo24e-7,lower-latin) ". "}ol.lst-kix_q11obdjrtn0p-7.start{counter-reset:lst-ctn-kix_q11obdjrtn0p-7 0}.lst-kix_k5995kebo24e-6>li:before{content:"" counter(lst-ctn-kix_k5995kebo24e-6,decimal) ". "}.lst-kix_r9mrl3bc9kny-6>li{counter-increment:lst-ctn-kix_r9mrl3bc9kny-6}.lst-kix_r9mrl3bc9kny-3>li{counter-increment:lst-ctn-kix_r9mrl3bc9kny-3}ol.lst-kix_wjfgr97v7ml1-4.start{counter-reset:lst-ctn-kix_wjfgr97v7ml1-4 0}.lst-kix_k5995kebo24e-8>li:before{content:"" counter(lst-ctn-kix_k5995kebo24e-8,lower-roman) ". "}.lst-kix_hxumcxpys9ag-8>li:before{content:"\0025a0 "}ol.lst-kix_m1g9hcptt0ak-8{list-style-type:none}.lst-kix_rib4varkqord-0>li{counter-increment:lst-ctn-kix_rib4varkqord-0}.lst-kix_rib4varkqord-3>li{counter-increment:lst-ctn-kix_rib4varkqord-3}ol.lst-kix_m1g9hcptt0ak-6{list-style-type:none}ol.lst-kix_m1g9hcptt0ak-7{list-style-type:none}ol.lst-kix_m1g9hcptt0ak-4{list-style-type:none}ol.lst-kix_m1g9hcptt0ak-5{list-style-type:none}ol.lst-kix_m1g9hcptt0ak-2{list-style-type:none}ol.lst-kix_m1g9hcptt0ak-3{list-style-type:none}ol.lst-kix_m1g9hcptt0ak-0{list-style-type:none}ol.lst-kix_m1g9hcptt0ak-1{list-style-type:none}.lst-kix_81wncfoj1lvh-7>li{counter-increment:lst-ctn-kix_81wncfoj1lvh-7}ol.lst-kix_r76arqd16m9k-7.start{counter-reset:lst-ctn-kix_r76arqd16m9k-7 0}.lst-kix_y07efju62o76-8>li:before{content:"" counter(lst-ctn-kix_y07efju62o76-8,lower-roman) ". "}ol.lst-kix_y07efju62o76-1.start{counter-reset:lst-ctn-kix_y07efju62o76-1 0}.lst-kix_81wncfoj1lvh-8>li{counter-increment:lst-ctn-kix_81wncfoj1lvh-8}.lst-kix_y07efju62o76-4>li:before{content:"" counter(lst-ctn-kix_y07efju62o76-4,lower-latin) ". "}.lst-kix_y07efju62o76-6>li:before{content:"" counter(lst-ctn-kix_y07efju62o76-6,decimal) ". "}.lst-kix_wjfgr97v7ml1-4>li{counter-increment:lst-ctn-kix_wjfgr97v7ml1-4}ul.lst-kix_jiowd2t8g8cu-8{list-style-type:none}ul.lst-kix_jiowd2t8g8cu-7{list-style-type:none}ul.lst-kix_jiowd2t8g8cu-6{list-style-type:none}ul.lst-kix_jiowd2t8g8cu-5{list-style-type:none}ol.lst-kix_wjfgr97v7ml1-6.start{counter-reset:lst-ctn-kix_wjfgr97v7ml1-6 0}.lst-kix_q11obdjrtn0p-7>li{counter-increment:lst-ctn-kix_q11obdjrtn0p-7}ol.lst-kix_rib4varkqord-1.start{counter-reset:lst-ctn-kix_rib4varkqord-1 0}.lst-kix_jiowd2t8g8cu-2>li:before{content:"\0025a0 "}.lst-kix_jiowd2t8g8cu-4>li:before{content:"\0025cb "}.lst-kix_wdolg5yqtg2t-7>li:before{content:"\0025cb "}.lst-kix_wjfgr97v7ml1-7>li:before{content:"" counter(lst-ctn-kix_wjfgr97v7ml1-7,lower-latin) ". "}.lst-kix_r9mrl3bc9kny-2>li{counter-increment:lst-ctn-kix_r9mrl3bc9kny-2}.lst-kix_wdolg5yqtg2t-5>li:before{content:"\0025a0 "}.lst-kix_wjfgr97v7ml1-5>li:before{content:"" counter(lst-ctn-kix_wjfgr97v7ml1-5,lower-roman) ". "}.lst-kix_jiowd2t8g8cu-0>li:before{content:"\0025cf "}.lst-kix_jiowd2t8g8cu-6>li:before{content:"\0025cf "}.lst-kix_jiowd2t8g8cu-8>li:before{content:"\0025a0 "}ol.lst-kix_y07efju62o76-3.start{counter-reset:lst-ctn-kix_y07efju62o76-3 0}.lst-kix_m1g9hcptt0ak-2>li{counter-increment:lst-ctn-kix_m1g9hcptt0ak-2}.lst-kix_wdolg5yqtg2t-1>li:before{content:"\0025cb "}.lst-kix_ewhb80igethu-1>li:before{content:"\0025cb "}.lst-kix_wdolg5yqtg2t-3>li:before{content:"\0025cf "}.lst-kix_r9mrl3bc9kny-7>li{counter-increment:lst-ctn-kix_r9mrl3bc9kny-7}ol.lst-kix_r76arqd16m9k-5.start{counter-reset:lst-ctn-kix_r76arqd16m9k-5 0}ul.lst-kix_jiowd2t8g8cu-0{list-style-type:none}.lst-kix_m1g9hcptt0ak-3>li{counter-increment:lst-ctn-kix_m1g9hcptt0ak-3}ul.lst-kix_jiowd2t8g8cu-4{list-style-type:none}ul.lst-kix_jiowd2t8g8cu-3{list-style-type:none}ul.lst-kix_jiowd2t8g8cu-2{list-style-type:none}ol.lst-kix_m1g9hcptt0ak-2.start{counter-reset:lst-ctn-kix_m1g9hcptt0ak-2 0}ul.lst-kix_jiowd2t8g8cu-1{list-style-type:none}.lst-kix_y07efju62o76-3>li{counter-increment:lst-ctn-kix_y07efju62o76-3}.lst-kix_ho07urcltw0q-2>li:before{content:"\0025a0 "}.lst-kix_ho07urcltw0q-4>li:before{content:"\0025cb "}.lst-kix_y07efju62o76-0>li:before{content:"" counter(lst-ctn-kix_y07efju62o76-0,decimal) ". "}.lst-kix_y07efju62o76-2>li:before{content:"" counter(lst-ctn-kix_y07efju62o76-2,lower-roman) ". "}ol.lst-kix_r9mrl3bc9kny-1.start{counter-reset:lst-ctn-kix_r9mrl3bc9kny-1 0}.lst-kix_ho07urcltw0q-0>li:before{content:"\0025cf "}.lst-kix_ho07urcltw0q-8>li:before{content:"\0025a0 "}.lst-kix_q11obdjrtn0p-0>li{counter-increment:lst-ctn-kix_q11obdjrtn0p-0}ol.lst-kix_k5995kebo24e-5.start{counter-reset:lst-ctn-kix_k5995kebo24e-5 0}ol.lst-kix_m1g9hcptt0ak-3.start{counter-reset:lst-ctn-kix_m1g9hcptt0ak-3 0}.lst-kix_ho07urcltw0q-6>li:before{content:"\0025cf "}ol.lst-kix_rib4varkqord-2.start{counter-reset:lst-ctn-kix_rib4varkqord-2 0}ul.lst-kix_95j65yi3gg73-8{list-style-type:none}ol.lst-kix_r76arqd16m9k-0{list-style-type:none}.lst-kix_r76arqd16m9k-3>li:before{content:"" counter(lst-ctn-kix_r76arqd16m9k-3,decimal) ". "}ul.lst-kix_95j65yi3gg73-7{list-style-type:none}ol.lst-kix_r76arqd16m9k-1{list-style-type:none}ul.lst-kix_95j65yi3gg73-4{list-style-type:none}ul.lst-kix_95j65yi3gg73-3{list-style-type:none}ul.lst-kix_95j65yi3gg73-6{list-style-type:none}ul.lst-kix_95j65yi3gg73-5{list-style-type:none}ul.lst-kix_95j65yi3gg73-0{list-style-type:none}ol.lst-kix_81wncfoj1lvh-5.start{counter-reset:lst-ctn-kix_81wncfoj1lvh-5 0}.lst-kix_q11obdjrtn0p-1>li:before{content:"" counter(lst-ctn-kix_q11obdjrtn0p-1,lower-latin) ". "}ul.lst-kix_95j65yi3gg73-2{list-style-type:none}.lst-kix_r76arqd16m9k-2>li:before{content:"" counter(lst-ctn-kix_r76arqd16m9k-2,lower-roman) ". "}ul.lst-kix_95j65yi3gg73-1{list-style-type:none}ol.lst-kix_r76arqd16m9k-3.start{counter-reset:lst-ctn-kix_r76arqd16m9k-3 0}ol.lst-kix_wjfgr97v7ml1-7.start{counter-reset:lst-ctn-kix_wjfgr97v7ml1-7 0}.lst-kix_k5995kebo24e-3>li{counter-increment:lst-ctn-kix_k5995kebo24e-3}.lst-kix_cwmxupgthamg-1>li:before{content:"\0025cb "}.lst-kix_ewhb80igethu-7>li:before{content:"\0025cb "}.lst-kix_ewhb80igethu-8>li:before{content:"\0025a0 "}.lst-kix_cwmxupgthamg-2>li:before{content:"\0025a0 "}.lst-kix_cwmxupgthamg-6>li:before{content:"\0025cf "}.lst-kix_k5995kebo24e-5>li{counter-increment:lst-ctn-kix_k5995kebo24e-5}.lst-kix_ewhb80igethu-3>li:before{content:"\0025cf "}.lst-kix_ewhb80igethu-4>li:before{content:"\0025cb "}ol.lst-kix_y07efju62o76-0.start{counter-reset:lst-ctn-kix_y07efju62o76-0 0}.lst-kix_wjfgr97v7ml1-3>li:before{content:"" counter(lst-ctn-kix_wjfgr97v7ml1-3,decimal) ". "}ol.lst-kix_r76arqd16m9k-4{list-style-type:none}ol.lst-kix_r76arqd16m9k-5{list-style-type:none}ol.lst-kix_r76arqd16m9k-2{list-style-type:none}.lst-kix_cwmxupgthamg-5>li:before{content:"\0025a0 "}ol.lst-kix_r76arqd16m9k-3{list-style-type:none}ol.lst-kix_r76arqd16m9k-8{list-style-type:none}.lst-kix_wjfgr97v7ml1-2>li:before{content:"" counter(lst-ctn-kix_wjfgr97v7ml1-2,lower-roman) ". "}ol.lst-kix_r76arqd16m9k-6{list-style-type:none}ol.lst-kix_r76arqd16m9k-7{list-style-type:none}.lst-kix_wjfgr97v7ml1-7>li{counter-increment:lst-ctn-kix_wjfgr97v7ml1-7}ul.lst-kix_ho07urcltw0q-0{list-style-type:none}ol.lst-kix_r76arqd16m9k-2.start{counter-reset:lst-ctn-kix_r76arqd16m9k-2 0}ul.lst-kix_ho07urcltw0q-2{list-style-type:none}ul.lst-kix_ho07urcltw0q-1{list-style-type:none}ol.lst-kix_81wncfoj1lvh-0.start{counter-reset:lst-ctn-kix_81wncfoj1lvh-0 0}ul.lst-kix_ho07urcltw0q-4{list-style-type:none}ul.lst-kix_ho07urcltw0q-3{list-style-type:none}.lst-kix_m1g9hcptt0ak-2>li:before{content:"" counter(lst-ctn-kix_m1g9hcptt0ak-2,lower-roman) ". "}ul.lst-kix_ho07urcltw0q-6{list-style-type:none}ul.lst-kix_ho07urcltw0q-5{list-style-type:none}ul.lst-kix_ho07urcltw0q-8{list-style-type:none}.lst-kix_k5995kebo24e-7>li{counter-increment:lst-ctn-kix_k5995kebo24e-7}ul.lst-kix_ho07urcltw0q-7{list-style-type:none}.lst-kix_m1g9hcptt0ak-5>li:before{content:"" counter(lst-ctn-kix_m1g9hcptt0ak-5,lower-roman) ". "}.lst-kix_m1g9hcptt0ak-6>li:before{content:"" counter(lst-ctn-kix_m1g9hcptt0ak-6,decimal) ". "}ol.lst-kix_81wncfoj1lvh-6.start{counter-reset:lst-ctn-kix_81wncfoj1lvh-6 0}.lst-kix_m1g9hcptt0ak-4>li{counter-increment:lst-ctn-kix_m1g9hcptt0ak-4}.lst-kix_r76arqd16m9k-6>li{counter-increment:lst-ctn-kix_r76arqd16m9k-6}.lst-kix_m1g9hcptt0ak-1>li:before{content:"" counter(lst-ctn-kix_m1g9hcptt0ak-1,lower-latin) ". "}.lst-kix_r76arqd16m9k-7>li:before{content:"" counter(lst-ctn-kix_r76arqd16m9k-7,lower-latin) ". "}.lst-kix_rib4varkqord-6>li{counter-increment:lst-ctn-kix_rib4varkqord-6}.lst-kix_r76arqd16m9k-6>li:before{content:"" counter(lst-ctn-kix_r76arqd16m9k-6,decimal) ". "}.lst-kix_95j65yi3gg73-0>li:before{content:"\0025cf "}ol.lst-kix_wjfgr97v7ml1-0.start{counter-reset:lst-ctn-kix_wjfgr97v7ml1-0 0}.lst-kix_95j65yi3gg73-4>li:before{content:"\0025cb "}.lst-kix_41jf8tsuzet2-6>li:before{content:"\0025cf "}.lst-kix_95j65yi3gg73-8>li:before{content:"\0025a0 "}.lst-kix_y07efju62o76-7>li:before{content:"" counter(lst-ctn-kix_y07efju62o76-7,lower-latin) ". "}.lst-kix_r9mrl3bc9kny-4>li{counter-increment:lst-ctn-kix_r9mrl3bc9kny-4}.lst-kix_y07efju62o76-6>li{counter-increment:lst-ctn-kix_y07efju62o76-6}.lst-kix_41jf8tsuzet2-2>li:before{content:"\0025a0 "}.lst-kix_m1g9hcptt0ak-6>li{counter-increment:lst-ctn-kix_m1g9hcptt0ak-6}ol.lst-kix_81wncfoj1lvh-1.start{counter-reset:lst-ctn-kix_81wncfoj1lvh-1 0}ol.lst-kix_r76arqd16m9k-1.start{counter-reset:lst-ctn-kix_r76arqd16m9k-1 0}.lst-kix_wjfgr97v7ml1-5>li{counter-increment:lst-ctn-kix_wjfgr97v7ml1-5}ol.lst-kix_wjfgr97v7ml1-1{list-style-type:none}ol.lst-kix_wjfgr97v7ml1-0{list-style-type:none}ol.lst-kix_wjfgr97v7ml1-3{list-style-type:none}ol.lst-kix_wjfgr97v7ml1-2{list-style-type:none}ol.lst-kix_wjfgr97v7ml1-5{list-style-type:none}ol.lst-kix_wjfgr97v7ml1-4{list-style-type:none}ol.lst-kix_wjfgr97v7ml1-7{list-style-type:none}ol.lst-kix_wjfgr97v7ml1-6{list-style-type:none}ol.lst-kix_wjfgr97v7ml1-8{list-style-type:none}.lst-kix_4duuyo76xxf-8>li:before{content:"\0025a0 "}.lst-kix_q11obdjrtn0p-4>li{counter-increment:lst-ctn-kix_q11obdjrtn0p-4}.lst-kix_r76arqd16m9k-8>li{counter-increment:lst-ctn-kix_r76arqd16m9k-8}ol.lst-kix_wjfgr97v7ml1-3.start{counter-reset:lst-ctn-kix_wjfgr97v7ml1-3 0}.lst-kix_4duuyo76xxf-0>li:before{content:"\0025cf "}.lst-kix_dnda6h6kpsxq-2>li:before{content:"\0025a0 "}.lst-kix_81wncfoj1lvh-4>li{counter-increment:lst-ctn-kix_81wncfoj1lvh-4}ol.lst-kix_k5995kebo24e-8{list-style-type:none}ol.lst-kix_k5995kebo24e-7{list-style-type:none}.lst-kix_wdolg5yqtg2t-8>li:before{content:"\0025a0 "}ol.lst-kix_k5995kebo24e-6{list-style-type:none}.lst-kix_dnda6h6kpsxq-6>li:before{content:"\0025cf "}.lst-kix_wjfgr97v7ml1-6>li:before{content:"" counter(lst-ctn-kix_wjfgr97v7ml1-6,decimal) ". "}.lst-kix_jiowd2t8g8cu-7>li:before{content:"\0025cb "}ol.lst-kix_wjfgr97v7ml1-2.start{counter-reset:lst-ctn-kix_wjfgr97v7ml1-2 0}.lst-kix_k5995kebo24e-0>li{counter-increment:lst-ctn-kix_k5995kebo24e-0}.lst-kix_ewhb80igethu-0>li:before{content:"\0025cf "}.lst-kix_wdolg5yqtg2t-0>li:before{content:"\0025cf "}.lst-kix_wdolg5yqtg2t-4>li:before{content:"\0025cb "}ol.lst-kix_81wncfoj1lvh-4.start{counter-reset:lst-ctn-kix_81wncfoj1lvh-4 0}.lst-kix_4duuyo76xxf-4>li:before{content:"\0025cb "}ol.lst-kix_k5995kebo24e-5{list-style-type:none}ol.lst-kix_k5995kebo24e-4{list-style-type:none}ol.lst-kix_k5995kebo24e-3{list-style-type:none}.lst-kix_rib4varkqord-4>li{counter-increment:lst-ctn-kix_rib4varkqord-4}ol.lst-kix_k5995kebo24e-2{list-style-type:none}ol.lst-kix_k5995kebo24e-1{list-style-type:none}ol.lst-kix_k5995kebo24e-0{list-style-type:none}.lst-kix_jiowd2t8g8cu-3>li:before{content:"\0025cf "}ul.lst-kix_hxumcxpys9ag-3{list-style-type:none}.lst-kix_ho07urcltw0q-3>li:before{content:"\0025cf "}ul.lst-kix_hxumcxpys9ag-4{list-style-type:none}ul.lst-kix_hxumcxpys9ag-5{list-style-type:none}ul.lst-kix_hxumcxpys9ag-6{list-style-type:none}ul.lst-kix_hxumcxpys9ag-0{list-style-type:none}ul.lst-kix_hxumcxpys9ag-1{list-style-type:none}.lst-kix_y07efju62o76-3>li:before{content:"" counter(lst-ctn-kix_y07efju62o76-3,decimal) ". "}ul.lst-kix_hxumcxpys9ag-2{list-style-type:none}.lst-kix_wjfgr97v7ml1-0>li{counter-increment:lst-ctn-kix_wjfgr97v7ml1-0}ul.lst-kix_hxumcxpys9ag-7{list-style-type:none}.lst-kix_81wncfoj1lvh-0>li:before{content:"" counter(lst-ctn-kix_81wncfoj1lvh-0,decimal) ". "}.lst-kix_81wncfoj1lvh-8>li:before{content:"" counter(lst-ctn-kix_81wncfoj1lvh-8,lower-roman) ". "}ol.lst-kix_wjfgr97v7ml1-1.start{counter-reset:lst-ctn-kix_wjfgr97v7ml1-1 0}ul.lst-kix_hxumcxpys9ag-8{list-style-type:none}.lst-kix_r76arqd16m9k-1>li{counter-increment:lst-ctn-kix_r76arqd16m9k-1}.lst-kix_ho07urcltw0q-7>li:before{content:"\0025cb "}.lst-kix_81wncfoj1lvh-4>li:before{content:"" counter(lst-ctn-kix_81wncfoj1lvh-4,lower-latin) ". "}.lst-kix_q11obdjrtn0p-5>li:before{content:"" counter(lst-ctn-kix_q11obdjrtn0p-5,lower-roman) ". "}ol.lst-kix_81wncfoj1lvh-3.start{counter-reset:lst-ctn-kix_81wncfoj1lvh-3 0}ol{margin:0;padding:0}table td,table th{padding:0}.c40{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:52.5pt;border-top-color:#000000;border-bottom-style:solid}.c27{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:418.5pt;border-top-color:#000000;border-bottom-style:solid}.c87{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:47.2pt;border-top-color:#000000;border-bottom-style:solid}.c18{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:417.8pt;border-top-color:#000000;border-bottom-style:solid}.c50{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:45pt;border-top-color:#000000;border-bottom-style:solid}.c89{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:54pt;border-top-color:#000000;border-bottom-style:solid}.c57{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:49.5pt;border-top-color:#000000;border-bottom-style:solid}.c75{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:381.8pt;border-top-color:#000000;border-bottom-style:solid}.c96{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:51.8pt;border-top-color:#000000;border-bottom-style:solid}.c82{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:415.5pt;border-top-color:#000000;border-bottom-style:solid}.c91{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:348pt;border-top-color:#000000;border-bottom-style:solid}.c92{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:423pt;border-top-color:#000000;border-bottom-style:solid}.c43{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:50.2pt;border-top-color:#000000;border-bottom-style:solid}.c94{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:420.8pt;border-top-color:#000000;border-bottom-style:solid}.c58{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:414pt;border-top-color:#000000;border-bottom-style:solid}.c80{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:424.5pt;border-top-color:#000000;border-bottom-style:solid}.c37{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:417pt;border-top-color:#000000;border-bottom-style:solid}.c65{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#cccccc;border-left-style:solid;border-bottom-width:1pt;width:70.5pt;border-top-color:#000000;border-bottom-style:solid}.c46{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:117.8pt;border-top-color:#000000;border-bottom-style:solid}.c67{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:422.2pt;border-top-color:#000000;border-bottom-style:solid}.c3{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:48.8pt;border-top-color:#000000;border-bottom-style:solid}.c22{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:468pt;border-top-color:#000000;border-bottom-style:solid}.c76{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:43.5pt;border-top-color:#000000;border-bottom-style:solid}.c56{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:423.8pt;border-top-color:#000000;border-bottom-style:solid}.c66{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:44.2pt;border-top-color:#000000;border-bottom-style:solid}.c48{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:421.5pt;border-top-color:#000000;border-bottom-style:solid}.c17{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:45.8pt;border-top-color:#000000;border-bottom-style:solid}.c38{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:419.2pt;border-top-color:#000000;border-bottom-style:solid}.c71{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:376.5pt;border-top-color:#000000;border-bottom-style:solid}.c95{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:46.5pt;border-top-color:#000000;border-bottom-style:solid}.c78{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:416.2pt;border-top-color:#000000;border-bottom-style:solid}.c52{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:51pt;border-top-color:#000000;border-bottom-style:solid}.c51{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:350.2pt;border-top-color:#000000;border-bottom-style:solid}.c63{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:129.8pt;border-top-color:#000000;border-bottom-style:solid}.c15{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:182.2pt;border-top-color:#000000;border-bottom-style:solid}.c59{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:65.2pt;border-top-color:#000000;border-bottom-style:solid}.c47{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:195.8pt;border-top-color:#000000;border-bottom-style:solid}.c93{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:136.5pt;border-top-color:#000000;border-bottom-style:solid}.c26{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:102pt;border-top-color:#000000;border-bottom-style:solid}.c60{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:76.5pt;border-top-color:#000000;border-bottom-style:solid}.c77{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:70.5pt;border-top-color:#000000;border-bottom-style:solid}.c9{color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c4{color:#1155cc;font-weight:400;text-decoration:underline;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c6{color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:9pt;font-family:"Courier New";font-style:normal}.c31{margin-left:36pt;padding-top:3pt;padding-bottom:0pt;line-height:1.0;orphans:2;widows:2;text-align:left}.c41{margin-left:18pt;padding-top:3pt;padding-bottom:0pt;line-height:1.0;orphans:2;widows:2;text-align:left}.c5{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left;height:11pt}.c53{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:right;height:11pt}.c0{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c88{margin-left:18pt;padding-top:3pt;padding-bottom:4pt;line-height:1.0;orphans:2;widows:2;text-align:left}.c79{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:center}.c44{background-color:#ffffff;color:#353535;text-decoration:none;vertical-align:baseline;font-size:10.5pt;font-style:normal}.c2{padding-top:10pt;padding-bottom:0pt;line-height:1.0;orphans:2;widows:2;text-align:left}.c49{color:#000000;text-decoration:underline;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c33{padding-top:20pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;text-align:left;height:20pt}.c70{padding-top:4pt;padding-bottom:0pt;line-height:1.0;orphans:2;widows:2;text-align:left}.c12{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c8{padding-top:0pt;padding-bottom:0pt;line-height:1.0;text-align:left;height:11pt}.c45{padding-top:20pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;text-align:left}.c30{padding-top:16pt;padding-bottom:4pt;line-height:1.15;page-break-after:avoid;text-align:left}.c42{color:#434343;text-decoration:none;vertical-align:baseline;font-size:14pt;font-style:normal}.c29{padding-top:18pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;text-align:left}.c1{padding-top:0pt;padding-bottom:11pt;line-height:1.15;text-align:left;height:16pt}.c97{margin-left:72pt;border-spacing:0;border-collapse:collapse;margin-right:auto}.c16{padding-top:0pt;padding-bottom:0pt;line-height:1.0;text-align:left}.c69{padding-top:0pt;padding-bottom:11pt;line-height:1.15;text-align:left}.c84{margin-left:72.8pt;border-spacing:0;border-collapse:collapse;margin-right:auto}.c25{color:#000000;text-decoration:none;vertical-align:baseline;font-style:normal}.c19{border-spacing:0;border-collapse:collapse;margin-right:auto}.c54{margin-left:106.5pt;border-spacing:0;border-collapse:collapse;margin-right:auto}.c28{font-weight:400;font-size:20pt;font-family:"Arial"}.c81{color:#000000;text-decoration:none;vertical-align:baseline}.c72{background-color:#ffffff;max-width:468pt;padding:7.2pt 72pt 7.2pt 72pt}.c23{font-size:9pt;font-family:"Courier New";font-weight:400}.c74{background-color:#ffffff;font-size:10.5pt;color:#353535}.c24{font-size:9pt;font-family:"Courier New"}.c13{color:inherit;text-decoration:inherit}.c20{margin-left:72pt;padding-left:0pt}.c90{font-size:11pt;font-family:"Arial"}.c34{font-weight:400;font-family:"Arial"}.c7{color:#1155cc;text-decoration:underline}.c64{margin-left:108pt;padding-left:0pt}.c61{margin-left:144pt;padding-left:0pt}.c14{padding:0;margin:0}.c36{margin-left:36pt;padding-left:0pt}.c73{height:19pt}.c86{height:11pt}.c10{font-weight:700}.c55{height:24pt}.c83{height:16pt}.c21{font-style:italic}.c62{font-size:14pt}.c35{font-size:23pt}.c11{height:0pt}.c68{font-size:26pt}.c85{background-color:#cccccc}.c32{font-size:10pt}.c39{font-size:16pt}.title{padding-top:0pt;color:#000000;font-size:26pt;padding-bottom:3pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.subtitle{padding-top:0pt;color:#666666;font-size:15pt;padding-bottom:16pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}li{color:#000000;font-size:11pt;font-family:"Arial"}p{margin:0;color:#000000;font-size:11pt;font-family:"Arial"}h1{padding-top:20pt;color:#000000;font-size:20pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h2{padding-top:18pt;color:#000000;font-size:16pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h3{padding-top:16pt;color:#434343;font-size:14pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h4{padding-top:14pt;color:#666666;font-size:12pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h5{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h6{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;font-style:italic;orphans:2;widows:2;text-align:left}</style></head><body class="c72"><div><h2 class="c1" id="h.i8d954bea4fy"><span class="c25 c34 c35"></span></h2></div><p class="c69 title" id="h.6l10dj5520tt"><span class="c25 c34 c68"> </span></p><p class="c69 title" id="h.cepdqt1fr4h7"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 348.00px;"><img alt="" src="images/image27.png" style="width: 624.00px; height: 348.00px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span><span class="c25 c34 c68"> </span></p><p class="c69 title" id="h.7dvz9059n2qv"><span class="c25 c34 c68">Managing the Operation of an OpenShift Cluster</span></p><p class="c12"><span class="c25 c34 c62">Andrew Block, Scott Collier, Jason DeTiberus, Vinny Valdez</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c25 c34 c62">Abstract:</span></p><p class="c12"><span class="c21 c74">Configuring distributed systems can be difficult. Fortunately, automation tools such as Ansible are available to help manage even the most complex environments. In this lab, you'll take the reigns of your own cluster and experience firsthand how Ansible can be used to install, configure, and maintain OpenShift to support mission-critical systems. Once you install Red Hat OpenShift, you'll learn how to diagnose, troubleshoot, and resolve common platform issues. Managing the platform doesn't stop once the installation is complete. You'll use Ansible to simplify ongoing maintenance in an automated fashion. Finally, the use of centralized management systems will be introduced into the environment in order to demonstrate its importance and to provide a streamlined experience for both platform maintainers and users.</span></p><p class="c5"><span class="c34 c44"></span></p><hr style="page-break-before:always;display:none;"><p class="c5"><span class="c44 c34"></span></p><p class="c5"><span class="c44 c34"></span></p><p class="c70"><span class="c7"><a class="c13" href="#h.mnr54xbq3sho">Lab 0 - Pre-Lab Setup</a></span></p><p class="c2"><span class="c7"><a class="c13" href="#h.t9k8agqzismr">Lab 1 - Lab Overview</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.x4nw8z63ruz8">Introduction</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.1yxuwok90noi">Environment Overview</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.b09zjqo4zcpb">Target Environment</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.kyorg3bqnw16">Connectivity Details</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.1tooci10xlqf">Virtualization level</a></span></p><p class="c2"><span class="c7"><a class="c13" href="#h.x9g3i4x5zdlc">Lab 2 - Exploring the Environment</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.vz4yeu8hi4cv">Exploring Red Hat OpenStack Platform Environment</a></span></p><p class="c31"><span class="c7"><a class="c13" href="#h.6b977icwx1xz">Connecting to Red Hat OpenStack Platform</a></span></p><p class="c31"><span class="c7"><a class="c13" href="#h.6wolmwnwe56i">View Servers and Volumes</a></span></p><p class="c31"><span class="c7"><a class="c13" href="#h.pimpxmip3tg3">Further Environment Exploration</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.hsxta5j23k2o">Exploring Ansible Tower</a></span></p><p class="c31"><span class="c7"><a class="c13" href="#h.5ndqn8gpyk0t">Accessing Ansible Tower</a></span></p><p class="c31"><span class="c7"><a class="c13" href="#h.ysjsdwftshqb">Job Templates</a></span></p><p class="c31"><span class="c7"><a class="c13" href="#h.i174eongpjz1">Projects</a></span></p><p class="c31"><span class="c7"><a class="c13" href="#h.w1c3s1m21je3">Inventory</a></span></p><p class="c31"><span class="c7"><a class="c13" href="#h.7pv3hz2crr2y">Credentials</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.a6jq1rrp3qhr">Monitor the Progress of the OpenShift Installation</a></span></p><p class="c2"><span class="c7"><a class="c13" href="#h.oidtccdro9w1">Lab 3 - Verifying Installation of Red Hat OpenShift Container Platform Using Ansible Tower</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.ekai40lqch4m">Reviewing Install of OpenShift</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.fbcfru1tdtyn">Validate the OpenShift Installation</a></span></p><p class="c2"><span class="c7"><a class="c13" href="#h.aibm7nbsxpm0">Lab 4 - Installing Red Hat CloudForms</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.ftcgczu59rr9">Deploy Red Hat CloudForms</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.3umuvklu3kau">Instantiate CloudForms Templates</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.2yb69e1wrzw">Validating a Successful Deployment</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.x6hgyesicpp4">Accessing the CloudForms User Interface</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.a57d0d72mxoc">Configuring the Container Provider</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.trnf0s8v5cvz">Configuring the OpenStack Cloud Provider</a></span></p><p class="c2"><span class="c7"><a class="c13" href="#h.pqycvuqig37n">Lab 5 - Managing the Lifecycle of an Application</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.xs2kvaiebbkk">Deploy a Sample Application</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.5uhvick46ecz">Validating Application Deployment</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.8jmw3458p21t">View Application</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.xavcv7npxyvu">Viewing Application Metrics</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.70zoyjkvhwk0">Navigate through the OpenShift Web Console</a></span></p><p class="c2"><span class="c7"><a class="c13" href="#h.vrwjutgw2s0q">Lab 6 - Expanding the OpenShift Container Platform Cluster</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.3nkaei8t1dda">Review Cluster</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.6e74aq1acn3f">Expand the Cluster</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.312hek2ptrf4">Validate the Expanded Cluster</a></span></p><p class="c2"><span class="c7"><a class="c13" href="#h.jhndkym5ybtb">Lab 7 - Where do we go from here?</a></span></p><p class="c2"><span class="c7"><a class="c13" href="#h.apcwpcpv9lz3">Appendices</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.caekgyddfloa">Appendix A - Manually Cleanup Cinder Volume</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.zhaiz2m1v3mc">Appendix B - Script For Deploying CloudForms</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.fzknnqbefalw">Appendix C - Recovering From Failed CloudForms Deployment</a></span></p><p class="c41"><span class="c7"><a class="c13" href="#h.z0rklt43v0hk">Appendix D - Average Tower Job Times</a></span></p><p class="c88"><span class="c7"><a class="c13" href="#h.myu5p22ditfz">Appendix E - Troubleshooting CloudForms</a></span></p><p class="c5"><span class="c44 c34"></span></p><p class="c5"><span class="c44 c34"></span></p><hr style="page-break-before:always;display:none;"><p class="c5"><span class="c44 c34"></span></p><h1 class="c45" id="h.mnr54xbq3sho"><span class="c25 c28">Lab 0 - Pre-Lab Setup</span></h1><p class="c12"><span class="c0">Welcome! We are going to jump right into the lab implementation and then review the overall architecture and strategy afterward. You have been tasked with managing a Red Hat Container Platform environment running on the Red Hat OpenStack platform. Ansible Tower is also available and being used to execute and manage the overall installation of OpenShift. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Let’s perform some brief validation of the environment and kick off the OpenShift </span><span>installation</span><span class="c0">.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c10">NOTE</span><span class="c0">: The installation of OpenShift Container Platform can take 20-25 minutes so must be started immediately. If bullet point 1 below takes longer than 1 minute to complete, skip it and go directly to bullet point 2.</span></p><p class="c5"><span class="c0"></span></p><ol class="c14 lst-kix_wjfgr97v7ml1-0 start" start="1"><li class="c12 c36"><span>C</span><span class="c0">onnect to the running OpenStack environment to validate no servers exist:</span></li></ol><ol class="c14 lst-kix_wjfgr97v7ml1-1 start" start="1"><li class="c12 c20"><span class="c0">From the UI</span></li></ol><ol class="c14 lst-kix_wjfgr97v7ml1-2 start" start="1"><li class="c12 c64"><span>In a local we</span><span>b browser open </span><span class="c7 c10"><a class="c13" href="https://www.google.com/url?q=http://rhosp.admin.example.com&sa=D&ust=1493871684345000&usg=AFQjCNEmq5h6iCsHNOzfCidlATpJSBdHQA">http://rhosp.admin.example.com</a></span></li><li class="c12 c64"><span class="c0">Login with: </span></li></ol><ol class="c14 lst-kix_wjfgr97v7ml1-3 start" start="1"><li class="c12 c61"><span>Username: </span><span class="c10">user1</span><span class="c0"> </span></li><li class="c12 c61"><span>Password: </span><span class="c10">summit2017</span></li></ol><ol class="c14 lst-kix_wjfgr97v7ml1-2" start="3"><li class="c12 c64"><span>Click on </span><span class="c10">Compute -> Instances</span></li><li class="c12 c64"><span class="c0">Verify there are no instances running</span></li></ol><ol class="c14 lst-kix_wjfgr97v7ml1-1" start="2"><li class="c12 c20"><span class="c0">From the CLI (for advanced OpenStack users)</span></li></ol><ol class="c14 lst-kix_wjfgr97v7ml1-2 start" start="1"><li class="c12 c64"><span>SSH with password </span><span class="c10">summit2017</span></li></ol><a id="t.336502528a3b3c00487bb6c0a9f285ce67279de7"></a><a id="t.0"></a><table class="c54"><tbody><tr class="c11"><td class="c91" colspan="1" rowspan="1"><p class="c16"><span class="c23">kiosk$ </span><span class="c24 c10">ssh user1</span><span class="c24 c7 c10"><a class="c13" href="mailto:[email protected]">@rhosp.admin.example.com</a></span></p><p class="c16"><span class="c23">rhosp$ </span><span class="c24 c10">openstack server list</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><ol class="c14 lst-kix_wjfgr97v7ml1-0" start="2"><li class="c12 c36"><span class="c0">Connect to Ansible Tower to start the OpenShift deployment:</span></li></ol><ol class="c14 lst-kix_wjfgr97v7ml1-1 start" start="1"><li class="c12 c20"><span>F</span><span>rom a local web browser open </span><span class="c7 c10"><a class="c13" href="https://www.google.com/url?q=https://tower.admin.example.com&sa=D&ust=1493871684354000&usg=AFQjCNGbaHkPPz9whR3IlIhJywwlf78pCg">https://tower.admin.example.</a></span><span class="c7 c10"><a class="c13" href="https://www.google.com/url?q=https://tower.admin.example.com&sa=D&ust=1493871684354000&usg=AFQjCNGbaHkPPz9whR3IlIhJywwlf78pCg">com</a></span></li><li class="c12 c20"><span class="c10">NOTE</span><span>: If you get an error </span><span class="c10">internal server error</span><span> then SSH to the Tower VM and restart services. SSH with password </span><span class="c10">summit2017</span></li></ol><a id="t.6adf8e7fa424fd2313579b9f8de78828158f29bd"></a><a id="t.1"></a><table class="c84"><tbody><tr class="c11"><td class="c75" colspan="1" rowspan="1"><p class="c16"><span class="c23">kiosk$ </span><span class="c24 c10">ssh </span><span class="c24 c7 c10"><a class="c13" href="mailto:[email protected]">[email protected]</a></span></p><p class="c16"><span class="c23">tower# </span><span class="c6">ansible-tower-service restart</span></p></td></tr></tbody></table><ol class="c14 lst-kix_wjfgr97v7ml1-1" start="3"><li class="c12 c20"><span class="c0">Login with the following credentials:</span></li></ol><ol class="c14 lst-kix_wjfgr97v7ml1-2 start" start="1"><li class="c12 c64"><span>Username: </span><span class="c10">admin</span></li><li class="c12 c64"><span>Password: </span><span class="c10">summit2017</span></li></ol><ol class="c14 lst-kix_wjfgr97v7ml1-1" start="4"><li class="c12 c20"><span>On </span><span>Ansible Tower </span><span>overview page, select </span><span class="c10">Templates</span><span class="c0"> on the menu bar at the top of the screen.</span></li><li class="c12 c20"><span>Locate the job template called</span><span class="c10"> 0-Provision and Install OpenShift</span></li><li class="c12 c20"><span>Execute the job by clicking the rocket ship icon on the right hand side of the screen under the </span><span class="c21">Actions</span><span> column</span></li></ol><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 54.67px;"><img alt="" src="images/image28.png" style="width: 624.00px; height: 54.67px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><h1 class="c33" id="h.qiv0uat565e5"><span class="c25 c28"></span></h1><hr style="page-break-before:always;display:none;"><h1 class="c33" id="h.p4wi0tr5hjqt"><span class="c25 c28"></span></h1><h1 class="c45" id="h.t9k8agqzismr"><span class="c25 c28">Lab 1 - Lab Overview</span></h1><h2 class="c29" id="h.x4nw8z63ruz8"><span class="c25 c34 c39">Introduction</span></h2><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">With the OpenShift installation process kicked off, we can spend some time and provide an overview of the entire lab.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Managing an ecosystem of infrastructure and applications can be challenging. Fortunately, there are automation tools and technologies available to handle the most intense workloads. Today, we will leverage tools such as Ansible to automate the provisioning of the OpenShift Container Platform on top of Red Hat OpenStack Platform to provide the foundation for running containerized applications. Afterward, Red Hat CloudForms will be deployed to manage and monitor the underlying infrastructure and applications that run in the environment. Finally, we will walk through expanding the environment by adding new compute resources to the environment. By the conclusion of the lab, you will learn how each of these technologies complement one another to offer solutions to effectively manage the most complex environment.</span></p><p class="c5"><span class="c0"></span></p><h2 class="c29" id="h.1yxuwok90noi"><span class="c25 c34 c39">Environment Overview</span></h2><p class="c12"><span class="c0">The lab environment that we will utilize today consists of multiple KVM virtual machines running within each student workstation. The details of each virtual machine are listed below:</span></p><p class="c5"><span class="c0"></span></p><ul class="c14 lst-kix_41jf8tsuzet2-0 start"><li class="c12 c36"><span class="c0">Student Workstation - KVM hypervisor (the system you are logged into now)</span></li><li class="c12 c36"><span class="c0">Red Hat OpenStack Environment 10 - has been deployed for you and ready to host instances that will be used for the Red Hat OpenShift Container Platform 3.4.</span></li></ul><ul class="c14 lst-kix_41jf8tsuzet2-1 start"><li class="c12 c20"><span class="c0">KVM VM</span></li><li class="c12 c20"><span class="c0">hostname: rhosp.admin.example.com</span></li><li class="c12 c20"><span>Red Hat OpenShift Container Platform</span></li></ul><ul class="c14 lst-kix_41jf8tsuzet2-2 start"><li class="c12 c64"><span class="c0">1 Master node</span></li><li class="c12 c64"><span class="c0">1 Infrastructure Node</span></li><li class="c12 c64"><span class="c0">2 Application Nodes</span></li></ul><ul class="c14 lst-kix_41jf8tsuzet2-3 start"><li class="c12 c61"><span class="c0">Red Hat CloudForms (containerized)</span></li></ul><ul class="c14 lst-kix_41jf8tsuzet2-0"><li class="c12 c36"><span class="c0">Ansible Tower 3.1.2</span></li></ul><ul class="c14 lst-kix_41jf8tsuzet2-1 start"><li class="c12 c20"><span class="c0">KVM VM</span></li><li class="c12 c20"><span class="c0">hostname: tower.admin.example.com </span></li></ul><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">In addition to the virtual machines that are running on each student workstation, an instructor machine is also contained within the environment and provides additional resources. </span></p><p class="c5"><span class="c0"></span></p><ul class="c14 lst-kix_ho07urcltw0q-0 start"><li class="c12 c36"><span class="c0">Repository server</span></li></ul><ul class="c14 lst-kix_ho07urcltw0q-1 start"><li class="c12 c20"><span class="c0">KVM VM on instructor machine</span></li><li class="c12 c20"><span class="c0">Hostname: repo.osp.example.com </span></li><li class="c12 c20"><span class="c0">Hosts localized RPM’s, docker registry, and git repository</span></li></ul><p class="c5"><span class="c0"></span></p><p class="c79 c86"><span class="c0"></span></p><p class="c79"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 461.00px; height: 360.78px;"><img alt="" src="images/image24.png" style="width: 461.00px; height: 360.78px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">The following diagram depicts the network layout within the environment</span></p><p class="c79 c86"><span class="c0"></span></p><p class="c79"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 532.12px; height: 428.50px;"><img alt="" src="images/image21.png" style="width: 532.12px; height: 428.50px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><h2 class="c29" id="h.b09zjqo4zcpb"><span class="c25 c34 c39">Target Environment</span></h2><p class="c12"><span class="c0">As you progress through the series of labs, you will build increased capabilities for effectively managing containerized workloads. The diagram below represents the environment that we will be building today.</span></p><p class="c5"><span class="c0"></span></p><p class="c79"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 398.67px;"><img alt="" src="images/image25.png" style="width: 624.00px; height: 398.67px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><h2 class="c29" id="h.kyorg3bqnw16"><span class="c25 c34 c39">Connectivity Details</span></h2><p class="c12"><span class="c0">There are several components that will be utilized throughout the course of this lab. The following table outlines how to connect to each resource:</span></p><p class="c5"><span class="c0"></span></p><a id="t.79bef4511c9937c709dd1dcd77fe5ea89bb3b9ce"></a><a id="t.2"></a><table class="c19"><tbody><tr class="c11"><td class="c65" colspan="1" rowspan="1"><p class="c16"><span class="c49 c10">Item</span></p></td><td class="c47 c85" colspan="1" rowspan="1"><p class="c16"><span class="c10 c49">URL</span></p></td><td class="c93 c85" colspan="1" rowspan="1"><p class="c16"><span class="c49 c10">Access</span></p></td><td class="c59 c85" colspan="1" rowspan="1"><p class="c16"><span class="c49 c10">Virt Level</span></p></td></tr><tr class="c11"><td class="c77" colspan="1" rowspan="1"><p class="c16"><span class="c0">Red Hat OpenStack Platform</span></p></td><td class="c47" colspan="1" rowspan="1"><p class="c16"><span class="c7"><a class="c13" href="https://www.google.com/url?q=http://rhosp.admin.example.com&sa=D&ust=1493871684384000&usg=AFQjCNF8air5KU2Sf0B2C7HBOpTZNsdCsA">http://rhosp.admin.example.com</a></span></p></td><td class="c93" colspan="1" rowspan="1"><p class="c16"><span class="c0">Username: user1</span></p><p class="c16"><span class="c0">Password: summit2017</span></p></td><td class="c59" colspan="1" rowspan="1"><p class="c16"><span class="c0">L1</span></p></td></tr><tr class="c11"><td class="c77" colspan="1" rowspan="1"><p class="c16"><span class="c0">Ansible Tower</span></p></td><td class="c47" colspan="1" rowspan="1"><p class="c16"><span class="c7"><a class="c13" href="https://www.google.com/url?q=https://tower.admin.example.com&sa=D&ust=1493871684387000&usg=AFQjCNGH_shWdNgFV82l7WqbpWJMH0Mo8Q">https://tower.admin.example.com</a></span></p></td><td class="c93" colspan="1" rowspan="1"><p class="c16"><span class="c0">Username: admin</span></p><p class="c16"><span class="c0">Password: summit2017</span></p></td><td class="c59" colspan="1" rowspan="1"><p class="c16"><span class="c0">L1</span></p></td></tr><tr class="c11"><td class="c77" colspan="1" rowspan="1"><p class="c16"><span class="c0">OpenShift Container Platform</span></p></td><td class="c47" colspan="1" rowspan="1"><p class="c16"><span class="c7"><a class="c13" href="https://www.google.com/url?q=https://master.osp.example.com:8443&sa=D&ust=1493871684390000&usg=AFQjCNFpecptb2MZimtzg8EvQpw-pDgYRQ">https://master.osp.example.com:8443</a></span></p></td><td class="c93" colspan="1" rowspan="1"><p class="c16"><span class="c0">Username: user1</span></p><p class="c16"><span class="c0">Password: summit2017</span></p></td><td class="c59" colspan="1" rowspan="1"><p class="c16"><span class="c0">L2</span></p></td></tr><tr class="c11"><td class="c77" colspan="1" rowspan="1"><p class="c16"><span class="c0">Red Hat CloudForms</span></p></td><td class="c47" colspan="1" rowspan="1"><p class="c16"><span class="c7"><a class="c13" href="https://www.google.com/url?q=https://cloudforms-cloudforms.apps.example.com&sa=D&ust=1493871684394000&usg=AFQjCNGWwCM9MStNw16u_HK00x-ua-qKXw">https://cloudforms-cloudforms.apps.example.com</a></span></p></td><td class="c93" colspan="1" rowspan="1"><p class="c16"><span class="c0">Username: admin</span></p><p class="c16"><span>Password: smartvm</span></p></td><td class="c59" colspan="1" rowspan="1"><p class="c16"><span>L</span><span class="c0">2 (container)</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><h2 class="c29" id="h.1tooci10xlqf"><span class="c25 c34 c39">Virtualization level</span></h2><p class="c12"><span class="c0">To understand the different layers of virtualization we will use the following classifications:</span></p><ol class="c14 lst-kix_81wncfoj1lvh-0 start" start="1"><li class="c12 c36"><span class="c0">L0 - The hypervisor. In this lab this is the desktop you are sitting at</span></li><li class="c12 c36"><span class="c0">L1 - KVM virtual machine running on the L0 hypervisor</span></li><li class="c12 c36"><span class="c0">L2 - OpenStack Instance/Server running in nested virtualization in the OpenStack L1 VM</span></li><li class="c12 c36"><span class="c0">L2 (container) - Application running in a container on the L2 platform - in this case OpenShift</span></li></ol><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Keep in mind here, that we are using nested virtualization in this lab. So, while the performance is likely acceptable, it’s not reflective of a production deployment.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Each component plays a critical role into the overall management of the environment. Now let’s get started!</span></p><p class="c5"><span class="c0"></span></p><p class="c5"><span class="c0"></span></p><p class="c5"><span class="c0"></span></p><h1 class="c33" id="h.ocz7t5wwkrfh"><span class="c25 c28"></span></h1><hr style="page-break-before:always;display:none;"><h1 class="c33" id="h.3idikpcgic4h"><span class="c25 c28"></span></h1><h1 class="c45" id="h.x9g3i4x5zdlc"><span>Lab 2 - Exploring the </span><span>Environment</span></h1><p class="c12"><span class="c0">With the installation of the OpenShift Container Platform started and an understanding of the environment as as whole, we are going to take time waiting for the installation to complete to explore the environment in further detail.</span></p><h2 class="c29" id="h.vz4yeu8hi4cv"><span class="c25 c34 c39">Exploring Red Hat OpenStack Platform Environment</span></h2><p class="c12"><span>Red Hat OpenStack Platform (RHOSP) is used to host the servers used for the OpenShift Container Platform installation. Servers (also called </span><span class="c21">Instances</span><span>) are booted from LVM volumes on the RHOSP VM. If you view the list of servers and volumes on the Red Hat OpenStack Platform environment, you should see them in various states of </span><span class="c21">BUILD</span><span> and </span><span class="c21">ACTIVE</span><span class="c0">, though it is possible some may already be built by now. Connect to either the Horizon UI or the CLI to watch the status of servers and volumes.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">The RHOSP environment is a KVM virtual machine running on each student machine. This environment will be used to host the Red Hat OpenShift Container Platform. Let’s verify the state of the instances and execute a few commands to validate it is in good working order prior to proceeding. </span></p><h3 class="c30" id="h.6b977icwx1xz"><span class="c42 c34">Connecting to Red Hat OpenStack Platform</span></h3><p class="c12"><span>From the physical hypervisor (Student Workstation), connect to the OpenStack virtual machine (rhosp.admin.example.com) using the following </span><span>credentials</span><span class="c0">:</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Username: </span><span class="c10">user1</span></p><p class="c12"><span>Password: </span><span class="c9">summit2017</span></p><p class="c5"><span class="c9"></span></p><p class="c12"><span>You can use the provided SSH private key to </span><span>connect</span><span>:</span></p><a id="t.911300e3354ee0951e1e1be4308b6294a6899944"></a><a id="t.3"></a><table class="c19"><tbody><tr class="c11"><td class="c76" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">kiosk$</span></p></td><td class="c80" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">eval</span><span class="c24 c10"> "$(</span><span class="c24 c10">ssh-agent</span><span class="c24 c10">)"</span></p><p class="c16"><span class="c24 c10">curl -o ~/L104353-tower.pem </span><span class="c24 c7 c10"><a class="c13" href="https://www.google.com/url?q=http://repo.osp.example.com/pub/L104353-tower.pem&sa=D&ust=1493871684421000&usg=AFQjCNFsfctJERipA97ZTqrMf5wgou2c0g">http://repo.osp.example.com/pub/L104353-tower.pem</a></span></p><p class="c16"><span class="c6">chmod -v 600 L104353-tower.pem</span></p><p class="c16"><span class="c6">mv L104353-tower.pem ~/.ssh</span></p><p class="c16"><span class="c24 c10">ssh-add ~/.ssh/</span><span class="c24 c10">L104353</span><span class="c6">-tower.pem</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c10 c32">NOTE</span><span class="c32">: Although </span><span class="c21 c32">root</span><span class="c32"> access is not required to run any of the commands below in Red Hat OpenStack Platform, </span><span class="c21 c32">user1</span><span class="c32"> does have </span><span class="c21 c32">sudo</span><span class="c25 c34 c32"> access in case you would like to view logs or config files. However, please DO NOT make any changes to the environment or the lab may not work properly.</span></p><a id="t.0c30dd6b0fcd5e6a140397a98f4b39cc6f7ccc09"></a><a id="t.4"></a><table class="c19"><tbody><tr class="c11"><td class="c66" colspan="1" rowspan="1"><p class="c16"><span class="c23">kiosk$ </span></p></td><td class="c56" colspan="1" rowspan="1"><p class="c16"><span class="c6">ssh [email protected]</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>To connect via the Horizon UI browse to </span><span class="c7 c10"><a class="c13" href="https://www.google.com/url?q=http://rhosp.admin.example.com&sa=D&ust=1493871684430000&usg=AFQjCNHPkKwCDfnKz-1vRWB6wTZhaciwuA">http://rhosp.admin.example.com</a></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Username: </span><span class="c9">user1</span></p><p class="c12"><span>Password: </span><span class="c9">summit2017</span></p><h3 class="c30" id="h.6wolmwnwe56i"><span class="c42 c34">View Servers and Volumes</span></h3><p class="c12"><span>C</span><span class="c0">onnect to the running OpenStack environment and view servers and volumes:</span></p><ol class="c14 lst-kix_rib4varkqord-0 start" start="1"><li class="c12 c36"><span class="c0">From the UI</span></li></ol><ol class="c14 lst-kix_rib4varkqord-1 start" start="1"><li class="c12 c20"><span>In a local we</span><span>b browser open </span><span class="c7 c10"><a class="c13" href="https://www.google.com/url?q=http://rhosp.admin.example.com&sa=D&ust=1493871684435000&usg=AFQjCNGTdhiEOHn6M-kJk_CDo4I6J9f2pQ">http://rhosp.admin.example.com</a></span></li><li class="c12 c20"><span>Click on </span><span class="c10">Compute -> Instances</span><span class="c0"> to view server status</span></li><li class="c12 c20"><span>Click on </span><span class="c10">Compute -> Volumes</span><span class="c0"> to view block storage status</span></li></ol><ol class="c14 lst-kix_rib4varkqord-0" start="2"><li class="c12 c36"><span class="c0">From the CLI</span></li></ol><ol class="c14 lst-kix_rib4varkqord-1 start" start="1"><li class="c12 c20"><span>SSH with user </span><span class="c10">user1 </span><span>and </span><span>password </span><span class="c9">summit2017</span></li><li class="c12 c20"><span class="c0">View server and volume status:</span></li></ol><a id="t.18c12b3a3ce304baf92374acc600cb4c367811da"></a><a id="t.5"></a><table class="c97"><tbody><tr class="c55"><td class="c57" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">kiosk$</span></p><p class="c8"><span class="c25 c23"></span></p></td><td class="c71" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">ssh user1</span><span class="c24 c10">@rhosp.admin.example.com</span></p></td></tr><tr class="c11"><td class="c57" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">rhosp$</span></p></td><td class="c71" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">openstack server list</span><span class="c23"> </span><span class="c24 c10">&&</span><span class="c23"> </span><span class="c6">openstack volume list </span></p></td></tr></tbody></table><h3 class="c30" id="h.pimpxmip3tg3"><span class="c42 c34">Further Environment Exploration</span></h3><p class="c12"><span>List the servers that have been started. Since we kicked off the Tower job, you should see the OpenShift servers in various states of ACTIVE or BUILDING. Use </span><span class="c10">--format</span><span> and </span><span class="c10">--column</span><span class="c0"> to trim the output for easier viewing: </span></p><p class="c5"><span class="c0"></span></p><a id="t.3f094613677c00f4679ca13ff084a03afb74b2eb"></a><a id="t.6"></a><table class="c19"><tbody><tr class="c55"><td class="c50" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">rhosp$</span></p></td><td class="c92" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">openstack server list --format value --column Name --column Status</span></p></td></tr><tr class="c73"><td class="c22" colspan="2" rowspan="1"><p class="c16"><span class="c25 c23">node1.osp.example.com BUILD</span></p><p class="c16"><span class="c25 c23">infra.osp.example.com ACTIVE</span></p><p class="c16"><span class="c25 c23">master.osp.example.com ACTIVE</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Since the Red Hat OpenShift environment makes use of persistent storage for the integrated router along with applications, Red Hat OpenStack provides Cinder volumes which the environment will make use of.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>List the Cinder volumes by executing the following </span><span>command</span><span class="c0">:</span></p><p class="c5"><span class="c0"></span></p><a id="t.aaf8b28100ca812bd58bb0454ea44c5a151582ea"></a><a id="t.7"></a><table class="c19"><tbody><tr class="c11"><td class="c3" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">rhosp$</span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">openstack volume list --format value --column ID --column "Attached to"</span></p></td></tr><tr class="c73"><td class="c22" colspan="2" rowspan="1"><p class="c16"><span class="c25 c23">eb8a3ad8-d059-47e5-9c84-cda926470b45 Attached to node1.osp.example.com on /dev/sda</span></p><p class="c16"><span class="c25 c23">1b79b1c9-055d-41c1-84c4-17229841ffe1 Attached to infra.osp.example.com on /dev/sda</span></p><p class="c16"><span class="c25 c23">903d7dc0-2b9b-423f-8f5f-95797fdfbec6 Attached to master.osp.example.com on /dev/sda</span></p></td></tr></tbody></table><p class="c5"><span class="c25 c34 c32"></span></p><p class="c12"><span class="c25 c34 c32">If you list out the logical volumes (lvs), you will see the IDs of the volumes match the lvs:</span></p><p class="c5"><span class="c25 c34 c32"></span></p><a id="t.0df175c5f79736c9908b3464fed8fb0cf82676ca"></a><a id="t.8"></a><table class="c19"><tbody><tr class="c11"><td class="c17" colspan="1" rowspan="1"><p class="c16"><span class="c23">rhosp$</span></p></td><td class="c67" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">sudo lvs</span></p></td></tr><tr class="c73"><td class="c22" colspan="2" rowspan="1"><p class="c16"><span class="c24 c10"> </span><span class="c25 c23"> LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert</span></p><p class="c16"><span class="c25 c23"> volume-1b79b1c9-055d-41c1-84c4-17229841ffe1 cinder-volumes -wi-ao---- 10.00g </span></p><p class="c16"><span class="c25 c23"> volume-903d7dc0-2b9b-423f-8f5f-95797fdfbec6 cinder-volumes -wi-ao---- 10.00g </span></p><p class="c16"><span class="c23"> volume-eb8a3ad8-d059-47e5-9c84-cda926470b45 cinder-volumes -wi-ao---- 10.00g</span><span class="c24 c10"> </span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Next, each of the running instances are built from Red Hat Enterprise Linux 7.3. To list the images available for consumption within OpenStack, execute the following command:</span></p><p class="c5"><span class="c0"></span></p><a id="t.463e62d92dc7fd65848e4efa5521cfc87c8d0d7a"></a><a id="t.9"></a><table class="c19"><tbody><tr class="c11"><td class="c66" colspan="1" rowspan="1"><p class="c16"><span class="c23">rhosp$</span><span class="c6"> </span></p><p class="c8"><span class="c25 c23"></span></p></td><td class="c56" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">openstack image list --format value --column Name --column ID</span></p></td></tr><tr class="c73"><td class="c22" colspan="2" rowspan="1"><p class="c16"><span class="c25 c23">e5a369ea-f915-4a59-81e4-1015a7c13f6f openshift-base</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>Feel free to </span><span>view</span><span> the details of the openshift-base image</span><span> which is used to instantiate the openshift servers by the Ansible Tower playbooks.</span></p><a id="t.640f95afcba136eeaf7394f371fc13ee92c836bd"></a><a id="t.10"></a><table class="c19"><tbody><tr class="c11"><td class="c50" colspan="1" rowspan="1"><p class="c16"><span class="c23">rhosp$</span><span class="c6"> </span></p></td><td class="c92" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">openstack image show openshift-base</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>Finally, list the networks and subnets that have been configured in the OpenStack environment if curious.</span></p><a id="t.f34cc1f90e4e1c6eadf945581598233ecc1ef037"></a><a id="t.11"></a><table class="c19"><tbody><tr class="c11"><td class="c66" colspan="1" rowspan="1"><p class="c16"><span class="c23">rhosp$</span></p></td><td class="c56" colspan="1" rowspan="1"><p class="c16"><span class="c10 c24">openstack network list && openstack subnet list</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>The network is configured as a flat network to use the libvirt network for routi</span><span>ng and D</span><span>NS, so no floating IPs will be used. All server instances will use static IPs based on pre-configured network ports. You can view this with:</span></p><a id="t.a9386e496e488b7fde9bd86c368259d8c258c54b"></a><a id="t.12"></a><table class="c19"><tbody><tr class="c11"><td class="c76" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">rhosp$</span></p></td><td class="c80" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">openstack port list --format value --column "Fixed IP Addresses" -c Name</span></p></td></tr><tr class="c73"><td class="c22" colspan="2" rowspan="1"><p class="c16"><span class="c25 c23">openshift-master ip_address='172.20.17.5', subnet_id='28792deb-8e5f-459e-aa28-aec1d50838ef'</span></p><p class="c16"><span class="c25 c23">openshift-infra ip_address='172.20.17.6', subnet_id='28792deb-8e5f-459e-aa28-aec1d50838ef'</span></p><p class="c16"><span class="c25 c23">openshift-node1 ip_address='172.20.17.51', subnet_id='28792deb-8e5f-459e-aa28-aec1d50838ef'</span></p><p class="c16"><span class="c25 c23">openshift-node3 ip_address='172.20.17.53', subnet_id='28792deb-8e5f-459e-aa28-aec1d50838ef'</span></p><p class="c16"><span class="c25 c23">openshift-node2 ip_address='172.20.17.52', subnet_id='28792deb-8e5f-459e-aa28-aec1d50838ef'</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Additional commands are available to investigate each one of the prior areas in greater detail. You are free to explore these areas later if time allots but be extremely careful not to change anything in this environment.</span></p><h2 class="c29" id="h.hsxta5j23k2o"><span>Exploring Ansible </span><span>Tower</span><span> </span></h2><p class="c12"><span class="c0">Since the installation of OpenShift can take anywhere from 20 - 30 mins, let us take this opportunity to explore the features and configurations of Ansible Tower in the lab environment. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Ansible is an agentless automation engine that automates cloud provisioning, configuration management, application deployment, intra-service orchestration, along with many other IT needs. Ansible is used to provision, install and deploy the OpenShift Container Platform to a cluster of instances. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Ansible Tower provides the central management of Ansible workloads to enable complex workflows to manage environments big and small. The entire installation and management of the OpenShift Container Platform can be managed from a centralized Ansible Tower environment. </span></p><h3 class="c30" id="h.5ndqn8gpyk0t"><span>Accessing Ansible </span><span>Tower</span></h3><p class="c5"><span class="c0"></span></p><p class="c12"><span>As you saw previously, Ansible Tower has been provisioned as a standalone machine within the lab environment. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>From the student machine, open a web browser and navigate to </span><span class="c7 c10"><a class="c13" href="https://www.google.com/url?q=https://tower.admin.example.com&sa=D&ust=1493871684487000&usg=AFQjCNE5iF4i8BZ3eHQzzlmgXvqoPdVUjA">https://tower.admin.example.</a></span><span class="c7 c10"><a class="c13" href="https://www.google.com/url?q=https://tower.admin.example.com&sa=D&ust=1493871684487000&usg=AFQjCNE5iF4i8BZ3eHQzzlmgXvqoPdVUjA">com</a></span><span>.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Login with the following credentials:</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Username </span><span class="c10">admin</span></p><p class="c12"><span>Password </span><span class="c10">summit2017</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">If successful, will then be placed at the Ansible Tower overview page:</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 366.67px;"><img alt="tower-overview.png" src="images/image7.png" style="width: 624.00px; height: 366.67px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><h3 class="c30" id="h.ysjsdwftshqb"><span class="c42 c34">Job Templates</span></h3><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">First, let’s review the job template that we just executed to provision the OpenShift Container Platform. This workflow template consists of three chained job templates:</span></p><ul class="c14 lst-kix_jiowd2t8g8cu-0 start"><li class="c12 c36"><span class="c0">OpenShift Pre-Install - Prepares the OpenStack environment by provisioning three instances</span></li><li class="c12 c36"><span class="c0">OpenShift Install - Installs the OpenShift Container Platform</span></li><li class="c12 c36"><span class="c0">OpenShift Post-Install - Customizes the OpenShift cluster for the lab</span></li></ul><h3 class="c30" id="h.i174eongpjz1"><span class="c34 c42">Projects</span></h3><p class="c5"><span class="c0"></span></p><p class="c12"><span>The Job Templates utilize Projects, or collections of Ansible playbooks, that in this lab are sourced from a Git repository. To view the projects that are being utilized, select the </span><span class="c10">Projects</span><span class="c0"> link on the menu bar. Two projects are being leveraged:</span></p><ul class="c14 lst-kix_hxumcxpys9ag-0 start"><li class="c12 c36"><span class="c0">openshift-ansible - Installs and configures the OpenShift Container Platform</span></li><li class="c12 c36"><span class="c0">summit-2017-ocp-operator - Customized Ansible tooling to prepare lab exercises</span></li></ul><p class="c12"><span>The configuration of each project can be viewed by selecting the pencil (edit) button under the </span><span class="c21">Actions</span><span class="c0"> column. </span></p><h3 class="c30" id="h.w1c3s1m21je3"><span class="c42 c34">Inventory</span></h3><p class="c5"><span class="c0"></span></p><p class="c12"><span>An </span><span class="c7"><a class="c13" href="https://www.google.com/url?q=http://docs.ansible.com/ansible-tower/latest/html/userguide/inventories.html&sa=D&ust=1493871684503000&usg=AFQjCNHtE7_E_AZr2TMJeE3SN5ijMlfLoQ">Inventory</a></span><span> within Ansible Tower is similar to a standalone inventory file and contains a collection of host in which jobs may be launched. The inventories defined within Tower can be accessed by clicking on the </span><span class="c10">Inventories</span><span> link on the menu bar. The </span><span class="c21">OpenShift</span><span> inventory defines the hosts organized within groups to install and configure the environment. Each group along with the host and variables that have been defined can be accessed by selecting the pencil icon under the </span><span class="c21">Actions</span><span class="c0"> column next to each group.</span></p><h3 class="c30" id="h.7pv3hz2crr2y"><span class="c42 c34">Credentials</span></h3><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c7"><a class="c13" href="https://www.google.com/url?q=http://docs.ansible.com/ansible-tower/latest/html/userguide/credentials.html&sa=D&ust=1493871684506000&usg=AFQjCNFajOOQzPIjVyEQqETQmlcB-y9Zgg">Credentials</a></span><span> are a mechanism for authenticating against secure resources including target machines, inventory sources and projects leveraging version control systems. Every one of the previously explored areas makes use of a credential. Credentials are configured within the Ansible Tower settings and can be accessed by selecting the </span><span class="c10">Settings icon</span><span> (gear) on the menu bar. Once within the settings page, select the </span><span class="c10">Credentials</span><span class="c0"> link. The following credentials have been defined:</span></p><ul class="c14 lst-kix_uwmceys56l4r-0 start"><li class="c12 c36"><span class="c0">gitlab-creds - Access lab resources from source control </span></li><li class="c12 c36"><span class="c0">osp-guest-creds - Execute actions against OpenStack instances</span></li><li class="c12 c36"><span>osp-user-creds - Allows for communication with the </span><span class="c7"><a class="c13" href="https://www.google.com/url?q=http://docs.ansible.com/ansible-tower/latest/html/userguide/credentials.html%23openstack&sa=D&ust=1493871684509000&usg=AFQjCNF0fBBuJcdA7P6BzUUAdIgzZsN2MA">OpenStack</a></span><span class="c0"> platform</span></li></ul><h2 class="c29" id="h.a6jq1rrp3qhr"><span class="c25 c34 c39">Monitor the Progress of the OpenShift Installation</span></h2><p class="c12"><span>While browsing through the features of Ansible Tower, keep an eye out on the progress of the job template executing the OpenShift installation. OpenShift will be successfully installed when the status of the job template reports as </span><span class="c10">Successful</span><span> and the play recap reports no errors and appears similar to the </span><span>following</span><span class="c0">:</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 340.00px;"><img alt="tower-ocp-success-2.png" src="images/image14.png" style="width: 624.00px; height: 340.00px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Click the </span><span class="c10">Details</span><span class="c0"> link on each rectangle to see the details of each playbook. The overall workflow job is complete when all 3 playbooks are completed successfully.</span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 118.67px;"><img alt="" src="images/image17.png" style="width: 624.00px; height: 118.67px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c0"></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">This lab is concluded when the Ansible Tower job is completed successfully.</span></p><p class="c5"><span class="c0"></span></p><p class="c5"><span class="c0"></span></p><h1 class="c33" id="h.cpjd9w25w6dt"><span class="c9"></span></h1><hr style="page-break-before:always;display:none;"><h1 class="c33" id="h.p6s2lgcgxcv2"><span class="c9"></span></h1><h1 class="c45" id="h.oidtccdro9w1"><span>Lab 3 - Verifying Installation of </span><span>Red</span><span class="c25 c28"> Hat OpenShift Container Platform Using Ansible Tower</span></h1><p class="c12"><span class="c0">In this lab, we will review the install of the OpenShift Container Platform using Ansible Tower that we started at the beginning of this session.</span></p><h2 class="c29" id="h.ekai40lqch4m"><span>Reviewing </span><span>Install of </span><span>OpenShift</span></h2><p class="c5"><span class="c0"></span></p><p class="c12"><span>The OpenShift Container Platform is installed through a collection of ansible resources. This automation toolset allows platform administrations the ability to quickly provision an environment with minimal effort. Ansible Tower has been configured with a </span><span class="c7"><a class="c13" href="https://www.google.com/url?q=http://docs.ansible.com/ansible-tower/latest/html/userguide/job_templates.html&sa=D&ust=1493871684520000&usg=AFQjCNHN_q_eN-6E4lgWHCyqio02A0kCHw">Job Template</a></span><span class="c0"> that makes use of these assets to install OpenShift on instances available in the OpenStack environment.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>To view the list of Job Templates configured in Ansible Tower, select </span><span class="c10">Templates</span><span class="c0"> on the menu bar at the top of the screen.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>All of the job templates configured in Ansible Tower are listed below. Earlier you launched the job template called</span><span class="c10"> 0-Provision and Install OpenShift</span><span>. This is a </span><span class="c7"><a class="c13" href="https://www.google.com/url?q=https://docs.ansible.com/ansible-tower/latest/html/userguide/workflows.html&sa=D&ust=1493871684523000&usg=AFQjCNGy6zbCKW7pa8nGGe3KkBaOqdyiiQ">workflow job</a></span><span> type and will execute multiple chained job templates to provision OpenShift. Review the workflow jobs and playbooks that were run in the </span><span class="c10">Jobs</span><span> page.</span><span> </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 377.33px;"><img alt="tower-job-templates.png" src="images/image6.png" style="width: 624.00px; height: 377.33px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>When you</span><span> execute the job template, you will be transferred to the jobs page where you will be able to track the progress and status of the installation. </span><span>For more information on the Ansible playbooks see </span><span class="c7"><a class="c13" href="https://www.google.com/url?q=https://github.com/openshift/openshift-ansible&sa=D&ust=1493871684526000&usg=AFQjCNEX5fwBpHJpdhGGtDCfKTEJgAPFfA">https://github.com/openshift/openshift-ansible</a></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 254.67px;"><img alt="" src="images/image15.png" style="width: 624.00px; height: 254.67px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><h2 class="c29" id="h.fbcfru1tdtyn"><span>Validate the OpenShift </span><span>Installation</span></h2><p class="c12"><span class="c0">With the OpenShift Container Platform installation complete, let’s perform a few tests to validate the status of the environment. There are two primary methods for accessing OpenShift: the web console and the Command Line tool (CLI).</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>From the student machine, open a web </span><span>browser</span><span class="c0"> and navigate to the following address:</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c7"><a class="c13" href="https://www.google.com/url?q=https://master.osp.example.com:8443&sa=D&ust=1493871684531000&usg=AFQjCNHY8P6oChwpntno2fabC2CACUnM1A">https://master.osp.example.com:8443</a></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">If successful, you should see the following page representing the OpenShift landing page:</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 376.00px;"><img alt="ocp-login.png" src="images/image1.png" style="width: 624.00px; height: 376.00px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Use the following credentials to access the web console:</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Username: </span><span class="c9">user1</span></p><p class="c12"><span>Password: </span><span class="c9">summit2017</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">The OpenShift web console provides an interactive way to interact with the OpenShift platform. After successfully authenticating, you are presented with an overview page containing all of the projects that you have access to. Since you are a normal user, you do not have access to any projects. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">In subsequent labs, we will explore the OpenShift web console in further detail.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">However, we will still use this opportunity to showcase the different items exposed within the web console. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Now that we have had an opportunity to login to the OpenShift web console from a developer's standpoint, let’s shift over to an administrative and operations point of view and access the cluster directly using the terminal. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Since the instances deployed within the OpenStack environment are utilizing cloud-init, login to the OpenShift Master instance as </span><span class="c21">cloud-user</span><span>:</span></p><a id="t.774ad3d13412493d635582c4247416e223ff2ef4"></a><a id="t.13"></a><table class="c19"><tbody><tr class="c11"><td class="c95" colspan="1" rowspan="1"><p class="c16"><span class="c23">kiosk$ </span></p></td><td class="c48" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">ssh </span><span class="c24 c10">-i ~/.ssh/L104353-tower.pem</span><span class="c24 c10"> [email protected]</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>Access to the cluster is available using the </span><span class="c21">system:admin</span><span> user which has the </span><span class="c21">cluster-admin</span><span> role. This can be confirmed by executing the following command which should confirm the currently logged in user is </span><span class="c21">system:admin</span></p><a id="t.c1760756539ca471a8cb1b544408fb1d26defd2f"></a><a id="t.14"></a><table class="c19"><tbody><tr class="c11"><td class="c57" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$</span></p></td><td class="c27" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc whoami</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>As one would expect, users with the </span><span class="c21">cluster-admin</span><span> role have elevated permissions in comparison to normal users, such as </span><span class="c21">user1</span><span class="c0"> which was utilized when browsing the web console. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Cluster administrators can view all of the nodes that have constitute the cluster:</span></p><a id="t.ee1becb81a412def9aee24b25d0bd57581670dcb"></a><a id="t.15"></a><table class="c19"><tbody><tr class="c11"><td class="c3" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$</span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc get nodes</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>View all of the Projects that have been created by users or to support the platform:</span></p><a id="t.61a1b307e355a2ce2f24ff2b63a24e2f59c776df"></a><a id="t.16"></a><table class="c19"><tbody><tr class="c11"><td class="c57" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c27" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc get projects</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>Along with listing all of the Persistent Volumes that have been defined:</span></p><a id="t.f847018d2870508c8cd1b9e6776d4149836d31dc"></a><a id="t.17"></a><table class="c19"><tbody><tr class="c11"><td class="c43" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c18" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc get pv</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>Now check out the OpenShift on OpenStack cloud provider integration.</span></p><a id="t.cb5b064ef4fceb5c7219a4f8a169f98c10546adc"></a><a id="t.18"></a><table class="c19"><tbody><tr class="c11"><td class="c3" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">master$ </span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">cat /etc/origin/cloudprovider/openstack.conf</span></p></td></tr><tr class="c73"><td class="c22" colspan="2" rowspan="1"><p class="c16"><span class="c25 c23">[Global]</span></p><p class="c16"><span class="c25 c23">auth-url = http://rhosp.admin.example.com:5000/v2.0/</span></p><p class="c16"><span class="c25 c23">username = admin</span></p><p class="c16"><span class="c25 c23">password = summit2017</span></p><p class="c16"><span class="c25 c23">tenant-name = L104353</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">The cloud provider integration file tells OpenShift how to interact with OpenStack. You can see that it’s doing so via the OpenStack API which requires an auth-url, credentials, and a tenant name. This integration between OpenShift and OpenStack enable capabilities like dynamic storage provisioning for applications. Cloud Provider configurations are specific to each provider, for example, you also have cloud provider configurations for AWS, Azure, VMware, etc…</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Let’s check out the storage class as well, continuing on the integration story.</span></p><a id="t.f82bafd87d0f16719ec4bb748b6649b37c360167"></a><a id="t.19"></a><table class="c19"><tbody><tr class="c11"><td class="c3" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p><p class="c8"><span class="c6"></span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc get storageclass</span></p></td></tr><tr class="c11"><td class="c3" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">master$</span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc describe storageclass ocp</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>Notice that the provisioner is the cinder provisioner and the is-default-class is set to </span><span class="c10">'true'</span><span class="c0">.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>You can use the OpenShift Command line tool as a user with cluster administrator role to access the entire set of configurations for the </span><span>platform</span><span class="c0">. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c10">Note</span><span>: With great power comes great responsibility. Executing commands as a user with cluster administrator rights has the potential to negatively impact the overall health of the environment. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c10">IMPORTANT</span><span>: </span><span>If you need to teardown the OpenShift Environment and start over, execute the </span><span class="c10">OpenShift Teardown</span><span> job template.</span><span> However, please raise your hand and inform one of the lab instructors. </span><span class="c21">If you do this too late into the lab you may not have enough time to finish</span><span>. See this table for a reference of typical times for the Tower jobs: </span><span class="c7"><a class="c13" href="#h.z0rklt43v0hk">Appendix D - Average Tower Job Times</a></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>This concludes lab 3</span></p><p class="c5"><span class="c0"></span></p><h1 class="c33" id="h.e00sjv1qf7e8"><span class="c25 c28"></span></h1><hr style="page-break-before:always;display:none;"><h1 class="c33" id="h.35joggnbf08g"><span class="c25 c28"></span></h1><h1 class="c45" id="h.aibm7nbsxpm0"><span class="c25 c28">Lab 4 - Installing Red Hat CloudForms</span></h1><p class="c12"><span class="c0">Red Hat CloudForms Management Engine (CFME) delivers the insight, control, and automation necessary to address the challenges of managing complex environments. CloudForms is available as a standalone appliance, but is also available as a containerized solution that can be deployed on the OpenShift Container Platform. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">In this lab, you will deploy a single instance/replica of Red Hat CloudForms to the OpenShift Container Platform cluster and configure the container provider to monitor the OpenShift environment.</span></p><h2 class="c29" id="h.ftcgczu59rr9"><span>Deploy Red Hat CloudForms</span><span class="c25 c34 c39"> </span></h2><p class="c12"><span class="c10">NOTE</span><span>: If you are repeating this lab due to an issue encountered, consider using </span><span class="c7"><a class="c13" href="#h.zhaiz2m1v3mc">Appendix B - Script For Deploying CloudForms</a></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Since Red Hat CloudForms is available as a container, it can be deployed to the OpenShift Container Platform in a few short steps. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">A user with cluster-admin permissions must be used to configure the environment as CloudForms requires access to privileged resources</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>First, using the OpenShift Command Line, create a new projec</span><span>t called </span><span class="c10">cloudform</span><span class="c10">s</span></p><a id="t.530202e6ce4c6edf6f4750c6695c7be94372e824"></a><a id="t.20"></a><table class="c19"><tbody><tr class="c11"><td class="c43" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$</span></p></td><td class="c18" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc new-project cloudforms</span></p></td></tr></tbody></table><p class="c5"><span class="c25 c34 c32"></span></p><p class="c12"><span>By creating a new project, the context of the CLI is automatically switched into the </span><span class="c21">cloudforms</span><span> project</span><span class="c0">:</span></p><a id="t.997a0a9aa901cbbb7dd50a843243b5f8926cb7df"></a><a id="t.21"></a><table class="c19"><tbody><tr class="c11"><td class="c43" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$</span></p></td><td class="c18" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc config current-context for context</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>When creating a new project, a set of service accounts are automatically provisioned. These accounts are used when building, deploying and running containers. The </span><span class="c21">default</span><span> service account is the de facto service account used by pods. Since CloudForms is deployed within a pod and requires access to key metrics in the OpenShift environment along with the host, it must be granted elevated access as a privileged </span><span>resource</span><span>. In OpenShift, permissions associated to pods are managed by </span><span class="c7"><a class="c13" href="https://www.google.com/url?q=https://docs.openshift.com/container-platform/3.4/admin_guide/manage_scc.html&sa=D&ust=1493871684602000&usg=AFQjCNEU0mNz8HcySprn7PZBnuWAZoU_TQ">Security Context Constraints</a></span><span class="c0"> and the service account that is used to run them. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Execute the following command to add the default service account in the cloudforms project to the privileged SCC:</span></p><a id="t.1a6f80ac485e0dfb5dde31ae452b87af959bb7a9"></a><a id="t.22"></a><table class="c19"><tbody><tr class="c11"><td class="c96" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c78" colspan="1" rowspan="1"><p class="c16"><span class="c6">oc adm policy add-scc-to-user privileged \</span></p><p class="c16"><span class="c24 c10"> system:serviceaccount:cloudforms:default</span></p></td></tr></tbody></table><p class="c5"><span class="c25 c34 c32"></span></p><p class="c12"><span>Confirm the user is associated to the privileged SCC:</span></p><a id="t.a9565902b0d9ec21b374dc339108d73f752655af"></a><a id="t.23"></a><table class="c19"><tbody><tr class="c11"><td class="c40" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$</span></p></td><td class="c82" colspan="1" rowspan="1"><p class="c16"><span class="c23"> </span><span class="c24 c10">oc get scc privileged -o yaml</span></p></td></tr></tbody></table><p class="c5"><span class="c25 c34 c32"></span></p><p class="c12"><span>Confirm </span><span class="c21">system:serviceaccount:cloudforms:default</span><span class="c0"> is in the result returned</span></p><p class="c5"><span class="c25 c34 c32"></span></p><p class="c12"><span>CloudForms retrieves metrics from applications deployed within OpenShift, and its leverages the data exposed by the onboard metrics infrastructure (Hawkular). Since the platform metrics are deployed in the </span><span class="c21">openshift-infra</span><span> project and CloudForms is deployed in the </span><span class="c21">cloudforms</span><span> project, they cannot communicate with each other due to use of the </span><span class="c7"><a class="c13" href="https://www.google.com/url?q=https://docs.openshift.com/container-platform/3.4/architecture/additional_concepts/sdn.html&sa=D&ust=1493871684611000&usg=AFQjCNEWD9yWKkntJgTWH1v0c0y9pPQD7w">multitenant SDN plugin</a></span><span class="c0"> which isolates each project at a network level.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Fortunately, as a cluster administrator, you can manage the configuration of the pod overlay network to allow traffic to traverse between specific projects or be exposed to all projects. Execute the following command to join the </span><span class="c21">cloudforms</span><span> project to the </span><span class="c21">openshift-infra</span><span> </span><span>project</span><span class="c0"> </span></p><a id="t.832d15019e9f641a317a267f8bc819e48b90b0e4"></a><a id="t.24"></a><table class="c19"><tbody><tr class="c11"><td class="c3" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$</span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc adm pod-network join-projects cloudforms --to=openshift-infra</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Verify the NETID is the same for these projects</span></p><a id="t.d7ab8e19076c982468e48bbaebac23e18824cf3f"></a><a id="t.25"></a><table class="c19"><tbody><tr class="c11"><td class="c43" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c18" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc get netnamespace | egrep 'cloudforms|openshift-infra'</span></p></td></tr></tbody></table><h2 class="c29" id="h.3umuvklu3kau"><span class="c25 c34 c39">Instantiate CloudForms Templates</span></h2><p class="c12"><span>T</span><span>he components representing the containerized deployment of Red Hat CloudForms is available as a template and located on the repository server. Execute the following command to download the file to the openshift master VM and explore it:</span></p><a id="t.e189d649303affdd94744f883be4b4a4430c4002"></a><a id="t.26"></a><table class="c19"><tbody><tr class="c11"><td class="c57" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p><p class="c8"><span class="c6"></span></p></td><td class="c27" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">curl -o cfme.yaml </span><span class="c24 c7 c10"><a class="c13" href="https://www.google.com/url?q=http://repo.osp.example.com/ocp/templates/cfme-template.yaml&sa=D&ust=1493871684621000&usg=AFQjCNFAus491pz8Fmjz1jM8Z1Cd4Qdd7A">http://repo.osp.example.com/ocp/templates/cfme-template.yaml</a></span></p></td></tr><tr class="c11"><td class="c57" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">master$</span></p></td><td class="c27" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">cat cfme-template.yaml</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Notice how the services are set up, how variables are passed along, which containers are used, etc... This is how we are defining how CloudForms is being configured.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Add the template to the OpenShift </span><span class="c21">cloudforms</span><span> </span><span>project</span></p><a id="t.895aa382b4d149f781ba7dd4c39d335cb9fd68db"></a><a id="t.27"></a><table class="c19"><tbody><tr class="c11"><td class="c52" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c37" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc create -n cloudforms -f cfme-template.yaml</span></p></td></tr></tbody></table><p class="c12"><span class="c10 c32">NOTE</span><span class="c32">: The </span><span class="c21 c32">-n cloudforms</span><span class="c32"> parameters specifies the namespace explicitly. You can omit this if you are sure you are in the </span><span class="c21 c32">cloudforms</span><span class="c32"> project. Use </span><span class="c10 c32">oc project -q</span><span class="c32"> to verify.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Verify the template is available in the OpenShift environment</span></p><a id="t.87b4b685e2e490dd3115ee13dad203de201f2745"></a><a id="t.28"></a><table class="c19"><tbody><tr class="c11"><td class="c57" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">master$ </span></p></td><td class="c27" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc get -n cloudforms template cloudforms</span></p></td></tr><tr class="c73"><td class="c22" colspan="2" rowspan="1"><p class="c16"><span class="c25 c23">NAME DESCRIPTION PARAMETERS OBJECTS</span></p><p class="c16"><span class="c25 c23">cloudforms CloudForms appliance with persistent storage 23 (1 blank) 12</span></p></td></tr></tbody></table><p class="c5"><span class="c25 c34 c32"></span></p><p class="c12"><span>The persistent storage required by CloudForms will be dynamically provisioned by the </span><span class="c7"><a class="c13" href="https://www.google.com/url?q=https://docs.openshift.com/container-platform/3.4/install_config/configuring_openstack.html%23install-config-configuring-openstack&sa=D&ust=1493871684633000&usg=AFQjCNHnEve6pwI1BBeLj1YBoXTBZNDRPQ">OpenStack cloud provider</a></span><span class="c0">.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Instantiate the template </span><span class="c0">to deploy Red Hat CloudForms. Since no parameters were specified, the default values as defined in the template will be utilized.</span></p><p class="c5"><span class="c0"></span></p><a id="t.35ef6ce09a5aaac9466cdffc823836d4da05903b"></a><a id="t.29"></a><table class="c19"><tbody><tr class="c11"><td class="c52" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c37" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc new-app -n cloudforms --template=cloudforms</span></p></td></tr></tbody></table><p class="c5"><span class="c25 c34 c32"></span></p><p class="c12"><span>Red Hat CloudForms will now be deployed into the </span><span class="c21">cloudforms</span><span class="c0"> project</span></p><h2 class="c29" id="h.2yb69e1wrzw"><span class="c25 c34 c39">Validating a Successful Deployment</span></h2><p class="c12"><span class="c0">There are several steps that can be taken in order to verify the deployment of Red Hat CloudForms in OpenShift.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>First validate that all pods are successfully running by watching the status of the pods. When all pods are running and the </span><span class="c21">-deploy</span><span class="c0"> pods are terminated, stop the command with CTRL+C. The following output is a full deployment which took just over 4 minutes:</span></p><a id="t.52d7257741bde35f362c4fcea2cf9885d21948d1"></a><a id="t.30"></a><table class="c19"><tbody><tr class="c11"><td class="c43" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$</span><span class="c23"> </span></p></td><td class="c18" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc -n cloudforms get pods -w</span></p></td></tr><tr class="c73"><td class="c22" colspan="2" rowspan="1"><p class="c16"><span class="c25 c23">NAME READY STATUS RESTARTS AGE<br>cloudforms-1-deploy 0/1 ContainerCreating 0 0s<br>memcached-1-deploy 0/1 ContainerCreating 0 0s<br>NAME READY STATUS RESTARTS AGE<br>postgresql-1-deploy 0/1 Pending 0 0s<br>postgresql-1-deploy 0/1 Pending 0 0s<br>postgresql-1-deploy 0/1 ContainerCreating 0 0s<br>memcached-1-nih8c 0/1 Pending 0 0s<br>memcached-1-nih8c 0/1 Pending 0 0s<br>memcached-1-nih8c 0/1 ContainerCreating 0 0s<br>memcached-1-deploy 1/1 Running 0 7s<br>cloudforms-1-sc191 0/1 Pending 0 0s<br>cloudforms-1-sc191 0/1 Pending 0 0s<br>cloudforms-1-sc191 0/1 ContainerCreating 0 0s<br>cloudforms-1-deploy 1/1 Running 0 8s<br>postgresql-1-deploy 1/1 Running 0 8s<br>postgresql-1-244w2 0/1 Pending 0 0s<br>postgresql-1-244w2 0/1 Pending 0 0s<br>postgresql-1-244w2 0/1 ContainerCreating 0 1s<br>memcached-1-nih8c 0/1 Running 0 5s<br>memcached-1-nih8c 1/1 Running 0 10s<br>memcached-1-deploy 0/1 Completed 0 19s<br>memcached-1-deploy 0/1 Terminating 0 19s<br>memcached-1-deploy 0/1 Terminating 0 19s<br>cloudforms-1-sc191 0/1 Running 0 15s<br>postgresql-1-244w2 0/1 Running 0 33s<br>postgresql-1-244w2 1/1 Running 0 51s<br>postgresql-1-deploy 0/1 Completed 0 59s<br>postgresql-1-deploy 0/1 Terminating 0 59s<br>postgresql-1-deploy 0/1 Terminating 0 59s<br>cloudforms-1-sc191 1/1 Running 0 4m<br>cloudforms-1-deploy 0/1 Completed 0 4m<br>cloudforms-1-deploy 0/1 Terminating 0 4m<br>cloudforms-1-deploy 0/1 Terminating 0 4m</span></p><p class="c16"><span class="c25 c23">^C</span></p></td></tr></tbody></table><p class="c5"><span class="c25 c34 c32"></span></p><p class="c12"><span>Red Hat CloudForms may take up to 5 minutes to start up for the first time as it builds the content of the initial </span><span>database.</span><span class="c0"> As noted above, the deployment of CloudForms will be complete when the status has changed to “Running” for the containers. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Execute the following command to view the overall status of the pods in the cloudforms project</span></p><a id="t.fb60aaa64de4524b9bb9d912e7b480baeffe5e67"></a><a id="t.31"></a><table class="c19"><tbody><tr class="c11"><td class="c52" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c37" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc status -n cloudforms</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>For full details of the deployed application run</span></p><a id="t.92401d89a89dfe0cd133fa9c0048822a8fcca4ca"></a><a id="t.32"></a><table class="c19"><tbody><tr class="c11"><td class="c52" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c37" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc describe -n cloudforms</span><span class="c24 c10"> pod/cloudforms-<pod_name></span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>Next, in order to validate the cloudforms pod is running with the proper </span><span class="c21">privileged</span><span> SCC, export the contents and inspect the </span><span class="c21">openshift.io/scc</span><span> annotation to confirm the </span><span class="c21">privileged</span><span> value is present</span></p><a id="t.51bef2ba325ad4207856ab4ba2d2b6129c62fcb3"></a><a id="t.33"></a><table class="c19"><tbody><tr class="c11"><td class="c40" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">master$</span></p></td><td class="c82" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc -n cloudforms get -o yaml pod cloudforms-<pod_name></span></p></td></tr><tr class="c73"><td class="c22" colspan="2" rowspan="1"><p class="c16"><span class="c25 c23">...</span></p><p class="c16"><span class="c25 c23">metadata:</span></p><p class="c16"><span class="c25 c23"> annotations:</span></p><p class="c16"><span class="c25 c23"> openshift.io/scc: privileged</span></p><p class="c16"><span class="c25 c23">...</span></p></td></tr></tbody></table><p class="c5"><span class="c25 c34 c32"></span></p><p class="c12"><span class="c0">For more details check events:</span></p><a id="t.ff4c505407cb97723bb10cda18624f5ace110ba7"></a><a id="t.34"></a><table class="c19"><tbody><tr class="c11"><td class="c57" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">master$ </span></p></td><td class="c27" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc -n cloudforms get events</span></p></td></tr></tbody></table><p class="c5"><span class="c25 c34 c32"></span></p><p class="c12"><span>You can also check volumes:</span></p><a id="t.05f6c155da9624a8188b2a6278374b6952c61018"></a><a id="t.35"></a><table class="c19"><tbody><tr class="c11"><td class="c57" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">master$ </span></p></td><td class="c27" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc -n cloudforms get pv</span></p></td></tr></tbody></table><p class="c5"><span class="c25 c34 c32"></span></p><p class="c12"><span class="c10">NOTE</span><span>: If the project may have to be removed and start over again. </span><span class="c10">Only perform this task if there was an irrecoverable failure. Let and instructor know before doing this. See </span><span class="c7 c10"><a class="c13" href="#h.fzknnqbefalw">Recovering From CloudForms Failed Deployment</a></span></p><h2 class="c29" id="h.x6hgyesicpp4"><span class="c25 c34 c39">Accessing the CloudForms User Interface</span></h2><p class="c12"><span class="c0">As part of the template instantiation, a route was created that allows for accessing resources from outside the OpenShift cluster. Execute the following command to locate the name of the route that was created for CloudForms</span></p><a id="t.415576aeffa6f4767d447ed801771e16bbd106d5"></a><a id="t.36"></a><table class="c19"><tbody><tr class="c11"><td class="c89" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">master$</span></p></td><td class="c58" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc -n cloudforms get routes</span></p></td></tr><tr class="c73"><td class="c22" colspan="2" rowspan="1"><p class="c16"><span class="c25 c23">NAME HOST/PORT PATH SERVICES PORT TERMINATION</span></p><p class="c16"><span class="c25 c23">cloudforms cloudforms-cloudforms.apps.example.com cloudforms https passthrough</span></p></td></tr></tbody></table><p class="c5"><span class="c25 c34 c32"></span></p><p class="c12"><span class="c0">Open a web browser and navigate securely to the to the hostname retrieved above:</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c7 c21"><a class="c13" href="https://www.google.com/url?q=https://cloudforms-cloudforms.apps.example.com&sa=D&ust=1493871684676000&usg=AFQjCNHkyNt_9qxtUYh-DXtqK5wguUDjVg">https://cloudforms-cloudforms.apps.example.com</a></span></p><p class="c5"><span class="c81 c10 c21 c90"></span></p><p class="c12"><span class="c10">NOTE: </span><span>If you get an error such as </span><span class="c10">Application Not Available</span><span> see </span><span class="c7"><a class="c13" href="#h.myu5p22ditfz">Appendix E - Troubleshooting CloudForms</a></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Since Red Hat CloudForms in the lab environment uses a self signed certificate, add an exception in the browser to add an exception.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Use the following </span><span>credentials to access the consol</span><span class="c0">e:</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Username: </span><span class="c10">admin</span></p><p class="c12"><span>Password: </span><span class="c10">smartvm</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Once successfully authenticated, you should be </span><span>taken</span><span class="c0"> to the overview page</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 381.33px;"><img alt="cfme-overview.png" src="images/image12.png" style="width: 624.00px; height: 381.33px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c0"></span></p><p class="c5"><span class="c0"></span></p><h2 class="c29" id="h.a57d0d72mxoc"><span>Configuring the Container Provider</span></h2><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Red Hat CloudForms gathers metrics from infrastructure components through the use of providers. An OpenShift container provider is available that queries the OpenShift API and platform metrics. As part of the OpenShift installation completed previously, cluster metrics were automatically deployed and configured. CloudForms must be configured to consume from each of these resources.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Configure the container provider: </span></p><ol class="c14 lst-kix_r9mrl3bc9kny-0 start" start="1"><li class="c12 c36"><span>Hover your mouse over the </span><span class="c10">Compute</span><span class="c0"> tab. </span></li><li class="c12 c36"><span class="c0">Once over the compute tab, additional panes will appear. (do not click anything yet)</span></li><li class="c12 c36"><span>Hover over </span><span class="c10">Containers</span><span> and then click on </span><span class="c10">Providers</span><span class="c0">.</span></li><li class="c12 c36"><span>No container providers are configured by default. Add a new container provider by clicking on </span><span class="c10">Configuration</span><span class="c0"> (with a gear icon)</span></li><li class="c12 c36"><span>Lastly select </span><span class="c9">Add Existing Container Provider</span></li></ol><p class="c5"><span class="c0"></span></p><p class="c79"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 434.25px; height: 170.50px;"><img alt="cfme-add-container-provider.png" src="images/image13.png" style="width: 434.25px; height: 170.50px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Start adding a new Container Provider by specifying </span><span class="c10">OCP Summit Lab</span><span> as the name and </span><span class="c10">OpenShift Container Platform</span><span class="c0"> as the type.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>As mentioned previously, there are two endpoints in which CloudForms retrieves metrics from. First, configure the connection details to the OpenShift API. Since CloudForms is deployed within OpenShift, we can leverage the internal service associated with API called </span><span class="c21">kubernetes</span><span> in the default project. Internal service names can be referenced across projects in the form </span><span class="c21"><service_name>.<namespace></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Enter </span><span class="c10">kubernetes.default</span><span> in the </span><span class="c21">hostname</span><span> field and </span><span class="c10">443</span><span> in the </span><span class="c21">port</span><span class="c0"> field.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>The token field refers to the OAuth token used to authenticate CloudForms to the OpenShift API. The management-infra project is a preconfigured project as part of the OpenShift installation. A service account called </span><span class="c21">management-admin</span><span> is available that has access to the requisite resources needed by CloudForms. Each service account has an OAuth token associated with its account. Execute the following command to retrieve the token.</span></p><a id="t.2314860d6077d5d32ecb9d49f7f50f0f944b4cf7"></a><a id="t.37"></a><table class="c19"><tbody><tr class="c11"><td class="c43" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c18" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc serviceaccounts get-token -n management-infra management-admin</span></p></td></tr></tbody></table><p class="c5"><span class="c25 c34 c32"></span></p><p class="c12"><span>Copy the value returned into the token fields. Click the </span><span class="c10">Validate</span><span class="c0"> button to verify the configuration. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 413.33px;"><img alt="" src="images/image19.png" style="width: 624.00px; height: 413.33px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Next, click on the </span><span class="c21">Hawkular</span><span class="c0"> tab to configure CloudForms to communicate with the cluster metrics.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Enter </span><span class="c10">hawkular-metrics.openshift-infra</span><span> in the </span><span class="c21">hostname</span><span> field and </span><span class="c10">443</span><span class="c0"> in the port field.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Click </span><span class="c10">Add</span><span class="c0"> to add the new container provider.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>You have now configured Red Hat CloudForms to retrieve metrics from OpenShift. It may take a few minutes to data to be </span><span>displayed</span><span class="c0">. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">To force an immediate refresh of the newly added Provider:</span></p><ol class="c14 lst-kix_r76arqd16m9k-0 start" start="1"><li class="c12 c36"><span>Select the </span><span class="c10">OCP Summit Lab </span><span class="c0">provider icon</span></li><li class="c12 c36"><span>Notice all of the </span><span class="c10">Relationships</span><span class="c0"> have 0 items</span></li><li class="c12 c36"><span>Now select the </span><span class="c10">Configuration</span><span class="c0"> drop-down again</span></li><li class="c12 c36"><span>Choose </span><span class="c10">Refresh Items and Relationships</span></li><li class="c12 c36"><span>Lastly, click the </span><span class="c10">Refresh</span><span> icon just to the left of </span><span class="c10">Configuration</span></li><li class="c12 c36"><span>Now the </span><span class="c10">Relationships</span><span> should be populated with data from OpenShift</span></li></ol><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 357.33px;"><img alt="" src="images/image4.png" style="width: 624.00px; height: 357.33px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c12"><span>Select </span><span class="c10">Compute </span><span>-></span><span class="c10"> Containers </span><span>-></span><span class="c10"> Overview</span><span> to view the collected data. </span><span class="c0">Once baseline metrics similar to what is shown below appears, you can move on to the next lab. Feel free to explore the CloudForms web console as time permits to view additional details exposed from the OpenShift cluster.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 378.67px;"><img alt="cfme-container-overview.png" src="images/image5.png" style="width: 624.00px; height: 378.67px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><h2 class="c29" id="h.trnf0s8v5cvz"><span>Configuring the OpenStack Cloud Provider</span></h2><p class="c5"><span class="c9"></span></p><p class="c12"><span class="c10">NOTE</span><span>: This lab should be considered optional and/or stretch goal. If you are behind just skip this section and move onto the next lab</span><span class="c0">.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Red Hat CloudForms can also gather metrics and infrastructure data from our Red Hat OpenStack Platform environment, in the same manner that it is now collecting information from our OpenShift Container Platform.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Configure the OpenStack cloud provider: </span></p><ol class="c14 lst-kix_y07efju62o76-0 start" start="1"><li class="c12 c36"><span>Hover your mouse over the </span><span class="c10">Compute</span><span class="c0"> tab. </span></li><li class="c12 c36"><span class="c0">Once over the compute tab, additional panes will appear. (do not click anything yet)</span></li><li class="c12 c36"><span>Hover over </span><span class="c10">Clouds </span><span>and then click on </span><span class="c10">Providers</span><span class="c0">.</span></li><li class="c12 c36"><span>No cloud providers are configured by default. Add a new cloud provider by clicking on </span><span class="c10">Configuration</span><span class="c0"> (with a gear icon)</span></li><li class="c12 c36"><span>Lastly select </span><span class="c10">Add New Cloud Provider</span></li><li class="c12 c36"><span>For the </span><span class="c21">Add New Cloud Provider</span><span class="c0"> section use these values:</span></li></ol><ol class="c14 lst-kix_y07efju62o76-1 start" start="1"><li class="c12 c20"><span>For </span><span class="c21">Name:</span><span> enter </span><span class="c10">RHOSP Summit Lab</span></li><li class="c12 c20"><span>For </span><span class="c21">Type:</span><span> choose </span><span class="c10">OpenStack</span></li><li class="c12 c20"><span>Leave the other items in this upper section default (including empty </span><span class="c21">Region</span><span class="c0">)</span></li><li class="c12 c20"><span>For </span><span class="c21">Tenant Mapping Enabled</span><span> toggle this option to </span><span class="c10">Yes</span></li></ol><ol class="c14 lst-kix_y07efju62o76-0" start="7"><li class="c12 c36"><span>In the lower section labeled </span><span class="c21">Endpoints</span><span> in the first tab labeled </span><span class="c21">Default</span></li></ol><ol class="c14 lst-kix_y07efju62o76-1 start" start="1"><li class="c12 c20"><span>For </span><span class="c21">Hostname</span><span> enter </span><span class="c10">rhosp.admin.example.com</span></li><li class="c12 c20"><span>Leave </span><span class="c21">API Port</span><span> at </span><span class="c10">5000</span></li><li class="c12 c20"><span>For </span><span class="c21">Security Protocol</span><span> change the drop-down to </span><span class="c10">Non-SSL</span></li><li class="c12 c20"><span>For </span><span class="c21">Username</span><span> enter </span><span class="c10">admin</span></li><li class="c12 c20"><span>For the </span><span class="c21">Password</span><span> fields use </span><span class="c10">summit2017</span></li><li class="c12 c20"><span>Select </span><span class="c10">Validate</span></li></ol><ol class="c14 lst-kix_y07efju62o76-0" start="8"><li class="c12 c36"><span>In the </span><span class="c21">Events</span><span> section leave </span><span class="c10">Ceilometer</span><span class="c0"> selected</span></li><li class="c12 c36"><span>Lastly, </span><span class="c10">Add</span><span class="c0"> the cloud provider to CloudForms.</span></li></ol><p class="c5"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 544.00px;"><img alt="" src="images/image23.png" style="width: 624.00px; height: 544.00px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>You have now configured Red Hat CloudForms to retrieve metrics from Red Hat OpenStack Platform. It may take a few minutes to data to be </span><span>displayed</span><span class="c0">. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">To force a refresh of the newly added Provider:</span></p><ol class="c14 lst-kix_k5995kebo24e-0 start" start="1"><li class="c12 c36"><span>Select the </span><span class="c10">RHOSP Summit Lab </span><span class="c0">provider icon</span></li><li class="c12 c36"><span>Notice all of the </span><span class="c10">Relationships</span><span class="c0"> have 0 items</span></li><li class="c12 c36"><span>Now select the </span><span class="c10">Configuration</span><span class="c0"> drop-down again</span></li><li class="c12 c36"><span>Choose </span><span class="c10">Refresh Items and Relationships</span></li><li class="c12 c36"><span>Lastly, click the </span><span class="c10">Refresh</span><span> icon just to the left of </span><span class="c10">Configuration</span></li><li class="c12 c36"><span>Now the </span><span class="c10">Relationships</span><span class="c0"> should be populated with data from OpenStack in a few short minutes</span></li><li class="c12 c36"><span class="c0">Feel free to browse the new objects and get familiar with your newly connected OpenStack environment. In other words, click everything.</span></li></ol><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 330.67px;"><img alt="" src="images/image20.png" style="width: 624.00px; height: 330.67px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c12"><span class="c0"> </span></p><p class="c12"><span class="c0">This concludes lab 4.</span></p><h1 class="c33" id="h.6lpvbdpevn9j"><span class="c25 c28"></span></h1><hr style="page-break-before:always;display:none;"><h1 class="c33" id="h.agsrn2hu5kzb"><span class="c25 c28"></span></h1><h1 class="c45" id="h.pqycvuqig37n"><span>Lab 5 - Managing the Lifecycle of an Application</span></h1><p class="c12"><span>In this lab, you will deploy an application to Red Hat OpenShift Container Platform and use the tools previously deployed to investigate how to manage the application.</span></p><h2 class="c29" id="h.xs2kvaiebbkk"><span class="c25 c34 c39">Deploy a Sample Application</span></h2><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">One of the steps to validate the successful installation of an OpenShift Container Platform cluster is to build and deploy a sample application. OpenShift contains a number of quickstart templates that can be used to demonstrate different application frameworks along with the integration with a backend data store. One of these example applications consists of a CakePHP based web application with state stored in a MySQL database. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>We </span><span>will now put our cluster administrator hat aside and </span><span class="c0">complete the majority of this lab as a developer by using the OpenShift web console to build and deploy the sample application. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Navigate to </span><span class="c10">https://master.osp.example.com:8443</span><span> and login using the following credentials</span><span class="c0">.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Username: </span><span class="c9">user1</span></p><p class="c12"><span>Password: </span><span class="c10">summit2017</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Since </span><span class="c21">user1</span><span> does not currently have access to any projects, the only actions that can be taken in the web console is to create a new project. Click on the </span><span class="c10">New Project</span><span class="c0"> button.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Enter the following information on the new project wizard:</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Name: </span><span class="c10">cakephp-mysql-persistent</span></p><p class="c12"><span>Display Name: </span><span class="c10">CakePHP MySQL Persistent</span></p><p class="c12"><span>Description: </span><span class="c10">Sample Project Demonstrating A CakePHP MySQL Application Using Persistent Storage</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Click the </span><span class="c10">Create</span><span> button to create the project</span><span class="c9"> </span></p><p class="c5"><span class="c9"></span></p><p class="c12"><span>You are presented with a catalog of items that you can add to your project. In a typical OpenShift cluster, this catalog would be filled with numerous programming languages emphasizing polyglot development and tools to implement Continuous Integration. In the lab environment, there is only one programming language option, PHP. Click on the </span><span class="c10">PHP</span><span class="c0"> language to display the available options. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 381.33px;"><img alt="ocp-project-catalog.png" src="images/image16.png" style="width: 624.00px; height: 381.33px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>You </span><span>are presented with one option; </span><span>an OpenShift </span><span class="c7"><a class="c13" href="https://www.google.com/url?q=https://docs.openshift.com/container-platform/3.4/architecture/core_concepts/templates.html&sa=D&ust=1493871684765000&usg=AFQjCNEtrOslybox0fGozvpSDwI3GIHe3g">template</a></span><span> which contains the various OpenShift components to build and deploy a CakePHP based application along with a MySQL database backed by persistent storage. The goal of this lab is to use this template to validate the build and deployment capabilities of the platform along with the dynamic allocation of Persistent Volumes for the storage of the backend database.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Click the </span><span class="c21">Select</span><span> button under the </span><span class="c10">CakePHP + MySQL (Persistent) </span><span class="c0">card which will display the images that will be used as part of this template instantiation along with parameters that can be used to inject custom logic. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">One of the parameters that we will customize is the location of the Git repository containing the source code of the CakePHP application. The location will point to the Git repository that is running on the repository machine:</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Modify the </span><span class="c10">Git Repository URL</span><span class="c0"> parameter with the following value:</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Git Repository URL: </span><span class="c9">http://repo.osp.example.com/git/openshift/cakephp-ex.git</span></p><p class="c12"><span> </span></p><p class="c12"><span>Scroll to the bottom of the page and select the </span><span class="c10">Create</span><span class="c0"> button to instantiate the template</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>A page displaying the successful instantiation of the template will be displayed along with a set of next steps that you can take against the application. Click the </span><span class="c10">Continue to Overview</span><span> link to return to the project </span><span>homepage</span><span class="c0">. </span></p><p class="c5"><span class="c0"></span></p><h2 class="c29" id="h.5uhvick46ecz"><span class="c25 c34 c39">Validating Application Deployment</span></h2><p class="c12"><span class="c0">After triggering instantiating the template, a new Source to Image build of the CakePHP application will begin. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>View the build by selecting </span><span class="c10">Builds</span><span> and the </span><span class="c10">Builds</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Select </span><span class="c10">cakephp-mysql-persistent</span><span class="c0"> to view the builds for the application. From this page, you can view build status along with the logs produced</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 378.67px;"><img alt="" src="images/image10.png" style="width: 624.00px; height: 378.67px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>To investigate the status of all pods within the project, select </span><span class="c10">Application</span><span> and then </span><span class="c10">Pods</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 378.67px;"><img alt="" src="images/image2.png" style="width: 624.00px; height: 378.67px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Pods that are in a healthy condition will either have a status of </span><span class="c21">Running</span><span class="c0"> or completed. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c10">NOTE</span><span>: If either the </span><span class="c21">mysql</span><span> or </span><span class="c21">cakephp</span><span class="c0"> are not in a healthy state, triggering a new deployment may rectify the issue. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>New deployments can be initiated from the deployments page by selecting </span><span class="c10">Applications</span><span> and the </span><span class="c10">Deployments</span><span class="c0">. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Select either </span><span class="c21">mysql</span><span> and then </span><span class="c21">cakephp-mysql-persistent</span><span class="c0"> depending on the application to be deployed. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>On the top right corner, click </span><span class="c10">Deploy</span><span class="c0"> to trigger a new deployment if needed.</span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 364.00px;"><img alt="" src="images/image11.png" style="width: 624.00px; height: 364.00px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c0"></span></p><h2 class="c29" id="h.8jmw3458p21t"><span class="c25 c34 c39">View Application</span></h2><p class="c5"><span class="c0"></span></p><p class="c12"><span>Click on </span><span class="c10">Overview</span><span> from the </span><span>left hand</span><span class="c0"> navigation bar to return to the overview page.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c10">NOTE</span><span class="c0">: You may see an error getting metrics. This is safe to ignore for now as it will be covered in a subsequent section.</span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 234.67px;"><img alt="" src="images/image22.png" style="width: 624.00px; height: 234.67px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">You should be able to see both the CakePHP and MySQL applications running.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">The template automatically creates a route to provide external access to the application. The link is available at the top right corner of the page. Click the link to navigate to the application:</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c7"><a class="c13" href="https://www.google.com/url?q=http://cakephp-mysql-persistent-cakephp-mysql-persistent.apps.example.com&sa=D&ust=1493871684795000&usg=AFQjCNGBNjGIsR-cyICoYB6WH2BlNfnx6g">http://cakephp-mysql-persistent-cakephp-mysql-persistent.apps.example.com</a></span><span> </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 382.67px;"><img alt="ocp-cakephp-site.png" src="images/image9.png" style="width: 624.00px; height: 382.67px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c9"></span></p><h2 class="c29" id="h.xavcv7npxyvu"><span class="c25 c34 c39">Viewing Application Metrics</span></h2><p class="c5"><span class="c0"></span></p><p class="c12"><span>Application users and administrators have the ability to leverage several facilities for monitoring the state of an application deployed to the OpenShift Container Platform. While not deployed to the lab environment, OpenShift provides an </span><span class="c7"><a class="c13" href="https://www.google.com/url?q=https://docs.openshift.com/container-platform/3.4/install_config/aggregate_logging.html&sa=D&ust=1493871684798000&usg=AFQjCNF5OYdC8TQTv0hunMrilBzPlyjrBw">aggregated logging framework</a></span><span> based on the ELK (Elasticsearch, Fluentd and Kibana) stack.</span><span class="c0"> However, you can still utilize the telemetry captured by the cluster metrics mechanisms. Cluster metrics were deployed as part of the OpenShift installation and are being used to drive Red Hat CloudForms. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>With the </span><span class="c21">cakephp-mysql-persistent</span><span class="c0"> application deployed, you can use the OpenShift web console to view metrics that has been gathered by the cluster metrics facility. Since the metrics facility within the web console reaches out to Hawkular deployed in OpenShift from your web browser, you will need to perform one additional step to configure your browser to trust the self signed certificate configured before metrics can start to be displayed.</span></p><p class="c5"><span class="c0"></span></p><ol class="c14 lst-kix_q11obdjrtn0p-0 start" start="1"><li class="c12 c36"><span>From the overview page, click on </span><span class="c10">Applications</span><span class="c0"> on the lefthand side</span></li><li class="c12 c36"><span>Select </span><span class="c10">Pods</span><span class="c0"> </span></li><li class="c12 c36"><span>Select the </span><span class="c21">Running</span><span> </span><span class="c21">cakephp</span><span> </span><span class="c0">pod </span></li><li class="c12 c36"><span>Navigate to the </span><span class="c10">Metrics</span><span class="c0"> tab. </span></li></ol><p class="c5"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 380.00px;"><img alt="ocp-metrics-insecure.png" src="images/image8.png" style="width: 624.00px; height: 380.00px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Click on the link displayed which will connect to the Hawkular endpoint. Accept the self signed certificate and if successful, you will see the Hawkular logo along with additional details about the status of the service. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">NOTE: After clicking on the URL noted above, it may hang for a bit as it tries to go online. It will continue after a while.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Return to the OpenShift overview page for the </span><span class="c21">cakephp-mysql-persistent</span><span> project by clicking the </span><span class="c10">Overview</span><span> link on the left side where you should be able to see metrics displaying next to each pod.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 294.67px;"><img alt="ocp-overview-metrics.png" src="images/image3.png" style="width: 624.00px; height: 294.67px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>Additional details relating to the performance of the application can be viewed by revisiting the </span><span class="c21">Metrics tab</span><span class="c0"> within each pod as previously described. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>While normal consumers of the platform are able to view metrics for only the applications they have permissions to access, cluster administrators can make use of Red Hat CloudForms to view metrics from all applications deployed to the OpenShift Container platform from a single pane of glass. </span></p><p class="c5"><span class="c9"></span></p><h2 class="c29" id="h.70zoyjkvhwk0"><span class="c25 c34 c39">Navigate through the OpenShift Web Console</span></h2><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">With an application deployed to the OpenShift cluster, we can navigate through the various options exposed by the OpenShift web console. Use this time as an opportunity to explore the following sections at your own pace:</span></p><p class="c5"><span class="c0"></span></p><ul class="c14 lst-kix_95j65yi3gg73-0 start"><li class="c12 c36"><span class="c0">Various details provided with each pod including pod details, application logs and the ability to access a remote shell</span></li></ul><ul class="c14 lst-kix_95j65yi3gg73-1 start"><li class="c12 c20"><span>Hover over </span><span class="c10">Applications</span><span> from the </span><span>left hand</span><span> navigation bar and select </span><span class="c10">Pods</span><span class="c0">. Select one of the available pods and navigate through each of the provided tabs</span></li></ul><ul class="c14 lst-kix_95j65yi3gg73-0"><li class="c12 c36"><span>Secrets used by the platform and the </span><span class="c21">CakePHP</span><span class="c0"> application</span></li></ul><ul class="c14 lst-kix_95j65yi3gg73-1 start"><li class="c12 c20"><span>Hover over </span><span class="c10">Resources</span><span> from the </span><span>left hand</span><span> navigation bar and select </span><span class="c10">Secrets</span></li></ul><ul class="c14 lst-kix_95j65yi3gg73-0"><li class="c12 c36"><span class="c0">Persistent storage dynamically allocated by the cluster to support MySQL</span></li></ul><ul class="c14 lst-kix_95j65yi3gg73-1 start"><li class="c12 c20"><span>Click on the </span><span class="c10">Storage</span><span> tab </span></li></ul><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">If desired, connect to OpenStack and view the volumes created using the steps described in a prior lab.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>This concludes Lab 5</span></p><h1 class="c33" id="h.axi4m2nhz72h"><span class="c25 c28"></span></h1><hr style="page-break-before:always;display:none;"><h1 class="c33" id="h.xmiiuffoj2u4"><span class="c25 c28"></span></h1><h1 class="c45" id="h.vrwjutgw2s0q"><span class="c25 c28">Lab 6 - Expanding the OpenShift Container Platform Cluster</span></h1><p class="c12"><span>In this lab, you will use Ansible Tower to add an additional application node to the OpenShift Container Platform </span><span>cluster</span><span class="c0">.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">One of the benefits of the OpenShift Container Platform architecture is the effective scheduling of workloads onto compute resources (nodes). However, available capacity may result in the need to add additional resources. As an OpenShift cluster administrator, having a defined process for adding resources in an automated manner helps guarantee the stability of the overall cluster. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>The OpenShift Container Platform provides methods for </span><span class="c7"><a class="c13" href="https://www.google.com/url?q=https://docs.openshift.com/container-platform/latest/install_config/adding_hosts_to_existing_cluster.html&sa=D&ust=1493871684827000&usg=AFQjCNGLrL_GZhb8-I0h1nq94tIdmwVFrg">adding resources to an existing cluster</a></span><span>, whether it be a master or node. The method for executing the scale up task depends on the installation method used for the cluster. Both methods make use of an Ansible playbook to automate the process. The execution of the playbook can be driven through Ansible Tower to further simplify adding resources to a cluster. </span></p><h2 class="c29" id="h.3nkaei8t1dda"><span class="c25 c34 c39">Review Cluster</span></h2><p class="c12"><span class="c0">Recall the number of nodes in the cluster by either visiting CloudForms or OpenStack.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>From the OpenStack server:</span></p><a id="t.c4d448b3c0f43d8e3e48aead760341dd1e00db84"></a><a id="t.38"></a><table class="c19"><tbody><tr class="c11"><td class="c87" colspan="1" rowspan="1"><p class="c16"><span class="c23">rhosp$ </span></p></td><td class="c94" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">openstack server list &&</span><span class="c23"> </span><span class="c24 c10">openstack volume list</span></p></td></tr></tbody></table><p class="c5"><span class="c25 c34 c32"></span></p><p class="c12"><span class="c0">From the OpenShift master:</span></p><a id="t.9ba37b5c76d34bf63b344ce57102d50a2919a3b9"></a><a id="t.39"></a><table class="c19"><tbody><tr class="c11"><td class="c57" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$</span><span class="c23"> </span></p></td><td class="c27" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc get nodes</span></p></td></tr><tr class="c73"><td class="c22" colspan="2" rowspan="1"><p class="c16"><span class="c23">NAME STATUS AGE<br>infra.osp.example.com Ready 1h<br>master.osp.example.com Ready,SchedulingDisabled 1h<br>node1.osp.example.com Ready 1h</span></p></td></tr></tbody></table><h2 class="c29" id="h.6e74aq1acn3f"><span>Expand the Cluster</span></h2><p class="c12"><span class="c0">Once again, using the web browser from the student machine, navigate to the Ansible Tower instance:</span></p><p class="c5"><span class="c0"></span></p><p class="c16"><span class="c7 c21"><a class="c13" href="https://www.google.com/url?q=https://tower.admin.example.com&sa=D&ust=1493871684837000&usg=AFQjCNEAI9t7U3UqS5BotXwz1XJgZ9vZiA">https://tower.admin.example.com</a></span><span> </span></p><p class="c8"><span class="c0"></span></p><p class="c16"><span class="c0">If the web session has not been retained from a prior lab, login with the following credentials:</span></p><p class="c8"><span class="c0"></span></p><p class="c12"><span>Username </span><span class="c10">admin</span></p><p class="c12"><span>Password </span><span class="c10">summit2017</span></p><p class="c8"><span class="c0"></span></p><p class="c12"><span>After logging in, navigate to the </span><span class="c10">Templates</span><span> page and locate the </span><span class="c10">1-Provision and Scale OpenShift</span><span class="c0"> workflow job template. Click the ‘rocket’ icon to start the job. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 560.00px; height: 58.00px;"><img alt="" src="images/image18.png" style="width: 560.00px; height: 58.00px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>The workflow first creates a new OpenStack instance and once the instance has been created, the scaleup Ansible playbook will be executed to expand the cluster. The workflow job will take a few minutes to complete. Monitor the status until the workflow job completes successfully by selecting </span><span class="c10">Details</span><span class="c0"> as with the initial workflow job.</span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 106.67px;"><img alt="" src="images/image26.png" style="width: 624.00px; height: 106.67px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><h2 class="c29" id="h.312hek2ptrf4"><span class="c25 c34 c39">Validate the Expanded Cluster</span></h2><p class="c12"><span>Once the Tower job is completed, t</span><span class="c0">here are multiple methods in which to validate the successful expansion of the OpenShift cluster. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">First, as an OpenShift cluster administrator, you can use the OpenShift command line interface from the OpenShift master to view the available nodes and their status. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>As the </span><span class="c21">root</span><span> user on the OpenShift master (</span><span class="c21">master.osp.example.com</span><span>), execute the following command to list the available nodes:</span></p><a id="t.05803ae27dab992f5438b18e78446a7d3c6312f7"></a><a id="t.40"></a><table class="c19"><tbody><tr class="c11"><td class="c57" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c27" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc get nodes</span></p></td></tr></tbody></table><p class="c5"><span class="c25 c34 c32"></span></p><p class="c12"><span>If successful, you should see four (4) total nodes (1 master and 3 worker nodes) with </span><span class="c10">Ready</span><span> under the </span><span class="c21">Status</span><span> column</span><span>, as opposed to (3) total nodes before (1 master and 2 worker nodes).</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Red Hat CloudForms can also be used to confirm the total number of nodes has been expanded to four. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">From the OpenStack server:</span></p><a id="t.c4d448b3c0f43d8e3e48aead760341dd1e00db84"></a><a id="t.41"></a><table class="c19"><tbody><tr class="c11"><td class="c95" colspan="1" rowspan="1"><p class="c16"><span class="c23">rhosp$</span><span class="c23"> </span></p></td><td class="c48" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">openstack server list &&</span><span class="c23"> </span><span class="c24 c10">openstack volume list</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>Login to CloudForms and once authenticated, hover over </span><span class="c21">Compute</span><span>, then </span><span class="c21">Containers, </span><span>and finally select </span><span class="c10">Container Nodes</span><span class="c0">. Confirm four nodes are displayed. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>This concludes lab 6.</span></p><p class="c5"><span class="c0"></span></p><h1 class="c33" id="h.79idqa2ws8al"><span class="c25 c28"></span></h1><hr style="page-break-before:always;display:none;"><h1 class="c33" id="h.d870bb4rcplz"><span class="c25 c28"></span></h1><h1 class="c45" id="h.jhndkym5ybtb"><span>Lab 7 - Where do we go from </span><span>here</span><span class="c25 c28">?</span></h1><p class="c12"><span>The lab may be coming to a close, but that does </span><span>not</span><span class="c0"> mean that you need to stop once you leave the session. </span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Let’s recap what you have accomplished during this session. </span></p><p class="c5"><span class="c0"></span></p><ul class="c14 lst-kix_sii8ty3mzjal-0 start"><li class="c12 c36"><span class="c0">Ansible Tower was used to execute Ansible playbooks to provision a Red Hat OpenShift Container Platform cluster</span></li></ul><ul class="c14 lst-kix_sii8ty3mzjal-1 start"><li class="c12 c20"><span class="c0">Instances were created with Red Hat OpenStack</span></li><li class="c12 c20"><span class="c0">Red Hat OpenShift Container Platform was installed and configured</span></li></ul><ul class="c14 lst-kix_sii8ty3mzjal-2 start"><li class="c12 c64"><span class="c0">Platform metrics were automatically deployed</span></li></ul><ul class="c14 lst-kix_sii8ty3mzjal-0"><li class="c12 c36"><span class="c0">Red Hat Cloudforms was deployed within the Red Hat Container Platform cluster</span></li></ul><ul class="c14 lst-kix_sii8ty3mzjal-1 start"><li class="c12 c20"><span class="c0">Integrated with Red Hat OpenShift Container Platform to monitor the cluster</span></li></ul><ul class="c14 lst-kix_sii8ty3mzjal-0"><li class="c12 c36"><span class="c0">Sample application using persistent storage deployed on the Red Hat OpenShift Container Platform</span></li><li class="c12 c36"><span class="c0">Ansible Tower was used to execute Ansible platforms to expand the cluster</span></li></ul><ul class="c14 lst-kix_sii8ty3mzjal-1 start"><li class="c12 c20"><span class="c0">New instance deployed within Red Hat OpenStack</span></li><li class="c12 c20"><span class="c0">Red Hat OpenShift Container Platform node installed and cluster updated </span></li></ul><p class="c5"><span class="c0"></span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">The following resources are available for your reference:</span></p><p class="c5"><span class="c0"></span></p><ul class="c14 lst-kix_4duuyo76xxf-0 start"><li class="c12 c36"><span>Source Code</span></li></ul><ul class="c14 lst-kix_4duuyo76xxf-1 start"><li class="c12 c20"><span class="c7"><a class="c13" href="https://www.google.com/url?q=https://github.com/sabre1041/summit-2017-ocp-operator&sa=D&ust=1493871684867000&usg=AFQjCNH31cZoET3X9SnYKJIrqatc9-9rTQ">https://github.com/sabre1041/summit-2017-ocp-operator</a></span><span> </span></li></ul><ul class="c14 lst-kix_4duuyo76xxf-0"><li class="c12 c36"><span class="c0">Lab Guide</span></li></ul><ul class="c14 lst-kix_4duuyo76xxf-1 start"><li class="c12 c20"><span class="c7"><a class="c13" href="https://www.google.com/url?q=https://github.com/sabre1041/summit-2017-ocp-operator/docs/rhsummit17-lab-guide.html&sa=D&ust=1493871684869000&usg=AFQjCNHfV0OD2h14yrUOb4E0ov9FtDEjrA">https://github.com/sabre1041/summit-2017-ocp-operator/docs/rhsummit17-lab-guide.html</a></span></li></ul><ul class="c14 lst-kix_4duuyo76xxf-0"><li class="c12 c36"><span class="c0">Official Documentation</span></li></ul><ul class="c14 lst-kix_4duuyo76xxf-1 start"><li class="c12 c20"><span class="c7"><a class="c13" href="https://www.google.com/url?q=https://docs.openshift.com/&sa=D&ust=1493871684870000&usg=AFQjCNFZj9b0FiXHsFJZdd2c9Gusm3EeVw">Red Hat OpenShift Container Platform</a></span></li><li class="c12 c20"><span class="c7"><a class="c13" href="https://www.google.com/url?q=http://docs.ansible.com/ansible-tower/latest/html/userguide/index.html&sa=D&ust=1493871684871000&usg=AFQjCNEkpWSkstKCa3T7CVW3DywfDms67Q">Ansible Tower</a></span></li><li class="c12 c20"><span class="c7"><a class="c13" href="https://www.google.com/url?q=https://access.redhat.com/documentation/en/red-hat-cloudforms/&sa=D&ust=1493871684872000&usg=AFQjCNFBP5R1Z_dcpP2YZgHNONkmu-9o4A">Red Hat CloudForms</a></span></li><li class="c12 c20"><span class="c7"><a class="c13" href="https://www.google.com/url?q=https://access.redhat.com/documentation/en/red-hat-openstack-platform/&sa=D&ust=1493871684873000&usg=AFQjCNGRFDy9SLztYIcG0gWa40COrgpvxQ">Red Hat OpenStack</a></span></li></ul><p class="c5"><span class="c0"></span></p><p class="c5"><span class="c0"></span></p><p class="c5"><span class="c0"></span></p><p class="c5"><span class="c0"></span></p><p class="c5"><span class="c0"></span></p><p class="c5"><span class="c0"></span></p><p class="c5"><span class="c0"></span></p><h1 class="c45" id="h.apcwpcpv9lz3"><span class="c25 c28">Appendices </span></h1><h2 class="c29" id="h.caekgyddfloa"><span class="c25 c34 c39">Appendix A - Manually Cleanup Cinder Volume</span></h2><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">How to manually clean up a volume that will not delete with openstack volume delete</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>From the OpenStack server:</span></p><a id="t.0c982560462d081a19a0356cf50bf7f97e4c9352"></a><a id="t.42"></a><table class="c19"><tbody><tr class="c11"><td class="c46" colspan="1" rowspan="1"><p class="c16"><span class="c23">rhosp$ </span></p></td><td class="c51" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">openstack volume list</span></p></td></tr><tr class="c11"><td class="c46" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">rhosp$ </span></p></td><td class="c51" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">sudo -i</span><span class="c25 c23"> </span></p></td></tr><tr class="c11"><td class="c46" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">rhosp# </span></p></td><td class="c51" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">source ~/.keystonerc_admin</span></p></td></tr><tr class="c11"><td class="c46" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">rhosp# </span></p></td><td class="c51" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">openstack volume set --state available 09d601f8-4159-4979-ae77-441920564230</span></p></td></tr><tr class="c11"><td class="c46" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">rhosp$ </span></p></td><td class="c51" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">mysql -u root cinder</span></p></td></tr><tr class="c11"><td class="c46" colspan="1" rowspan="1"><p class="c16"><span class="c23"># MariaDB [cinder]></span><span class="c24 c10"> </span></p></td><td class="c51" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">delete from volumes where id='09d601f8-4159-4979-ae77-441920564230';</span></p></td></tr><tr class="c11"><td class="c46" colspan="1" rowspan="1"><p class="c16"><span class="c23"># MariaDB [cinder]></span><span class="c24 c10"> </span></p></td><td class="c51" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">update volumes set attach_status="detached" where id="09d601f8-4159-4979-ae77-441920564230";</span></p></td></tr><tr class="c11"><td class="c46" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">rhosp$ </span></p></td><td class="c51" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">openstack volume delete 09d601f8-4159-4979-ae77-441920564230</span></p></td></tr></tbody></table><h2 class="c29 c83" id="h.o7ti80acfi2k"><span class="c25 c34 c39"></span></h2><hr style="page-break-before:always;display:none;"><h2 class="c29 c83" id="h.eiifqmndaviy"><span class="c25 c34 c39"></span></h2><h2 class="c29" id="h.zhaiz2m1v3mc"><span class="c25 c34 c39">Appendix B - Script For Deploying CloudForms</span></h2><p class="c12"><span class="c32">These are pulled directly from </span><span class="c7 c32"><a class="c13" href="#h.aibm7nbsxpm0">Lab 4 - Installing Red Hat CloudForms</a></span></p><p class="c12"><span class="c10 c32">NOTE</span><span class="c32">: This is also available at </span><span class="c7 c32"><a class="c13" href="https://www.google.com/url?q=http://repo.admin.example.com/pub/scripts/lab4-cloudforms-validation.sh&sa=D&ust=1493871684894000&usg=AFQjCNGe2vy813E11nXrDlxBdOnUgAdQug">http://repo.admin.example.com/pub/scripts/lab4-cloudforms-validation.sh</a></span></p><a id="t.83bcd0a6338096016291021c0c158168da5e14a0"></a><a id="t.43"></a><table class="c19"><tbody><tr class="c11"><td class="c22" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">#!/bin/bash<br><br></span><span class="c6">oc new-project cloudforms<br>oc config current-context for context<br>oc adm policy add-scc-to-user privileged \<br> system:serviceaccount:cloudforms:default<br>oc get scc privileged -o yaml | grep cloudforms<br>oc adm pod-network join-projects cloudforms --to=openshift-infra<br>oc get netnamespace | egrep 'cloudforms|openshift-infra'<br>curl -O http://repo.osp.example.com/ocp/templates/cfme-template.yaml<br>oc create -n cloudforms -f cfme-template.yaml<br>oc get -n cloudforms template cloudforms<br>oc new-app -n cloudforms --template=cloudforms<br>oc -n cloudforms get pods -w</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>Proceed to </span><span class="c7"><a class="c13" href="#h.x6hgyesicpp4">Accessing the CloudForms User Interface</a></span></p><hr style="page-break-before:always;display:none;"><h2 class="c29 c83" id="h.yz90z31j3z1w"><span class="c25 c34 c39"></span></h2><h2 class="c29" id="h.fzknnqbefalw"><span class="c25 c34 c39">Appendix C - Recovering From Failed CloudForms Deployment</span></h2><p class="c12"><span class="c0">The following output represents a failed deployment:</span></p><p class="c5"><span class="c0"></span></p><a id="t.9b4c9a49159bb3d09bdbd58a70adb094dcc26c2b"></a><a id="t.44"></a><table class="c19"><tbody><tr class="c11"><td class="c3" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc get pods -w</span></p></td></tr><tr class="c73"><td class="c22" colspan="2" rowspan="1"><p class="c16"><span class="c25 c23">NAME READY STATUS RESTARTS AGE<br>cloudforms-1-deploy 1/1 Running 0 10s<br>cloudforms-1-dgvv6 0/1 ContainerCreating 0 4s<br>memcached-1-deploy 1/1 Running 0 10s<br>memcached-1-s78jr 0/1 ContainerCreating 0 2s<br>postgresql-1-deploy 0/1 ContainerCreating 0 10s<br>NAME READY STATUS RESTARTS AGE<br>postgresql-1-oqoyw 0/1 Pending 0 0s<br>postgresql-1-oqoyw 0/1 Pending 0 0s<br>postgresql-1-oqoyw 0/1 ContainerCreating 0 0s<br>postgresql-1-deploy 1/1 Running 0 11s<br>memcached-1-s78jr 0/1 Running 0 18s<br>memcached-1-s78jr 1/1 Running 0 30s<br>memcached-1-deploy 0/1 Completed 0 41s<br>memcached-1-deploy 0/1 Terminating 0 41s<br>memcached-1-deploy 0/1 Terminating 0 41s<br>cloudforms-1-dgvv6 0/1 Running 0 1m<br>postgresql-1-deploy 0/1 Error 0 10m<br>postgresql-1-oqoyw 0/1 Terminating 0 10m<br>cloudforms-1-dgvv6 0/1 Running 1 10m<br>postgresql-1-oqoyw 0/1 Terminating 0 10m<br>postgresql-1-oqoyw 0/1 Terminating 0 10m<br>cloudforms-1-dgvv6 0/1 Running 2 19m<br>cloudforms-1-deploy 0/1 Error 0 20m<br>cloudforms-1-dgvv6 0/1 Terminating 2 20m<br>cloudforms-1-dgvv6 0/1 Terminating 2 20m<br>cloudforms-1-dgvv6 0/1 Terminating 2 20m<br>cloudforms-1-dgvv6 0/1 Terminating 2 20m</span></p></td></tr></tbody></table><p class="c5"><span class="c25 c32 c34"></span></p><p class="c12"><span class="c0">The quickest way to remedy this is to delete the project and start over:</span></p><p class="c5"><span class="c0"></span></p><a id="t.2d4f7afc8e735cb3c827d54ac011d63873583a15"></a><a id="t.45"></a><table class="c19"><tbody><tr class="c11"><td class="c3" colspan="1" rowspan="1"><p class="c16"><span class="c25 c23">master$ </span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">oc delete project cloudforms </span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>Now return the the lab and try again </span><span class="c7"><a class="c13" href="#h.aibm7nbsxpm0">Lab 4 - Installing Red Hat CloudForms</a></span></p><hr style="page-break-before:always;display:none;"><p class="c5"><span class="c0"></span></p><h2 class="c29" id="h.z0rklt43v0hk"><span>Appendix D - Average Tower Job Times</span></h2><p class="c5"><span class="c0"></span></p><a id="t.9cfaa3b8df58ee39baeacb3889b4df0045afb955"></a><a id="t.46"></a><table class="c19"><tbody><tr class="c11"><td class="c26 c85" colspan="1" rowspan="1"><p class="c16"><span class="c9">Tower Workflow Job</span></p></td><td class="c63 c85" colspan="1" rowspan="1"><p class="c16"><span class="c9">Ansible Playbook</span></p></td><td class="c60 c85" colspan="1" rowspan="1"><p class="c16"><span class="c9">Elapsed Time </span></p></td><td class="c15 c85" colspan="1" rowspan="1"><p class="c16"><span class="c9">Purpose</span></p></td></tr><tr class="c11"><td class="c26" colspan="1" rowspan="1"><p class="c16"><span class="c0">0-Provision and Install OpenShift</span></p></td><td class="c63" colspan="1" rowspan="1"><p class="c8"><span class="c0"></span></p></td><td class="c60" colspan="1" rowspan="1"><p class="c16"><span class="c0">00:18:06</span></p></td><td class="c15" colspan="1" rowspan="1"><p class="c16"><span class="c0">Orchestrated workflow to deploy OpenShift</span></p></td></tr><tr class="c11"><td class="c26" colspan="1" rowspan="1"><p class="c8"><span class="c0"></span></p></td><td class="c63" colspan="1" rowspan="1"><p class="c16"><span class="c0">OpenShift Pre-Install </span></p></td><td class="c60" colspan="1" rowspan="1"><p class="c16"><span class="c0">00:02:38</span></p></td><td class="c15" colspan="1" rowspan="1"><p class="c16"><span class="c0">Crease servers on OpenStack</span></p></td></tr><tr class="c11"><td class="c26" colspan="1" rowspan="1"><p class="c8"><span class="c0"></span></p></td><td class="c63" colspan="1" rowspan="1"><p class="c16"><span class="c0">OpenShift Install</span></p></td><td class="c60" colspan="1" rowspan="1"><p class="c16"><span class="c0">00:12:34</span></p></td><td class="c15" colspan="1" rowspan="1"><p class="c16"><span class="c0">Install OpenShift</span></p></td></tr><tr class="c11"><td class="c26" colspan="1" rowspan="1"><p class="c8"><span class="c0"></span></p></td><td class="c63" colspan="1" rowspan="1"><p class="c16"><span class="c0">OpenShift Post-Install</span></p></td><td class="c60" colspan="1" rowspan="1"><p class="c16"><span class="c0">00:02:20</span></p></td><td class="c15" colspan="1" rowspan="1"><p class="c16"><span class="c0">Setup templates and image streams for labs</span></p></td></tr><tr class="c11"><td class="c26" colspan="1" rowspan="1"><p class="c16"><span class="c0">1-Provision and Scale OpenShift </span></p></td><td class="c63" colspan="1" rowspan="1"><p class="c8"><span class="c0"></span></p></td><td class="c60" colspan="1" rowspan="1"><p class="c16"><span class="c0">00:07:00</span></p></td><td class="c15" colspan="1" rowspan="1"><p class="c16"><span>Orchestrated workflow to add an additional server to OpenShift</span></p></td></tr><tr class="c11"><td class="c26" colspan="1" rowspan="1"><p class="c8"><span class="c0"></span></p></td><td class="c63" colspan="1" rowspan="1"><p class="c16"><span class="c0">OpenShift Pre-Scaleup</span></p></td><td class="c60" colspan="1" rowspan="1"><p class="c16"><span class="c0">00:01:19</span></p></td><td class="c15" colspan="1" rowspan="1"><p class="c16"><span class="c0">Create server on OpenStack</span></p></td></tr><tr class="c11"><td class="c26" colspan="1" rowspan="1"><p class="c8"><span class="c0"></span></p></td><td class="c63" colspan="1" rowspan="1"><p class="c16"><span class="c0"> OpenShift Scaleup </span></p><p class="c8"><span class="c0"></span></p></td><td class="c60" colspan="1" rowspan="1"><p class="c16"><span class="c0"> 00:05:24 </span></p></td><td class="c15" colspan="1" rowspan="1"><p class="c16"><span class="c0">Run openshift-ansible to add new node to the OCP</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>Return to </span><span class="c7"><a class="c13" href="#h.aibm7nbsxpm0">Lab 4 - Installing Red Hat CloudForms</a></span></p><p class="c5"><span class="c0"></span></p><p class="c5"><span class="c0"></span></p><p class="c5"><span class="c0"></span></p><p class="c5"><span class="c0"></span></p><h2 class="c29" id="h.myu5p22ditfz"><span class="c25 c34 c39">Appendix E - Troubleshooting CloudForms</span></h2><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Try to curl the CloudForms application, this may fail.</span></p><a id="t.321db8f02446563efcbd73b14d49dc007b83e0d0"></a><a id="t.47"></a><table class="c19"><tbody><tr class="c11"><td class="c3" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">curl -Ik </span><span class="c24 c7 c10 c21"><a class="c13" href="https://www.google.com/url?q=https://cloudforms-cloudforms.apps.example.com&sa=D&ust=1493871684932000&usg=AFQjCNFIj-GLX-iK0BBWKCri-Bj0GOiVQw">https://cloudforms-cloudforms.apps.example.com</a></span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>If this matches the web browser’s output of </span><span class="c10">Application Not Available</span><span> or status code of </span><span class="c10">503</span><span class="c0"> then something failed in the deployment.</span></p><p class="c5"><span class="c0"></span></p><p class="c12"><span>List the pods in the </span><span class="c21">default</span><span class="c0"> project</span></p><a id="t.4ae950e80e4b72b8f48d32b8655ea6c6d7580219"></a><a id="t.48"></a><table class="c19"><tbody><tr class="c11"><td class="c3" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c16"><span class="c6">oc get pods -n default</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">List services in the default project</span></p><a id="t.f99d2be949a0e7bad7ea007027895a6bc6af0ee3"></a><a id="t.49"></a><table class="c19"><tbody><tr class="c11"><td class="c3" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c16"><span class="c6">oc get services</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Try curl against the cloudforms service IP</span></p><a id="t.c8f7d4c0fd37c1d23b68ae7015670b29e61a2182"></a><a id="t.50"></a><table class="c19"><tbody><tr class="c11"><td class="c3" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">curl -Ik </span><span class="c24 c7 c10"><a class="c13" href="https://www.google.com/url?q=http://72.30.126.6&sa=D&ust=1493871684941000&usg=AFQjCNFDtjFfe06r7Zb457knI15iqFg53Q">http://</a></span><span class="c24 c7 c10"><a class="c13" href="https://www.google.com/url?q=http://72.30.126.6&sa=D&ust=1493871684942000&usg=AFQjCNEjwegpc3hcvPN5L2X9eBWKsFQ2mw">72.30.126.6</a></span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">If the router is in error state, delete it </span></p><a id="t.70471c1cd771317e51a2d4779b95e89eba264d0c"></a><a id="t.51"></a><table class="c19"><tbody><tr class="c11"><td class="c3" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c16"><span class="c6">oc delete pod router -n default</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">Watch the router get deployed</span></p><a id="t.129a21856888fb2ce2e93d4fbc32db864f45760b"></a><a id="t.52"></a><table class="c19"><tbody><tr class="c11"><td class="c3" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c16"><span class="c6">oc get pods -n default -w</span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span class="c0">The cloudforms application should work now if the router came up cleanly</span></p><a id="t.321db8f02446563efcbd73b14d49dc007b83e0d0"></a><a id="t.53"></a><table class="c19"><tbody><tr class="c11"><td class="c3" colspan="1" rowspan="1"><p class="c16"><span class="c23">master$ </span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c16"><span class="c24 c10">curl -Ik </span><span class="c24 c7 c10 c21"><a class="c13" href="https://www.google.com/url?q=https://cloudforms-cloudforms.apps.example.com&sa=D&ust=1493871684950000&usg=AFQjCNEMbIA_rVuksO3y5oHqoivT8Q2ncw">https://cloudforms-cloudforms.apps.example.com</a></span></p></td></tr></tbody></table><p class="c5"><span class="c0"></span></p><p class="c12"><span>Return to </span><span class="c7"><a class="c13" href="#h.x6hgyesicpp4">Accessing the CloudForms User Interface</a></span></p><div><p class="c53"><span class="c0"></span></p></div></body></html>