Differences

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

Link to this comparison view

devops:cursuri:03 [2021/05/24 17:37]
127.0.0.1 external edit
devops:cursuri:03 [2021/07/28 16:28] (current)
bogdan.croitoru
Line 1: Line 1:
-==== Cursul 03.  ====+==== Cursul 03. Terraform si Ansible ==== 
 +Pentru cea mai recenta versiune a acestui document intrati [[https://​t0244759.pages.thalesdigital.io/​iac-config-management/​|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 id="​toc"​ class="​toc">​ 
 +<div id="​toctitle">​Table of Contents</​div>​ 
 +<ul class="​sectlevel1">​ 
 +<​li><​a href="#​_disclaimer">​Disclaimer</​a></​li>​ 
 +<​li><​a href="#​_iac_infrastructure_as_code">​IaC - Infrastructure as Code</​a>​ 
 +<ul class="​sectlevel2">​ 
 +<​li><​a href="#​_iac_vs_click_click">​IaC vs click-click</​a></​li>​ 
 +<​li><​a href="#​_terraform">​Terraform</​a></​li>​ 
 +<​li><​a href="#​_ansible">​Ansible?</​a></​li>​ 
 +</​ul>​ 
 +</​li>​ 
 +<​li><​a href="#​_software_provision_configuration_management_app_deployment">​Software provision, Configuration management, App deployment</​a>​ 
 +<ul class="​sectlevel2">​ 
 +<​li><​a href="#​_configuration_management_vs_click_clack">​Configuration management vs click-clack</​a></​li>​ 
 +<​li><​a href="#​_ansible_2">​Ansible</​a></​li>​ 
 +</​ul>​ 
 +</​li>​ 
 +<​li><​a href="#​_documentatie">​Documentatie</​a></​li>​ 
 +</​ul>​ 
 +</​div>​ 
 +</​div>​ 
 +<div id="​content">​ 
 +<div class="​sect1">​ 
 +<h2 id="​_disclaimer">​Disclaimer</​h2>​ 
 +<div class="​sectionbody">​ 
 +<div class="​paragraph">​ 
 +<​p>​Informatiile de mai jos expun o mica parte a capabilitatilor uneltelor 
 +prezentate precum si unul dintre numeroasele contexte si scenarii in care pot 
 +fi folosite acestea.</​p>​ 
 +</​div>​ 
 +<div class="​paragraph">​ 
 +<​p><​strong>​Nu</​strong>​ presupuneti ca o problema similara trebuie rezolvata in modul expus aici 
 +sau ca aceasta e <​em>​abordarea corecta</​em>;​ scopul acestui document este de a expune</​p>​ 
 +</​div>​ 
 +<div class="​ulist">​ 
 +<​ul>​ 
 +<​li>​ 
 +<p>o <​strong>​mica</​strong>​ parte din ce pot face aceste unelte</​p>​ 
 +</​li>​ 
 +<​li>​ 
 +<p>un scenariu pur teoretic, cu putina aplicabilitate practica</​p>​ 
 +</​li>​ 
 +</​ul>​ 
 +</​div>​ 
 +<div class="​paragraph">​ 
 +<​p>​astfel incat sa va formati o opinie despre conceptele de baza din jurul lor.</​p>​ 
 +</​div>​ 
 +</​div>​ 
 +</​div>​ 
 +<div class="​sect1">​ 
 +<h2 id="​_iac_infrastructure_as_code">​IaC - Infrastructure as Code</​h2>​ 
 +<div class="​sectionbody">​ 
 +<div class="​paragraph">​ 
 +<​p>​Conceptul se refera la acea categorie de unelte care ne ajuta sa mentinem 
 +resursele dintr-un mediu de lucru sub forma de text.</​p>​ 
 +</​div>​ 
 +<div class="​paragraph">​ 
 +<​p>​Resursele ce pot fi administrate fac parte dintr-o plaja foarte larga de 
 +tehnologii si pot contine:</​p>​ 
 +</​div>​ 
 +<div class="​ulist horizontal">​ 
 +<ul class="​horizontal">​ 
 +<​li>​ 
 +<​p>​resurse IaaS:: Infrastructure as a Service</​p>​ 
 +<div class="​ulist">​ 
 +<​ul>​ 
 +<​li>​ 
 +<​p>​masini virtuale</​p>​ 
 +</​li>​ 
 +<​li>​ 
 +<​p>​instante dedicate de baze de date: Database as a Service e.g., AWS RDS 
 +i.e., Relational Database Service</​p>​ 
 +</​li>​ 
 +<​li>​ 
 +<​p>​volume:​ discuri i.e., block devices</​p>​ 
 +</​li>​ 
 +<​li>​ 
 +<​p>​routere virtuale: AWS VPC i.e., Virtual Private Cloud, MS Azure Virtual 
 +Network</​p>​ 
 +</​li>​ 
 +<​li>​ 
 +<​p>​subneturi</​p>​ 
 +</​li>​ 
 +<​li>​ 
 +<​p>&#​8230;&#​8203;</​p>​ 
 +</​li>​ 
 +</​ul>​ 
 +</​div>​ 
 +</​li>​ 
 +<​li>​ 
 +<​p>​resurse SaaS:: Software as a Service</​p>​ 
 +<div class="​ulist">​ 
 +<​ul>​ 
 +<​li>​ 
 +<​p>​Instante i.e., scheme de baze de date</​p>​ 
 +</​li>​ 
 +<​li>​ 
 +<​p>​Utilizatori in respectivele baze de date</​p>​ 
 +</​li>​ 
 +<​li>​ 
 +<​p>​Clustere Kubernetes</​p>​ 
 +</​li>​ 
 +<​li>​ 
 +<​p>​Load Balancere L3/​L7</​p>​ 
 +</​li>​ 
 +<​li>​ 
 +<​p>&#​8230;&#​8203;</​p>​ 
 +</​li>​ 
 +</​ul>​ 
 +</​div>​ 
 +</​li>​ 
 +<​li>​ 
 +<​p>​resurse arbitrare</​p>​ 
 +<div class="​ulist">​ 
 +<​ul>​ 
 +<​li>​ 
 +<​p>​Proiecte,​ grupuri, etc in platforme precum GitLab</​p>​ 
 +</​li>​ 
 +<​li>​ 
 +<​p>​record-uri in DNS</​p>​ 
 +</​li>​ 
 +<​li>​ 
 +<​p>​containere intr-un host Docker</​p>​ 
 +</​li>​ 
 +<​li>​ 
 +<​p>&#​8230;&#​8203;</​p>​ 
 +</​li>​ 
 +</​ul>​ 
 +</​div>​ 
 +</​li>​ 
 +</​ul>​ 
 +</​div>​ 
 +<div class="​paragraph">​ 
 +<​p>​Informatii suplimentare despre subiect gasiti pe 
 +<a href="​https://​en.wikipedia.org/​wiki/​Infrastructure_as_Code">​Wikipedia</​a>​.</​p>​ 
 +</​div>​ 
 +<div class="​sect2">​ 
 +<h3 id="​_iac_vs_click_click">​IaC vs click-click</​h3>​ 
 +<div class="​paragraph">​ 
 +<​p>​Cream mai jos o masina virtuala intr-o instanta 
 +<a href="​https://​en.wikipedia.org/​wiki/​OpenStack">​OpenStack</​a>​ folosind <a href="​https://​registry.terraform.io/​providers/​terraform-provider-openstack/​openstack/​latest/​docs">​providerul OpenStack</​a>​ 
 +pentru Terraform:</​p>​ 
 +</​div>​ 
 +<div class="​listingblock">​ 
 +<div class="​content">​ 
 +<pre class="​highlight"><​code class="​language-hcl"​ data-lang="​hcl">​resource "​openstack_compute_instance_v2"​ "​instance"​ { 
 +  name        ​"​vm-de-test"​ 
 +  image_id ​   ​"​ubuntu-bionic"​ 
 +  flavor_name ​"​m1.small"​ 
 +  key_pair ​   ​"​ssh-rsa a@b"
  
 +  network {
 +    name = "​summer-school-net"​
 +  }
 +}</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​paragraph">​
 +<​p>​Spre deosebire de cateva operatiuni manuale:</​p>​
 +</​div>​
 +<div class="​imageblock">​
 +<div class="​content">​
 +<img src="​openstack-manual.PNG"​ alt="​Operatiuni manuale pentru replicarea declaratiei de mai sus">​
 +</​div>​
 +</​div>​
 +<div class="​sect3">​
 +<h4 id="​_alte_unelte_folosite_in_acest_sens">​Alte unelte folosite in acest sens</​h4>​
 +<div class="​ulist">​
 +<ul>
 +<li>
 +<​p><​a href="​https://​en.wikipedia.org/​wiki/​Ansible_(software)">​Ansible</​a></​p>​
 +</li>
 +<li>
 +<​p><​a href="​https://​en.wikipedia.org/​wiki/​Puppet_(software)">​Puppet</​a></​p>​
 +</li>
 +<li>
 +<​p><​a href="​https://​en.wikipedia.org/​wiki/​Salt_(software)">​SaltStack</​a></​p>​
 +</li>
 +<li>
 +<​p>​Vedeti linkul catre <a href="​https://​en.wikipedia.org/​wiki/​Infrastructure_as_Code">​IaC</​a>​ de mai sus pentru
 +mai multe detalii</​p>​
 +</li>
 +</ul>
 +</​div>​
 +</​div>​
 +</​div>​
 +<div class="​sect2">​
 +<h3 id="​_terraform">​Terraform</​h3>​
 +<div class="​paragraph">​
 +<​p>​Terraform este o unealta IaC ce foloseste modelul
 +<a href="​https://​en.wikipedia.org/​wiki/​Declarative_programming">​declarativ</​a>​.
 +Conceptele de baza sunt decrise mai jos.</​p>​
 +</​div>​
 +<div class="​sect3">​
 +<h4 id="​_modulul_root">​Modulul ROOT</​h4>​
 +<div class="​paragraph">​
 +<p>In diferite locuri i.e., locuri de munca, proiecte, etc, li se mai spune si
 +<​em>​planuri</​em>;​ oricare ar fi numele utilizat, se refera la radacina directorului in
 +care adaugam fisiere text cu extensia <​code>​.tf</​code>​ in care declaram resursele pe care
 +dorim sa le administram;​ sunt citite de Terraform si pe baza lor opereaza
 +acesta potentiale modificari.</​p>​
 +</​div>​
 +<div class="​paragraph">​
 +<​p>​Radacina unor <​em>​planuri</​em>​ se mai numeste si <​code>​modul ROOT</​code>​.</​p>​
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-sh"​ data-lang="​sh">​$ tree summer-school/​
 +summer-school/ ​     # Radacina planurilor i.e., modulul ROOT
 +├── main.tf ​        # Nume arbitrar pentru fisier text in care declaram resurse
 +├── provider.tf ​    # Nume arbitrar pentru fisier text in care declaram providerul folosit
 +├── terraform.state # State terraform tinut local
 +└── README.adoc ​    # Documentatie privind scopul directorului/​planurilor</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​sect4">​
 +<h5 id="​_alte_module">​Alte module</​h5>​
 +<div class="​paragraph">​
 +<​p>​Modulele pot incapsula tot felul de functionalitati e.g.:</​p>​
 +</​div>​
 +<div class="​ulist">​
 +<ul>
 +<li>
 +<​p>​creare de masini virtuale cu volume atasate</​p>​
 +</li>
 +<li>
 +<​p>​creare de masini virtuale cu numar dinamic de interfete de retea si intrari
 +in DNS</​p>​
 +</li>
 +<li>
 +<​p>​SaaS:​ Clustere Consul in AWS, Cluster Kubernetes in Azure etc</​p>​
 +</li>
 +</ul>
 +</​div>​
 +<div class="​paragraph">​
 +<​p>​Mai multe despre ele puteti citi in <a href="​https://​www.terraform.io/​docs/​language/​modules/​index.html">​documentatia</​a>​
 +oficiala.</​p>​
 +</​div>​
 +</​div>​
 +</​div>​
 +<div class="​sect3">​
 +<h4 id="​_provider">​Provider</​h4>​
 +<div class="​paragraph">​
 +<​p>​Terraform foloseste conceptul de <a href="​https://​www.terraform.io/​docs/​language/​providers/​index.html">​provider</​a>​
 +pentru a interactiona cu diversi furnizori de servicii si/sau infrastructura:</​p>​
 +</​div>​
 +<div class="​ulist">​
 +<ul>
 +<li>
 +<​p>​provideri cloud</​p>​
 +</li>
 +<li>
 +<​p>​instante baze de date</​p>​
 +</li>
 +<li>
 +<​p>​routere</​p>​
 +</li>
 +</ul>
 +</​div>​
 +<div class="​paragraph">​
 +<​p>​Oricare dintre resursele declarate in <a href="#​_modulul_root">​Modulul ROOT</​a>​ sau in
 +<a href="#​_alte_module">​alte module</​a>​ vor fi legate de providerul folosit. ​ Spre
 +exemplu, o resursa de tip masina virtuala pentru OpenStack nu poate fi folosita
 +in Amazon AWS; fiecare provider are specificul lui si serviciile proprii, macar
 +usor diferite de ale celorlalti provideri.</​p>​
 +</​div>​
 +<div class="​ulist">​
 +<ul>
 +<li>
 +<​p>​Poti folosi unul sau mai multi provideri pentru a administra resursele dorite</​p>​
 +</li>
 +<li>
 +<​p>​Poti folosi acelasi provider
 +<a href="​https://​www.terraform.io/​docs/​language/​providers/​configuration.html#​alias-multiple-provider-configurations">​de mai multe ori</​a>​
 +pentru scenarii aparte</​p>​
 +</li>
 +</ul>
 +</​div>​
 +</​div>​
 +<div class="​sect3">​
 +<h4 id="​_state">​State</​h4>​
 +<div class="​paragraph">​
 +<​p>​Terraform tine
 +<a href="​https://​www.terraform.io/​docs/​language/​state/​index.htm">​starea</​a><​sup class="​footnote">​[<​a id="​_footnoteref_1"​ class="​footnote"​ href="#​_footnotedef_1"​ title="​View footnote.">​1</​a>​]</​sup>​ reala a resurselor intr-un fisier
 +<​em>​oarecum</​em>​ JSON, in care inregistreaza pe care dintre resursele declarate in
 +<a href="#​_modulul_root">​planuri</​a>​ a reusit sa le creeze <a href="#​_provider">​provider</​a>​-ul,​
 +precum si metadatele asociate.</​p>​
 +</​div>​
 +<div class="​paragraph">​
 +<​p>​State-ul poate fi stocat pe masina de pe care rulam Terraform sau poate fi
 +stocat intr-unul din
 +<a href="​https://​www.terraform.io/​docs/​language/​settings/​backends/​index.html">​backend-urile</​a>​
 +remote suportate e.g.:</​p>​
 +</​div>​
 +<div class="​ulist">​
 +<ul>
 +<li>
 +<​p>​consul</​p>​
 +</li>
 +<li>
 +<​p>​azurerm</​p>​
 +</li>
 +<li>
 +<​p>​etcd</​p>​
 +</li>
 +</ul>
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​title">​Structura fisier state Terraform</​div>​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-json"​ data-lang="​json">​{
 +    "​version":​ 3,
 +    "​serial":​ 1,
 +    "​lineage":​ "​6bae2eff-3a14-945e-035c-9796accc5887",​
 +    "​backend":​ {
 +        "​type":​ "​swift",​
 +        "​config":​ {
 +            "​allow_reauth":​ null,
 +            "​application_credential_id":​ null,
 +
 +...
 +}</​code></​pre>​
 +</​div>​
 +</​div>​
 +</​div>​
 +</​div>​
 +<div class="​sect2">​
 +<h3 id="​_ansible">​Ansible?</​h3>​
 +<div class="​paragraph">​
 +<​p>​Da,​ si Ansible poate fi folosit pentru IaC:</​p>​
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-yaml"​ data-lang="​yaml">​- name:  Creeaza o instanta
 +  openstack.cloud.server:​
 +    state: present
 +    auth:
 +      auth_url: https://​endpoint.iam.instanta.openstack.lan
 +      username: admin
 +      password: admin
 +      project_name:​ summer-school
 +    name: vm-de-test
 +    image: ubuntu-bionic
 +    key_name: "​ssh-rsa a@b"
 +    timeout: 200
 +    flavor: "​m1.small"​
 +    network: "​summer-school-net"</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​paragraph">​
 +<​p>​Vrei sa folosesti Ansible pentru IaC?  <​strong>​Poate</​strong>;​ eu nu.</​p>​
 +</​div>​
 +<div class="​paragraph">​
 +<​p>​Poate daca:</​p>​
 +</​div>​
 +<div class="​ulist">​
 +<ul>
 +<li>
 +<​p>​Proiectul pe care lucrezi a investit masiv in asta</​p>​
 +</li>
 +<li>
 +<​p>​Cei implicati stiu doar Ansible</​p>​
 +</li>
 +</ul>
 +</​div>​
 +<div class="​paragraph">​
 +<​p>​Altfel,​ as spune ca:</​p>​
 +</​div>​
 +<div class="​ulist">​
 +<ul>
 +<li>
 +<​p>​Modelul implicit Ansible este de a se conecta la sisteme remote; aici
 +modulele s-ar executa pe hostul de pe care rulam Ansible &#8594; inventarul ar
 +putea arata cam ciudat</​p>​
 +</li>
 +<li>
 +<p>Nu exista un raspuns <​em>​corect</​em>;​ nu il cautati</​p>​
 +</li>
 +</ul>
 +</​div>​
 +</​div>​
 +</​div>​
 +</​div>​
 +<div class="​sect1">​
 +<h2 id="​_software_provision_configuration_management_app_deployment">​Software provision, Configuration management, App deployment</​h2>​
 +<div class="​sectionbody">​
 +<div class="​paragraph">​
 +<p>Cu toate ca linia de demarcatie e difuza, spre deosebire de IaC, in zona de
 +configuration management, app deployment etc, atentia e indreptata asupra altor
 +aspecte, precum:</​p>​
 +</​div>​
 +<div class="​ulist">​
 +<ul>
 +<li>
 +<​p>​serviciile</​p>​
 +</li>
 +<li>
 +<​p>​pachetele</​p>​
 +</li>
 +<li>
 +<​p>​utilizatorii</​p>​
 +</li>
 +<li>
 +<​p>​deployment-ului de aplicatii custom</​p>​
 +</li>
 +</ul>
 +</​div>​
 +<div class="​paragraph">​
 +<p>de pe un sistem dat.  Altfel spus, mai putin asupra resurselor de
 +infrastructura si mai mult asupra serviciilor si ecosistemului serviciilor
 +respective.</​p>​
 +</​div>​
 +<div class="​sect2">​
 +<h3 id="​_configuration_management_vs_click_clack">​Configuration management vs click-clack</​h3>​
 +<div class="​sect3">​
 +<h4 id="​_scenariu">​Scenariu</​h4>​
 +<div class="​paragraph">​
 +<​p>​Vrem sa:</​p>​
 +</​div>​
 +<div class="​ulist">​
 +<ul>
 +<li>
 +<​p>​cream trei utilizatori,​ toti parte a grupului primar <​code>​admini</​code>:</​p>​
 +<div class="​ulist">​
 +<ul>
 +<li>
 +<​p>​asterix</​p>​
 +</li>
 +<li>
 +<​p>​obelix</​p>​
 +</li>
 +<li>
 +<​p>​idefix</​p>​
 +</li>
 +</ul>
 +</​div>​
 +</li>
 +<li>
 +<​p>​instalam patru pachete:</​p>​
 +<div class="​ulist">​
 +<ul>
 +<li>
 +<​p>​lynx</​p>​
 +</li>
 +<li>
 +<​p>​tmux</​p>​
 +</li>
 +<li>
 +<​p>​vsftpd</​p>​
 +</li>
 +<li>
 +<​p>​gcc</​p>​
 +</li>
 +</ul>
 +</​div>​
 +</li>
 +<li>
 +<​p>​configuram un banner specific la login:</​p>​
 +</li>
 +</ul>
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-sh"​ data-lang="​sh">​Va rugam politicos sa nu folositi acest sistem daca nu aveti dreptul sa o faceti. ​ Multumim!
 +
 +--- Panoramix si echipa</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​paragraph">​
 +<p>pe o distributie Debian 10 si pe o distributie CentOS 7.
 +Mai intai aratam cum se face 'de mana' dupa documentatie si-apoi vedem cum
 +se poate face folosind o unealta de configuration management.</​p>​
 +</​div>​
 +<div class="​sect4">​
 +<h5 id="​_click_clack">​Click-clack</​h5>​
 +<div class="​listingblock">​
 +<div class="​title">​Cream utilizatorii pe ambele sisteme folosind aceleasi comenzi</​div>​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-sh"​ data-lang="​sh">​sudo groupadd admini
 +sudo useradd asterix --gid admini
 +sudo passwd asterix # adaugam o parola pentru userul asterix
 +sudo useradd obelix --gid admini
 +sudo useradd idefix --gid admini</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​title">​Pe Debian instalam pachetele cu</​div>​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-sh"​ data-lang="​sh">​sudo apt-get update
 +sudo apt-get install lynx tmux vsftpd gcc</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​title">​Pe CentOS instalam pachetele cu:</​div>​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-sh"​ data-lang="​sh">​sudo yum install lynx tmux vsftpd gcc</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​title">​Aplicam bannerul ce trebuie afisat la login</​div>​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-sh"​ data-lang="​sh">​cat &​lt;&​lt;​EOF &gt; /​workspace/​student/​motd
 +Va rugam politicos sa nu folositi acest sistem daca nu aveti dreptul sa o faceti. ​ Multumim!
 +
 +--- Panoramix si echipa
 +EOF
 +sudo mv /​workspace/​student/​motd /​etc/​motd</​code></​pre>​
 +</​div>​
 +</​div>​
 +</​div>​
 +<div class="​sect4">​
 +<h5 id="​_configuration_management">​Configuration management</​h5>​
 +<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>​
 +</​div>​
 +<div class="​sect3">​
 +<h4 id="​_terraform_2">​Terraform?</​h4>​
 +<div class="​paragraph">​
 +<​p>​Cum ar veni, putem folosi Terraform in scopul asta?  Nu.</​p>​
 +</​div>​
 +</​div>​
 +<div class="​sect3">​
 +<h4 id="​_alte_solutii">​Alte solutii?</​h4>​
 +<div class="​paragraph">​
 +<​p>​Destule,​ nu toate se muleaza 1:1 pe situatia de mai sus.</​p>​
 +</​div>​
 +</​div>​
 +</​div>​
 +<div class="​sect2">​
 +<h3 id="​_ansible_2">​Ansible</​h3>​
 +<div class="​sect3">​
 +<h4 id="​_inventar">​Inventar</​h4>​
 +<div class="​paragraph">​
 +<​p>​Unul sau mai multe fisiere statice, dinamice, sau combinatie intre aceste
 +variante prin care definim sistemele pe care dorim sa le administram.</​p>​
 +</​div>​
 +<div class="​paragraph">​
 +<​p>​Pentru constructia inventarului,​ ansible se foloseste de plugin-uri; acestea
 +pot citi hosturi din fisiere in formate precum <​code>​.ini</​code>​ sau <​code>​.yaml</​code>,​ sau pot
 +executa scripturi care la randul lor culeg informatii despre hosturile pe care
 +dorim sa le administram.</​p>​
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​title">​Doua hosturi parte din grupul <​code>​all</​code>,​ unul parte din grupul <​code>​debian</​code>,​ intr-un inventar static in format <​code>​.ini</​code></​div>​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-ini"​ data-lang="​ini">​[all]
 +sistem1.lan
 +sistem2.lan
 +
 +[debian]
 +sistem3.lan</​code></​pre>​
 +</​div>​
 +</​div>​
 +<div class="​admonitionblock note">​
 +<​table>​
 +<tr>
 +<td class="​icon">​
 +<div class="​title">​Note</​div>​
 +</td>
 +<td class="​content">​
 +<​code>​sistem3.lan</​code>​ face parte si din grupul <​code>​all</​code>;​ toate hosturile fac parte
 +implicit si din grupul <​code>​all</​code>​.
 +</td>
 +</tr>
 +</​table>​
 +</​div>​
 +<div class="​paragraph">​
 +<​p>​Proprietati specifice grupului sau hostului in sine pot fi declarate in
 +directoarele <​code>​host_vars</​code>​ sau <​code>​group_vars</​code>:</​p>​
 +</​div>​
 +<div class="​listingblock">​
 +<div class="​content">​
 +<pre class="​highlight"><​code class="​language-yml"​ data-lang="​yml">​$ tree inventar
 +.
 +├── group_vars
 +│   ├── all.yml
 +│   └── debian.yml
 +├── host_vars
 +│   └── sistem1.lan.yml
 +└── inventar.yml</​code></​pre>​
 +</​div>​
 +</​div>​
 +</​div>​
 +<div class="​sect3">​
 +<h4 id="​_playbook">​Playbook</​h4>​
 +<div class="​paragraph">​
 +<​p>​Playbook-ul defineste o succesiune de taskuri<​sup class="​footnote">​[<​a id="​_footnoteref_2"​ class="​footnote"​ href="#​_footnotedef_2"​ title="​View footnote.">​2</​a>​]</​sup>,​ precum si hosturile
 +asupra carora se va executa acea succesiune de taskuri; un exemplu de task ar
 +putea fi chemarea unui modul ansible specializat pe un grup de actiuni
 +e.g., modulul
 +<a href="​https://​docs.ansible.com/​ansible/​latest/​collections/​ansible/​builtin/​user_module.html">​user</​a>,​
 +care administreaza aspecte legate de utilizatorii prezenti pe un sistem Linux/​Unix:</​p>​
 +</​div>​
 +<div class="​ulist">​
 +<ul>
 +<li>
 +<​p>​username</​p>​
 +</li>
 +<li>
 +<​p>​parola</​p>​
 +</li>
 +<li>
 +<​p>​home directory</​p>​
 +</li>
 +<li>
 +<​p>​shell folosit</​p>​
 +</li>
 +<li>
 +<​p>&#​8230;&#​8203;</​p>​
 +</li>
 +</ul>
 +</​div>​
 +</​div>​
 +</​div>​
 +</​div>​
 +</​div>​
 +<div class="​sect1">​
 +<h2 id="​_documentatie">​Documentatie</​h2>​
 +<div class="​sectionbody">​
 +<div class="​ulist">​
 +<ul>
 +<li>
 +<​p>​Terraform</​p>​
 +<div class="​ulist">​
 +<ul>
 +<li>
 +<​p><​a href="​https://​www.terraform.io/​docs/​index.html">​Documentatie oficiala Terraform</​a></​p>​
 +</li>
 +<li>
 +<​p><​a href="​https://​www.terraformupandrunning.com/">​Terraform Up &amp; Running</​a></​p>​
 +</li>
 +<li>
 +<​p><​a href="​https://​blog.gruntwork.io/​a-comprehensive-guide-to-terraform-b3d32832baca">​Blogul celor de la Gruntwork</​a></​p>​
 +</li>
 +<li>
 +<​p><​a href="​https://​sysadvent.blogspot.com/">​Blogul SYSADVENT</​a></​p>​
 +</li>
 +</ul>
 +</​div>​
 +</li>
 +<li>
 +<​p>​Ansible</​p>​
 +<div class="​ulist">​
 +<ul>
 +<li>
 +<​p><​a href="​https://​docs.ansible.com/​ansible/​latest/​user_guide/​index.html#​getting-started">​Documentatie oficiala Ansible</​a></​p>​
 +</li>
 +<li>
 +<​p><​a href="​https://​docs.ansible.com/​ansible/​latest/​user_guide/​basic_concepts.html#​basic-concepts">​Concepte de baza</​a></​p>​
 +</li>
 +<li>
 +<​p><​code>​site:​https://​jpmens.net ansible</​code>​ in motorul vostru de cautare favorit</​p>​
 +</li>
 +</ul>
 +</​div>​
 +</li>
 +</ul>
 +</​div>​
 +</​div>​
 +</​div>​
 +</​div>​
 +<div id="​footnotes">​
 +<hr>
 +<div class="​footnote"​ id="​_footnotedef_1">​
 +<a href="#​_footnoteref_1">​1</​a>​. Reala, relativ la ultima data cand a rulat :^) Daca cineva modifica resurse in afara Terraform vor aparea potentiale situatii ciudate
 +</​div>​
 +<div class="​footnote"​ id="​_footnotedef_2">​
 +<a href="#​_footnoteref_2">​2</​a>​. Indiferent ca taskurile reprezinta executia unui modul, chemarea unui rol, definirea unui handler etc
 +</​div>​
 +</​div>​
 +<div id="​footer">​
 +<div id="​footer-text">​
 +Version TSS100<​br>​
 +Last updated 2021-07-20 20:57:24 UTC
 +</​div>​
 +</​div>​
 +</​body>​
 +</​html>​
devops/cursuri/03.txt · Last modified: 2021/07/28 16:28 by bogdan.croitoru
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