<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Slides | DCMST</title><link>https://portfolio.devcrumbs.com/category/slides/</link><atom:link href="https://portfolio.devcrumbs.com/category/slides/index.xml" rel="self" type="application/rss+xml"/><description>Slides</description><generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><lastBuildDate>Thu, 25 Mar 2021 09:10:47 -0500</lastBuildDate><image><url>https://portfolio.devcrumbs.com/media/icon_hu28290437db960aa4e7d19bb9f7230401_6937_512x512_fill_lanczos_center_3.png</url><title>Slides</title><link>https://portfolio.devcrumbs.com/category/slides/</link></image><item><title>Differences between Kubernetes and Openshift</title><link>https://portfolio.devcrumbs.com/slides/k8s-vs-ocp/</link><pubDate>Thu, 25 Mar 2021 09:10:47 -0500</pubDate><guid>https://portfolio.devcrumbs.com/slides/k8s-vs-ocp/</guid><description>&lt;!-- [revealoptions]
controlsBackArrows= "hidden"
history= false
center= true
showNotes= false
width= "100%"
height= "100%"
margin= 0.2
minScale= 0.2
maxScale= 1.5 -->
&lt;h1 id="heading">&lt;/h1>
&lt;h2 id="differences-between-kubernetes-and-openshift">Differences between Kubernetes and Openshift&lt;/h2>
&lt;hr>
&lt;h3 id="dcmst">dcmst&lt;/h3>
&lt;h4 id="senior-container-infrastructure-consultant">Senior Container Infrastructure Consultant&lt;/h4>
&lt;h5 id="red-hathttpsredhatcom">&lt;a href="https://redhat.com" target="_blank" rel="noopener">@Red Hat&lt;/a>&lt;/h5>
&lt;hr>
&lt;section data-shortcode-section>
&lt;h3 id="kubernetes">Kubernetes&lt;/h3>
&lt;h4 id="some-assembly-required">Some assembly required&lt;/h4>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/media/slides/k8s-vs-ocp/k8s-lego_hu5d4fa49e9520c9dd96a24d33f6995b83_231012_48794af0155d9a2bccc567c0020e68ae.webp 400w,
/media/slides/k8s-vs-ocp/k8s-lego_hu5d4fa49e9520c9dd96a24d33f6995b83_231012_dd12ccf7664715d6e555f2ac927603a6.webp 760w,
/media/slides/k8s-vs-ocp/k8s-lego_hu5d4fa49e9520c9dd96a24d33f6995b83_231012_1200x1200_fit_q90_h2_lanczos.webp 1200w"
src="https://portfolio.devcrumbs.com/media/slides/k8s-vs-ocp/k8s-lego_hu5d4fa49e9520c9dd96a24d33f6995b83_231012_48794af0155d9a2bccc567c0020e68ae.webp"
width="50%"
height="760"
loading="lazy" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;hr>
&lt;!-- markdownlint-capture -->
&lt;!-- markdownlint-disable -->
&lt;h3 id="kubernetes-1">Kubernetes&lt;/h3>
&lt;!-- markdownlint-restore -->
&lt;h4 id="some-assembly-required-1">Some assembly required&lt;/h4>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/media/slides/k8s-vs-ocp/k8s-lack_hue22ff0180dba771c4b2ced3e722d392b_12541_e93d7511a3f9d6d1a8a73de2dceb786c.webp 400w,
/media/slides/k8s-vs-ocp/k8s-lack_hue22ff0180dba771c4b2ced3e722d392b_12541_832425835d1bbb59e844aefb220cdae5.webp 760w,
/media/slides/k8s-vs-ocp/k8s-lack_hue22ff0180dba771c4b2ced3e722d392b_12541_1200x1200_fit_q90_h2_lanczos_3.webp 1200w"
src="https://portfolio.devcrumbs.com/media/slides/k8s-vs-ocp/k8s-lack_hue22ff0180dba771c4b2ced3e722d392b_12541_e93d7511a3f9d6d1a8a73de2dceb786c.webp"
width="100%"
height="327"
loading="lazy" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;aside class="notes">
&lt;ul>
&lt;li>Press &lt;code>S&lt;/code> key to view -&lt;/li>
&lt;/ul>
&lt;p>Kubernetes does not provide (out-of-the-box):&lt;/p>
&lt;ol>
&lt;li>Operative System&lt;/li>
&lt;li>Developer tooling and UX&lt;/li>
&lt;li>Container runtime (CRI-O, Containerd, Docker, etc).&lt;/li>
&lt;li>Image registry&lt;/li>
&lt;li>Software-defined networking&lt;/li>
&lt;li>Load‐balancer and routing&lt;/li>
&lt;li>Log management&lt;/li>
&lt;li>Container metrics and monitoring&lt;/li>
&lt;li>DNS&lt;/li>
&lt;li>Ingress&lt;/li>
&lt;li>RBAC&lt;/li>
&lt;li>Storage&lt;/li>
&lt;li>Management&lt;/li>
&lt;li>Service Catalog (Operators)&lt;/li>
&lt;/ol>
&lt;/aside>
&lt;hr>
&lt;!-- markdownlint-capture -->
&lt;!-- markdownlint-disable -->
&lt;h3 id="kubernetes-2">Kubernetes&lt;/h3>
&lt;!-- markdownlint-restore -->
&lt;h4 id="some-assembly-required-2">Some assembly required&lt;/h4>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/media/slides/k8s-vs-ocp/k8s-landscape_hud934df60cc460e6bdc2a2320bcb1b77e_6556548_3714d455a464221b6a1d8baf8dd3d70d.webp 400w,
/media/slides/k8s-vs-ocp/k8s-landscape_hud934df60cc460e6bdc2a2320bcb1b77e_6556548_2d3810e7e57aa438895b4bee44290b15.webp 760w,
/media/slides/k8s-vs-ocp/k8s-landscape_hud934df60cc460e6bdc2a2320bcb1b77e_6556548_1200x1200_fit_q90_h2_lanczos_3.webp 1200w"
src="https://portfolio.devcrumbs.com/media/slides/k8s-vs-ocp/k8s-landscape_hud934df60cc460e6bdc2a2320bcb1b77e_6556548_3714d455a464221b6a1d8baf8dd3d70d.webp"
width="100%"
height="460"
loading="lazy" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/section>
&lt;hr>
&lt;section data-shortcode-section>
&lt;h3 id="openshift">Openshift&lt;/h3>
&lt;h4 id="value-added">Value Added&lt;/h4>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/media/slides/k8s-vs-ocp/ocp-logo_hub55d0082020858bd8e0d2513214bb36a_58983_27ac333dfa6b7cab104fa5c4bf33e82d.webp 400w,
/media/slides/k8s-vs-ocp/ocp-logo_hub55d0082020858bd8e0d2513214bb36a_58983_360fe55c5a4b106c7fe23b1a6cd1e52f.webp 760w,
/media/slides/k8s-vs-ocp/ocp-logo_hub55d0082020858bd8e0d2513214bb36a_58983_1200x1200_fit_q90_h2_lanczos_3.webp 1200w"
src="https://portfolio.devcrumbs.com/media/slides/k8s-vs-ocp/ocp-logo_hub55d0082020858bd8e0d2513214bb36a_58983_27ac333dfa6b7cab104fa5c4bf33e82d.webp"
width="70%"
height="324"
loading="lazy" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;hr>
&lt;!-- markdownlint-capture -->
&lt;!-- markdownlint-disable -->
&lt;h3 id="openshift-1">Openshift&lt;/h3>
&lt;!-- markdownlint-restore -->
&lt;h4 id="value-added-1">Value Added&lt;/h4>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/media/slides/k8s-vs-ocp/ocp-landscape_hud934df60cc460e6bdc2a2320bcb1b77e_6563729_1aaf0e92aea7613704fa9ac8bebc3a0f.webp 400w,
/media/slides/k8s-vs-ocp/ocp-landscape_hud934df60cc460e6bdc2a2320bcb1b77e_6563729_641a6e6fa95ce9815f897687463d4ca1.webp 760w,
/media/slides/k8s-vs-ocp/ocp-landscape_hud934df60cc460e6bdc2a2320bcb1b77e_6563729_1200x1200_fit_q90_h2_lanczos_3.webp 1200w"
src="https://portfolio.devcrumbs.com/media/slides/k8s-vs-ocp/ocp-landscape_hud934df60cc460e6bdc2a2320bcb1b77e_6563729_1aaf0e92aea7613704fa9ac8bebc3a0f.webp"
width="100%"
height="460"
loading="lazy" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;hr>
&lt;!-- markdownlint-capture -->
&lt;!-- markdownlint-disable -->
&lt;h3 id="openshift-2">Openshift&lt;/h3>
&lt;!-- markdownlint-restore -->
&lt;h4 id="value-added-2">Value Added&lt;/h4>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/media/slides/k8s-vs-ocp/ocp-arch_hu5ad65d1c520fefa54127e833cd143ea7_167834_b5727e55f72b3d94cb10d01346c89252.webp 400w,
/media/slides/k8s-vs-ocp/ocp-arch_hu5ad65d1c520fefa54127e833cd143ea7_167834_4638c01656df18eef165986fb64bc40a.webp 760w,
/media/slides/k8s-vs-ocp/ocp-arch_hu5ad65d1c520fefa54127e833cd143ea7_167834_1200x1200_fit_q90_h2_lanczos_2.webp 1200w"
src="https://portfolio.devcrumbs.com/media/slides/k8s-vs-ocp/ocp-arch_hu5ad65d1c520fefa54127e833cd143ea7_167834_b5727e55f72b3d94cb10d01346c89252.webp"
width="100%"
height="429"
loading="lazy" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/section>
&lt;hr>
&lt;section data-shortcode-section>
&lt;h3 id="openshift-contains-kubernetes">Openshift contains Kubernetes&lt;/h3>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/media/slides/k8s-vs-ocp/ocp-contains-k8s_hu1e0fae1efb02309ebe72b4ea66218d50_97537_f8b786763edc718263bf7bbb9b9cc32b.webp 400w,
/media/slides/k8s-vs-ocp/ocp-contains-k8s_hu1e0fae1efb02309ebe72b4ea66218d50_97537_96f387002adacb57fbf6e32a888c96a8.webp 760w,
/media/slides/k8s-vs-ocp/ocp-contains-k8s_hu1e0fae1efb02309ebe72b4ea66218d50_97537_1200x1200_fit_q90_h2_lanczos_3.webp 1200w"
src="https://portfolio.devcrumbs.com/media/slides/k8s-vs-ocp/ocp-contains-k8s_hu1e0fae1efb02309ebe72b4ea66218d50_97537_f8b786763edc718263bf7bbb9b9cc32b.webp"
width="90%"
height="435"
loading="lazy" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;aside class="notes">
&lt;ul>
&lt;li>Press &lt;code>S&lt;/code> key to view -&lt;/li>
&lt;/ul>
&lt;/aside>
&lt;hr>
&lt;!-- markdownlint-capture -->
&lt;!-- markdownlint-disable -->
&lt;h3 id="openshift-contains-kubernetes-1">Openshift contains Kubernetes&lt;/h3>
&lt;!-- markdownlint-restore -->
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/media/slides/k8s-vs-ocp/ocp-is-k8s_hud3011e5a0c6e498bbc0af9bd76a3a0dd_105280_89205a684652c1b7301a7c7737a9ce4e.webp 400w,
/media/slides/k8s-vs-ocp/ocp-is-k8s_hud3011e5a0c6e498bbc0af9bd76a3a0dd_105280_afdaf2fcf41a32a0c5da9a20e5afb4cd.webp 760w,
/media/slides/k8s-vs-ocp/ocp-is-k8s_hud3011e5a0c6e498bbc0af9bd76a3a0dd_105280_1200x1200_fit_q90_h2_lanczos_3.webp 1200w"
src="https://portfolio.devcrumbs.com/media/slides/k8s-vs-ocp/ocp-is-k8s_hud3011e5a0c6e498bbc0af9bd76a3a0dd_105280_89205a684652c1b7301a7c7737a9ce4e.webp"
width="90%"
height="386"
loading="lazy" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/section>
&lt;hr>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;h3 id="openshit-is-a-kubernetes-flavor">Openshit IS a Kubernetes flavor&lt;/h3>
&lt;hr>
&lt;h2 id="thank-you">Thank You&lt;/h2></description></item><item><title>Improve Ansible Roles with Molecule</title><link>https://portfolio.devcrumbs.com/slides/molecule-ansible/</link><pubDate>Thu, 07 Mar 2019 00:00:00 +0000</pubDate><guid>https://portfolio.devcrumbs.com/slides/molecule-ansible/</guid><description>&lt;!-- [revealoptions]
controlsBackArrows= "hidden"
history= false
center= true
showNotes= false
width= "100%"
height= "100%"
margin= 0.2
minScale= 0.2
maxScale= 1.5 -->
&lt;h1 id="improve-ansible-roles-with-molecule">Improve Ansible Roles with Molecule&lt;/h1>
&lt;hr>
&lt;h2 id="dcmst">dcmst&lt;/h2>
&lt;h3 id="security-systems-administrator">Security Systems Administrator&lt;/h3>
&lt;h4 id="rackspacehttpsrackspacecom">&lt;a href="https://rackspace.com" target="_blank" rel="noopener">@Rackspace&lt;/a>&lt;/h4>
&lt;p>&lt;a href="https://d-cmst.io" target="_blank" rel="noopener">d-cmst.io&lt;/a> | &lt;a href="https://twitter.com/d-cmst" target="_blank" rel="noopener">@d-cmst&lt;/a> | &lt;a href="https://github.com/dc-mst" target="_blank" rel="noopener">github.com/dc-mst&lt;/a>&lt;/p>
&lt;hr>
&lt;section data-noprocess data-shortcode-slide
data-background-image="backgrounds/background1.jpg"
>
&lt;hr>
&lt;h2 id="agenda">Agenda&lt;/h2>
&lt;ul>
&lt;li>Ansible Review
&lt;ul>
&lt;li>YAML Review&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Test Automation
&lt;ul>
&lt;li>Testing options for Ansible&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Molecule&lt;/li>
&lt;li>Demo!!&lt;/li>
&lt;/ul>
&lt;hr>
&lt;section data-noprocess data-shortcode-slide
data-background-image="backgrounds/backgroundAnsible.png"
>
&lt;hr>
&lt;section data-shortcode-section>
&lt;h2 id="ansible-14">Ansible (1/4)&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;strong>Use Cases&lt;/strong>&lt;/th>
&lt;th>&lt;strong>Attributes&lt;/strong>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Configuration Management&lt;/td>
&lt;td>Simple&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Software Provisioning&lt;/td>
&lt;td>Powerful&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Security and Compliance&lt;/td>
&lt;td>Agentless&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Application Deployment&lt;/td>
&lt;td>Cross Platform&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Orchestration&lt;/td>
&lt;td>Over 450 Modules&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Continuous Delivery&lt;/td>
&lt;td>Big Community&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;aside class="notes">
&lt;ul>
&lt;li>
&lt;p>Press &lt;code>S&lt;/code> key to view -
Ansible es una herramienta de automatización open-source escrita en python.
Nos ayuda a configurar hosts remotos, aprovisionar software, e inclusive orquestar tareas mas complicadas como Continuos Deployment o Rolling Updates con Cero Downtime.
En lugar de tener scripts para cada tarea.
Ansible es:&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Simple&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Poderoso&lt;/p>
&lt;/li>
&lt;li>
&lt;p>No necesita agente&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Multiplataforma&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Cuenta con mas de 450 Modulos&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Gran comunidad alrededor del proyecto&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/aside>
&lt;hr>
&lt;h2 id="ansible-24">Ansible (2/4)&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/media/slides/molecule-ansible/AnsibleArch_hu9b05440d76c0d355a47a803f97985562_45828_6d02e9de9a6dc8768bf34eda051f62df.webp 400w,
/media/slides/molecule-ansible/AnsibleArch_hu9b05440d76c0d355a47a803f97985562_45828_6b5dc1ed0e7e68d18ae6d0c539aee3f1.webp 760w,
/media/slides/molecule-ansible/AnsibleArch_hu9b05440d76c0d355a47a803f97985562_45828_1200x1200_fit_q90_h2_lanczos_3.webp 1200w"
src="https://portfolio.devcrumbs.com/media/slides/molecule-ansible/AnsibleArch_hu9b05440d76c0d355a47a803f97985562_45828_6d02e9de9a6dc8768bf34eda051f62df.webp"
width="90%"
height="454"
loading="lazy" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;aside class="notes">
&lt;ul>
&lt;li>Press &lt;code>S&lt;/code> key to view -&lt;/li>
&lt;/ul>
&lt;p>Revisando la arquitectura de Ansible tenemos:&lt;/p>
&lt;ul>
&lt;li>Playbook: &amp;ldquo;El libro de jugadas&amp;rdquo; que contiene las tareas a ejecutar.&lt;/li>
&lt;li>Inventario:donde se definen los hosts con los cuales va a interactuar ansible, esta formato INI. Se definen grupos de hosts y algunas variables opcionales ()IP, hostname, ssh user, key file)&lt;/li>
&lt;li>Modulos son pequenos programas que ejecuta Ansible de manera remota.&lt;/li>
&lt;li>API: Aun esta en construccion pero hay plugins que ya la usan (ansible tower)&lt;/li>
&lt;li>Plugins: Agregan funcionabilidad adicional al core de Ansible (ARA)&lt;/li>
&lt;/ul>
&lt;p>Todo esto se se aplica a los hosts remotos o a los dispositivos de red.&lt;/p>
&lt;/aside>
&lt;hr>
&lt;h2 id="ansible-34">Ansible (3/4)&lt;/h2>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/media/slides/molecule-ansible/Ansible_Playbook_hu71a4b655fa9e885678be627396d3dcbe_40547_a237b04b0a723423825c1ab98dea09b7.webp 400w,
/media/slides/molecule-ansible/Ansible_Playbook_hu71a4b655fa9e885678be627396d3dcbe_40547_65deb39ea253a26177ae0ed44ea5b6a4.webp 760w,
/media/slides/molecule-ansible/Ansible_Playbook_hu71a4b655fa9e885678be627396d3dcbe_40547_1200x1200_fit_q90_h2_lanczos_3.webp 1200w"
src="https://portfolio.devcrumbs.com/media/slides/molecule-ansible/Ansible_Playbook_hu71a4b655fa9e885678be627396d3dcbe_40547_a237b04b0a723423825c1ab98dea09b7.webp"
width="70%"
height="622"
loading="lazy" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;aside class="notes">
&lt;ul>
&lt;li>
&lt;p>Press &lt;code>S&lt;/code> key to view -
Los componentes de un playbook son, revisando desde la unidad mas pequena son:&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Tasks, que ejecutan el modulo de Ansible&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Al conjunto de varias tasks relacionadas, se le llama Play&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Al conjunto de diferentes Plays/jugadas se le llama Playbook.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/aside>
&lt;hr>
&lt;h2 id="ansible-44">Ansible (4/4)&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Playbooks&lt;/strong> contain/connect &lt;strong>roles&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Roles&lt;/strong> contain &lt;strong>plays&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Plays&lt;/strong> contain &lt;strong>tasks&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Tasks&lt;/strong> execute a &lt;strong>module&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Tasks&lt;/strong> run sequencially&lt;/li>
&lt;li>&lt;strong>Handlers&lt;/strong> are triggered by &lt;strong>tasks&lt;/strong>, runs once at the end of the &lt;strong>play&lt;/strong>&lt;/li>
&lt;/ul>
&lt;aside class="notes">
&lt;ul>
&lt;li>Press &lt;code>S&lt;/code> key to view -
Entonces, podemos decir que desde la unidad mas grande tenemos
Role is a list of tasks reusable
Playbook conecta los roles con los hosts&lt;/li>
&lt;/ul>
&lt;/aside>
&lt;/section>
&lt;hr>
&lt;section data-noprocess data-shortcode-slide
data-background-image="backgrounds/backgroundTest.png"
>
&lt;aside class="notes">
&lt;ul>
&lt;li>Press &lt;code>S&lt;/code> key to view -
Por que es importante la automatizacion de pruebas?&lt;/li>
&lt;/ul>
&lt;/aside>
&lt;hr>
&lt;section data-shortcode-section>
&lt;h3 id="test-automation-12">Test Automation (1/2)&lt;/h3>
&lt;ul>
&lt;li>Reliable Code&lt;/li>
&lt;li>Quality (Fast feedback)&lt;/li>
&lt;li>Time and cost saving&lt;/li>
&lt;li>Faster Development Cycle (CI/CD)&lt;/li>
&lt;li>Repeatability (Test same change accross multiple environments (OS, Providers); multiple data sets)&lt;/li>
&lt;/ul>
&lt;aside class="notes">
&lt;ul>
&lt;li>
&lt;p>Press &lt;code>S&lt;/code> key to view -
La automatizacion de las pruebas nos ayuda a:&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Tener un codigo mas seguro y confiable&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Mejora la calidad de nuestro codigo ya que permiten que se ejecuten más pruebas en menos tiempo, aumentando la cobertura de las pruebas, y realizando más exigentes.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Reducimos el tiempo y el costo de un desarrollo&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Nos ayuda a tener un ciclo de desarrollo mas rapido ya que lo podemos/debemos integrar con alguna herramienta de CI/CD&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Repetibilidad, con lo cual podemos probar el mismo cambio en multples ambientes, sistemas operativos, o provides, o con diferentes data sets&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/aside>
&lt;hr>
&lt;h3 id="test-automation-22">Test Automation (2/2)&lt;/h3>
&lt;h4 id="testing-options-for-ansible">Testing options for Ansible&lt;/h4>
&lt;ul>
&lt;span class="fragment " >
&lt;li>&lt;strong>Ansible tasks&lt;/strong>&lt;i> - Test Ansible w/ Ansible&lt;/i>&lt;/li>
&lt;/span>
&lt;span class="fragment " >
&lt;li>&lt;strong>Test Kitchen&lt;/strong>&lt;i> - Test Ansible w/ Ruby&lt;/i>&lt;/li>
&lt;/span>
&lt;span class="fragment " >
&lt;li>&lt;strong>ansible-test&lt;/strong>&lt;i> - Test Ansible w/ Unmaintained Python&lt;/i>&lt;/li>
&lt;/span>
&lt;span class="fragment " >
&lt;li>&lt;strong>Molecule&lt;/strong>&lt;i> - Test Ansible w/ Python&lt;/i>&lt;/li>
&lt;/span>
&lt;/ul>
&lt;aside class="notes">
&lt;ul>
&lt;li>Press &lt;code>S&lt;/code> key to view -
Algunas herramientas que revise, despues de ver la conferencia de Elana Hashman en en Ansible Fest 2017 son:&lt;/li>
&lt;/ul>
&lt;p>Testing Ansible with Ansible Tasks -&amp;gt; Test ansible with Ansible tasks
Benefits:&lt;/p>
&lt;ul>
&lt;li>As flexible and powerful as you need it
Issues:&lt;/li>
&lt;li>High development cost&lt;/li>
&lt;li>Ansible can&amp;rsquo;t detect ansible bugs&lt;/li>
&lt;li>Need to write your own provisioner&lt;/li>
&lt;/ul>
&lt;p>Testing Ansible with ansible-test -&amp;gt;
Benefits:&lt;/p>
&lt;ul>
&lt;li>Written in Python&lt;/li>
&lt;li>Solves the provisioning problem in &amp;ldquo;Test ansible with Ansible&amp;rdquo;&lt;/li>
&lt;li>Simple tool with small codebase
Issues:&lt;/li>
&lt;li>Onlys support docker provisioner on debian-based images&lt;/li>
&lt;li>Does not apear to be actively maintained&lt;/li>
&lt;/ul>
&lt;p>Testing Ansible with Test Kitchen -&amp;gt;
Benefits:&lt;/p>
&lt;ul>
&lt;li>Large community&lt;/li>
&lt;li>Supports Ansible&lt;/li>
&lt;li>Supportw windows testing for Ansible
Issues:&lt;/li>
&lt;li>Written in Ruby&lt;/li>
&lt;li>Verifiers are Ruby or bash based&lt;/li>
&lt;li>Installs Ansible on the target host and runs it locally&lt;/li>
&lt;/ul>
&lt;/aside>
&lt;/section>
&lt;hr>
&lt;section data-noprocess data-shortcode-slide
data-background-image="backgrounds/backgroundMolecule.png"
>
&lt;hr>
&lt;section data-shortcode-section>
&lt;h3 id="molecule-15">Molecule (1/5)&lt;/h3>
&lt;h4 id="testing-ansible-with-molecule">Testing Ansible with Molecule&lt;/h4>
&lt;ul>
&lt;li>Tool designed to aid in the development and testing of Ansible roles.&lt;/li>
&lt;li>Provides support for testing with multiple instances, operating systems, providers, test frameworks and testing scenarios.&lt;/li>
&lt;li>Encourages an approach that results in consistently developed roles that are well-written, easily understood and maintained.&lt;/li>
&lt;/ul>
&lt;p>&lt;a href="https://github.com/ansible/molecule" target="_blank" rel="noopener">github.com/ansible/molecule&lt;/a> | &lt;a href="https://molecule.readthedocs.io/" target="_blank" rel="noopener">molecule.readthedocs.io&lt;/a>&lt;/p>
&lt;aside class="notes">
&lt;ul>
&lt;li>Press &lt;code>S&lt;/code> key to view -&lt;/li>
&lt;/ul>
&lt;p>De acuerdo a la propia documentacion de Molecule, se define como una herramienta disenada para ayudar en el desarrollo y pruebas de los roles de ansible.
Brinda soporte para probar con diferentes instancias, OS, Providers, scenarios
Se enfoca en generar los mejores roles posibles, tanto bien escritos como faciles de mantener
&lt;/aside>
&lt;hr>
&lt;h3 id="molecule-25">Molecule (2/5)&lt;/h3>
&lt;h4 id="testing-ansible-with-molecule-1">Testing Ansible with Molecule&lt;/h4>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;strong>Pros&lt;/strong>&lt;/th>
&lt;th>&lt;strong>Cons&lt;/strong>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>- Written in Python&lt;/td>
&lt;td>- No Windows support&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>- Ansible-Native&lt;/td>
&lt;td>- No Dinamyc Inventory support&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>- Established community&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>- Open-Source&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;aside class="notes">
&lt;ul>
&lt;li>Press &lt;code>S&lt;/code> key to view -&lt;/li>
&lt;li>Escrito en python,&lt;/li>
&lt;li>Desarrollado e integrado para ansible&lt;/li>
&lt;li>Comunidad Madura&lt;/li>
&lt;li>Open-Source&lt;/li>
&lt;/ul>
&lt;/aside>
&lt;hr>
&lt;h3 id="molecule-35">Molecule (3/5)&lt;/h3>
&lt;h4 id="testing-ansible-with-molecule-2">Testing Ansible with Molecule&lt;/h4>
&lt;ul>
&lt;li>Creates nodes for testing&lt;/li>
&lt;li>Run the playbook on the nodes&lt;/li>
&lt;li>Run the playbook again to test idempotence&lt;/li>
&lt;li>Lints the Ansible code with ansible-lint&lt;/li>
&lt;li>Lint the Python code with flake8&lt;/li>
&lt;li>Runs the verifier tests on the nodes to ensure the desired state&lt;/li>
&lt;/ul>
&lt;aside class="notes">
&lt;ul>
&lt;li>Press &lt;code>S&lt;/code> key to view -
A grandes rasgos las actividades que hace molecule son:&lt;/li>
&lt;li>Creamos los nodos para probar, dependiendo del provisioner puede ser Docker, Vagrant, AWS, Azure, etc&lt;/li>
&lt;li>Se ejecutaran los playbooks en los nodos creados&lt;/li>
&lt;li>Volvera a correr el playbook, para probar idempotencia, es decir, que el tarea se aplique varias veces sin cambiar el resultado de primera vez.&lt;/li>
&lt;li>Buscaran problemas de estilo en el codigo de ansible usando ansible-lint&lt;/li>
&lt;li>Buscaran problemas en el codigo de python con flake8&lt;/li>
&lt;li>El verificador realizara loas pruebas para asegurar el estado deseado&lt;/li>
&lt;/ul>
&lt;/aside>
&lt;hr>
&lt;h3 id="molecule-45">Molecule (4/5)&lt;/h3>
&lt;h4 id="testing-ansible-with-molecule-3">Testing Ansible with Molecule&lt;/h4>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/media/slides/molecule-ansible/MoleculeProcess_hu0d810c2dbb019e53116861ccfaf3b4fa_79590_00a0eb31096fefab04a629dc11b92309.webp 400w,
/media/slides/molecule-ansible/MoleculeProcess_hu0d810c2dbb019e53116861ccfaf3b4fa_79590_377ed47f0999a4611fbc9ad55dccc118.webp 760w,
/media/slides/molecule-ansible/MoleculeProcess_hu0d810c2dbb019e53116861ccfaf3b4fa_79590_1200x1200_fit_q90_h2_lanczos.webp 1200w"
src="https://portfolio.devcrumbs.com/media/slides/molecule-ansible/MoleculeProcess_hu0d810c2dbb019e53116861ccfaf3b4fa_79590_00a0eb31096fefab04a629dc11b92309.webp"
width="50%"
height="760"
loading="lazy" />&lt;/div>
&lt;/div>&lt;/figure>
&lt;hr>
&lt;h3 id="molecule-55">Molecule (5/5)&lt;/h3>
&lt;h4 id="testing-ansible-with-molecule-4">Testing Ansible with Molecule&lt;/h4>
&lt;ul>
&lt;li>What can I test?
&lt;ul>
&lt;li>Files exists and permissions&lt;/li>
&lt;li>Service are running&lt;/li>
&lt;li>User exists and is member of the correct groups&lt;/li>
&lt;li>Package installed&lt;/li>
&lt;li>Basic Software interaction (Test web server basic authentication)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/section>
&lt;hr>
&lt;section data-noprocess data-shortcode-slide
data-background-image="backgrounds/background1.jpg"
>
&lt;hr>
&lt;section data-shortcode-section>
&lt;h3 id="molecule-demo-13">Molecule Demo (1/3)&lt;/h3>
&lt;ul>
&lt;li>Let&amp;rsquo;s try it!!
&lt;ul>
&lt;li>Creates 2 nodes&lt;/li>
&lt;li>Converge both nodes&lt;/li>
&lt;li>Check for idempotence&lt;/li>
&lt;li>Lint the Ansible and Python code&lt;/li>
&lt;li>Verify the role against some tests&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Github Repo: &lt;a href="https://github.com/dc-mst/elastic_stack" target="_blank" rel="noopener">github.com/dc-mst/elastic_stack&lt;/a> &lt;span class="fragment " >
&lt;em>(Thanks to GaRaGeD for provide a playbook to test)&lt;/em>
&lt;/span>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="molecule-demo-23">Molecule Demo (2/3)&lt;/h3>
&lt;span class="fragment " >
&lt;h5 id="terminal-time">Terminal time!!&lt;/h5>
&lt;/span>
&lt;hr>
&lt;h3 id="molecule-demo-33">Molecule Demo (3/3)&lt;/h3>
&lt;h4 id="to-do">TO-DO&lt;/h4>
&lt;ul>
&lt;li>Ansible-Vault implementation&lt;/li>
&lt;li>Integrating Molecule into Travis CI, Circle CI, Jenkins, etc&lt;/li>
&lt;/ul>
&lt;/section>
&lt;hr>
&lt;section data-noprocess data-shortcode-slide
data-background-image="backgrounds/backgroundConclusion.jpg"
>
&lt;hr>
&lt;section data-shortcode-section>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;ul>
&lt;li>There are different testing solutions for Ansible, but Molecule is an Ansible-native and the robust option.&lt;/li>
&lt;li>Molecule allows you to create, converge, check idempotence, lint and verify your Ansible code.&lt;/li>
&lt;li>Molecule help you to create the best playbooks possible.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="questions">Questions?&lt;/h2>
&lt;p>&lt;em>Talk links, references and resources can be found at:&lt;/em> &lt;a href="https://d-cmst.io/talk/improve-ansible-roles-with-molecule" target="_blank" rel="noopener">d-cmst.io/talk/improve-ansible-roles-with-molecule&lt;/a>&lt;/p>
&lt;hr>
&lt;h2 id="thank-you">Thank you&lt;/h2>
&lt;p>&lt;em>You can find me on:&lt;/em>&lt;/p>
&lt;p>&lt;a href="mailto:d-cmst@gmail.com">d-cmst [at] gmail.com&lt;/a> | &lt;a href="https://d-cmst.io" target="_blank" rel="noopener">d-cmst.io&lt;/a> | &lt;a href="https://github.com/dc-mst" target="_blank" rel="noopener">github.com/dc-mst&lt;/a> | &lt;a href="https://twitter.com/d-cmst" target="_blank" rel="noopener">@d-cmst&lt;/a>&lt;/p>
&lt;/section></description></item></channel></rss>