Differences

This shows you the differences between two versions of the page.

Link to this comparison view

devops:laboratoare:03 [2021/05/24 17:37]
127.0.0.1 external edit
devops:laboratoare:03 [2021/07/21 00:13] (current)
sorin.paduraru Adaugare laborator pentru cursul de Terraform si Ansible
Line 1: Line 1:
-===== Laboratorul 03. =====+===== Laboratorul 03. Terraform si Ansible ​===== 
 +Pentru cea mai recenta versiune a acestui document intrati [[https://​t0244759.pages.thalesdigital.io/​iac-config-management/#​_ce_facem_noi_astazi|aici]] 
 +<​html>​ 
 +<​head>​ 
 +<meta charset="​UTF-8">​ 
 +<meta http-equiv="​X-UA-Compatible"​ content="​IE=edge">​ 
 +<meta name="​viewport"​ content="​width=device-width,​ initial-scale=1.0">​ 
 +<meta name="​generator"​ content="​Asciidoctor 2.0.15">​ 
 +<meta name="​author"​ content="​Sorin-Alexandru PADURARU">​ 
 +<​title>​Terraform si Ansible</​title>​ 
 +<link rel="​stylesheet"​ href="​https://​fonts.googleapis.com/​css?​family=Open+Sans:​300,​300italic,​400,​400italic,​600,​600italic%7CNoto+Serif:​400,​400italic,​700,​700italic%7CDroid+Sans+Mono:​400,​700">​ 
 +<​style>​ 
 +/* Asciidoctor default stylesheet | MIT License | https://​asciidoctor.org */ 
 +/* Uncomment @import statement to use as custom stylesheet */ 
 +/*@import "​https://​fonts.googleapis.com/​css?​family=Open+Sans:​300,​300italic,​400,​400italic,​600,​600italic%7CNoto+Serif:​400,​400italic,​700,​700italic%7CDroid+Sans+Mono:​400,​700";​*/​ 
 +article,​aside,​details,​figcaption,​figure,​footer,​header,​hgroup,​main,​nav,​section{display:​block} 
 +audio,​video{display:​inline-block} 
 +audio:​not([controls]){display:​none;​height:​0} 
 +html{font-family:​sans-serif;​-ms-text-size-adjust:​100%;​-webkit-text-size-adjust:​100%} 
 +a{background:​none} 
 +a:​focus{outline:​thin dotted} 
 +a:​active,​a:​hover{outline:​0} 
 +h1{font-size:​2em;​margin:​.67em 0} 
 +abbr[title]{border-bottom:​1px dotted} 
 +b,​strong{font-weight:​bold} 
 +dfn{font-style:​italic} 
 +hr{-moz-box-sizing:​content-box;​box-sizing:​content-box;​height:​0} 
 +mark{background:#​ff0;​color:#​000} 
 +code,​kbd,​pre,​samp{font-family:​monospace;​font-size:​1em} 
 +pre{white-space:​pre-wrap} 
 +q{quotes:"​\201C"​ "​\201D"​ "​\2018"​ "​\2019"​} 
 +small{font-size:​80%} 
 +sub,​sup{font-size:​75%;​line-height:​0;​position:​relative;​vertical-align:​baseline} 
 +sup{top:​-.5em} 
 +sub{bottom:​-.25em} 
 +img{border:​0} 
 +svg:​not(:​root){overflow:​hidden} 
 +figure{margin:​0} 
 +fieldset{border:​1px solid silver;​margin:​0 2px;​padding:​.35em .625em .75em} 
 +legend{border:​0;​padding:​0} 
 +button,​input,​select,​textarea{font-family:​inherit;​font-size:​100%;​margin:​0} 
 +button,​input{line-height:​normal} 
 +button,​select{text-transform:​none} 
 +button,html input[type="​button"​],​input[type="​reset"​],​input[type="​submit"​]{-webkit-appearance:​button;​cursor:​pointer} 
 +button[disabled],​html input[disabled]{cursor:​default} 
 +input[type="​checkbox"​],​input[type="​radio"​]{box-sizing:​border-box;​padding:​0} 
 +button::​-moz-focus-inner,​input::​-moz-focus-inner{border:​0;​padding:​0} 
 +textarea{overflow:​auto;​vertical-align:​top} 
 +table{border-collapse:​collapse;​border-spacing:​0} 
 +*,​*::​before,​*::​after{-moz-box-sizing:​border-box;​-webkit-box-sizing:​border-box;​box-sizing:​border-box} 
 +html,​body{font-size:​100%} 
 +body{background:#​fff;​color:​rgba(0,​0,​0,​.8);​padding:​0;​margin:​0;​font-family:"​Noto Serif","​DejaVu Serif",​serif;​font-weight:​400;​font-style:​normal;​line-height:​1;​position:​relative;​cursor:​auto;​tab-size:​4;​word-wrap:​anywhere;​-moz-osx-font-smoothing:​grayscale;​-webkit-font-smoothing:​antialiased} 
 +a:​hover{cursor:​pointer} 
 +img,​object,​embed{max-width:​100%;​height:​auto} 
 +object,​embed{height:​100%} 
 +img{-ms-interpolation-mode:​bicubic} 
 +.left{float:​left!important} 
 +.right{float:​right!important} 
 +.text-left{text-align:​left!important} 
 +.text-right{text-align:​right!important} 
 +.text-center{text-align:​center!important} 
 +.text-justify{text-align:​justify!important} 
 +.hide{display:​none} 
 +img,​object,​svg{display:​inline-block;​vertical-align:​middle} 
 +textarea{height:​auto;​min-height:​50px} 
 +select{width:​100%} 
 +.subheader,​.admonitionblock td.content>​.title,​.audioblock>​.title,​.exampleblock>​.title,​.imageblock>​.title,​.listingblock>​.title,​.literalblock>​.title,​.stemblock>​.title,​.openblock>​.title,​.paragraph>​.title,​.quoteblock>​.title,​table.tableblock>​.title,​.verseblock>​.title,​.videoblock>​.title,​.dlist>​.title,​.olist>​.title,​.ulist>​.title,​.qlist>​.title,​.hdlist>​.title{line-height:​1.45;​color:#​7a2518;​font-weight:​400;​margin-top:​0;​margin-bottom:​.25em} 
 +div,​dl,​dt,​dd,​ul,​ol,​li,​h1,​h2,​h3,#​toctitle,​.sidebarblock>​.content>​.title,​h4,​h5,​h6,​pre,​form,​p,​blockquote,​th,​td{margin:​0;​padding:​0} 
 +a{color:#​2156a5;​text-decoration:​underline;​line-height:​inherit} 
 +a:​hover,​a:​focus{color:#​1d4b8f} 
 +a img{border:​0} 
 +p{font-family:​inherit;​font-weight:​400;​font-size:​1em;​line-height:​1.6;​margin-bottom:​1.25em;​text-rendering:​optimizeLegibility} 
 +p aside{font-size:​.875em;​line-height:​1.35;​font-style:​italic} 
 +h1,​h2,​h3,#​toctitle,​.sidebarblock>​.content>​.title,​h4,​h5,​h6{font-family:"​Open Sans","​DejaVu Sans",​sans-serif;​font-weight:​300;​font-style:​normal;​color:#​ba3925;​text-rendering:​optimizeLegibility;​margin-top:​1em;​margin-bottom:​.5em;​line-height:​1.0125em} 
 +h1 small,h2 small,h3 small,#​toctitle small,​.sidebarblock>​.content>​.title small,h4 small,h5 small,h6 small{font-size:​60%;​color:#​e99b8f;​line-height:​0} 
 +h1{font-size:​2.125em} 
 +h2{font-size:​1.6875em} 
 +h3,#​toctitle,​.sidebarblock>​.content>​.title{font-size:​1.375em} 
 +h4,​h5{font-size:​1.125em} 
 +h6{font-size:​1em} 
 +hr{border:​solid #​dddddf;​border-width:​1px 0 0;​clear:​both;​margin:​1.25em 0 1.1875em;​height:​0} 
 +em,​i{font-style:​italic;​line-height:​inherit} 
 +strong,​b{font-weight:​bold;​line-height:​inherit} 
 +small{font-size:​60%;​line-height:​inherit} 
 +code{font-family:"​Droid Sans Mono","​DejaVu Sans Mono",​monospace;​font-weight:​400;​color:​rgba(0,​0,​0,​.9)} 
 +ul,​ol,​dl{font-size:​1em;​line-height:​1.6;​margin-bottom:​1.25em;​list-style-position:​outside;​font-family:​inherit} 
 +ul,​ol{margin-left:​1.5em} 
 +ul li ul,ul li ol{margin-left:​1.25em;​margin-bottom:​0;​font-size:​1em} 
 +ul.square li ul,​ul.circle li ul,ul.disc li ul{list-style:​inherit} 
 +ul.square{list-style-type:​square} 
 +ul.circle{list-style-type:​circle} 
 +ul.disc{list-style-type:​disc} 
 +ol li ul,ol li ol{margin-left:​1.25em;​margin-bottom:​0} 
 +dl dt{margin-bottom:​.3125em;​font-weight:​bold} 
 +dl dd{margin-bottom:​1.25em} 
 +abbr,​acronym{text-transform:​uppercase;​font-size:​90%;​color:​rgba(0,​0,​0,​.8);​border-bottom:​1px dotted #​ddd;​cursor:​help} 
 +abbr{text-transform:​none} 
 +blockquote{margin:​0 0 1.25em;​padding:​.5625em 1.25em 0 1.1875em;​border-left:​1px solid #ddd} 
 +blockquote,​blockquote p{line-height:​1.6;​color:​rgba(0,​0,​0,​.85)} 
 +@media screen and (min-width:​768px){h1,​h2,​h3,#​toctitle,​.sidebarblock>​.content>​.title,​h4,​h5,​h6{line-height:​1.2} 
 +h1{font-size:​2.75em} 
 +h2{font-size:​2.3125em} 
 +h3,#​toctitle,​.sidebarblock>​.content>​.title{font-size:​1.6875em} 
 +h4{font-size:​1.4375em}} 
 +table{background:#​fff;​margin-bottom:​1.25em;​border:​solid 1px #​dedede;​word-wrap:​normal} 
 +table thead,table tfoot{background:#​f7f8f7} 
 +table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:​.5em .625em .625em;​font-size:​inherit;​color:​rgba(0,​0,​0,​.8);​text-align:​left} 
 +table tr th,table tr td{padding:​.5625em .625em;​font-size:​inherit;​color:​rgba(0,​0,​0,​.8)} 
 +table tr.even,​table tr.alt{background:#​f8f8f7} 
 +table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:​1.6} 
 +h1,​h2,​h3,#​toctitle,​.sidebarblock>​.content>​.title,​h4,​h5,​h6{line-height:​1.2;​word-spacing:​-.05em} 
 +h1 strong,h2 strong,h3 strong,#​toctitle strong,​.sidebarblock>​.content>​.title strong,h4 strong,h5 strong,h6 strong{font-weight:​400} 
 +.center{margin-left:​auto;​margin-right:​auto} 
 +.stretch{width:​100%} 
 +.clearfix::​before,​.clearfix::​after,​.float-group::​before,​.float-group::​after{content:"​ ";​display:​table} 
 +.clearfix::​after,​.float-group::​after{clear:​both} 
 +:​not(pre).nobreak{word-wrap:​normal} 
 +:​not(pre).nowrap{white-space:​nowrap} 
 +:​not(pre).pre-wrap{white-space:​pre-wrap} 
 +:​not(pre):​not([class^=L])>​code{font-size:​.9375em;​font-style:​normal!important;​letter-spacing:​0;​padding:​.1em .5ex;​word-spacing:​-.15em;​background:#​f7f7f8;​-webkit-border-radius:​4px;​border-radius:​4px;​line-height:​1.45;​text-rendering:​optimizeSpeed} 
 +pre{color:​rgba(0,​0,​0,​.9);​font-family:"​Droid Sans Mono","​DejaVu Sans Mono",​monospace;​line-height:​1.45;​text-rendering:​optimizeSpeed} 
 +pre code,pre pre{color:​inherit;​font-size:​inherit;​line-height:​inherit} 
 +pre>​code{display:​block} 
 +pre.nowrap,​pre.nowrap pre{white-space:​pre;​word-wrap:​normal} 
 +em em{font-style:​normal} 
 +strong strong{font-weight:​400} 
 +.keyseq{color:​rgba(51,​51,​51,​.8)} 
 +kbd{font-family:"​Droid Sans Mono","​DejaVu Sans Mono",​monospace;​display:​inline-block;​color:​rgba(0,​0,​0,​.8);​font-size:​.65em;​line-height:​1.45;​background:#​f7f7f7;​border:​1px solid #​ccc;​-webkit-border-radius:​3px;​border-radius:​3px;​-webkit-box-shadow:​0 1px 0 rgba(0,​0,​0,​.2),​0 0 0 .1em white inset;​box-shadow:​0 1px 0 rgba(0,​0,​0,​.2),​0 0 0 .1em #fff inset;​margin:​0 .15em;​padding:​.2em .5em;​vertical-align:​middle;​position:​relative;​top:​-.1em;​white-space:​nowrap} 
 +.keyseq kbd:​first-child{margin-left:​0} 
 +.keyseq kbd:​last-child{margin-right:​0} 
 +.menuseq,​.menuref{color:#​000} 
 +.menuseq b:​not(.caret),​.menuref{font-weight:​inherit} 
 +.menuseq{word-spacing:​-.02em} 
 +.menuseq b.caret{font-size:​1.25em;​line-height:​.8} 
 +.menuseq i.caret{font-weight:​bold;​text-align:​center;​width:​.45em} 
 +b.button::​before,​b.button::​after{position:​relative;​top:​-1px;​font-weight:​400} 
 +b.button::​before{content:"​[";​padding:​0 3px 0 2px} 
 +b.button::​after{content:"​]";​padding:​0 2px 0 3px} 
 +p a>​code:​hover{color:​rgba(0,​0,​0,​.9)} 
 +#​header,#​content,#​footnotes,#​footer{width:​100%;​margin-left:​auto;​margin-right:​auto;​margin-top:​0;​margin-bottom:​0;​max-width:​62.5em;​*zoom:​1;​position:​relative;​padding-left:​.9375em;​padding-right:​.9375em} 
 +#​header::​before,#​header::​after,#​content::​before,#​content::​after,#​footnotes::​before,#​footnotes::​after,#​footer::​before,#​footer::​after{content:"​ ";​display:​table} 
 +#​header::​after,#​content::​after,#​footnotes::​after,#​footer::​after{clear:​both} 
 +#​content{margin-top:​1.25em} 
 +#​content::​before{content:​none} 
 +#​header>​h1:​first-child{color:​rgba(0,​0,​0,​.85);​margin-top:​2.25rem;​margin-bottom:​0} 
 +#​header>​h1:​first-child+#​toc{margin-top:​8px;​border-top:​1px solid #dddddf} 
 +#​header>​h1:​only-child,​body.toc2 #​header>​h1:​nth-last-child(2){border-bottom:​1px solid #​dddddf;​padding-bottom:​8px} 
 +#header .details{border-bottom:​1px solid #​dddddf;​line-height:​1.45;​padding-top:​.25em;​padding-bottom:​.25em;​padding-left:​.25em;​color:​rgba(0,​0,​0,​.6);​display:​-ms-flexbox;​display:​-webkit-flex;​display:​flex;​-ms-flex-flow:​row wrap;​-webkit-flex-flow:​row wrap;​flex-flow:​row wrap} 
 +#header .details span:​first-child{margin-left:​-.125em} 
 +#header .details span.email a{color:​rgba(0,​0,​0,​.85)} 
 +#header .details br{display:​none} 
 +#header .details br+span::​before{content:"​\00a0\2013\00a0"​} 
 +#header .details br+span.author::​before{content:"​\00a0\22c5\00a0";​color:​rgba(0,​0,​0,​.85)} 
 +#header .details br+span#​revremark::​before{content:"​\00a0|\00a0"​} 
 +#header #​revnumber{text-transform:​capitalize} 
 +#header #​revnumber::​after{content:"​\00a0"​} 
 +#​content>​h1:​first-child:​not([class]){color:​rgba(0,​0,​0,​.85);​border-bottom:​1px solid #​dddddf;​padding-bottom:​8px;​margin-top:​0;​padding-top:​1rem;​margin-bottom:​1.25rem} 
 +#​toc{border-bottom:​1px solid #​e7e7e9;​padding-bottom:​.5em} 
 +#​toc>​ul{margin-left:​.125em} 
 +#toc ul.sectlevel0>​li>​a{font-style:​italic} 
 +#toc ul.sectlevel0 ul.sectlevel1{margin:​.5em 0} 
 +#toc ul{font-family:"​Open Sans","​DejaVu Sans",​sans-serif;​list-style-type:​none} 
 +#toc li{line-height:​1.3334;​margin-top:​.3334em} 
 +#toc a{text-decoration:​none} 
 +#toc a:​active{text-decoration:​underline} 
 +#​toctitle{color:#​7a2518;​font-size:​1.2em} 
 +@media screen and (min-width:​768px){#​toctitle{font-size:​1.375em} 
 +body.toc2{padding-left:​15em;​padding-right:​0} 
 +#​toc.toc2{margin-top:​0!important;​background:#​f8f8f7;​position:​fixed;​width:​15em;​left:​0;​top:​0;​border-right:​1px solid #​e7e7e9;​border-top-width:​0!important;​border-bottom-width:​0!important;​z-index:​1000;​padding:​1.25em 1em;​height:​100%;​overflow:​auto} 
 +#toc.toc2 #​toctitle{margin-top:​0;​margin-bottom:​.8rem;​font-size:​1.2em} 
 +#​toc.toc2>​ul{font-size:​.9em;​margin-bottom:​0} 
 +#toc.toc2 ul ul{margin-left:​0;​padding-left:​1em} 
 +#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:​0;​margin-top:​.5em;​margin-bottom:​.5em} 
 +body.toc2.toc-right{padding-left:​0;​padding-right:​15em} 
 +body.toc2.toc-right #​toc.toc2{border-right-width:​0;​border-left:​1px solid #​e7e7e9;​left:​auto;​right:​0}} 
 +@media screen and (min-width:​1280px){body.toc2{padding-left:​20em;​padding-right:​0} 
 +#​toc.toc2{width:​20em} 
 +#toc.toc2 #​toctitle{font-size:​1.375em} 
 +#​toc.toc2>​ul{font-size:​.95em} 
 +#toc.toc2 ul ul{padding-left:​1.25em} 
 +body.toc2.toc-right{padding-left:​0;​padding-right:​20em}} 
 +#content #​toc{border-style:​solid;​border-width:​1px;​border-color:#​e0e0dc;​margin-bottom:​1.25em;​padding:​1.25em;​background:#​f8f8f7;​-webkit-border-radius:​4px;​border-radius:​4px} 
 +#content #​toc>:​first-child{margin-top:​0} 
 +#content #​toc>:​last-child{margin-bottom:​0} 
 +#​footer{max-width:​none;​background:​rgba(0,​0,​0,​.8);​padding:​1.25em} 
 +#​footer-text{color:​rgba(255,​255,​255,​.8);​line-height:​1.44} 
 +#​content{margin-bottom:​.625em} 
 +.sect1{padding-bottom:​.625em} 
 +@media screen and (min-width:​768px){#​content{margin-bottom:​1.25em} 
 +.sect1{padding-bottom:​1.25em}} 
 +.sect1:​last-child{padding-bottom:​0} 
 +.sect1+.sect1{border-top:​1px solid #e7e7e9} 
 +#content h1>​a.anchor,​h2>​a.anchor,​h3>​a.anchor,#​toctitle>​a.anchor,​.sidebarblock>​.content>​.title>​a.anchor,​h4>​a.anchor,​h5>​a.anchor,​h6>​a.anchor{position:​absolute;​z-index:​1001;​width:​1.5ex;​margin-left:​-1.5ex;​display:​block;​text-decoration:​none!important;​visibility:​hidden;​text-align:​center;​font-weight:​400} 
 +#content h1>​a.anchor::​before,​h2>​a.anchor::​before,​h3>​a.anchor::​before,#​toctitle>​a.anchor::​before,​.sidebarblock>​.content>​.title>​a.anchor::​before,​h4>​a.anchor::​before,​h5>​a.anchor::​before,​h6>​a.anchor::​before{content:"​\00A7";​font-size:​.85em;​display:​block;​padding-top:​.1em} 
 +#content h1:​hover>​a.anchor,#​content h1>​a.anchor:​hover,​h2:​hover>​a.anchor,​h2>​a.anchor:​hover,​h3:​hover>​a.anchor,#​toctitle:​hover>​a.anchor,​.sidebarblock>​.content>​.title:​hover>​a.anchor,​h3>​a.anchor:​hover,#​toctitle>​a.anchor:​hover,​.sidebarblock>​.content>​.title>​a.anchor:​hover,​h4:​hover>​a.anchor,​h4>​a.anchor:​hover,​h5:​hover>​a.anchor,​h5>​a.anchor:​hover,​h6:​hover>​a.anchor,​h6>​a.anchor:​hover{visibility:​visible} 
 +#content h1>​a.link,​h2>​a.link,​h3>​a.link,#​toctitle>​a.link,​.sidebarblock>​.content>​.title>​a.link,​h4>​a.link,​h5>​a.link,​h6>​a.link{color:#​ba3925;​text-decoration:​none} 
 +#content h1>​a.link:​hover,​h2>​a.link:​hover,​h3>​a.link:​hover,#​toctitle>​a.link:​hover,​.sidebarblock>​.content>​.title>​a.link:​hover,​h4>​a.link:​hover,​h5>​a.link:​hover,​h6>​a.link:​hover{color:#​a53221} 
 +details,​.audioblock,​.imageblock,​.literalblock,​.listingblock,​.stemblock,​.videoblock{margin-bottom:​1.25em} 
 +details>​summary:​first-of-type{cursor:​pointer;​display:​list-item;​outline:​none;​margin-bottom:​.75em} 
 +.admonitionblock td.content>​.title,​.audioblock>​.title,​.exampleblock>​.title,​.imageblock>​.title,​.listingblock>​.title,​.literalblock>​.title,​.stemblock>​.title,​.openblock>​.title,​.paragraph>​.title,​.quoteblock>​.title,​table.tableblock>​.title,​.verseblock>​.title,​.videoblock>​.title,​.dlist>​.title,​.olist>​.title,​.ulist>​.title,​.qlist>​.title,​.hdlist>​.title{text-rendering:​optimizeLegibility;​text-align:​left;​font-family:"​Noto Serif","​DejaVu Serif",​serif;​font-size:​1rem;​font-style:​italic} 
 +table.tableblock.fit-content>​caption.title{white-space:​nowrap;​width:​0} 
 +.paragraph.lead>​p,#​preamble>​.sectionbody>​[class="​paragraph"​]:​first-of-type p{font-size:​1.21875em;​line-height:​1.6;​color:​rgba(0,​0,​0,​.85)} 
 +table.tableblock #​preamble>​.sectionbody>​[class="​paragraph"​]:​first-of-type p{font-size:​inherit} 
 +.admonitionblock>​table{border-collapse:​separate;​border:​0;​background:​none;​width:​100%} 
 +.admonitionblock>​table td.icon{text-align:​center;​width:​80px} 
 +.admonitionblock>​table td.icon img{max-width:​none} 
 +.admonitionblock>​table td.icon .title{font-weight:​bold;​font-family:"​Open Sans","​DejaVu Sans",​sans-serif;​text-transform:​uppercase} 
 +.admonitionblock>​table td.content{padding-left:​1.125em;​padding-right:​1.25em;​border-left:​1px solid #​dddddf;​color:​rgba(0,​0,​0,​.6);​word-wrap:​anywhere} 
 +.admonitionblock>​table td.content>:​last-child>:​last-child{margin-bottom:​0} 
 +.exampleblock>​.content{border-style:​solid;​border-width:​1px;​border-color:#​e6e6e6;​margin-bottom:​1.25em;​padding:​1.25em;​background:#​fff;​-webkit-border-radius:​4px;​border-radius:​4px} 
 +.exampleblock>​.content>:​first-child{margin-top:​0} 
 +.exampleblock>​.content>:​last-child{margin-bottom:​0} 
 +.sidebarblock{border-style:​solid;​border-width:​1px;​border-color:#​dbdbd6;​margin-bottom:​1.25em;​padding:​1.25em;​background:#​f3f3f2;​-webkit-border-radius:​4px;​border-radius:​4px} 
 +.sidebarblock>:​first-child{margin-top:​0} 
 +.sidebarblock>:​last-child{margin-bottom:​0} 
 +.sidebarblock>​.content>​.title{color:#​7a2518;​margin-top:​0;​text-align:​center} 
 +.exampleblock>​.content>:​last-child>:​last-child,​.exampleblock>​.content .olist>​ol>​li:​last-child>:​last-child,​.exampleblock>​.content .ulist>​ul>​li:​last-child>:​last-child,​.exampleblock>​.content .qlist>​ol>​li:​last-child>:​last-child,​.sidebarblock>​.content>:​last-child>:​last-child,​.sidebarblock>​.content .olist>​ol>​li:​last-child>:​last-child,​.sidebarblock>​.content .ulist>​ul>​li:​last-child>:​last-child,​.sidebarblock>​.content .qlist>​ol>​li:​last-child>:​last-child{margin-bottom:​0} 
 +.literalblock pre,​.listingblock>​.content>​pre{-webkit-border-radius:​4px;​border-radius:​4px;​overflow-x:​auto;​padding:​1em;​font-size:​.8125em} 
 +@media screen and (min-width:​768px){.literalblock pre,​.listingblock>​.content>​pre{font-size:​.90625em}} 
 +@media screen and (min-width:​1280px){.literalblock pre,​.listingblock>​.content>​pre{font-size:​1em}} 
 +.literalblock pre,​.listingblock>​.content>​pre:​not(.highlight),​.listingblock>​.content>​pre[class="​highlight"​],​.listingblock>​.content>​pre[class^="​highlight "​]{background:#​f7f7f8} 
 +.literalblock.output pre{color:#​f7f7f8;​background:​rgba(0,​0,​0,​.9)} 
 +.listingblock>​.content{position:​relative} 
 +.listingblock code[data-lang]::​before{display:​none;​content:​attr(data-lang);​position:​absolute;​font-size:​.75em;​top:​.425rem;​right:​.5rem;​line-height:​1;​text-transform:​uppercase;​color:​inherit;​opacity:​.5} 
 +.listingblock:​hover code[data-lang]::​before{display:​block} 
 +.listingblock.terminal pre .command::​before{content:​attr(data-prompt);​padding-right:​.5em;​color:​inherit;​opacity:​.5} 
 +.listingblock.terminal pre .command:​not([data-prompt])::​before{content:"​$"​} 
 +.listingblock pre.highlightjs{padding:​0} 
 +.listingblock pre.highlightjs>​code{padding:​1em;​-webkit-border-radius:​4px;​border-radius:​4px} 
 +.listingblock pre.prettyprint{border-width:​0} 
 +.prettyprint{background:#​f7f7f8} 
 +pre.prettyprint .linenums{line-height:​1.45;​margin-left:​2em} 
 +pre.prettyprint li{background:​none;​list-style-type:​inherit;​padding-left:​0} 
 +pre.prettyprint li code[data-lang]::​before{opacity:​1} 
 +pre.prettyprint li:​not(:​first-child) code[data-lang]::​before{display:​none} 
 +table.linenotable{border-collapse:​separate;​border:​0;​margin-bottom:​0;​background:​none} 
 +table.linenotable td[class]{color:​inherit;​vertical-align:​top;​padding:​0;​line-height:​inherit;​white-space:​normal} 
 +table.linenotable td.code{padding-left:​.75em} 
 +table.linenotable td.linenos{border-right:​1px solid currentColor;​opacity:​.35;​padding-right:​.5em} 
 +pre.pygments .lineno{border-right:​1px solid currentColor;​opacity:​.35;​display:​inline-block;​margin-right:​.75em} 
 +pre.pygments .lineno::​before{content:"";​margin-right:​-.125em} 
 +.quoteblock{margin:​0 1em 1.25em 1.5em;​display:​table} 
 +.quoteblock:​not(.excerpt)>​.title{margin-left:​-1.5em;​margin-bottom:​.75em} 
 +.quoteblock blockquote,​.quoteblock p{color:​rgba(0,​0,​0,​.85);​font-size:​1.15rem;​line-height:​1.75;​word-spacing:​.1em;​letter-spacing:​0;​font-style:​italic;​text-align:​justify} 
 +.quoteblock blockquote{margin:​0;​padding:​0;​border:​0} 
 +.quoteblock blockquote::​before{content:"​\201c";​float:​left;​font-size:​2.75em;​font-weight:​bold;​line-height:​.6em;​margin-left:​-.6em;​color:#​7a2518;​text-shadow:​0 1px 2px rgba(0,​0,​0,​.1)} 
 +.quoteblock blockquote>​.paragraph:​last-child p{margin-bottom:​0} 
 +.quoteblock .attribution{margin-top:​.75em;​margin-right:​.5ex;​text-align:​right} 
 +.verseblock{margin:​0 1em 1.25em} 
 +.verseblock pre{font-family:"​Open Sans","​DejaVu Sans",​sans;​font-size:​1.15rem;​color:​rgba(0,​0,​0,​.85);​font-weight:​300;​text-rendering:​optimizeLegibility} 
 +.verseblock pre strong{font-weight:​400} 
 +.verseblock .attribution{margin-top:​1.25rem;​margin-left:​.5ex} 
 +.quoteblock .attribution,​.verseblock .attribution{font-size:​.9375em;​line-height:​1.45;​font-style:​italic} 
 +.quoteblock .attribution br,​.verseblock .attribution br{display:​none} 
 +.quoteblock .attribution cite,​.verseblock .attribution cite{display:​block;​letter-spacing:​-.025em;​color:​rgba(0,​0,​0,​.6)} 
 +.quoteblock.abstract blockquote::​before,​.quoteblock.excerpt blockquote::​before,​.quoteblock .quoteblock blockquote::​before{display:​none} 
 +.quoteblock.abstract blockquote,​.quoteblock.abstract p,​.quoteblock.excerpt blockquote,​.quoteblock.excerpt p,​.quoteblock .quoteblock blockquote,​.quoteblock .quoteblock p{line-height:​1.6;​word-spacing:​0} 
 +.quoteblock.abstract{margin:​0 1em 1.25em;​display:​block} 
 +.quoteblock.abstract>​.title{margin:​0 0 .375em;​font-size:​1.15em;​text-align:​center} 
 +.quoteblock.excerpt>​blockquote,​.quoteblock .quoteblock{padding:​0 0 .25em 1em;​border-left:​.25em solid #dddddf} 
 +.quoteblock.excerpt,​.quoteblock .quoteblock{margin-left:​0} 
 +.quoteblock.excerpt blockquote,​.quoteblock.excerpt p,​.quoteblock .quoteblock blockquote,​.quoteblock .quoteblock p{color:​inherit;​font-size:​1.0625rem} 
 +.quoteblock.excerpt .attribution,​.quoteblock .quoteblock .attribution{color:​inherit;​font-size:​.85rem;​text-align:​left;​margin-right:​0} 
 +p.tableblock:​last-child{margin-bottom:​0} 
 +td.tableblock>​.content{margin-bottom:​1.25em;​word-wrap:​anywhere} 
 +td.tableblock>​.content>:​last-child{margin-bottom:​-1.25em} 
 +table.tableblock,​th.tableblock,​td.tableblock{border:​0 solid #dedede} 
 +table.grid-all>​*>​tr>​*{border-width:​1px} 
 +table.grid-cols>​*>​tr>​*{border-width:​0 1px} 
 +table.grid-rows>​*>​tr>​*{border-width:​1px 0} 
 +table.frame-all{border-width:​1px} 
 +table.frame-ends{border-width:​1px 0} 
 +table.frame-sides{border-width:​0 1px} 
 +table.frame-none>​colgroup+*>:​first-child>​*,​table.frame-sides>​colgroup+*>:​first-child>​*{border-top-width:​0} 
 +table.frame-none>:​last-child>:​last-child>​*,​table.frame-sides>:​last-child>:​last-child>​*{border-bottom-width:​0} 
 +table.frame-none>​*>​tr>:​first-child,​table.frame-ends>​*>​tr>:​first-child{border-left-width:​0} 
 +table.frame-none>​*>​tr>:​last-child,​table.frame-ends>​*>​tr>:​last-child{border-right-width:​0} 
 +table.stripes-all tr,​table.stripes-odd tr:​nth-of-type(odd),​table.stripes-even tr:​nth-of-type(even),​table.stripes-hover tr:​hover{background:#​f8f8f7} 
 +th.halign-left,​td.halign-left{text-align:​left} 
 +th.halign-right,​td.halign-right{text-align:​right} 
 +th.halign-center,​td.halign-center{text-align:​center} 
 +th.valign-top,​td.valign-top{vertical-align:​top} 
 +th.valign-bottom,​td.valign-bottom{vertical-align:​bottom} 
 +th.valign-middle,​td.valign-middle{vertical-align:​middle} 
 +table thead th,table tfoot th{font-weight:​bold} 
 +tbody tr th{background:#​f7f8f7} 
 +tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:​rgba(0,​0,​0,​.8);​font-weight:​bold} 
 +p.tableblock>​code:​only-child{background:​none;​padding:​0} 
 +p.tableblock{font-size:​1em} 
 +ol{margin-left:​1.75em} 
 +ul li ol{margin-left:​1.5em} 
 +dl dd{margin-left:​1.125em} 
 +dl dd:​last-child,​dl dd:​last-child>:​last-child{margin-bottom:​0} 
 +ol>li p,ul>li p,ul dd,ol dd,.olist .olist,​.ulist .ulist,​.ulist .olist,​.olist .ulist{margin-bottom:​.625em} 
 +ul.checklist,​ul.none,​ol.none,​ul.no-bullet,​ol.no-bullet,​ol.unnumbered,​ul.unstyled,​ol.unstyled{list-style-type:​none} 
 +ul.no-bullet,​ol.no-bullet,​ol.unnumbered{margin-left:​.625em} 
 +ul.unstyled,​ol.unstyled{margin-left:​0} 
 +ul.checklist{margin-left:​.625em} 
 +ul.checklist li>​p:​first-child>​.fa-square-o:​first-child,​ul.checklist li>​p:​first-child>​.fa-check-square-o:​first-child{width:​1.25em;​font-size:​.8em;​position:​relative;​bottom:​.125em} 
 +ul.checklist li>​p:​first-child>​input[type="​checkbox"​]:​first-child{margin-right:​.25em} 
 +ul.inline{display:​-ms-flexbox;​display:​-webkit-box;​display:​flex;​-ms-flex-flow:​row wrap;​-webkit-flex-flow:​row wrap;​flex-flow:​row wrap;​list-style:​none;​margin:​0 0 .625em -1.25em} 
 +ul.inline>​li{margin-left:​1.25em} 
 +.unstyled dl dt{font-weight:​400;​font-style:​normal} 
 +ol.arabic{list-style-type:​decimal} 
 +ol.decimal{list-style-type:​decimal-leading-zero} 
 +ol.loweralpha{list-style-type:​lower-alpha} 
 +ol.upperalpha{list-style-type:​upper-alpha} 
 +ol.lowerroman{list-style-type:​lower-roman} 
 +ol.upperroman{list-style-type:​upper-roman} 
 +ol.lowergreek{list-style-type:​lower-greek} 
 +.hdlist>​table,​.colist>​table{border:​0;​background:​none} 
 +.hdlist>​table>​tbody>​tr,​.colist>​table>​tbody>​tr{background:​none} 
 +td.hdlist1,​td.hdlist2{vertical-align:​top;​padding:​0 .625em} 
 +td.hdlist1{font-weight:​bold;​padding-bottom:​1.25em} 
 +td.hdlist2{word-wrap:​anywhere} 
 +.literalblock+.colist,​.listingblock+.colist{margin-top:​-.5em} 
 +.colist td:​not([class]):​first-child{padding:​.4em .75em 0;​line-height:​1;​vertical-align:​top} 
 +.colist td:​not([class]):​first-child img{max-width:​none} 
 +.colist td:​not([class]):​last-child{padding:​.25em 0} 
 +.thumb,​.th{line-height:​0;​display:​inline-block;​border:​solid 4px #​fff;​-webkit-box-shadow:​0 0 0 1px #​ddd;​box-shadow:​0 0 0 1px #ddd} 
 +.imageblock.left{margin:​.25em .625em 1.25em 0} 
 +.imageblock.right{margin:​.25em 0 1.25em .625em} 
 +.imageblock>​.title{margin-bottom:​0} 
 +.imageblock.thumb,​.imageblock.th{border-width:​6px} 
 +.imageblock.thumb>​.title,​.imageblock.th>​.title{padding:​0 .125em} 
 +.image.left,​.image.right{margin-top:​.25em;​margin-bottom:​.25em;​display:​inline-block;​line-height:​0} 
 +.image.left{margin-right:​.625em} 
 +.image.right{margin-left:​.625em} 
 +a.image{text-decoration:​none;​display:​inline-block} 
 +a.image object{pointer-events:​none} 
 +sup.footnote,​sup.footnoteref{font-size:​.875em;​position:​static;​vertical-align:​super} 
 +sup.footnote a,​sup.footnoteref a{text-decoration:​none} 
 +sup.footnote a:​active,​sup.footnoteref a:​active{text-decoration:​underline} 
 +#​footnotes{padding-top:​.75em;​padding-bottom:​.75em;​margin-bottom:​.625em} 
 +#footnotes hr{width:​20%;​min-width:​6.25em;​margin:​-.25em 0 .75em;​border-width:​1px 0 0} 
 +#footnotes .footnote{padding:​0 .375em 0 .225em;​line-height:​1.3334;​font-size:​.875em;​margin-left:​1.2em;​margin-bottom:​.2em} 
 +#footnotes .footnote a:​first-of-type{font-weight:​bold;​text-decoration:​none;​margin-left:​-1.05em} 
 +#footnotes .footnote:​last-of-type{margin-bottom:​0} 
 +#content #​footnotes{margin-top:​-.625em;​margin-bottom:​0;​padding:​.75em 0} 
 +.gist .file-data>​table{border:​0;​background:#​fff;​width:​100%;​margin-bottom:​0} 
 +.gist .file-data>​table td.line-data{width:​99%} 
 +div.unbreakable{page-break-inside:​avoid} 
 +.big{font-size:​larger} 
 +.small{font-size:​smaller} 
 +.underline{text-decoration:​underline} 
 +.overline{text-decoration:​overline} 
 +.line-through{text-decoration:​line-through} 
 +.aqua{color:#​00bfbf} 
 +.aqua-background{background:#​00fafa} 
 +.black{color:#​000} 
 +.black-background{background:#​000} 
 +.blue{color:#​0000bf} 
 +.blue-background{background:#​0000fa} 
 +.fuchsia{color:#​bf00bf} 
 +.fuchsia-background{background:#​fa00fa} 
 +.gray{color:#​606060} 
 +.gray-background{background:#​7d7d7d} 
 +.green{color:#​006000} 
 +.green-background{background:#​007d00} 
 +.lime{color:#​00bf00} 
 +.lime-background{background:#​00fa00} 
 +.maroon{color:#​600000} 
 +.maroon-background{background:#​7d0000} 
 +.navy{color:#​000060} 
 +.navy-background{background:#​00007d} 
 +.olive{color:#​606000} 
 +.olive-background{background:#​7d7d00} 
 +.purple{color:#​600060} 
 +.purple-background{background:#​7d007d} 
 +.red{color:#​bf0000} 
 +.red-background{background:#​fa0000} 
 +.silver{color:#​909090} 
 +.silver-background{background:#​bcbcbc} 
 +.teal{color:#​006060} 
 +.teal-background{background:#​007d7d} 
 +.white{color:#​bfbfbf} 
 +.white-background{background:#​fafafa} 
 +.yellow{color:#​bfbf00} 
 +.yellow-background{background:#​fafa00} 
 +span.icon>​.fa{cursor:​default} 
 +a span.icon>​.fa{cursor:​inherit} 
 +.admonitionblock td.icon [class^="​fa icon-"​]{font-size:​2.5em;​text-shadow:​1px 1px 2px rgba(0,​0,​0,​.5);​cursor:​default} 
 +.admonitionblock td.icon .icon-note::​before{content:"​\f05a";​color:#​19407c} 
 +.admonitionblock td.icon .icon-tip::​before{content:"​\f0eb";​text-shadow:​1px 1px 2px rgba(155,​155,​0,​.8);​color:#​111} 
 +.admonitionblock td.icon .icon-warning::​before{content:"​\f071";​color:#​bf6900} 
 +.admonitionblock td.icon .icon-caution::​before{content:"​\f06d";​color:#​bf3400} 
 +.admonitionblock td.icon .icon-important::​before{content:"​\f06a";​color:#​bf0000} 
 +.conum[data-value]{display:​inline-block;​color:#​fff!important;​background:​rgba(0,​0,​0,​.8);​-webkit-border-radius:​50%;​border-radius:​50%;​text-align:​center;​font-size:​.75em;​width:​1.67em;​height:​1.67em;​line-height:​1.67em;​font-family:"​Open Sans","​DejaVu Sans",​sans-serif;​font-style:​normal;​font-weight:​bold} 
 +.conum[data-value] *{color:#​fff!important} 
 +.conum[data-value]+b{display:​none} 
 +.conum[data-value]::​after{content:​attr(data-value)} 
 +pre .conum[data-value]{position:​relative;​top:​-.125em} 
 +b.conum *{color:​inherit!important} 
 +.conum:​not([data-value]):​empty{display:​none} 
 +dt,​th.tableblock,​td.content,​div.footnote{text-rendering:​optimizeLegibility} 
 +h1,​h2,​p,​td.content,​span.alt{letter-spacing:​-.01em} 
 +p strong,​td.content strong,​div.footnote strong{letter-spacing:​-.005em} 
 +p,​blockquote,​dt,​td.content,​span.alt{font-size:​1.0625rem} 
 +p{margin-bottom:​1.25rem} 
 +.sidebarblock p,​.sidebarblock dt,​.sidebarblock td.content,​p.tableblock{font-size:​1em} 
 +.exampleblock>​.content{background:#​fffef7;​border-color:#​e0e0dc;​-webkit-box-shadow:​0 1px 4px #​e0e0dc;​box-shadow:​0 1px 4px #e0e0dc} 
 +.print-only{display:​none!important} 
 +@page{margin:​1.25cm .75cm} 
 +@media print{*{-webkit-box-shadow:​none!important;​box-shadow:​none!important;​text-shadow:​none!important} 
 +html{font-size:​80%} 
 +a{color:​inherit!important;​text-decoration:​underline!important} 
 +a.bare,​a[href^="#"​],​a[href^="​mailto:"​]{text-decoration:​none!important} 
 +a[href^="​http:"​]:​not(.bare)::​after,​a[href^="​https:"​]:​not(.bare)::​after{content:"​("​ attr(href) "​)";​display:​inline-block;​font-size:​.875em;​padding-left:​.25em} 
 +abbr[title]::​after{content:"​ (" attr(title) "​)"​} 
 +pre,​blockquote,​tr,​img,​object,​svg{page-break-inside:​avoid} 
 +thead{display:​table-header-group} 
 +svg{max-width:​100%} 
 +p,​blockquote,​dt,​td.content{font-size:​1em;​orphans:​3;​widows:​3} 
 +h2,​h3,#​toctitle,​.sidebarblock>​.content>​.title{page-break-after:​avoid} 
 +#​header,#​content,#​footnotes,#​footer{max-width:​none} 
 +#​toc,​.sidebarblock,​.exampleblock>​.content{background:​none!important} 
 +#​toc{border-bottom:​1px solid #​dddddf!important;​padding-bottom:​0!important} 
 +body.book #​header{text-align:​center} 
 +body.book #​header>​h1:​first-child{border:​0!important;​margin:​2.5em 0 1em} 
 +body.book #header .details{border:​0!important;​display:​block;​padding:​0!important} 
 +body.book #header .details span:​first-child{margin-left:​0!important} 
 +body.book #header .details br{display:​block} 
 +body.book #header .details br+span::​before{content:​none!important} 
 +body.book #​toc{border:​0!important;​text-align:​left!important;​padding:​0!important;​margin:​0!important} 
 +body.book #​toc,​body.book #​preamble,​body.book h1.sect0,​body.book .sect1>​h2{page-break-before:​always} 
 +.listingblock code[data-lang]::​before{display:​block} 
 +#​footer{padding:​0 .9375em} 
 +.hide-on-print{display:​none!important} 
 +.print-only{display:​block!important} 
 +.hide-for-print{display:​none!important} 
 +.show-for-print{display:​inherit!important}} 
 +@media print,​amzn-kf8{#​header>​h1:​first-child{margin-top:​1.25rem} 
 +.sect1{padding:​0!important} 
 +.sect1+.sect1{border:​0} 
 +#​footer{background:​none} 
 +#​footer-text{color:​rgba(0,​0,​0,​.6);​font-size:​.9em}} 
 +@media amzn-kf8{#​header,#​content,#​footnotes,#​footer{padding:​0}} 
 +</​style>​ 
 +</​head>​ 
 +<body class="​article">​ 
 +<div id="​header">​ 
 +<​h1>​Terraform si Ansible</​h1>​ 
 +<div class="​details">​ 
 +<span id="​author"​ class="​author">​Sorin-Alexandru PADURARU</​span><​br>​ 
 +<span id="​email"​ class="​email"><​a href="​mailto:​sorin.paduraru@thalesgroup.com">​sorin.paduraru@thalesgroup.com</​a></​span><​br>​ 
 +<span id="​revnumber">​version TSS100,</​span>​ 
 +<span id="​revdate">​July 22, 2021</​span>​ 
 +</​div>​ 
 +</​div>​ 
 +<div class="​sect1">​ 
 +<h2 id="​_ce_facem_noi_astazi">​Ce facem noi astazi</​h2>​ 
 +<div class="​sectionbody">​ 
 +<div class="​sect2">​ 
 +<h3 id="​_scenariu_2">​Scenariu</​h3>​ 
 +<div class="​paragraph">​ 
 +<​p>​Incercam sa simulam exemplele din <a href="#​_iac_vs_click_click">​IaC vs click-click</​a>,​ respectiv cel din 
 +<a href="#​_configuration_management_vs_click_clack">​Configuration management vs click-clack</​a>​ folosind:</​p>​ 
 +</​div>​ 
 +<div class="​ulist">​ 
 +<​ul>​ 
 +<​li>​ 
 +<​p>​Docker pentru a simula un provider de masini virtuale</​p>​ 
 +</​li>​ 
 +<​li>​ 
 +<​p>​Terraform pentru a interactiona cu acest provider</​p>​ 
 +</​li>​ 
 +<​li>​ 
 +<​p>​Ansible,​ folosind 
 +<a href="​https://​docs.ansible.com/​ansible/​latest/​collections/​community/​docker/​docker_container_module.html">​pluginul Docker pentru inventar</​a>,​ 
 +pentru a aplica playbook-ul asupra acestor sisteme</​p>​ 
 +</​li>​ 
 +</​ul>​ 
 +</​div>​ 
 +</​div>​ 
 +<div class="​sect2">​ 
 +<h3 id="​_terraform_3">​Terraform</​h3>​ 
 +<div class="​sect3">​ 
 +<h4 id="​_cli">​CLI</​h4>​ 
 +<div class="​paragraph">​ 
 +<​p>​Descarcam si instalam utilitarul CLI Terraform:</​p>​ 
 +</​div>​ 
 +<div class="​listingblock">​ 
 +<div class="​content">​ 
 +<pre class="​highlight"><​code class="​language-sh"​ data-lang="​sh">​cd /​workspace/​student 
 +mkdir terraform 
 +cd terraform 
 +TF_VERSION="​1.0.2"​ 
 +curl -O https://​releases.hashicorp.com/​terraform/​${TF_VERSION}/​terraform_${TF_VERSION}_linux_amd64.zip 
 +unzip terraform_${TF_VERSION}_linux_amd64.zip 
 +chmod +x terraform</​code></​pre>​ 
 +</​div>​ 
 +</​div>​ 
 +</​div>​ 
 +<div class="​sect3">​ 
 +<h4 id="​_provider_2">​Provider</​h4>​ 
 +<div class="​paragraph">​ 
 +<​p>​Folosim un provider (neoficial) pentru a interactiona cu un demon <​em>​docker</​em>​ ce 
 +asculta pe sistemul de pe care rulam Terraform.</​p>​ 
 +</​div>​ 
 +<div class="​listingblock">​ 
 +<div class="​title">​provider.tf</​div>​ 
 +<div class="​content">​ 
 +<pre class="​highlight"><​code class="​language-hcl"​ data-lang="​hcl">​terraform { 
 +  required_providers { 
 +    docker = { 
 +      source ​ = "​kreuzwerker/​docker"​ 
 +      version = "​2.14.0"​ 
 +    } 
 +  } 
 +}
  
 +provider "​docker"​ {
 +  host = "​unix:///​var/​run/​docker.sock"​
 +}</​code></​pre>​
 +</​div>​
 +</​div>​
 +</​div>​
 +<div class="​sect3">​
 +<h4 id="​_modul_root">​Modul ROOT</​h4>​
 +<div class="​paragraph">​
 +<​p>​Vom declara intr-un fisier cu extensia <​code>​.tf</​code>​ faptul ca vrem sa cream doua
 +containere; le vom folosi pentru a simula crearea unor masini virtuale.</​p>​
 +</​div>​
 +<div class="​paragraph">​
 +<p>Un container ce ruleaza Debian, altul cu CentOS.</​p>​
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​title">​main.tf</​div>​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-hcl"​ data-lang="​hcl">​resource "​docker_container"​ "​debian"​ {
 +  name    = "​debian10"​
 +  image   = docker_image.debian.latest
 +  command = ["/​bin/​sh",​ "​-c",​ "while :; do sleep 100; done"]
  
 +  labels {
 +    label = "​Group"​
 +    value = "​summerschool"​
 +  }
 +
 +  env = [
 +    "​http_proxy=${var.http_proxy}",​
 +    "​https_proxy=${var.http_proxy}"​
 +  ]
 +
 +  mounts {
 +    source = "/​etc/​ssl/​certs/​ca-certificates.crt"​
 +    target = "/​etc/​ssl/​certs/​ca-certificates.crt"​
 +    read_only = true
 +    type    = "​bind"​
 +  }
 +}
 +
 +resource "​docker_image"​ "​debian"​ {
 +  name = "​python:​3.6-buster"​
 +}
 +
 +resource "​docker_container"​ "​centos"​ {
 +  name  = "​centos7"​
 +  image = docker_image.centos.latest
 +  command = ["/​bin/​sh",​ "​-c",​ "while :; do sleep 100; done"]
 +
 +  labels {
 +    label = "​Group"​
 +    value = "​summerschool"​
 +  }
 +
 +  env = [
 +    "​http_proxy=${var.http_proxy}",​
 +    "​https_proxy=${var.http_proxy}"​
 +  ]
 +
 +  mounts {
 +    source = "/​etc/​ssl/​certs/​ca-certificates.crt"​
 +    target = "/​etc/​pki/​tls/​cert.pem"​
 +    read_only = true
 +    type    = "​bind"​
 +  }
 +}
 +
 +resource "​docker_image"​ "​centos"​ {
 +  name = "​centos:​7.9.2009"​
 +}
 +
 +variable "​http_proxy"​ {
 +  description = "Proxy http pe care-l vrem pasat in interiorul containerului"​
 +  default ​    = "​http://​10.2.8.100:​3128"​
 +}</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​admonitionblock note">​
 +<​table>​
 +<tr>
 +<td class="​icon">​
 +<div class="​title">​Note</​div>​
 +</td>
 +<td class="​content">​
 +In reteaua corporate in care ne aflam avem cateva constrangeri,​ intre
 +care faptul ca trebuie sa iesim in Internet printr-un proxy i.e., <​code>​http_proxy</​code>​
 +si <​code>​https_proxy</​code>​ setate ca variabile in planurile de mai sus, respectiv CA-ul
 +de pe host pe care il montam in container i.e., block set-ul <​code>​mounts</​code>,​ pentru
 +ca cel din urma contine CA-urile de care avem nevoie in cadrul retelei. ​ Teste
 +efectuate in afara VM-urilor de studenti nu ar trebui sa aiba nevoie de aceste
 +modificari; pe de alta parte, e posibil sa aveti nevoie de parte din ele, sau
 +de altele :^)
 +</td>
 +</tr>
 +</​table>​
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​title">​Rulam <​code>​init</​code>​ pentru a aduce providerul de interes si pentru a initializa backend-ul</​div>​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-sh"​ data-lang="​sh">​./​terraform init
 +
 +Initializing the backend...
 +
 +Initializing provider plugins...
 +- Reusing previous version of kreuzwerker/​docker from the dependency lock file
 +- Using previously-installed kreuzwerker/​docker v2.14.0
 +
 +Terraform has been successfully initialized!
 +
 +You may now begin working with Terraform. Try running "​terraform plan" to see
 +any changes that are required for your infrastructure. All Terraform commands
 +should now work.
 +
 +If you ever set or change modules or backend configuration for Terraform,
 +rerun this command to reinitialize your working directory. If you forget, other
 +commands will detect it and remind you to do so if necessary.</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​title">​Rulam <​code>​apply</​code></​div>​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-sh"​ data-lang="​sh">​./​terraform apply
 +
 +Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
 +  + create
 +
 +Terraform will perform the following actions:
 +
 +  # docker_container.centos will be created
 +  + resource "​docker_container"​ "​centos"​ {
 +      + attach ​          = false
 +      + bridge ​          = (known after apply)
 +      + command ​         = [
 +          + "/​bin/​sh",​
 +          + "​-c",​
 +          + "while :; do sleep 100; done",
 +        ]
 +      + container_logs ​  = (known after apply)
 +      + entrypoint ​      = (known after apply)
 +      + env              = (known after apply)
 +      + exit_code ​       = (known after apply)
 +...</​code></​pre>​
 +</​div>​
 +</​div>​
 +</​div>​
 +<div class="​sect3">​
 +<h4 id="​_state_2">​State</​h4>​
 +<div class="​paragraph">​
 +<​p>​Stateul il vom tine local, fiecare pe masina lui de lucru.</​p>​
 +</​div>​
 +</​div>​
 +</​div>​
 +<div class="​sect2">​
 +<h3 id="​_ansible_3">​Ansible</​h3>​
 +<div class="​sect3">​
 +<h4 id="​_cli_2">​CLI</​h4>​
 +<div class="​listingblock">​
 +<div class="​title">​Instalam ansible</​div>​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-sh"​ data-lang="​sh">​cd /​workspace/​student
 +mkdir ansible
 +cd ansible
 +ANSIBLE_VERSION="​4.2.0"​
 +python3 -m venv /​workspace/​student/​venvs/​ansible
 +. /​workspace/​student/​venvs/​ansible/​bin/​activate
 +pip install -U pip
 +pip install ansible==${ANSIBLE_VERSION} docker-py</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​admonitionblock note">​
 +<​table>​
 +<tr>
 +<td class="​icon">​
 +<div class="​title">​Note</​div>​
 +</td>
 +<td class="​content">​
 +E posibil ca pe alte distributii,​ in afara acestui workshop, sa mai fie
 +nevoie de niste pachete pentru ca ansible sa se instaleze corect. ​ Urmati
 +instructiunile pip pentru a instala (folosind package managerul de sistem)
 +pachetele necesare sau instalati ansible din repository-urile oficiale; detalii
 +gasiti si in sectiunea <a href="#​_documentatie">​Documentatie</​a>​.
 +</td>
 +</tr>
 +</​table>​
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​title">​Configuram inventarul in <​code>/​workspace/​student/​ansible/​inv.docker.yml</​code></​div>​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-yml"​ data-lang="​yml">​---
 +plugin: community.docker.docker_containers
 +docker_host:​ unix://​var/​run/​docker.sock
 +connection_type:​ docker-cli
 +
 +
 +keyed_groups: ​                              # Cream grupuri
 +        - prefix: grup                      # prefixate cu grup_
 +          key: '​docker_config.Labels.Group'​ # pe baza label-ului numit Group configurat in resursa declarata in Terraform</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​paragraph">​
 +<​p>​Aplicam playbookul din sectiunea <a href="#​_configuration_management_vs_click_clack">​Configuration management vs click-clack</​a>:</​p>​
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​title">​playbook.yml</​div>​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-yaml"​ data-lang="​yaml">​---
 +- hosts: "{{ _hosts | default('​all'​) }}" ​  # executam asupra tuturor sistemelor despre care stim
 +  become_user:​ root                        # ne conectam ca si utilizatorul root
 +  vars:
 +    utilizatori:​
 +      - user: asterix # Parola este: asterix
 +        parola: "​$6$U9D8CKVFasZBXtfE$jElu7BDrU7bykn2LudE1moTKea3ffK5Tad0P9x2T/​U5y0rGm8Q4qcbm/​VivSvRy0Yk3b29V0rX3J.KH0UFMEP/"​
 +      - user: obelix
 +      - user: idefix
 +    pachete: ​  # definim o variabila de tip lista pentru stocarea numelor pachetelor
 +      - lynx
 +      - tmux
 +      - vsftpd
 +      - gcc
 +    motd: |
 +      Va rugam politicos sa nu folositi acest sistem daca nu aveti dreptul sa o faceti. ​ Multumim!
 +
 +      --- Panoramix si echipa
 +  tasks: ​      # executam pasii pe care ni-i dorim
 +    - name: Instalam grupul
 +      group:
 +        name: "​admini"​
 +
 +    - name: Instalam utilizatorii
 +      user:
 +        name: "{{ item.user }}"
 +        group: "​admini"​
 +        password: "{{ item.parola | default(omit) }}"
 +        state: present
 +      loop: "{{ utilizatori }}" # executam modulul `user` pentru fiecare utilizator
 +
 +    - name: Instalam pachetele
 +      package:
 +        name: "{{ pachete }}"
 +        state: present
 +
 +    - name: Aplicam bannerul
 +      copy:
 +        content: "{{ motd }}"
 +        dest: "/​etc/​motd"​
 +        owner: root
 +        group: root
 +        mode: "​0644"</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​paragraph">​
 +<​p>​asupra hosturilor parte din grupul <​code>​grup_summerschool</​code>:</​p>​
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-sh"​ data-lang="​sh">​cd /​workspace/​student/​ansible
 +. /​workspace/​student/​venvs/​ansible/​bin/​activate
 +ansible-playbook -i inv.docker.yml playbook.yml --extra-vars _hosts=grup_summerschool</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​title">​Verificam outputul aruncat de ansible</​div>​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-sh"​ data-lang="​sh">​PLAY [grup_summerschool] ************************************************************************
 +
 +TASK [Gathering Facts] **************************************************************************
 +ok: [centos7]
 +ok: [debian10]
 +
 +TASK [Instalam grupul] **************************************************************************
 +changed: [debian10]
 +changed: [centos7]
 +
 +TASK [Instalam utilizatorii] ********************************************************************
 +changed: [debian10] =&gt; (item={'​user':​ '​asterix',​ '​parola':​ '​$6$U9D8CKVFasZBXtfE$jElu7BDrU7bykn2LudE1moTKea3ffK5Tad0P9x2T/​U5y0rGm8Q4qcbm/​VivSvRy0Yk3b29V0rX3J.KH0UFMEP/'​})
 +changed: [centos7] =&gt; (item={'​user':​ '​asterix',​ '​parola':​ '​$6$U9D8CKVFasZBXtfE$jElu7BDrU7bykn2LudE1moTKea3ffK5Tad0P9x2T/​U5y0rGm8Q4qcbm/​VivSvRy0Yk3b29V0rX3J.KH0UFMEP/'​})
 +changed: [debian10] =&gt; (item={'​user':​ '​obelix'​})
 +changed: [centos7] =&gt; (item={'​user':​ '​obelix'​})
 +changed: [debian10] =&gt; (item={'​user':​ '​idefix'​})
 +changed: [centos7] =&gt; (item={'​user':​ '​idefix'​})
 +
 +TASK [Instalam pachetele] ***********************************************************************
 +changed: [debian10]
 +changed: [centos7]
 +
 +TASK [Aplicam bannerul] *************************************************************************
 +changed: [centos7]
 +changed: [debian10]
 +
 +PLAY RECAP **************************************************************************************
 +centos7 ​  : ok=5    changed=4 ​   unreachable=0 ​   failed=0 ​   skipped=0 ​   rescued=0 ​   ignored=0
 +debian10 ​ : ok=5    changed=4 ​   unreachable=0 ​   failed=0 ​   skipped=0 ​   rescued=0 ​   ignored=0</​code></​pre>​
 +</​div>​
 +</​div>​
 +</​div>​
 +</​div>​
 +<div class="​sect2">​
 +<h3 id="​_verificari_si_incheiere">​Verificari si incheiere</​h3>​
 +<div class="​listingblock">​
 +<div class="​title">​Userul <​code>​idefix</​code>,​ parte a grupului <​code>​admini</​code></​div>​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-sh"​ data-lang="​sh">​docker exec -ti debian10 id idefix
 +uid=1002(idefix) gid=1000(admini) groups=1000(admini)</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​title">​Autentificare pe sistem, afisare banner</​div>​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-sh"​ data-lang="​sh">​docker exec -ti centos7 login asterix
 +Password:
 +Linux 1ecf0b33205b 4.15.0-76-generic #86-Ubuntu SMP Fri Jan 17 17:24:28 UTC 2020 x86_64
 +Va rugam politicos sa nu folositi acest sistem daca nu aveti dreptul sa o
 +faceti. ​ Multumim!
 +
 +--- Panoramix
 +$</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​title">​Existenta pachete pe sistem</​div>​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-sh"​ data-lang="​sh">​docker exec -ti centos7 /bin/sh -c 'rpm -qa | grep vsftpd'​
 +vsftpd-3.0.2-29.el7_9.x86_64</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​title">​Curatare mediu</​div>​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-sh"​ data-lang="​sh">​cd /​workspace/​student/​terraform
 +./terraform destroy</​code></​pre>​
 +</​div>​
 +</​div>​
 +</​div>​
 +<div class="​sect2">​
 +<h3 id="​_felicitari">​Felicitari</​h3>​
 +<div class="​listingblock">​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-sh"​ data-lang="​sh">########​ ######## ##       #### ​ ###### ​ #### ######## ​   ###    ######## ​ ####
 +##       ## ​      ## ​       ##  ##    ##  ##     ## ​     ## ##   ## ​    ## ​ ##
 +##       ## ​      ## ​       ##  ##        ##     ## ​    ## ​  ## ​ ##     ## ​ ##
 +###### ​  ###### ​  ## ​       ##  ##        ##     ## ​   ##     ## ######## ​  ##
 +##       ## ​      ## ​       ##  ##        ##     ## ​   ######### ##   ## ​   ##
 +##       ## ​      ## ​       ##  ##    ##  ##     ## ​   ##     ## ##    ##   ##
 +##       ########​ ######## ####  ###### ​ ####    ##    ##     ## ##     ## ####</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​paragraph">​
 +<​p>​Asta a fost tot, toate bune!</​p>​
 +</​div>​
 +</​div>​
 +</​div>​
 +</​div>​
 +<div class="​sect1">​
 +</​html>​
devops/laboratoare/03.txt · Last modified: 2021/07/21 00:13 by sorin.paduraru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0