<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>ABSOLUTELLY NO WARRANTY</title>
  <link>https://osiux.com</link>
  <description>GNU/Linux and Free Libre Open Software posts by Osiris Alejandro Gomez</description>
  <language>es-ar</language>
  <generator>org2rss</generator>
  <docs>https://www.rssboard.org/rss-specification</docs>
  <managingEditor>osiux@osiux.com (Osiris Alejandro Gomez)</managingEditor>
  <webMaster>osiux@osiux.com (Osiris Alejandro Gomez)</webMaster>
  <lastBuildDate>Fri, 14 Aug 2026 00:34:16 +0000</lastBuildDate>
  <ttl>60</ttl>
  <category>Technology</category>
  <copyright>Copyright (C) 2026 Osiris Alejandro Gomez osiux@osiux.com. I publish the code I developed under the GPLv3 license and my texts and images under the Creative Commons CC-BY-SA license.</copyright>
  <itunes:author>Osiris Alejandro Gomez</itunes:author>
  <itunes:subtitle>GNU/Linux and Free Libre Open Software posts</itunes:subtitle>
  <itunes:explicit>false</itunes:explicit>
  <itunes:category text="Technology" />
  <atom:link href="https://osiux.com/feed.xml" rel="self" type="application/rss+xml" />
  <item>
    <title>How to provision, install, configure and keep thousands of Debian and Debian-based systems updated</title>
    <link>https://osiux.com/2026-07-21-debconf26-how-to-provision-install-configure-and-keep-thousands-of-debian-and-debian-based-systems-updated.html</link>
    <guid isPermaLink="true">https://osiux.com/2026-07-21-debconf26-how-to-provision-install-configure-and-keep-thousands-of-debian-and-debian-based-systems-updated.html</guid>
    <description>Transcript of the talk "How to provision, install, configure and keep thousands of Debian and Debian-based systems updated" at DebConf26 in Santa Fe</description>
    <content:encoded><![CDATA[
<main id="content" class="content">
<h1 class="title">How to provision, install, configure and keep thousands of Debian and Debian-based systems updated</h1>
<p>
<a href="https://osiux.com/index.html">index</a> |
<a href="https://osiux.com/about.html">about</a> |
<a href="https://osiux.com/archive.html">archive</a> |
<a href="https://osiux.com/charlas.html">charlas</a> |
<a href="https://osiux.com/docs.html">docs</a> |
<a href="https://osiux.com/links.html">links</a>
</p>

<p>
<a href="https://osiux.com/dot.html"><code>dot</code></a> |
<a href="https://osiux.com/git.html"><code>git</code></a> |
<a href="https://osiux.com/img.html"><code>img</code></a> |
<a href="https://osiux.com/plt.html"><code>plt</code></a> |
<a href="https://osiux.com/tty.html"><code>tty</code></a> |
<a href="https://osiux.com/uml.html"><code>uml</code></a>
</p>
<section id="outline-container-orgf41fac6" class="outline-2">
<h2 id="orgf41fac6">Summary</h2>
<div class="outline-text-2" id="text-orgf41fac6">
<p>
This project manages around <code>3,000</code> <i>Debian</i> servers and <code>3,000</code>
<i>Debian-Based</i> workstations across <code>300</code> branches.
</p>

<p>
This is a real-world case study of how to provision, install, configure and
maintain thousands of Debian and Debian-based systems using Free Software.
</p>

<p>
The infrastructure combines <i>Ansible</i>, <i>AWX</i>, <i>Proxmox</i>, <i>PXE</i>, <i>FreeIPA</i>,
<i>GitLab</i> <code>CI/CD</code> and several caching layers to automate the deployment and
maintenance of approximately <code>6,300</code> systems across hundreds of branches.
</p>

<p>
The project started in 2018 and evolved continuously as the infrastructure,
hardware, security requirements and software stack changed.
</p>
</div>
</section>
<section id="outline-container-org77f300f" class="outline-2">
<h2 id="org77f300f">Talk</h2>
<div class="outline-text-2" id="text-org77f300f">
<video id="video" controls width="720" height="406" autoplay loop background="#000000" preload poster="../videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1.png">
  <source src="https://meetings-archive.debian.net/pub/debian-meetings/2026/DebConf26/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1.webm" type="video/webm">
  <track  src="https://osiux.com/../videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1-en.vtt"  kind="subtitles" srclang="en" label="English" default/>
  <track  src="https://osiux.com/../videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1-es.vtt"  kind="subtitles" srclang="es" label="Spanish"/>
</video>

<ul class="org-ul">
<li>Demo Site: <a href="https://filiales-gnu-linux.g.coop.ar/">https://filiales-gnu-linux.g.coop.ar</a></li>
<li>Original Video: <a href="https://meetings-archive.debian.net/pub/debian-meetings/2026/DebConf26/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1.webm"><code>WebM (298 MB)</code></a></li>
<li>Subtitle Video: <a href="https://filiales-gnu-linux.g.coop.ar/videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1.webm"><code>WebM (298 MB)</code></a></li>
<li>Spanish Subtitle: <a href="https://osiux.com/../videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1-es.srt"><code>SRT (50 KB)</code></a> <a href="https://osiux.com/../videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1-es.vtt"><code>VTT (44 KB)</code></a></li>
<li>English Subtitle: <a href="https://osiux.com/../videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1-en.srt"><code>SRT (48 KB)</code></a> <a href="https://osiux.com/../videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1-en.vtt"><code>VTT (42 KB)</code></a></li>
<li>English Slides: <a href="https://osiux.com/2026-07-21-debconf26-how-to-provision-install-configure-and-keep-thousands-of-debian-and-debian-based-systems-updated.pdf"><code>PDF (357 KB)</code></a></li>
<li>Spanish Slides: <a href="https://osiux.com/2026-07-21-debconf26-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.pdf"><code>PDF (357 KB)</code></a></li>
</ul>

<p>
Este <i>post</i> es una traducción al inglés, de la transcripción de la
charla
<a href="https://osiux.com/2026-07-21-debconf26-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.html">Cómo aprovisionar, instalar, configurar y mantener actualizados miles de sistemas Debian y basados en Debian</a>
</p>
</div>
</section>
<section id="outline-container-orgcee1daa" class="outline-2">
<h2 id="orgcee1daa">Topics</h2>
<div class="outline-text-2" id="text-orgcee1daa">
<ul class="org-ul">
<li><i>Debian</i></li>
<li><i>Ansible</i></li>
<li><i>AWX</i></li>
<li><i>Proxmox</i></li>
<li><i>PXE</i></li>
<li><i>FreeIPA</i></li>
<li><i>GitLab</i> <code>CI/CD</code></li>
<li>Infrastructure as Code</li>
<li><code>GNU/Linux</code> workstation management</li>
<li>Automated deployment</li>
</ul>
</div>
</section>
<section id="outline-container-org24c365b" class="outline-2">
<h2 id="org24c365b"><i>DebConf26</i></h2>
<div class="outline-text-2" id="text-org24c365b">
<p>
This year, attending my first <code>DebConf</code> <sup><a id="fnr.debconf" class="footref" href="https://osiux.com/#fn.debconf" role="doc-backlink">1</a></sup>,
the <code>DebConf26</code> <sup><a id="fnr.debconf26" class="footref" href="https://osiux.com/#fn.debconf26" role="doc-backlink">2</a></sup> in <i>Santa Fe</i>, I took the opportunity to
give the talk
<code>"How to Provision, Install, Configure, and Keep Thousands of Debian and Debian-Based Systems Updated"</code>
as an update to the talk I presented at <code>nerdearla</code> <sup><a id="fnr.nerdearla" class="footref" href="https://osiux.com/#fn.nerdearla" role="doc-backlink">3</a></sup>
edition 2022 which was called
<code>"How to Migrate 6300 Machines to GNU/Linux Using Ansible and AWX"</code> <sup><a id="fnr.fgnulyt" class="footref" href="https://osiux.com/#fn.fgnulyt" role="doc-backlink">4</a></sup>
</p>
</div>
</section>
<section id="outline-container-orgbf5d94b" class="outline-2">
<h2 id="orgbf5d94b"><i>gcoop</i></h2>
<div class="outline-text-2" id="text-orgbf5d94b">

<div id="org37c85e4" class="figure">
<p><a href="https://filiales-gnu-linux.g.coop.ar/" width="640" height="360" title="presentation with Ansible, gcoop and AWX logos"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-01-ans-awx.png" alt="debconf26-filiales-gnu-linux-01-ans-awx.png" width="640" height="360" title="presentation with Ansible, gcoop and AWX logos"></a>
</p>
</div>

<p>
My name is <i>OSiRiS</i>, and I am called <code>OSiUX</code> in the community.
I work at <code>gcoop</code> <sup><a id="fnr.gcoop" class="footref" href="https://osiux.com/#fn.gcoop" role="doc-backlink">5</a></sup>,
which is a <i>Cooperative</i> of <i>Free</i> <i>Software</i>, meaning we exclusively
work with <code>FreeSoftware</code> <sup><a id="fnr.rms" class="footref" href="https://osiux.com/#fn.rms" role="doc-backlink">6</a></sup> in a horizontal organization. We have
no bosses, no employees.
</p>

<p>
Five members (partners) from <i>gcoop</i> attended the event; it is our first
time at <i>DebConf</i>.
We sponsored this event and give thanks to <code>Debian</code> <sup><a id="fnr.debian" class="footref" href="https://osiux.com/#fn.debian" role="doc-backlink">7</a></sup> because
we have 20 years of working with <i>Free</i> <i>Software</i>, and without <i>Debian</i>
it would not have been possible.
</p>
</div>
</section>
<section id="outline-container-orge4a97fc" class="outline-2">
<h2 id="orge4a97fc">Project Scope: Managing 6,300 Debian/Debian-Based Systems Since 2018</h2>
<div class="outline-text-2" id="text-orge4a97fc">
<p>
I will show an update to a previous talk I gave in <code>2022</code>, regarding the
migration project of <i>Branches</i> /GNU/Linux of the <code>Credicoop Bank
Cooperative Limited</code> <sup><a id="fnr.bccl" class="footref" href="https://osiux.com/#fn.bccl" role="doc-backlink">8</a></sup>, which is a cooperative bank.
</p>

<p>
And I will try to quickly review the migration process and then we will
look at the differences in recent years. This project&#x2026;
</p>

<p>
Basically, it is an <i>Infrastructure as Code</i> project using <code>Ansible</code>
</p>
</div>
</section>
<section id="outline-container-org21d19c3" class="outline-2">
<h2 id="org21d19c3">Lab for Project Feasibility using Free Software</h2>
<div class="outline-text-2" id="text-org21d19c3">

<div id="org210089d" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-02-lab-tec.png" width="640" height="360" title="presentation of the project laboratory using free software, VPN logos, Proxmox, VMs with Debian, Workstations with Ubuntu, Ansible, GitLab and integration between FreeIPA with ActiveDirectory"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-02-lab-tec.png" alt="debconf26-filiales-gnu-linux-02-lab-tec.png" width="640" height="360" title="presentation of the project laboratory using free software, VPN logos, Proxmox, VMs with Debian, Workstations with Ubuntu, Ansible, GitLab and integration between FreeIPA with ActiveDirectory"></a>
</p>
</div>

<p>
Well, at the beginning of the <i>project</i>, even though it took <code>6</code> months,
we had to try to discover which tools from the <i>Free</i> <i>Libre</i> <i>Open</i>
<i>Source</i> <i>Software</i> ecosystem would allow us to carry out the entire
infrastructure migration of a bank across the length and breadth of
Argentina.
</p>

<p>
What we found was that the automation tool was <i>Ansible</i> because we were
already using it. We would use <code>GitLab</code> <sup><a id="fnr.gitlab" class="footref" href="https://osiux.com/#fn.gitlab" role="doc-backlink">9</a></sup>. For ActiveDirectory
authentication within Linux, we would use <i>IPA</i>. For <i>AWX</i>, obviously
all servers would run on <code>Proxmox</code> <sup><a id="fnr.proxmox" class="footref" href="https://osiux.com/#fn.proxmox" role="doc-backlink">10</a></sup>. We had been working
with <i>Proxmox</i> for years. The <i>VMs</i> inside the <i>Proxmox</i> servers would
be <i>Debian</i>, obviously.
</p>

<p>
And for the <i>Workstations</i>, due to there being <code>3,000</code> of them and for
<i>Support</i> reasons, we chose a distribution based on <i>Debian</i>. This&#x2026; a
little more updated.
</p>

<p>
What we have there, it doesn&rsquo;t show very well there, but what is
moving is that&#x2026; underneath are all the components; it&rsquo;s a timeline,
all the dependency components we use, which are being updated worldwide,
all the time. I mean, at that moment, in this month, a new versión of
one component came out, and another, and another. And as you are
figuring out how to do things, the whole ecosystem is updating. So it&rsquo;s
a problem to solve.
</p>
</div>
</section>
<section id="outline-container-org48b8382" class="outline-2">
<h2 id="org48b8382">Automated <i>Debian</i> and <i>Proxmox</i> Deployment with <i>PXE</i> and <i>AWX</i></h2>
<div class="outline-text-2" id="text-org48b8382">

<div id="org85d7b6c" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-03-dev-dep.png" width="640" height="360" title="Introducing automated deployment of Debian and Proxmox with PXE and AWX using GitLab as source of truth"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-03-dev-dep.png" alt="debconf26-filiales-gnu-linux-03-dev-dep.png" width="640" height="360" title="Introducing automated deployment of Debian and Proxmox with PXE and AWX using GitLab as source of truth"></a>
</p>
</div>

<p>
But well, what we reached was that in Development we managed to
orchestrate a <i>deploy</i> idea, which is basically: we have an <i>AWX</i>, let
me point it out like this, this is an <i>AWX</i>, and this <i>AWX&rsquo;s</i> source of
truth is a <i>GitLab</i>. So, <i>AWX</i> reads from <i>GitLab</i> everything that
would be&#x2026; I mean, <i>playbooks</i>, and the first step is to <i>deploy</i> the
<i>iDRAC</i>.
</p>


<div id="orgdccd286" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-03-dev-pve.png" width="640" height="360" title="presentation with iDRAC website with storage RAID and VNC with boot DELL server"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-03-dev-pve.png" alt="debconf26-filiales-gnu-linux-03-dev-pve.png" width="640" height="360" title="presentation with iDRAC website with storage RAID and VNC with boot DELL server"></a>
</p>
</div>

<p>
The <code>iDRAC</code> <sup><a id="fnr.idrac" class="footref" href="https://osiux.com/#fn.idrac" role="doc-backlink">11</a></sup> is the computer inside the computer. Inside the
<i>Dell</i> servers we use, before the server even has anything, there is a
small computer called <i>iDRAC</i>. Using a protocol called <i>Redfish</i>, we
made <i>playbooks</i> that <i>AWX</i> connects to the <i>iDRAC</i> and does partition
the disk, configure the <i>BIOS</i>, and <code>reboot</code> into <code>PXE</code> <sup><a id="fnr.pxe" class="footref" href="https://osiux.com/#fn.pxe" role="doc-backlink">12</a></sup>. So, a
brand-new computer fresh out of the box.
</p>


<div id="org0382ce4" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-03-dev-pxe.png" width="640" height="360" title="presentation with debug of PXE boot to install Debian on Dell server"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-03-dev-pxe.png" alt="debconf26-filiales-gnu-linux-03-dev-pxe.png" width="640" height="360" title="presentation with debug of PXE boot to install Debian on Dell server"></a>
</p>
</div>

<p>
And immediately that will end <i>up</i> generating from one <i>Proxmox</i>, it
will end <i>up</i> generating another <i>Proxmox</i>. Inside that <i>Proxmox</i> we
have several <i>VMs</i>. One of those <i>VMs</i> is a <i>PXE</i> <i>Server</i>, I don&rsquo;t see
anything here for it, but it must be this one.
</p>


<div id="orgc06b24a" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-03-dev-net.png" width="640" height="360" title="presentation with debug, PXE boot and unattended installation of debian netinstall"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-03-dev-net.png" alt="debconf26-filiales-gnu-linux-03-dev-net.png" width="640" height="360" title="presentation with debug, PXE boot and unattended installation of debian netinstall"></a>
</p>
</div>

<p>
We have a server, well we have a <i>CDN</i>, which is a processing server, an
<i>Nginx</i> that has all the resources, which in turn acts as a <i>Proxy</i> for
another, which is an <i>Apache</i>, and a server that replicates this data.
Well, this is done automatically and unattended, without operator
intervention. That means a server comes straight out of the factory, you
open the box, install <i>power</i>, install <i>network</i>, and from <i>AWX</i> a
<i>script</i> is launched. This is the <i>AWX</i> infrastructure, sorry, the
<i>Proxmox</i> one, we were going to see, here it shows how it launches, and
this is just for monitoring, let&rsquo;s say, everything is done unattended
and the operator doesn&rsquo;t need to see anything running. The <i>AWX</i>
<i>deploys</i> the <i>Proxmox</i> via <i>PXE</i>, actually there are several stages;
first it <i>deploys</i> a <i>Debian</i> <i>NetInstall</i> completely unattended,
meaning you don&rsquo;t have to touch anything, directly in <i>OEM</i> mode, it
configures everything necessary for that server to be operational. When
it finishes, in a hook, at the end of the <i>Debian</i> <i>NetInstaller</i>, we
made a <i>script</i> that does this: it takes the <code>MAC</code> address of that
machine, which is unique, and registers it in the <i>AWX</i> <i>Inventory</i>.
</p>

<p>
So that machine, which just received a random <i>IP</i>, we already know what
its <i>IP</i> will be, what its <i>iDRAC</i> is, it permanently stays, for all
the years that <i>Server</i> will last, referenced to that <code>MAC</code> address and
to a serial number that the server&rsquo;s own <i>iDRAC</i> has. So, in that way,
it is easy to identify it.
</p>

<p>
Over there on the left, the only thing there is the <i>debug</i> output of
what is being seen on the <i>PXE</i> <i>Server</i>, and as you can see, the
<i>Server</i> is at the <i>PXE</i> <i>Server</i>, the <i>Server</i> installs itself, there
is no manual intervention and it finishes installed; it&rsquo;s a <i>Debian</i>
system.
</p>

<p>
The next <i>playbook</i> that is launched to <i>AWX</i> converts that <i>Debian</i>
into a <i>Proxmox</i>, also in an unattended manner. That is, we do not
install <i>Proxmox</i>; we install <i>Debian</i> and convert it into <i>Proxmox</i>.
That is an advantage of <i>Proxmox</i> being a distribution based on
<i>Debian</i>: the only thing that changes is adding a <i>repo</i>. And done, all
necessary packages are configured.
</p>

<p>
And when it finishes configuring inside a <i>Proxmox</i>, we launch another
<i>playbook</i> that creates the <i>VMs</i>, and yet another <i>playbook</i> that
creates the services inside each <i>VM</i>. All the <i>VMs</i> we use are <i>KVM</i>.
This is a Bank; it needs greater robustness in Security, so all machines
are <code>up-to-date</code>. Over there on the left you can see the creation of all
the different <i>VMs</i>. There are <code>10</code> <i>VMs</i> per <i>Server</i> and, rounding
more or less, about <code>300</code> physical servers. That gives us a total of
<code>3,000</code> <i>Debian</i> systems. Installed automatically across the entire
country.
</p>
</div>
</section>
<section id="outline-container-org783c871" class="outline-2">
<h2 id="org783c871">Workstations</h2>
<div class="outline-text-2" id="text-org783c871">

<div id="org4d486aa" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-03-dev-wlp.png" width="640" height="360" title="presentation of the execution of a playbook from AWX to a virtual Workstation in a Development VM within Proxmox"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-03-dev-wlp.png" alt="debconf26-filiales-gnu-linux-03-dev-wlp.png" width="640" height="360" title="presentation of the execution of a playbook from AWX to a virtual Workstation in a Development VM within Proxmox"></a>
</p>
</div>

<p>
For workstations we made an image. There we are looking at a test
virtual workstation from Development inside a <i>Proxmox</i>. And what we
do is generate a base image, also a <i>NetInstall</i> in this case based on a
distro based on <i>Debian</i>. And then we configure it, also in the same
way, with a <i>script</i>. it takes the <i>hostname</i> of the machine, which
can be configured later or reconfigured at the destination site. It is
registered in the <i>Inventory</i> and remains available also with a
manufacturer <i>serial number</i>. They are all <i>HP</i> <i>Workstations</i>. We can
identify them uniquely, even if the <code>MAC</code> address changes at some point.
It&rsquo;s always the same device.
</p>


<div id="org661cb2e" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-03-dev-wst.png" width="640" height="360" title="presentation of the AWX inventory where you see the connection variables of a workstation and at the same time the host information is displayed within the virtual workstation desktop in a development VM within Proxmox"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-03-dev-wst.png" alt="debconf26-filiales-gnu-linux-03-dev-wst.png" width="640" height="360" title="presentation of the AWX inventory where you see the connection variables of a workstation and at the same time the host information is displayed within the virtual workstation desktop in a development VM within Proxmox"></a>
</p>
</div>

<p>
The graphical interface of <i>AWX</i> is basically a <i>Web</i> page written in
<i>Django</i>. And there are lots of operators working by launching different
<i>playbooks</i> we made, so that this stays operational. And the <i>PXE</i>
server also takes workstation images. That is, you can take a
workstation on-site; if it got misconfigured, something happened to it,
doesn&rsquo;t work, it doesn&rsquo;t matter. The entire workstation image is rebuilt
via <i>PXE</i>. No time is wasted waiting to see what&rsquo;s wrong with it. You
don&rsquo;t access the machine manually. it is rebuilt from scratch. Why?
Because there are no local data within the workstation. The data is on a
<i>Kerberized</i> <i>NFS</i> <i>Server</i> within the same network as the <i>branch</i>
where we are.
</p>


<div id="org1829f6d" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-04-dep-wst.png" width="640" height="360" title="presentation of the deployment of several workstations using GitLab, AWX and showing the authentication flow between workstations and FreeIPA integrated into ActiveDirectory cluster"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-04-dep-wst.png" alt="debconf26-filiales-gnu-linux-04-dep-wst.png" width="640" height="360" title="presentation of the deployment of several workstations using GitLab, AWX and showing the authentication flow between workstations and FreeIPA integrated into ActiveDirectory cluster"></a>
</p>
</div>
</div>
</section>
<section id="outline-container-orgc65db32" class="outline-2">
<h2 id="orgc65db32">Scaling <i>Ansible</i> and <i>AWX</i> to 6,300 Debian/Debian-Based Systems</h2>
<div class="outline-text-2" id="text-orgc65db32">
<p>
Well, and similar to the <i>Proxmox</i>, we have the workstations.
</p>

<p>
For the <i>deploy</i> at the <i>branch</i>, it&rsquo;s a bit more complex because the
deploy of the <i>branch</i>, as we said, we have <code>3,000</code> workstations. Of
these <code>3,000</code> workstations there are no users on the workstations.
That is, in those workstations, if you look at <code>/etc/passwd</code>, there
are no local users, aside from the ones already in the system.
</p>

<p>
What we use is a <i>FreeIPA</i> client that connects to <i>IPA</i> and from <i>IPA</i>
it connects to the <code>4</code> <i>ADs</i> we have. And they pull those domain users
on the fly directly. And for this reason each workstation has to be
enrolled in the domain as well. But what is done is that they enroll in
the <i>FreeIPA</i> domain. And <i>FreeIPA</i> connects to the <i>FreeIPA</i> domain.
And <i>FreeIPA</i> has a trust relationship with the <i>ActiveDirectory</i>
domain. I mean, it&rsquo;s like a subdomain. And what it allows is that for
all those <code>users</code>, their <i>password</i> stays in the <i>AD</i>, which is the
Bank&rsquo;s infrastructure, without having changed anything for them. For
them it is transparent. And from all <code>GNU/Linux</code> machines they use the
same <code>user</code> directly. What is in the middle and enables this is called
<i>FreeIPA</i>.
</p>

<p>
And to speed <i>up</i> the deployment process what we have new is multiple
layers of caching. We have several <i>proxies</i>. Initially we had
<i>Debian&rsquo;s</i> <code>apt-cacher</code>. Now there are also some <i>Debian</i> mirrors. And
then we have <code>nginx</code> for proxying and <code>squid</code> for caching. To make this
work across the length and breadth of the entire country.
</p>
</div>
</section>
<section id="outline-container-org9c27234" class="outline-2">
<h2 id="org9c27234">Hardware Diversity in the Branches</h2>
<div class="outline-text-2" id="text-org9c27234">

<div id="orgff71236" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-05-stg-hwd.png" width="640" height="360" title="presentation with the total quantities of hardware, 3000 HP ProDesk 400 G5 workstations, 300 Dell PowerEdge R340 servers and 3000 virtual Debian/KVM in Proxmox"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-05-stg-hwd.png" alt="debconf26-filiales-gnu-linux-05-stg-hwd.png" width="640" height="360" title="presentation with the total quantities of hardware, 3000 HP ProDesk 400 G5 workstations, 300 Dell PowerEdge R340 servers and 3000 virtual Debian/KVM in Proxmox"></a>
</p>
</div>

<p>
Here is a bit of the hardware <i>IT</i> started with. <code>3,000</code> <i>HP</i> <i>ProDesk</i>.
<code>3,000</code> <i>Dell</i> servers. Sorry, <code>300</code> <i>Dell</i> servers. <code>3,000</code> virtual
<i>Debian</i>. Afterwards <i>IT</i> changed a little bit. But also later we found
<code>3,500</code> different peripherals. Strange things like a <i>check</i> <i>scanner</i>
or a ticket printer.
</p>


<div id="org0eb8e8e" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-05-stg-prn.png" width="640" height="360" title="presentation with the total quantities of i3581 peripherals, printers, scanners, ticket printers, self service terminals, etc"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-05-stg-prn.png" alt="debconf26-filiales-gnu-linux-05-stg-prn.png" width="640" height="360" title="presentation with the total quantities of i3581 peripherals, printers, scanners, ticket printers, self service terminals, etc"></a>
</p>
</div>
</div>
</section>
<section id="outline-container-orgca358bf" class="outline-2">
<h2 id="orgca358bf">Project Initial Stack</h2>
<div class="outline-text-2" id="text-orgca358bf">

<div id="orgc4fb63f" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-05-stg-ver.png" width="640" height="360" title="Presentation with the technology stack: Ansible v2.9, AWX v9.3, Debian 10.9, Proxmox v6.3, FreeIPA v4.6 and Ubuntu 18.04"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-05-stg-ver.png" alt="debconf26-filiales-gnu-linux-05-stg-ver.png" width="640" height="360" title="Presentation with the technology stack: Ansible v2.9, AWX v9.3, Debian 10.9, Proxmox v6.3, FreeIPA v4.6 and Ubuntu 18.04"></a>
</p>
</div>

<p>
This is what the infrastructure originally was with which the project
started in <code>2018</code>. It kept varying. We also changed some <i>VMs</i>.
</p>


<div id="org201230b" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-05-stg-ops.png" width="640" height="360" title="Presentation with the staff at each stage: laboratory (2), development (3), deploy (4), staging (4), production (5), support (5), next (5)"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-05-stg-ops.png" alt="debconf26-filiales-gnu-linux-05-stg-ops.png" width="640" height="360" title="Presentation with the staff at each stage: laboratory (2), development (3), deploy (4), staging (4), production (5), support (5), next (5)"></a>
</p>
</div>
</div>
</section>
<section id="outline-container-org614b012" class="outline-2">
<h2 id="org614b012">Released <i>Ansible</i> <i>playbook</i> and <i>role</i> repositories!</h2>
<div class="outline-text-2" id="text-org614b012">

<div id="orgfaaf860" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-05-stg-git.png" width="640" height="360" title="Presentation with a list of git repositories of Ansible utilities, roles and playbooks released at https://gitlab.com/gcoop-libre and https://github.com/gcoop-libre"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-05-stg-git.png" alt="debconf26-filiales-gnu-linux-05-stg-git.png" width="640" height="360" title="Presentation with a list of git repositories of Ansible utilities, roles and playbooks released at https://gitlab.com/gcoop-libre and https://github.com/gcoop-libre"></a>
</p>
</div>
</div>
</section>
<section id="outline-container-orgd87de5e" class="outline-2">
<h2 id="orgd87de5e">Plotting domain logins and FreeIPA cache synchronization</h2>
<div class="outline-text-2" id="text-orgd87de5e">

<div id="org61ac0a9" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-06-sup-ipa.png" width="640" height="360" title="Presentation with FreeIPA domain login tracing and cache synchronization using ipa-sss-syn script"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-06-sup-ipa.png" alt="debconf26-filiales-gnu-linux-06-sup-ipa.png" width="640" height="360" title="Presentation with FreeIPA domain login tracing and cache synchronization using ipa-sss-syn script"></a>
</p>
</div>

<p>
And quickly what we encountered were problems. Scale problems. This is a
graph of <i>login</i> attempts during the day. And what you will see is that
there is a little problem here at <code>10</code> in the morning. That is, <code>3,000</code>
people wanted to <i>log</i> in at <code>10</code> in the morning. It looks the same when
they go down later starting from <code>4</code> <i>PM</i>. The logins start going back
<i>up</i>. And well, here there is a delay/caching problem. And other
problems which is, imagine with <code>3,000</code> users, with the robust security
policies of a Bank, every day many <i>passwords</i> expire and they have to
be changed and all that. And that change has to be done from our
distro&rsquo;s <i>login</i> screen. That is, directly from there. It tells them the
<i>password</i> expired and at that moment it asks for the old one, twice for
the new one. Someone in the early morning gets confused. That generates
another <i>password</i> <i>issue</i>. But about this&#x2026;  Now I will tell you what
was worked on to improve it.
</p>
</div>
</section>
<section id="outline-container-org058eea5" class="outline-2">
<h2 id="org058eea5">Automating the implementation of <i>AWX</i> resources with <i>GitLab</i> <code>CI/CD</code> and <i>Ansible</i> <i>Tools</i></h2>
<div class="outline-text-2" id="text-org058eea5">

<div id="org1e65c2a" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-07-nxt-awx.png" width="640" height="360" title="Introducing Automating AWX Resource Deployment with GitLab CI/CD and Ansible Tools"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-07-nxt-awx.png" alt="debconf26-filiales-gnu-linux-07-nxt-awx.png" width="640" height="360" title="Introducing Automating AWX Resource Deployment with GitLab CI/CD and Ansible Tools"></a>
</p>
</div>

<p>
And so, to do that too, well, part of the automation we achieved is,
instead of going to <i>AWX</i>, which is a graphical interface, and clicking
to create <i>playbooks</i>, to create <i>workflows</i>, to create inventories, and
giving permissions and all that manually, what we did is a <i>Git</i> <i>repo</i>
called <i>AWX</i>, a <i>repo</i> called <i>Inventory</i>, and they are all <i>JSON</i> or
<i>YAML</i> files, which <i>GitLab&rsquo;s</i> <i>CI</i> directly verifies and <i>deploys</i> into
a Development <i>AWX</i> immediately as we do the <i>Git</i> <i>push</i>. So in this
way we can have all stages verified and automatically deployed in a
Development <i>AWX</i> for <i>Testing</i>. In the Production <i>AWX</i>, this <i>deploy</i>
is triggered manually, let&rsquo;s say, but it creates the same instances.
That guarantees us versioned infrastructure as code.
</p>
</div>
</section>
<section id="outline-container-org9ab2ac1" class="outline-2">
<h2 id="org9ab2ac1">Global view of centrally managed hosts from <i>AWX</i></h2>
<div class="outline-text-2" id="text-org9ab2ac1">

<div id="orge6cf7ce" class="figure">
<p><a href="https://filiales-gnu-linux.g.coop.ar/prd.html" width="640" height="360" title="graph with global view of all centrally managed hosts from AWX"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-08-prd-all.png" alt="debconf26-filiales-gnu-linux-08-prd-all.png" width="640" height="360" title="graph with global view of all centrally managed hosts from AWX"></a>
</p>
</div>

<p>
And to give you an idea of the project&rsquo;s scale, this is a view of what
the Bank&rsquo;s productive infrastructure is. I said, it&rsquo;s about <code>300</code>
Branches distributed across almost all provinces of the country. And
now, if we look closely at this, we will understand a little more; these
are all <i>hosts</i>. And all these <i>hosts</i> are controlled by one over here,
which I am going to find right now, there. This one here is <i>AWX</i>, it&rsquo;s
a single <i>VM</i>, not even on physical hardware, that controls all the
others and <i>deploys</i> to all of them. Obviously they don&rsquo;t <i>deploy</i> them
all together, they <i>deploy</i> them in stages.
</p>


<div id="org272fbc3" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-08-prd-awx.png" width="640" height="360" title="zoom a portion of the graph with global view of all centrally managed hosts from AWX"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-08-prd-awx.png" alt="debconf26-filiales-gnu-linux-08-prd-awx.png" width="640" height="360" title="zoom a portion of the graph with global view of all centrally managed hosts from AWX"></a>
</p>
</div>

<p>
And what we have is that each line, for example here, let&rsquo;s see, this is
the province of&#x2026; the province of Santa Fe. And I will try to highlight
a little. All of this are the machines from all the different Branches
of the entire province of Santa Fe. And if we zoom in on one, here, for
example, it is <code>f0372</code>. And well, within the concept of that <i>branch</i>,
we have a local caché, which is a <i>CDN</i>, the <code>PVE</code>, which is the
<i>Proxmox</i> <i>Server</i>, the <code>REP</code>, which is the <i>file</i> <i>Server</i>, a
Kerberized <i>NFS</i>, a <i>log</i> machine, which receives the <i>logs</i> from all
the others and forwards them. Initially we did this with rsyslog. There
is a <code>VPN</code> node that we do not intervene on, but we made the automatic
installation, which basically that is configured <code>BY</code> the Bank&rsquo;s
personnel. We have an Apt-Catcher, there, local, within the <i>branch</i>.
What else do we have? Well, this <i>Git</i> one, in the end we ditched it.
The print <i>Server</i>, which is a <code>CUPS</code>, where all the place&rsquo;s printers
are configured. And then, here is the representation of the different
printers from that <i>branch</i>. And then we will have the different
<i>Workstations</i>. And finally the rest of the equipment there. Ticket
printers and so on.
</p>

<p>
And this infrastructure, this infrastructure repeats throughout the
Bank. So that if you don&rsquo;t do this automatically, it is impossible to
maintain.
</p>

<p>
And what we achieved with this is that this <i>AWX</i> infrastructure allows
us that we no longer need to <i>log</i> into a machine manually and see what
happens. There is an <i>AWX</i> <i>playbook</i>, from the Headquarters, where
there is already a <i>template</i> to solve each problem. And you run that
<i>template</i> and it leaves a <i>Record</i> of everything that happens, a
traceable <i>log</i>. Obviously there are different permission levels. Who
can do that? Who cannot? Schedules, for example. I don&rsquo;t know, if we
want all machines to shut down at a certain time, well, there is a
<i>template</i> that sets a <code>poweroff</code> at a certain schedule on each machine.
For example, and you launch it. You can do things like <code>SNMP</code> sweeps to
know if certain machines are alive or dead. That is, all of that ends
<i>up</i> in one, finally a <i>PostgreSQL</i> database, managed from <i>AWX</i>.
</p>
</div>
</section>
<section id="outline-container-org6bda30d" class="outline-2">
<h2 id="org6bda30d">Global view of the role and playbook catalog in AWX</h2>
<div class="outline-text-2" id="text-org6bda30d">

<div id="org50c58a7" class="figure">
<p><a href="https://filiales-gnu-linux.g.coop.ar/ans.html" width="640" height="360" title="graph with global view of all playbooks and roles in the AWX catalog"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-09-ans-awx.png" alt="debconf26-filiales-gnu-linux-09-ans-awx.png" width="640" height="360" title="graph with global view of all playbooks and roles in the AWX catalog"></a>
</p>
</div>

<p>
And if we wanted to see a little of what it is, this is, like a view of
all the <i>playbooks</i> that are in <i>AWX</i>. Here is our <i>AWX</i>. Here I tried
to organize them a bit. Here we have <i>iDRAC</i> <i>Redfish</i>, <code>rsyslog</code>,
<i>CDN</i>.  Well, here we have the <i>Inventory</i>. I don&rsquo;t know if you can see
anything there. You can&rsquo;t see it there. Neither do I see it here either.
But, let&rsquo;s see, let&rsquo;s look here. Here, for example, we have a role that
clones a <i>KVM</i> <i>VM</i> in <i>Proxmox</i> So there is just a role for that. Over
here we will see more. This role creates a <i>KVM</i> <i>VM</i> from <i>Proxmox</i>
directly from an <code>ISO</code>. And it is an <code>ISO</code> that is already unattended.
That is, you don&rsquo;t have to do anything. That is for the <code>VPN</code>. A
<i>Proxmox</i> role to configure <code>cloud-init</code> for each of the <i>VMs</i> We use
the <i>OpenStack</i> image Let&rsquo;s say cloud, but without cloud, local, to do a
<code>qm restore</code> That is, we can <i>restore</i> a <i>VM</i> from a <i>backup</i> and it
comes <i>up</i> running. And so, there is a <i>playbook</i> for everything.
</p>
</div>
</section>
<section id="outline-container-orgd0694e7" class="outline-2">
<h2 id="orgd0694e7">Recent Updates, Security, and Migration to <i>OpenShift</i></h2>
<div class="outline-text-2" id="text-orgd0694e7">
<p>
Well, this is more or less what the migration <i>project</i> was. I will try
to summarize, and move forward with what&rsquo;s new. A little difference from
this of <code>2022</code> to <code>2026</code> in what has been worked on.
</p>

<p>
Well, there are over <code>200</code> <i>Git</i> repos to control all of this. Now what
is being done, part of what was actually done, we worked a lot on
cybersecurity. We changed from <code>rsyslog</code> to <code>auditd</code>. We integrated
<code>NUT</code> for the <code>UPS</code>, to have <code>UPS</code> monitoring. We are working on
updating the <i>Debian</i> from those <i>VMs</i> from <code>10</code> to <code>13</code>. This,
remember, started in <code>2018</code>.
</p>

<p>
<i>FreeIPA</i> automation, now a new was done&#x2026; that is, what we currently
had in production was only one large <i>FreeIPA</i> <i>VM</i>. And since the Bank
has <i>OpenShift</i>, we are doing a migration of <i>FreeIPA</i> to <i>OpenShift</i>.
Also all with automated <i>playbooks</i>.
</p>

<p>
Here as a summary of everything done in <i>Cybersecurity</i>. It is a role
that connects to each machine and says what is right, what is wrong.
Some things it can correct and others simply say this cannot go to
production like this.
</p>

<p>
We also worked on the topic of <i>Kernel</i> booting so that some <i>Server</i>
models would appear and to identify the network cards and for everything
to work automatically and disk repartitioning and so on, there are
different <i>Server</i> levels. The regeneration of all these images.
Everything that would be the lifecycle of the <i>VMs</i> that have to be
registered. Several that were taken down. Others that changed that
didn&rsquo;t need a secondary disk somewhere. The order in which they start.
A report of what the status of all this is. All those <i>VMs</i> and updates.
Well, there&rsquo;s a little of what I said about <i>Server</i> versions.
</p>
</div>
</section>
<section id="outline-container-org90fde1b" class="outline-2">
<h2 id="org90fde1b">Workstation Challenges, Browsers, and User Restrictions</h2>
<div class="outline-text-2" id="text-org90fde1b">
<p>
And we will advance because we are short on time.
</p>

<p>
For <i>Workstation</i> is what has been worked on the most because it had
originally been worked on with a <i>Workstation</i> <code>18.04</code> and now we moved
to <code>24.04</code> if I&rsquo;m not mistaken. And then besides there are some problems
they had. Remember this original infrastructure was not <i>GNU</i> and worked
with <i>Firefox</i> <code>v9</code>. We took it to <code>v68</code> and now we took it to <code>v120</code>
and <i>tests</i> are being done with <code>v140</code>. The problem is not so much the
environment, but the problem is the ecosystem of all the internal
applications that are not updated and don&rsquo;t work. Basically it&rsquo;s not an
easy <i>task</i>. So for a moment more than one versión of browser coexisted.
Uh&#x2026; And that was another challenge.
</p>

<p>
And well, also <i>issues</i> of updating the <i>Kernel</i> version. We had to
<i>patch</i> some difficult <i>CVEs</i> that came out recently. Well, at some
point <i>Chrome</i> was also tried as an alternative for some sites.
</p>

<p>
We do with a <i>playbook</i> all the configuration policies of <i>Firefox</i>. The
<code>user</code> basically cannot do anything. That is like&#x2026; They can&rsquo;t even
change the wallpaper. Well it&rsquo;s the way to keep <code>3,000</code> users. Well
then&#x2026; No one goes into a machine to configure it. From <i>AWX</i> a
<i>playbook</i> is launched directly.
</p>

<p>
And, uh&#x2026; Well the topic of <i>WakeOnLAN</i>, integration, updating the
<i>Kernel</i>, <code>sftp</code> fixes. That is well everything that would lead to the
new versión of <i>IPA</i>. We worked quite a bit with <i>AppArmor</i> to restrict&#x2026;
Uh&#x2026; Some important things. The handling of <i>login</i>. Also handling
being able to change the <i>password</i>. Uh&#x2026; Well <i>Backup</i> and all that.
</p>

<p>
And, uh&#x2026; Let&rsquo;s see&#x2026; A little of <i>AWX</i> here. Uh&#x2026; Well there are
<code>198</code> <i>releases</i> since we finished migrating it. Because as with any
large infrastructure when you finish migrating it you have to start
migrating again. Basically. It is in constant change. And well all the
time after that new needs also come out&#x2026;
</p>

<p>
Uh&#x2026; Well we have <i>CloneZilla</i> for this I said of booting a machine
with an already built image. Uh&#x2026; And solving problems. Uh&#x2026; Here uh
isolated profiles. Isolated from each other due to configuration
<i>issues</i>.
</p>
</div>
</section>
<section id="outline-container-orgf294999" class="outline-2">
<h2 id="orgf294999"><i>CCTV</i></h2>
<div class="outline-text-2" id="text-orgf294999">
<p>
A part of <i>CCTV</i> was added. Machines that are integrated into the
security cameras&rsquo; <i>DVRs</i>. Uh&#x2026; So well that is like a new inventory
being added.
</p>
</div>
</section>
<section id="outline-container-org79c814a" class="outline-2">
<h2 id="org79c814a"><i>HP Linux Tools</i> <sup><a id="fnr.ansible_hplt" class="footref" href="https://osiux.com/#fn.ansible_hplt" role="doc-backlink">13</a></sup></h2>
<div class="outline-text-2" id="text-org79c814a">
<p>
Uh&#x2026; <i>HP</i> <i>Linux</i> <i>Tools</i>, for example that&#x2026; A detail is at one point
uh a machine froze and froze in strange situations. We took long to
investigate what happened. It had to do with a <i>power</i> saving
configuration of the <i>BIOS</i>. And so the solution was simple. It was to
go into <code>3,000</code> machines, change the <i>BIOS</i> configuration and <code>reboot</code>
them. It&rsquo;s done. It&rsquo;s very simple. Do you need <code>3,000</code> technicians or uh
as many as Branches in the entire country? <i>It is impossible. And well
there uh I set out to investigate /HP&rsquo;s</i> <i>FTP</i>. And found a crazy guy on
<i>Linux</i> who had a tool that allows writing a <i>file</i> in the <i>UEFI</i>. With
the <i>BIOS</i> configuration that it will take the next <code>reboot</code>. This
requires compiling a <i>Kernel</i> module and so on. Uh&#x2026; we told them to
ask permission to <i>HP</i> and guarantee they weren&rsquo;t going to turn into a
<i>BIOS</i> that turns <code>3,000</code> bricks. They said Yes! And well we did several
<i>tests</i>. Never happened to us. So they worked out fine. Uh&#x2026; And that
allows well again centralized administration you could even change the
<i>password</i> of the <i>BIOS</i> of all machines centrally and remotely. So it&rsquo;s
super useful.
</p>

<p>
Uh&#x2026; Well here for example this modification of the <i>Git</i> <i>tokens</i>
and&#x2026;  There are a lot of things.
</p>
</div>
</section>
<section id="outline-container-orgb24e2cf" class="outline-2">
<h2 id="orgb24e2cf">Slides on the web/</h2>
<div class="outline-text-2" id="text-orgb24e2cf">
<p>
This&#x2026; At the URL down below,
<a href="https://filiales-gnu-linux.g.coop.ar">https://filiales-gnu-linux.g.coop.ar</a>
all of this will be available. So if you want to see it in detail.
</p>
</div>
</section>
<section id="outline-container-orgb28e94d" class="outline-2">
<h2 id="orgb28e94d">Closing</h2>
<div class="outline-text-2" id="text-orgb28e94d">
<p>
Uh&#x2026; And since there are five minutes left uh if it&rsquo;s okay I&rsquo;ll close
here and ask anything you want&#x2026; Because we won&rsquo;t manage to see
everything.
</p>
</div>
</section>
<section id="outline-container-org7606a2d" class="outline-2">
<h2 id="org7606a2d">Question 1 ActiveDirectory/</h2>
<div class="outline-text-2" id="text-org7606a2d">
<p>
<i>Audience</i>: Hi. Uh&#x2026; Are the <i>ActiveDirectory</i> you use <i>Windows</i> or do
you also use <i>Windows</i> <i>Server</i>?
</p>

<p>
<i>OSiUX</i>: Yes it&rsquo;s Bank infrastructure. Uh&#x2026; That already existed and
they weren&rsquo;t going to change it. The challenge was that all those users
work on the new workstations. Uh&#x2026; And it works.
</p>
</div>
</section>
<section id="outline-container-orgf729520" class="outline-2">
<h2 id="orgf729520">Question 2 <code>rsyslog</code> vs <code>auditd</code></h2>
<div class="outline-text-2" id="text-orgf729520">
<p>
<i>Audience</i>: First of all impressive.
</p>

<p>
<i>OSiUX</i>: Thanks to the <i>Free</i> <i>Software</i> community! Uh&#x2026; We put the
pieces together.
</p>

<p>
<i>Audience</i>: You really squeezed every bit out of <i>Ansible</i>, but I didn&rsquo;t
think that much could really be done. I had a particular small doubt
about something I saw. You said you changed from <code>rsyslog</code> to <code>auditd</code>
</p>

<p>
<i>OSiUX</i>: Yes. It was a <i>cybersecurity</i> request.
</p>

<p>
<i>Audience</i>: But the intention. Let&rsquo;s say <code>rsyslog</code> <i>logs</i> a level we
call application maybe a system level. And <code>auditd</code> points a bit more to
the <i>syscalls</i> of the system itself.
</p>

<p>
<i>OSiUX</i>: Yes, but it allows more detail. You can specify exactly what
parts you want.
</p>

<p>
<i>Audience</i>: No no no. I understand. My doubt is, are you logging the
<i>syscalls</i> of <code>3,000</code> clients?
</p>

<p>
<i>OSiUX</i>: That is&#x2026; Not from all workstations. Actually it&rsquo;s uh&#x2026;
Generally from the VMs mostly and some things. It is selective, not
everything.
</p>

<p>
<i>Audience</i>: Ah ah.
</p>

<p>
<i>OSiUX</i>: No, because otherwise there&rsquo;s no way.
</p>

<p>
<i>Audience</i>: No no it&rsquo;s fine. That was it.
</p>

<p>
<i>OSiUX</i>: Exactly, it&rsquo;s to not send all the logs. That is, to send
selectively. All this information goes to a <i>SIEM</i> that is at
Headquarters.
</p>

<p>
<i>Audience</i>: Just one?
</p>

<p>
<i>OSiUX</i>: Yes, well it could be more than one node.
</p>

<p>
<i>Audience</i>: Ah no.
</p>

<p>
<i>OSiUX</i>: But let&rsquo;s say conceptually it goes to a <i>SIEM</i> where everything
that happens is visualized there. And also to the <i>SIEM</i> goes all&#x2026; the
log of the <i>AWX</i> deploy. So also&#x2026;
</p>

<p>
<i>Audience</i>: Like <i>SIEM</i>?
</p>

<p>
<i>OSiUX</i>: No, another I don&rsquo;t remember now but it is known. Now if I tell
you I&rsquo;d lie. (it was <i>Splunk</i> that was the <i>SIEM</i>)
</p>

<p>
<i>Audience</i>: Thank you very much.
</p>
</div>
</section>
<section id="outline-container-orgc93ec23" class="outline-2">
<h2 id="orgc93ec23">Question 3 Wins, Pivots, and Next Steps</h2>
<div class="outline-text-2" id="text-orgc93ec23">
<p>
<i>Audience</i>: I agree with the colleague, hard work, a tough <i>Job</i>. And
moreover done with Free <i>Software</i>. My question is basically based on
the experience of the whole <i>project</i>. What went really well? What are
you going to start doing apart from what you mentioned? And what things
went one way and you said no this doesn&rsquo;t go this way we pivot?
</p>

<p>
<i>OSiUX</i>: The biggest challenge in general is not technical itself, but
it&rsquo;s dealing with the priorities of everything that needs to be done.
And with things at <code>user</code> level for many free applications are not
designed for such a large scale. And a problem where you want <code>users</code> to
not be able to touch anything. For example, there are <i>PDFs</i> that are
like <i>smartforms</i> you can fill out. And then you have to print them.
And that was really complex to solve. At the beginning we had to install
<i>Adobe</i> <i>Acrobat</i> with I don&rsquo;t know <code>wine</code> or some horrible thing
because it was the only one that supported it. <code>evince</code> showed them but
didn&rsquo;t allow us to complete. After we had an option I don&rsquo;t remember
which allowed us to complete. But it didn&rsquo;t let you hide the comment in
each form, in each textbox. And that came out printed and didn&rsquo;t work.
Now we worked on <code>okular</code> which has all that. But doesn&rsquo;t have any
<code>file-by-file</code> configuration option to disable everything. That is, the
<code>user</code> can deactivate it in the moment. Well then we worked. We are
touching Okular&rsquo;s code so that works. The same happened with some
binaries that don&rsquo;t have translation and don&rsquo;t have translation
<i>Support</i>. And well what we could we edited with a hex editor and
deployed our binary.  Things like that, let&rsquo;s say with apologies to
Asians we call them Chinese. (&ldquo;Sorry, I will avoid this type of comment
in the future&rdquo;).  That is, there are things sometimes you have to get
<code>hands-on</code> and solve it. Or complex <i>Bugs</i> where I don&rsquo;t know you enter
a screen and for X reasons if you move the mouse a little further down
to the right <code>gnome</code> freezes. And then you have to put a <i>script</i> that
prevents you from going down. And also things that a user <i>owner</i> of
their environment doesn&rsquo;t have a problem with because they can
customize. And an end <code>user</code> cannot touch anything. And you as <i>Admin</i>
of this infrastructure also don&rsquo;t want them to touch but you have to
give them a solution. Like thousands of things. What we didn&rsquo;t get
involved in and delegated was the <i>check</i> <i>scanner</i> integration part. I
tried for a while and couldn&rsquo;t get it. That was outsourced. But it
works. We did manage to get the ticket printer to work well. And that
implied a challenge that the banking <i>core</i> at that time used some
<i>Java</i> applets. And that nothing was impossible. We had to <i>PUT</i> a
chroot in the middle with something old for that to work. Well in the
end we could avoid all that. Because now that <i>core</i> already detects
when it&rsquo;s <code>GNU/Linux</code> and done, it throws code and we <i>PUT</i> a local
<i>Backend</i> that does everything missing and it works out. But yes it&rsquo;s a
challenge of many people. I am currently not on the <i>project</i>. I was in
the initial development and migration <i>Stage</i>. There are three people
now who are <i>full</i> time on this. And every day something new appears.
</p>

<p>
<i>Audience</i>: Well excellent.
</p>

<p>
<i>OSiUX</i>: I can stay here and chat.
</p>
</div>
</section>
<section id="outline-container-orgc4d20de" class="outline-2">
<h2 id="orgc4d20de">Question 4 management and composition of the human team in <code>GNU/Linux</code> Branches/</h2>
<div class="outline-text-2" id="text-orgc4d20de">
<p>
<i>Audience</i>: Well. <i>OSiRiS</i>, first thank you. For those of us who came here to
learn. The admiration you generate with everything you tell. My question
doesn&rsquo;t go by&#x2026;
</p>

<p>
<i>OSiUX</i>: It&rsquo;s <i>gcoop</i> work too, not mine&#x2026; I&rsquo;m just selling it.
</p>

<p>
<i>Audience</i>: Of everyone. My question goes more. Goes more that way. Not
the technical side. But by the team or human group. That exists in
Branches <code>GNU/Linux</code> which if I understand is the organization behind
this whole project. How many people are needed to do this? And how do
you manage it?
</p>

<p>
<i>OSiUX</i>: Well initially it was a six month project. Of two people. A
functional analyst and me. To see if the project was viable. Afterwards
started. I think we started three people. At the peak we reached three
people? Five?
</p>

<p>
<i>gcoop</i>: Three plus one.
</p>

<p>
<i>OSiUX</i>: Yes sure. Always with a <i>PM</i>. But at the peak five no. I mean I
think there&#x2026; I don&rsquo;t count the <i>PM</i> poor. Because he always talks
about we are not people. That we are <i>developers</i>. That we are weird
things. So well it&rsquo;s revenge. No at the peak five people. Today there
are three. Of <i>DevOps</i>, let&rsquo;s say. But that have to. Let&rsquo;s say is the
FullStack. So to speak. But then you have to touch or redesign an
application. I mean we had to design applications to fix existing
things. I mean it&rsquo;s the fun and complex at the same time.
</p>

<p>
<i>Audience</i>: I thought you were going to say three hundred, I don&rsquo;t know.
Thank you very much.
</p>

<p>
<i>OSiUX</i>: No no, sorry. We designed the automation of all this. The Bank
has its own arsenal. An army of people who use all this daily. They did
the migration in full pandemic <code>2020</code>. In less than a year! But it was a
physical army of people that solved all that. <i>AWX</i> operators I think
they are more or less like sixty. That is like&#x2026; Well there&rsquo;s so much
people. The Bank&rsquo;s <i>Infra</i> is very big. And it&rsquo;s all <i>On-premise</i>.  It&rsquo;s
all local. That is and all with Free <i>Software</i>.
</p>

<p>
<i>Audience</i>: Thank you very much.
</p>

<p>
<i>Organization</i>: There, Alejandro. I&rsquo;ll put a question in the chat here.
If later you can answer it there itself.
</p>

<p>
<i>OSiUX</i>: Yes. And later I have here colleagues who know how to speak
English. And that if there is someone who doesn&rsquo;t speak Spanish.
</p>

<p>
<i>Organization</i>: Sure. And Alejandro will be around today. So you can
keep asking him. Thank you very much.
</p>

<p>
<i>OSiUX</i>: OSiUX too!
</p>
</div>
</section>
<section id="outline-container-orgc0d725b" class="outline-2">
<h2 id="orgc0d725b">You might also like to read&#x2026;</h2>
<div class="outline-text-2" id="text-orgc0d725b">
<ul class="org-ul">
<li><a href="https://osiux.com/2022-10-20-como-migrar-6300-equipos-a-gnu-linux-usando-ansible-y-awx.html">How to Migrate 6300 Machines to GNU/Linux Using Ansible and AWX</a></li>
<li><a href="https://osiux.com/2021-12-30-automated-bios-configuration-using-ansible-and-hp-linux-tools.html">Automating BIOS Configuration Using ansible and HP Linux Tools</a></li>
<li><a href="https://osiux.com/2022-04-23-filiales-gnu-linux-flisol-caba.html">GNU/Linux Branches FLISoL CABA</a></li>
<li><a href="https://osiux.com/2022-10-03-ansible-tools-v0-3-0.html">Ansible Tools v0.3.0</a></li>
<li><a href="https://osiux.com/2022-10-08-automate-deployment-of-AWX-resources-with-GitLab-CI-CD-and-ansible-tools.html">Automating the Deployment of AWX Resources with GitLab CI/CD and Ansible Tools</a></li>
<li><a href="https://osiux.com/2022-10-21-use-graphviz-for-slides.html">Using Graphviz to Generate Slides</a></li>
<li><a href="https://osiux.com/2022-10-25-how-to-make-a-timeline-with-graphviz-using-timeline2dot.html">How to Make a Timeline with GraphViz</a></li>
<li><a href="https://osiux.com/linux-sysadmin.html">Administrador de Sistemas GNU/Linux</a></li>
</ul>
</div>
</section>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.debconf" class="footnum" href="https://osiux.com/#fnr.debconf" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.debconf.org/">https://www.debconf.org/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.debconf26" class="footnum" href="https://osiux.com/#fnr.debconf26" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://debconf26.debconf.org/">https://debconf26.debconf.org/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.nerdearla" class="footnum" href="https://osiux.com/#fnr.nerdearla" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://nerdear.la/">https://nerdear.la/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.fgnulyt" class="footnum" href="https://osiux.com/#fnr.fgnulyt" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://osiux.com/2022-10-20-como-migrar-6300-equipos-a-gnu-linux-usando-ansible-y-awx.html">https://osiux.com/2022-10-20-como-migrar-6300-equipos-a-gnu-linux-usando-ansible-y-awx.html</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.gcoop" class="footnum" href="https://osiux.com/#fnr.gcoop" role="doc-backlink">5</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://g.coop.ar/">https://g.coop.ar/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.rms" class="footnum" href="https://osiux.com/#fnr.rms" role="doc-backlink">6</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://endefensadelsl.org/que_es_el_software_libre.pdf">https://endefensadelsl.org/que_es_el_software_libre.pdf</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.debian" class="footnum" href="https://osiux.com/#fnr.debian" role="doc-backlink">7</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.debian.org/">https://www.debian.org/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.bccl" class="footnum" href="https://osiux.com/#fnr.bccl" role="doc-backlink">8</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.bancocredicoop.coop/">https://www.bancocredicoop.coop/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.gitlab" class="footnum" href="https://osiux.com/#fnr.gitlab" role="doc-backlink">9</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://gitlab.com/gitlab-org/gitlab-foss">https://gitlab.com/gitlab-org/gitlab-foss</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.proxmox" class="footnum" href="https://osiux.com/#fnr.proxmox" role="doc-backlink">10</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.proxmox.com/">https://www.proxmox.com/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.idrac" class="footnum" href="https://osiux.com/#fnr.idrac" role="doc-backlink">11</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.dell.com/en-us/lp/dt/open-manage-idrac">https://www.dell.com/en-us/lp/dt/open-manage-idrac</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.pxe" class="footnum" href="https://osiux.com/#fnr.pxe" role="doc-backlink">12</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://en.wikipedia.org/wiki/PXE_boot">https://en.wikipedia.org/wiki/PXE_boot</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.ansible_hplt" class="footnum" href="https://osiux.com/#fnr.ansible_hplt" role="doc-backlink">13</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://gitlab.com/gcoop-libre/ansible_role_hp_linux_tools">https://gitlab.com/gcoop-libre/ansible_role_hp_linux_tools</a>
</p></div></div>


</div>
</div></main>
<footer id="postamble" class="status">
<p class="date">Date: 2026-07-21 15:00</p>
<p class="author">Author: Osiris Alejandro Gomez (OSiUX)</p>
<p class="date">Created: 2026-08-13</p>
</footer>]]></content:encoded>
    <dc:creator xml:lang="es">Osiris Alejandro Gomez</dc:creator>
    <pubDate>Tue, 21 Jul 2026 15:00:00 +0000</pubDate>
    <category>Technology</category>
    <comments>https://osiux.com/2026-07-21-debconf26-how-to-provision-install-configure-and-keep-thousands-of-debian-and-debian-based-systems-updated.html</comments>
    <source url="https://osiux.com">osiux.com/blog</source>
    <dc:language>es-ar</dc:language>
    <enclosure url="https://osiux.com/videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1.png" type="image/png" length="0" />
    <media:content url="https://osiux.com/videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1.png" medium="image" isDefault="true" />
    <media:thumbnail url="https://osiux.com/videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1.png" />
  </item>
  <item>
    <title>Cómo aprovisionar, instalar, configurar y mantener actualizados miles de sistemas Debian y basados en Debian</title>
    <link>https://osiux.com/2026-07-21-debconf26-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.html</link>
    <guid isPermaLink="true">https://osiux.com/2026-07-21-debconf26-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.html</guid>
    <description>Transcripción de la charla "Cómo aprovisionar, instalar, configurar y mantener actualizados miles de sistemas Debian y basados en Debian" en DebConf26 en Santa Fe</description>
    <content:encoded><![CDATA[
<main id="content" class="content">
<h1 class="title">Cómo aprovisionar, instalar, configurar y mantener actualizados miles de sistemas Debian y basados en Debian</h1>
<p>
<a href="https://osiux.com/index.html">index</a> |
<a href="https://osiux.com/about.html">about</a> |
<a href="https://osiux.com/archive.html">archive</a> |
<a href="https://osiux.com/charlas.html">charlas</a> |
<a href="https://osiux.com/docs.html">docs</a> |
<a href="https://osiux.com/links.html">links</a>
</p>

<p>
<a href="https://osiux.com/dot.html"><code>dot</code></a> |
<a href="https://osiux.com/git.html"><code>git</code></a> |
<a href="https://osiux.com/img.html"><code>img</code></a> |
<a href="https://osiux.com/plt.html"><code>plt</code></a> |
<a href="https://osiux.com/tty.html"><code>tty</code></a> |
<a href="https://osiux.com/uml.html"><code>uml</code></a>
</p>
<section id="outline-container-org5061f81" class="outline-2">
<h2 id="org5061f81">Resumen</h2>
<div class="outline-text-2" id="text-org5061f81">
<p>
Este proyecto gestiona alrededor de <code>3,000</code> servidores <i>Debian</i> y
<code>3,000</code> estaciones de trabajo <i>basadas en Debian</i> a lo largo de <code>300</code>
sucursales.
</p>

<p>
Se trata de un estudio de caso real sobre cómo aprovisionar, instalar,
configurar y mantener miles de sistemas Debian y basados en Debian
mediante Software Libre.
</p>

<p>
La infraestructura combina <i>Ansible</i>, <i>AWX</i>, <i>Proxmox</i>, <i>PXE</i>,
<i>FreeIPA</i>, <i>GitLab</i> <code>CI/CD</code> y varias capas de caché para automatizar el
despliegue y mantenimiento de aproximadamente <code>6,300</code> sistemas a lo
largo de cientos de sucursales.
</p>

<p>
El proyecto comenzó en 2018 y ha evolucionado continuamente conforme
cambiaron la infraestructura, el hardware, los requisitos de seguridad y
el <i>Stack</i> de <i>Software</i>.
</p>
</div>
</section>
<section id="outline-container-org070cece" class="outline-2">
<h2 id="org070cece">Charla</h2>
<div class="outline-text-2" id="text-org070cece">
<video id="video" controls width="720" height="406" autoplay loop background="#000000" preload poster="../videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1.png">
  <source src="https://meetings-archive.debian.net/pub/debian-meetings/2026/DebConf26/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1.webm" type="video/webm">
  <track  src="https://osiux.com/../videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1-es.vtt"  kind="subtitles" srclang="es" label="Spanish" default/>
  <track  src="https://osiux.com/../videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1-en.vtt"  kind="subtitles" srclang="en" label="English"/>
</video>

<ul class="org-ul">
<li>Demo Site: <a href="https://filiales-gnu-linux.g.coop.ar/">https://filiales-gnu-linux.g.coop.ar</a></li>
<li>Original Video: <a href="https://meetings-archive.debian.net/pub/debian-meetings/2026/DebConf26/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1.webm"><code>WebM (298 MB)</code></a></li>
<li>Subtitle Video: <a href="https://filiales-gnu-linux.g.coop.ar/videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1.webm"><code>WebM (298 MB)</code></a></li>
<li>Spanish Subtitle: <a href="https://osiux.com/../videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1-es.srt"><code>SRT (50 KB)</code></a> <a href="https://osiux.com/../videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1-es.vtt"><code>VTT (44 KB)</code></a></li>
<li>English Subtitle: <a href="https://osiux.com/../videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1-en.srt"><code>SRT (48 KB)</code></a> <a href="https://osiux.com/../videos/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1-en.vtt"><code>VTT (42 KB)</code></a></li>
<li>English Slides: <a href="https://osiux.com/2026-07-21-debconf26-how-to-provision-install-configure-and-keep-thousands-of-debian-and-debian-based-systems-updated.pdf"><code>PDF (357 KB)</code></a></li>
<li>Spanish Slides: <a href="https://osiux.com/2026-07-21-debconf26-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.pdf"><code>PDF (357 KB)</code></a></li>
</ul>

<p>
This <i>post</i> has an <i>English</i> translation at
<a href="https://osiux.com/2026-07-21-debconf26-how-to-provision-install-configure-and-keep-thousands-of-debian-and-debian-based-systems-updated.html"><i>How to Provision, Install, Configure, and Keep Thousands of Debian and Debian-Based Systems Updated</i></a>
</p>
</div>
</section>
<section id="outline-container-orgf4dcc94" class="outline-2">
<h2 id="orgf4dcc94">Temas</h2>
<div class="outline-text-2" id="text-orgf4dcc94">
<ul class="org-ul">
<li><i>Debian</i></li>
<li><i>Ansible</i></li>
<li><i>AWX</i></li>
<li><i>Proxmox</i></li>
<li><i>PXE</i></li>
<li><i>FreeIPA</i></li>
<li><i>GitLab</i> <code>CI/CD</code></li>
<li>Infrastructura como Código</li>
<li>Administración <code>GNU/Linux</code> de puestos de trabajo</li>
<li>Deploy Automatizado</li>
</ul>
</div>
</section>
<section id="outline-container-org3234214" class="outline-2">
<h2 id="org3234214"><i>DebConf26</i></h2>
<div class="outline-text-2" id="text-org3234214">
<p>
Este año al asistir a mi primera <code>DebConf</code> <sup><a id="fnr.debconf" class="footref" href="https://osiux.com/#fn.debconf" role="doc-backlink">1</a></sup>,
la <code>DebConf26</code> <sup><a id="fnr.debconf26" class="footref" href="https://osiux.com/#fn.debconf26" role="doc-backlink">2</a></sup> en <i>Santa Fe</i>, aproveché a dar la charla
<code>"Cómo aprovisionar, instalar, configurar y mantener actualizados miles de sistemas Debian y basados en Debian"</code>
como actualización de la charla
que presenté en <code>nerdearla</code> <sup><a id="fnr.nerdearla" class="footref" href="https://osiux.com/#fn.nerdearla" role="doc-backlink">3</a></sup> edición 2022 que se llamaba
<code>"Cómo migrar 6300 equipos a GNU/Linux usando Ansible y AWX"</code> <sup><a id="fnr.fgnulyt" class="footref" href="https://osiux.com/#fn.fgnulyt" role="doc-backlink">4</a></sup>
</p>
</div>
</section>
<section id="outline-container-org31c5296" class="outline-2">
<h2 id="org31c5296"><i>gcoop</i></h2>
<div class="outline-text-2" id="text-org31c5296">

<div id="org34dd474" class="figure">
<p><a href="https://filiales-gnu-linux.g.coop.ar/" width="640" height="360" title="Presentación con logotipos de Ansible, gcoop y AWX."><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-01-ans-awx.png" alt="debconf26-filiales-gnu-linux-01-ans-awx.png" width="640" height="360" title="Presentación con logotipos de Ansible, gcoop y AWX."></a>
</p>
</div>

<p>
Me llamo <i>OSiRiS</i>, me dicen <code>OSiUX</code> en la comunidad,
trabajo en <code>gcoop</code> <sup><a id="fnr.gcoop" class="footref" href="https://osiux.com/#fn.gcoop" role="doc-backlink">5</a></sup>
que es una <i>Cooperativa</i> de <i>Software</i> <i>Libre</i>, es decir, que trabajamos
exclusivamente con <code>SoftwareLibre</code> <sup><a id="fnr.rms" class="footref" href="https://osiux.com/#fn.rms" role="doc-backlink">6</a></sup> y de manera horizontal, la
organización. No tenemos jefes, no tenemos empleados.
</p>

<p>
Vinimos cinco socios y socias de <i>gcoop</i>, al evento, es nuestra primera
vez en <i>DebConf</i>. Esponsoreamos este evento y le damos gracias a
<code>Debian</code> <sup><a id="fnr.debian" class="footref" href="https://osiux.com/#fn.debian" role="doc-backlink">7</a></sup> porque tenemos <code>20</code> años trabajando con <i>Software</i>
<i>Libre</i> y sin <i>Debian</i> no hubiera sido posible.
</p>
</div>
</section>
<section id="outline-container-org46cf857" class="outline-2">
<h2 id="org46cf857">Alcance del Proyecto y Evolución (2018-Actualidad)</h2>
<div class="outline-text-2" id="text-org46cf857">
<p>
Voy a mostrar una actualización de una charla previa que ya di en el
<code>2022</code>, que se trata del proyecto de migración de <i>Filiales</i> <i>GNU//Linux
del <code>Banco Credicoop Cooperativo Limitado</code> <sup><a id="fnr.bccl" class="footref" href="https://osiux.com/#fn.bccl" role="doc-backlink">8</a></sup>, es un /Banco</i>
cooperativo.
</p>

<p>
Y voy a tratar de hacer una <i>review</i> del proceso de migración
rápidamente y después vamos a ver las diferencias en los últimos años.
Este proyecto&#x2026;
</p>

<p>
Básicamente es un proyecto de Infraestructura como Código utilizando
<code>Ansible</code> <sup><a id="fnr.ansible" class="footref" href="https://osiux.com/#fn.ansible" role="doc-backlink">9</a></sup> y <code>AWX</code> <sup><a id="fnr.awx" class="footref" href="https://osiux.com/#fn.awx" role="doc-backlink">10</a></sup>.
</p>

<p>
<i>AWX</i> es una plataforma <i>Web</i>, que es una interfaz gráfica por un lado
de <i>Ansible</i>, pero por otro lado permite orquestar y administrar y
gestionar todos los <i>playbooks</i> de <i>Ansible</i>.
</p>

<p>
Y esto se hizo para <i>Banco</i> <i>Credicoop</i>. Desde <i>gcoop</i>.
</p>
</div>
</section>
<section id="outline-container-org12191e8" class="outline-2">
<h2 id="org12191e8">Laboratorio para la viabilidad del proyecto usando <i>Software</i> <i>Libre</i></h2>
<div class="outline-text-2" id="text-org12191e8">

<div id="orgfecfa2d" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-02-lab-tec.png" width="640" height="360" title="presentación del laboratorio del proyecto utilizando software libre, logos VPN, Proxmox, VMs con Debian, Workstations con Ubuntu, Ansible, GitLab e integración entre FreeIPA con ActiveDirectory"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-02-lab-tec.png" alt="debconf26-filiales-gnu-linux-02-lab-tec.png" width="640" height="360" title="presentación del laboratorio del proyecto utilizando software libre, logos VPN, Proxmox, VMs con Debian, Workstations con Ubuntu, Ansible, GitLab e integración entre FreeIPA con ActiveDirectory"></a>
</p>
</div>

<p>
Bueno, al principio del proyecto, lo que teníamos que era, aunque fueron
<code>6</code> meses, fue tratar de descubrir qué herramientas del ecosistema de
<i>Software</i> <i>Libre</i> nos permitían llevar adelante toda la migración de la
infraestructura de un <i>Banco</i> a lo largo y a lo ancho de todo el país de
Argentina.
</p>

<p>
Y lo que fuimos encontrando, bueno, es que la herramienta de
automatización era <i>Ansible</i> porque ya la veníamos utilizando. Que
íbamos a usar <code>GitLab</code> <sup><a id="fnr.gitlab" class="footref" href="https://osiux.com/#fn.gitlab" role="doc-backlink">11</a></sup>.  Que para la autenticación de
<i>ActiveDirectory</i> dentro, en los Linux, íbamos a usar <i>IPA</i>. <i>AWX</i>,
obviamente todos los servidores iban a usar <code>Proxmox</code> <sup><a id="fnr.proxmox" class="footref" href="https://osiux.com/#fn.proxmox" role="doc-backlink">12</a></sup>.
Nosotros ya veníamos hace años trabajando con <i>Proxmox</i>. Las <i>VMs</i>
dentro de los <i>Proxmox</i> iban a ser <i>Debian</i>, obviamente.
</p>

<p>
Y bueno, los puestos de trabajo, por una cuestión de que eran <code>3.000</code>
puestos de trabajo y por una cuestión de soporte, elegimos una
distribución basada en <i>Debian</i>. Este&#x2026; Un poquito más actualizada.
</p>

<p>
Y lo que teníamos ahí, no se ve muy bien ahí, pero lo que se está
moviendo es que &#x2026;por debajo son todos los componentes, es una línea de
tiempo, todos los componentes de dependencia que utilizamos nosotros,
que se están actualizando en todo el mundo, todo el tiempo. O sea, en
ese momento, en tal mes, salió una nueva versión de un componente y de
otro componente y de otro componente. Y esto es a medida que vos estás
pensando cómo vas a hacer la cosa, se va actualizando todo el
ecosistema. Entonces es una problemática a resolver.
</p>
</div>
</section>
<section id="outline-container-orgd25e571" class="outline-2">
<h2 id="orgd25e571">Aprovisionamiento automatizado de Debian con PXE y PVE (Proxmox Virtual Environment)</h2>
<div class="outline-text-2" id="text-orgd25e571">

<div id="org6225db9" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-03-dev-dep.png" width="640" height="360" title="Presentamos la implementación automatizada de Debian y Proxmox con PXE y AWX usando GitLab como fuente de verdad"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-03-dev-dep.png" alt="debconf26-filiales-gnu-linux-03-dev-dep.png" width="640" height="360" title="Presentamos la implementación automatizada de Debian y Proxmox con PXE y AWX usando GitLab como fuente de verdad"></a>
</p>
</div>

<p>
Pero bueno, a lo que llegamos es que en <i>Desarrollo</i> logramos orquestar
una idea de <i>deploy</i>, que básicamente es, tenemos un <i>AWX</i>, a ver si lo
puedo señalar así, esto es un <i>AWX</i>, y este <i>AWX</i>, su fuente de verdad
es un <i>GitLab</i>, entonces es decir, <i>AWX</i> lee desde <i>GitLab</i> todo lo que
sería&#x2026; O sea, <i>playbooks</i>, y el primer paso es deployar la <i>iDRAC</i>.
</p>


<div id="org05048da" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-03-dev-pve.png" width="640" height="360" title="presentación con sitio web de iDRAC con almacenamiento RAID y VNC con servidor DELL de arranque"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-03-dev-pve.png" alt="debconf26-filiales-gnu-linux-03-dev-pve.png" width="640" height="360" title="presentación con sitio web de iDRAC con almacenamiento RAID y VNC con servidor DELL de arranque"></a>
</p>
</div>

<p>
La <code>iDRAC</code> <sup><a id="fnr.idrac" class="footref" href="https://osiux.com/#fn.idrac" role="doc-backlink">13</a></sup> es la computadora, de la computadora, dentro de
los servidores <i>Dell</i> que utilizamos antes de que tenga nada el
servidor, hay una compu que se llama <i>iDRAC</i>, por un protocolo que se
llama <i>Redfish</i>, hicimos unos <i>playbooks</i> que <i>AWX</i> se conecta a la
<i>iDRAC</i> y lo que hace es particionar el disco, configurar la <i>BIOS</i> y
reiniciar en <code>PXE</code> <sup><a id="fnr.pxe" class="footref" href="https://osiux.com/#fn.pxe" role="doc-backlink">14</a></sup>. O sea, una compu nueva, recién salida de la
caja.
</p>


<div id="orgb0de6d6" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-03-dev-pxe.png" width="640" height="360" title="presentación con depuración de arranque PXE para instalar Debian en servidor Dell"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-03-dev-pxe.png" alt="debconf26-filiales-gnu-linux-03-dev-pxe.png" width="640" height="360" title="presentación con depuración de arranque PXE para instalar Debian en servidor Dell"></a>
</p>
</div>

<p>
E inmediatamente eso va a terminar generando desde un <i>Proxmox</i>, va a
terminar generando otro <i>Proxmox</i>. Dentro de ese <i>Proxmox</i> nosotros
tenemos varias <i>VMs</i>. Una de esas <i>VMs</i> es un servidor <i>PXE</i>, que no veo
nada acá, pero debe ser este.
</p>


<div id="org3f8c3d8" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-03-dev-net.png" width="640" height="360" title="presentación con depuración, arranque PXE e instalación desatendida de debian netinstall"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-03-dev-net.png" alt="debconf26-filiales-gnu-linux-03-dev-net.png" width="640" height="360" title="presentación con depuración, arranque PXE e instalación desatendida de debian netinstall"></a>
</p>
</div>

<p>
Tenemos un servidor, bueno tenemos una <i>CDN</i>, que es un <i>Server</i> de
procesamiento, un <i>Nginx</i> que tiene todos los recursos, que a su vez es
<i>Proxy</i> de otro, que es un <i>Apache</i>, y un servidor que <i>Replica</i> estos
<i>Datos</i>. Bueno, esto se hace de manera automatizada y desatendida, sin
intervención del operador, es decir que viene un servidor recién salido
de fábrica, se abre la caja, se instala <i>power</i>, se instala Red, y desde
<i>AWX</i> se lanza un <i>script</i>, esta es la infraestructura de <i>AWX</i>, perdón,
la de <i>Proxmox</i>, íbamos a ver, acá se ve, cómo se lanza, y esto es solo
para monitoreo, digamos, se hace todo de manera desatendida y el
operador no necesita ver nada funcionando, el <i>AWX</i> deploya el <i>Proxmox</i>
vía <i>PXE</i>, en realidad son varias etapas, primero deploya un <i>Debian</i>
<i>NetInstall</i> totalmente desatendido, o sea, no hay que tocar nada,
directamente en modo, sería <i>OEM</i>, configura todo lo necesario para que
ese servidor esté operativo, y cuando termina, en un hook, al final del
<i>Debian</i> NetInstaller, hicimos un <i>script</i> que lo que hace es, toma la
<i>MAC</i> de ese equipo, que es única, y la de alta en el inventario de
<i>AWX</i>.
</p>

<p>
Entonces esa máquina, que acaba de recibir una <i>IP</i> random, ya sabemos
cuál va a ser su <i>IP</i>, cuál es su <i>iDRAC</i>, queda permanentemente, en
todos los años que va a tener ese servidor, referenciado a esa <i>MAC</i> y a
un número de serie que tiene el servidor propio del <i>iDRAC</i>. Entonces,
de esa manera es fácil identificarlo.
</p>

<p>
Ahí a la izquierda, lo único que hay es el <i>debug</i> de lo que se va
viendo en el servidor <i>PXE</i>, y como ven, el servidor está en el servidor
<i>PXE</i>, el servidor se instala solo, no hay intervención manual y termina
instalado, es un <i>Debian</i>.
</p>

<p>
El siguiente <i>playbook</i> que se lanza a <i>AWX</i>, convierte a ese <i>Debian</i>
en un <i>Proxmox</i>, también de manera desatendida. Es decir, nosotros no
instalamos <i>Proxmox</i>, nosotros instalamos <i>Debian</i> y lo convertimos en
<i>Proxmox</i>. Esa es una ventaja de que <i>Proxmox</i> es una distribución
basada en <i>Debian</i>, que lo único que cambia es agregar un <i>repo</i>. Y
listo, se configuran todos los paquetes necesarios.
</p>

<p>
Y cuando termina de configurarse, en un <i>Proxmox</i>, lanzamos otro
<i>playbook</i> que lo que hace es crear las <i>VMs</i>, y otro <i>playbook</i> más que
lo que hace es crear los servicios dentro de cada <i>VM</i>.
</p>

<p>
Todas las <i>VMs</i> que usamos son <i>KVM</i>. Esto es un <i>Banco</i>, necesita mayor
robustez en la seguridad, entonces todos los equipos están actualizados.
Ahí a la izquierda se ven la creación de todas las distintas <i>VMs</i>. Hay
<code>10</code> <i>VMs</i> por servidor y hay, más o menos redondeando, unos <code>300</code>
servidores físicos. Eso nos da un total de <code>3.000</code> <i>Debian</i>. Instalados
de manera automatizada por todo el país.
</p>
</div>
</section>
<section id="outline-container-org7883fb5" class="outline-2">
<h2 id="org7883fb5">Workstations</h2>
<div class="outline-text-2" id="text-org7883fb5">

<div id="org6d6600d" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-03-dev-wlp.png" width="640" height="360" title="presentación de la ejecución de un playbook de AWX a una estación de trabajo virtual en una VM de desarrollo dentro de Proxmox"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-03-dev-wlp.png" alt="debconf26-filiales-gnu-linux-03-dev-wlp.png" width="640" height="360" title="presentación de la ejecución de un playbook de AWX a una estación de trabajo virtual en una VM de desarrollo dentro de Proxmox"></a>
</p>
</div>

<p>
<i>Workstations</i> hicimos una imagen. Ahí estamos viendo una <i>Workstation</i>
virtual de prueba, de <i>Desarrollo</i>, dentro de un <i>Proxmox</i>. Y lo que
hacemos es generar una imagen base, también una <i>NetInstall</i>, en este
caso basada en una <i>distro</i> basada en <i>Debian</i>. Y después configuramos,
también de la misma manera, con un <i>script</i>. Toma el <i>hostname</i> del
equipo, que se puede configurar después o reconfigurar en el lugar de
destino. Se da de alta en el inventario y queda disponible también con
un número de serie del fabricante.  Son todas <i>HP</i> <i>Workstations</i>. Las
podemos identificar unívocamente, aunque cambie la <i>MAC</i> address en
algún momento. Siempre es el mismo dispositivo.
</p>


<div id="orga564985" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-03-dev-wst.png" width="640" height="360" title="presentación del inventario de AWX donde se ven las variables de conexión de una estación de trabajo y al mismo tiempo se muestra la información del host dentro del escritorio de la estación de trabajo virtual en una VM de desarrollo dentro de Proxmox"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-03-dev-wst.png" alt="debconf26-filiales-gnu-linux-03-dev-wst.png" width="640" height="360" title="presentación del inventario de AWX donde se ven las variables de conexión de una estación de trabajo y al mismo tiempo se muestra la información del host dentro del escritorio de la estación de trabajo virtual en una VM de desarrollo dentro de Proxmox"></a>
</p>
</div>

<p>
La interfaz gráfica del <i>AWX</i> es básicamente una página <i>Web</i> que está
hecha en <i>Django</i>. Y hay un montón de operadores que trabajan lanzando
distintos <i>playbooks</i> que hacemos, para que esto quede operativo. Y
también el servidor <i>PXE</i> lo que hace es tomar imágenes de
<i>Workstations</i>. O sea, vos podés agarrar una <i>Workstation</i> en el lugar,
si se desconfiguró, le pasó algo, no anda, no importa. Se reconstruye
vía <i>PXE</i> la imagen completa de la <i>Workstation</i>. No se pierde tiempo.
Tiene tiempo viendo qué le pasa. No se entra manualmente al equipo. Se
reconstruye desde cero. ¿Por qué? Porque no hay <i>Datos</i> locales dentro
de la <i>Workstation</i>. Los <i>Datos</i> están en un servidor <i>NFS</i> kerberizado
dentro de la misma red de la <i>Filial</i> donde estamos.
</p>


<div id="org5d93d15" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-04-dep-wst.png" width="640" height="360" title="presentación del despliegue de varias estaciones de trabajo usando GitLab, AWX y mostrando el flujo de autenticación entre estaciones de trabajo y FreeIPA integrado en el cluster ActiveDirectory"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-04-dep-wst.png" alt="debconf26-filiales-gnu-linux-04-dep-wst.png" width="640" height="360" title="presentación del despliegue de varias estaciones de trabajo usando GitLab, AWX y mostrando el flujo de autenticación entre estaciones de trabajo y FreeIPA integrado en el cluster ActiveDirectory"></a>
</p>
</div>
</div>
</section>
<section id="outline-container-org9bc8872" class="outline-2">
<h2 id="org9bc8872">Desafíos de Escala</h2>
<div class="outline-text-2" id="text-org9bc8872">
<p>
Bueno, y similar a los <i>Proxmox</i>, tenemos las <i>Workstations</i>. Las
</p>

<p>
Para el <i>deploy</i> en la <i>Filial</i>, es un poco más complejo porque el
<i>deploy</i> de la <i>Filial</i>, dijimos, tenemos <code>3.000</code> puestos de trabajo. De
estos <code>3.000</code> puestos de trabajo no hay usuarios en las <i>Workstations</i>.
Es decir, en esas <i>Workstations</i>, si miran el <code>/etc/passwd</code>, no hay
ningún usuario local, fuera de los que ya vienen en el sistema.
</p>

<p>
Lo que utilizamos es un cliente de <i>FreeIPA</i> que se conecta al <i>IPA</i> y
del <i>IPA</i> se conecta a los <code>4</code> <i>ADs</i> que tenemos. Y toman al vuelo esos
usuarios del dominio directamente. Y por este motivo cada <i>Workstation</i>
tiene que estar enrolada también al dominio. Pero lo que se hacen es que
se enrolan al dominio de <i>FreeIPA</i>. Y el <i>FreeIPA</i> se conecta al dominio
de <i>FreeIPA</i>. Y el <i>FreeIPA</i> tiene una relación de confianza con el
dominio de <i>ActiveDirectory</i>. O sea, es como un subdominio. Y lo que
permite es que todos esos usuarios, su <i>password</i> esté en el <i>AD</i>, que
es la infraestructura del <i>Banco</i>, sin haberles cambiado nada. Para
ellos es transparente. Y desde todos los equipos <i>GNU//Linux usan el
mismo usuario directamente. Lo que está en el medio y que permite esto
se llama /FreeIPA</i>.
</p>

<p>
Y para acelerar el proceso de despliegue lo que tenemos de nuevo, es una
caché de caché de caché. Tenemos varios <i>Proxys</i>. Inicialmente teníamos
<i>Apt-Cacher</i> de <i>Debian</i>. Ahora ya hay unos <i>mirrors</i> de <i>Debian</i>
también. Y después tenemos <i>Nginx</i> de <i>Nginx</i> y <i>Squid</i> de <i>Squid</i> de
<i>Squid</i>. Para que esto funcione a lo largo y a lo ancho de todo el país.
</p>
</div>
</section>
<section id="outline-container-org1ff5dcc" class="outline-2">
<h2 id="org1ff5dcc">Diversidad de <i>Hardware</i> en las <i>Filiales</i></h2>
<div class="outline-text-2" id="text-org1ff5dcc">

<div id="org5ea7a41" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-05-stg-hwd.png" width="640" height="360" title="presentación con las cantidades totales de hardware, 3000 estaciones de trabajo HP ProDesk 400 G5, 300 servidores Dell PowerEdge R340 y 3000 Debian/KVM virtuales en Proxmox"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-05-stg-hwd.png" alt="debconf26-filiales-gnu-linux-05-stg-hwd.png" width="640" height="360" title="presentación con las cantidades totales de hardware, 3000 estaciones de trabajo HP ProDesk 400 G5, 300 servidores Dell PowerEdge R340 y 3000 Debian/KVM virtuales en Proxmox"></a>
</p>
</div>

<p>
Acá un poquito el hardware con que se comenzó. <code>3.000</code> <i>HP</i> <i>ProDesk</i>.
<code>3.000</code> servidores <i>Dell</i>. Perdón, <code>300</code> servidores <i>Dell</i>. <code>3.000</code>
<i>Debian</i> virtuales. Después se fue cambiando un poquito. Pero además
después nos encontramos con <code>3.500</code> periféricos distintos. Cosas raras
como un escáner de cheque o una impresora de <i>tickets</i>.
</p>


<div id="orgcb83fba" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-05-stg-prn.png" width="640" height="360" title="Presentación con las cantidades totales de periféricos i3581, impresoras, escáneres, impresoras de tickets, terminales de autoservicio, etc."><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-05-stg-prn.png" alt="debconf26-filiales-gnu-linux-05-stg-prn.png" width="640" height="360" title="Presentación con las cantidades totales de periféricos i3581, impresoras, escáneres, impresoras de tickets, terminales de autoservicio, etc."></a>
</p>
</div>
</div>
</section>
<section id="outline-container-org0c17a43" class="outline-2">
<h2 id="org0c17a43"><i>Stack</i> inicial del proyecto</h2>
<div class="outline-text-2" id="text-org0c17a43">

<div id="org5a98b95" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-05-stg-ver.png" width="640" height="360" title="Presentación con el stack tecnológico: Ansible v2.9, AWX v9.3, Debian 10.9, Proxmox v6.3, FreeIPA v4.6 y Ubuntu 18.04"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-05-stg-ver.png" alt="debconf26-filiales-gnu-linux-05-stg-ver.png" width="640" height="360" title="Presentación con el stack tecnológico: Ansible v2.9, AWX v9.3, Debian 10.9, Proxmox v6.3, FreeIPA v4.6 y Ubuntu 18.04"></a>
</p>
</div>

<p>
Esto es lo que fue originalmente la infraestructura con la que comenzó
el proyecto en el <code>2018</code>. Esto fue variando. Algunas <i>VMs</i> fuimos
cambiando también.
</p>


<div id="org68d0a0c" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-05-stg-ops.png" width="640" height="360" title="Presentación con el personal en cada etapa: laboratorio (2), desarrollo (3), implementación (4), puesta en escena (4), producción (5), soporte (5), siguiente (5)"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-05-stg-ops.png" alt="debconf26-filiales-gnu-linux-05-stg-ops.png" width="640" height="360" title="Presentación con el personal en cada etapa: laboratorio (2), desarrollo (3), implementación (4), puesta en escena (4), producción (5), soporte (5), siguiente (5)"></a>
</p>
</div>
</div>
</section>
<section id="outline-container-org436ab9e" class="outline-2">
<h2 id="org436ab9e">Repositorios de <i>playbooks</i> y <i>roles</i> de <i>Ansible</i> liberados!</h2>
<div class="outline-text-2" id="text-org436ab9e">

<div id="org68f8dbf" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-05-stg-git.png" width="640" height="360" title="Presentación con una lista de repositorios git de utilidades, roles y manuales de estrategias de Ansible publicados en https://gitlab.com/gcoop-libre y https://github.com/gcoop-libre"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-05-stg-git.png" alt="debconf26-filiales-gnu-linux-05-stg-git.png" width="640" height="360" title="Presentación con una lista de repositorios git de utilidades, roles y manuales de estrategias de Ansible publicados en https://gitlab.com/gcoop-libre y https://github.com/gcoop-libre"></a>
</p>
</div>
</div>
</section>
<section id="outline-container-orgdf0c5ea" class="outline-2">
<h2 id="orgdf0c5ea">Graficar logins del dominio y sincronización de cache de <i>FreeIPA</i></h2>
<div class="outline-text-2" id="text-orgdf0c5ea">

<div id="org06f7233" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-06-sup-ipa.png" width="640" height="360" title="Presentación con seguimiento de inicio de sesión de dominio FreeIPA y sincronización de caché mediante el script ipa-sss-syn"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-06-sup-ipa.png" alt="debconf26-filiales-gnu-linux-06-sup-ipa.png" width="640" height="360" title="Presentación con seguimiento de inicio de sesión de dominio FreeIPA y sincronización de caché mediante el script ipa-sss-syn"></a>
</p>
</div>

<p>
Y rápidamente los que nos encontramos con problemas. Problemas de
escala.  Esto es un gráfico de los intentos de <i>login</i> durante el día. Y
lo que van a ver es que hay un problemita acá a las <code>10</code> de la mañana.
Es decir, <code>3.000</code> personas se quieren loguear a las <code>10</code> de la mañana.
Se ven igual cuando bajan después a partir de las <code>4</code> de la tarde. Ya
empiezan a ir los <i>logins</i>.  Y bueno, acá hay un problema de <i>delay</i>, de
caché. Y de otros problemas que es, imagínense con <code>3.000</code> usuarios, con
las políticas robustas de seguridad de un <i>Banco</i>, todos los días vencen
muchas contraseñas y las tienen que recambiar y todo eso. Y ese recambio
lo tienen que hacer desde la pantalla de <i>login</i> de la <i>distro</i> nuestra.
Es decir, directamente desde ahí. Se le dice que la contraseña venció y
en ese momento le pide la vieja, dos veces la nueva. Uno a la mañana
temprano se confunde. Eso genera otra contraseña más.  Pero en esto&#x2026;
Ahora les voy a contar que se trabajó para mejorarlo.
</p>
</div>
</section>
<section id="outline-container-org2c175bb" class="outline-2">
<h2 id="org2c175bb">Automatizar la implementación de los recursos de <i>AWX</i> con <i>GitLab</i> <code>CI/CD</code> y <i>Ansible</i> <i>Tools</i></h2>
<div class="outline-text-2" id="text-org2c175bb">

<div id="org2c6dea3" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-07-nxt-awx.png" width="640" height="360" title="Presentamos la automatización de la implementación de recursos AWX con GitLab CI/CD y herramientas Ansible"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-07-nxt-awx.png" alt="debconf26-filiales-gnu-linux-07-nxt-awx.png" width="640" height="360" title="Presentamos la automatización de la implementación de recursos AWX con GitLab CI/CD y herramientas Ansible"></a>
</p>
</div>

<p>
Y entonces, para hacerlo también, bueno, parte de la automatización que
logramos es, en lugar de ir a <i>AWX</i>, que es una interfaz gráfica, y
hacer clics para crear <i>playbooks</i>, para crear <i>workflows</i>, para crear
<i>inventarios</i>, y dar permisos y todo eso manualmente, lo que hicimos es
un <i>repo</i> <i>Git</i> que se llama <i>AWX</i>, un <i>repo</i> que se llama <i>Inventory</i>,
y son todos archivos <i>JSON</i> o <i>YAML</i>, que la <i>CI</i> de <i>GitLab</i>
directamente las verifica y las deploya en un <i>AWX</i> de <i>Desarrollo</i> de
manera inmediata a medida que hacemos el <i>Git</i> <i>push</i>. Entonces podemos
de esa manera tener todas las etapas verificadas y deployadas
automáticamente en un <i>AWX</i> de <i>Desarrollo</i> para pruebas. En el <i>AWX</i> de
Producción, este <i>deploy</i> se dispara manualmente, digamos, pero hace las
mismas instancias. Eso nos garantiza tener toda la infraestructura como
código versionada.
</p>
</div>
</section>
<section id="outline-container-org93c1f64" class="outline-2">
<h2 id="org93c1f64">Vista global de hosts gestionados centralizadamente desde <i>AWX</i></h2>
<div class="outline-text-2" id="text-org93c1f64">

<div id="org8b21ad2" class="figure">
<p><a href="https://filiales-gnu-linux.g.coop.ar/prd.html" width="640" height="360" title="gráfico con vista global de todos los hosts administrados centralmente desde AWX"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-08-prd-all.png" alt="debconf26-filiales-gnu-linux-08-prd-all.png" width="640" height="360" title="gráfico con vista global de todos los hosts administrados centralmente desde AWX"></a>
</p>
</div>

<p>
Y para darnos una idea de la escala del proyecto, esto es una visión de
lo que es la infraestructura del <i>Banco</i> productiva. Dije, son más o
menos unas <code>300</code> <i>Filiales</i>, distribuidas por casi todas las provincias
del país. Y ahora, si vemos de cerca esto, vamos a entender un poquito
más, todos estos son <i>hosts</i>. Y todos estos <i>hosts</i> están controlados
por uno que está por acá, que ya lo voy a encontrar, ahí. Este que está
acá es la <i>AWX</i>, es una sola virtual, ni siquiera es de un equipo
físico, que controla a todas las demás y deploya a todas las demás.
Obviamente no las deployan todas juntas, las van deployando por etapas.
</p>


<div id="orgab31237" class="figure">
<p><a href="https://osiux.com/img/debconf26/debconf26-filiales-gnu-linux-08-prd-awx.png" width="640" height="360" title="ampliación de una parte del gráfico con una vista global de todos los hosts administrados centralmente desde AWX"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-08-prd-awx.png" alt="debconf26-filiales-gnu-linux-08-prd-awx.png" width="640" height="360" title="ampliación de una parte del gráfico con una vista global de todos los hosts administrados centralmente desde AWX"></a>
</p>
</div>

<p>
Y lo que tenemos es que cada línea, por ejemplo acá, vamos a ver, esto
es la provincia de&#x2026; la provincia de <i>Santa</i> <i>Fe</i>. Y voy a tratar de
iluminar un poquito. Todo esto son los equipos de todas las distintas
<i>Filiales</i> de toda la provincia de Santa Fe. Y si nos acercamos a uno,
acá, por ejemplo, es la <code>f0372</code>. Y bueno, dentro de lo que es el
concepto de esa <i>Filial</i>, tenemos una caché local, que es una <i>CDN</i>, el
<code>PVE</code>, que es el servidor <i>Proxmox</i>, el <code>REP</code>, que es el <i>file</i>
<i>Server</i>, un <i>NFS</i> <i>kerberizado</i>, una máquina de <i>log</i>, que es la que
recibe los <i>logs</i> de todas las demás y los reenvía.  Inicialmente esto
lo hacíamos con <code>rsyslog</code>. Hay un nodo de <code>VPN</code> que nosotros no
intervenimos, pero hicimos la instalación automática, que básicamente
eso lo configura el personal del <i>Banco</i>. Tenemos un <i>Apt-Catcher</i>, ahí,
local, dentro de la <i>Filial</i>. ¿Qué más tenemos? Bueno, esta de <i>Git</i>, al
final la volamos. El servidor de impresión, que es un <code>CUPS</code>, donde
están configuradas todas las impresoras del lugar. Y después, acá está
la representación de las distintas impresoras de esa <i>Filial</i>. Y después
vamos a tener los distintos puestos de trabajo. Y finalmente el resto de
equipamiento que hay ahí. Impresoras de <i>ticket</i> y demás.
</p>

<p>
Y esta infraestructura, esta infraestructura se repite por todo el
Banco. O sea que esto, si no lo haces de manera automatizada, es
imposible de mantener.
</p>

<p>
Y lo que logramos con esto, que es que esta infraestructura de <i>AWX</i> nos
permita que ya no hace falta loguearse un equipo manualmente y ver lo
que pasa. Hay un <i>playbook</i> de <i>AWX</i>, de la <i>CasaCentral</i>, donde ya hay
una plantilla para solucionar cada problema. Y se corre esa plantilla y
queda un registro de todo lo que sucede, un <i>log</i> <i>traceable</i>.
Obviamente hay distintos niveles de permiso. ¿Quién puede hacer eso?
¿Quién no lo puede hacer? Horarios, por ejemplo. No sé, si queremos que
todos los equipos se apaguen a cierta hora, bueno, hay una plantilla que
establece un <code>poweroff</code> a cierto horario en cada equipo. Por ejemplo, y
lo lanzás. Puedes hacer cosas como barridos de <code>SNMP</code> para saber si
ciertos equipos están vivos o muertos.  Es decir, todo eso queda todo en
una, finalmente una base de <i>Datos</i> <i>PostgreSQL</i>, manejada desde <i>AWX</i>.
</p>
</div>
</section>
<section id="outline-container-orga93aedb" class="outline-2">
<h2 id="orga93aedb">Vista global del catálogo de <i>Roles</i> y <i>Playbooks</i> en <i>AWX</i></h2>
<div class="outline-text-2" id="text-orga93aedb">

<div id="org2c497fc" class="figure">
<p><a href="https://filiales-gnu-linux.g.coop.ar/ans.html" width="640" height="360" title="gráfico con vista global de todos los playbooks y roles en el catálogo de AWX"><img src="https://osiux.com/tmb/debconf26/debconf26-filiales-gnu-linux-09-ans-awx.png" alt="debconf26-filiales-gnu-linux-09-ans-awx.png" width="640" height="360" title="gráfico con vista global de todos los playbooks y roles en el catálogo de AWX"></a>
</p>
</div>

<p>
Y si quisiéramos ver un poquito lo que es, esta es, como una visión de
todos los <i>playbooks</i> que hay en <i>AWX</i>. Acá está nuestro <i>AWX</i>. Acá yo
intenté organizarlos un poquito. Acá tenemos el <i>iDRAC///Redfish</i>.
<code>rsyslog</code>, <i>CDN</i>.  Bueno, acá tenemos el inventario. No sé si se llega a
ver algo. Ahí no se llega a ver. Ni yo lo veo acá tampoco. Pero, a ver,
vamos a ver por acá. Acá, por ejemplo, tenemos un <i>rol</i> que clona un
<i>VM</i> de <i>KVM</i> en <i>Proxmox</i>.  Entonces hay un role para eso nada más. Por
acá vamos a ver más. Este <i>rol</i> lo que hace es crear una <i>VM</i> <i>KVM</i> de
<i>Proxmox</i> desde una <code>ISO</code> directamente. Y es una <code>ISO</code> que ya es
desatendida. O sea, no hay que hacer nada. Eso es para la <code>VPN</code>. Un role
de <i>Proxmox</i> para configurar el <code>cloud-init</code> de cada una de las <i>VMs</i>.
Usamos la imagen <i>OpenStack</i>. Digamos cloud, pero sin cloud. Local. Para
hacer un qm <i>Restore</i>. O sea, podemos restaurar una <i>VM</i> desde un
<i>Backup</i> y sale andando. Y así, hay <i>playbook</i> para todo.
</p>
</div>
</section>
<section id="outline-container-orgf34b634" class="outline-2">
<h2 id="orgf34b634">Actualizaciones Recientes, Seguridad y Migración a OpenShift</h2>
<div class="outline-text-2" id="text-orgf34b634">
<p>
Bueno, esto es más o menos lo que fue el proyecto de migración. Voy a
tratar de resumir, y avanzar con lo nuevo. Un poco la diferencia de esto
del <code>2022</code> al <code>2026</code> en que se estuvo trabajando.
</p>

<p>
Bueno, hay más de <code>200</code> repositorios de <i>Git</i> para controlar todo esto.
Ahora lo que se está haciendo, parte de lo que se hizo en realidad, se
trabajó mucho en seguridad informática. Se cambió de <code>rsyslog</code> a
<code>auditd</code>. Se integró <code>NUT</code> para las <code>UPS</code>, para tener monitoreo de
<code>UPS</code>. Se está trabajando en actualizar los <i>Debian</i> de esas virtuales
de <code>10</code> a <code>13</code>. Esto, recuerden, empezó en <code>2018</code>.
</p>

<p>
La automatización de <i>FreeIPA</i>, ahora se hizo un nuevo&#x2026; &#x2026;o sea, lo
que teníamos actualmente en producción era solo una <i>VM</i> grande de
<i>FreeIPA</i>. Y como el <i>Banco</i> tiene <i>OpenShift</i>, estamos haciendo una
migración del <i>FreeIPA</i> a <i>OpenShift</i>. También todo con <i>playbook</i>
automatizado.
</p>

<p>
Acá como un resumen de todo lo que se hizo de <i>Seguridad</i> <i>Informática</i>.
Es un rol que se conecta en equipo y dice qué está bien, qué está mal.
Algunas cosas las puede corregir y otras simplemente dice esto no puede
salir a producción así.
</p>

<p>
Se trabajó también con el tema del <i>Booteo</i> del <i>Kernel</i> para que
aparecieran unos modelos de servidores y para identificar las placas de
red y que funcione todo solo y el reparticionado de discos y en fin, hay
distintos niveles de servidores. La regeneración de todas estas
imágenes. Todo lo que sería el ciclo de vida de las <i>VMs</i> que hay que ir
de alta. Varias que se bajaron. Otras que cambiaron que no necesitaban
por ahí un disco secundario.  El orden en que se inician. Un reporte de
cuál es el estado de todo esto.  Todas esas <i>VMs</i> y actualizaciones.
Bueno, ahí un poquito de lo que decía de versiones de servidores.
</p>
</div>
</section>
<section id="outline-container-orgfd815db" class="outline-2">
<h2 id="orgfd815db">Desafíos de <i>Workstations</i>, Navegadores y Restricciones de Usuario</h2>
<div class="outline-text-2" id="text-orgfd815db">
<p>
Y vamos a avanzar que estamos corto de tiempo.
</p>

<p>
En <i>Workstation</i> es lo que más se viene trabajando porque se había
originalmente trabajado con una <i>Workstation</i> <code>18.04</code> y ahora se pasó a
<code>24.04</code> si no me equivoco. Y entonces además hay unos problemas que
tenían.  Recuerden esta infraestructura original no era <i>GNU</i> y
trabajaba con <i>Firefox</i> <code>9</code>. Nosotros lo llevamos a <code>v68</code> y ahora lo
llevamos a <code>v120</code> y se están haciendo pruebas con <code>v140</code>. El problema no
es tanto el entorno, sino que el problema es el ecosistema de todas las
aplicaciones internas que no están actualizadas y no funcionan.
Básicamente no es tarea fácil. Entonces por un momento convivieron más
de una versión de <i>browser</i>. Eh&#x2026; Y eso era otro desafío.
</p>

<p>
Y bueno, también cuestiones de actualizar la versión de <i>Kernel</i>. Hubo
que hacer el parcheo de algunos <i>CVEs</i> difíciles que estuvieron saliendo
hace poco. Bueno, en algún momento también se probó <i>Chrome</i> como
alternativa para algunos sitios.
</p>

<p>
Hacemos con un <i>playbook</i> toda la configuración de policies de
configuración de <i>Firefox</i>. El usuario básicamente no puede hacer nada.
O sea, como&#x2026; No puede ni cambiarle el fondo de pantalla. Este&#x2026; Pero
bueno, es la manera de mantener <code>3.000</code> usuarios. Bueno, entonces&#x2026;
Nadie entra a un equipo a configurarlo! Desde <i>AWX</i> se lanza un
<i>playbook</i> directamente.
</p>

<p>
Y, eh&#x2026; Bueno, el tema de <i>WakeOnLAN</i>, integración, actualización del
<i>Kernel</i>, correcciones de <code>sftp</code>. Es decir, bueno, todo lo que llevara a
la nueva versión de <i>IPA</i>. Trabajamos bastante con <i>AppArmor</i> para
restringir&#x2026;  Este&#x2026; Algunas cosas que son importantes. El manejo del
<i>login</i>. Manejo también de poder cambiar la contraseña. Este&#x2026; Bueno,
<i>Backup</i> y todo eso.
</p>

<p>
Y, eh&#x2026; Vamos a ver&#x2026; Un poquito de <i>AWX</i> acá. Eh&#x2026; Bueno, hay <code>198</code>
<i>releases</i> desde que terminamos de migrarlo. Porque como toda
infraestructura grande, cuando terminás de migrarlo tenés que empezar a
migrar de nuevo.  Básicamente. Está en constante cambio. Y, bueno, todo
el tiempo después además van saliendo nuevas necesidades&#x2026;
</p>

<p>
Eh&#x2026; Bueno, tenemos <i>CloneZilla</i> para esto que decía de arrancar un
equipo con una imagen ya armada. Este&#x2026; Y solucionar los problemas.
Este&#x2026; Acá, eh&#x2026; Perfiles isolados. Este&#x2026; Aislados unos de otros por
tema de configuraciones.
</p>
</div>
</section>
<section id="outline-container-orgc22855e" class="outline-2">
<h2 id="orgc22855e"><i>CCTV</i></h2>
<div class="outline-text-2" id="text-orgc22855e">
<p>
Se agregó una parte de <i>CCTV</i>. Equipos que están integrados a los <i>DVR</i>
de las cámaras de seguridad. Este&#x2026; Entonces, bueno, eso es como un
nuevo inventario que se agrega.
</p>
</div>
</section>
<section id="outline-container-orgd6c38de" class="outline-2">
<h2 id="orgd6c38de"><i>HP</i> <i>Linux</i> <i>Tools</i></h2>
<div class="outline-text-2" id="text-orgd6c38de">
<p>
Eh&#x2026; <i>HP</i> <i>Linux</i> <i>Tools</i>, por ejemplo, eso&#x2026; Un detalle es en un
momento, eh&#x2026; Un equipo se colgaba y se colgaba en situaciones
extrañas.  Tardamos en investigar qué sucedía. Tenía que ver con una
configuración de ahorro de energía de la <i>BIOS</i>. Y entonces la solución
era simple.  Era entrar a <code>3.000</code> equipos, cambiar la configuración de
la <i>BIOS</i> y reiniciarlos. Ya está. Es muy simple. ¿Necesitás <code>3.000</code>
técnicos? o Este&#x2026; Tantos como <i>Filiales</i> en todo el país. Es
imposible. Y, bueno, ahí, este&#x2026; Yo me puse a investigar el <i>FTP</i> de
<i>HP</i>. Y encontré un loco en Linux que tenía una herramienta que lo que
permite es escribir un archivo en la <i>UEFI</i>. Este&#x2026;  Con la
configuración de la <i>BIOS</i> que la va a tomar el próximo <code>reboot</code>. Esto
hay que compilar un módulo del <i>Kernel</i> y demás. Y&#x2026; Eh&#x2026; Le dijimos
que pidan permiso a <i>HP</i> y que garanticen que no se iban a convertir en
una <i>BIOS</i>. Que se convertir en <code>3.000</code> ladrillos. Este&#x2026; Dijeron&#x2026;
¡Sí! Y, bueno, nosotros hicimos varias pruebas. Nunca nos pasó. Así que
salieron andando todo bien.  Eh&#x2026; Y eso permite que, bueno, de nuevo,
de administración centralizada, inclusive podrías cambiar la <i>password</i>
de la <i>BIOS</i> de todos los equipos de manera centralizada y remota. Así
que es súper útil.
</p>

<p>
Eh&#x2026; Bueno. Acá, por ejemplo, este&#x2026; Modificación de los <i>tokens</i>, de
<i>Git</i> y&#x2026; Hay un montón de cosas.
</p>
</div>
</section>
<section id="outline-container-orgbd05c47" class="outline-2">
<h2 id="orgbd05c47"><i>Slides</i> en la <i>web</i></h2>
<div class="outline-text-2" id="text-orgbd05c47">
<p>
Esto&#x2026; En la <i>URL</i> que está ahí abajo,
<a href="https://filiales-gnu-linux.g.coop.ar">https://filiales-gnu-linux.g.coop.ar</a>
van a estar todo esto disponible.  Así que si lo quieren ver en detalle.
</p>
</div>
</section>
<section id="outline-container-org4b1e33b" class="outline-2">
<h2 id="org4b1e33b">Cierre</h2>
<div class="outline-text-2" id="text-org4b1e33b">
<p>
Eh&#x2026; Y como quedan cinco minutos, este&#x2026; Si les parece, cierro acá y
pregunten lo que sea&#x2026; Porque no vamos a llegar a ver todo.
</p>
</div>
</section>
<section id="outline-container-orgb387975" class="outline-2">
<h2 id="orgb387975">Pregunta 1 <i>ActiveDirectory</i></h2>
<div class="outline-text-2" id="text-orgb387975">
<p>
<i>Público</i>: Hola. Eh&#x2026; ¿Los <i>ActiveDirectory</i> que usan son <i>Windows</i> o
usan también <i>Windows</i> <i>Server</i>?
</p>

<p>
<i>OSiUX</i>: Sí, es infra del Banco. Este&#x2026; Que ya tenía preexistente. Y
que no la iban a cambiar. El desafío fue que todos esos usuarios
funcionen en los nuevos puestos de trabajo. Este&#x2026; Y funciona.
</p>
</div>
</section>
<section id="outline-container-org0b5ca2b" class="outline-2">
<h2 id="org0b5ca2b">Pregunta 2 <code>rsyslog</code> vs <code>auditd</code></h2>
<div class="outline-text-2" id="text-org0b5ca2b">
<p>
<i>Público</i>: Primero que nada, impresionante.
</p>

<p>
<i>OSiUX</i>: Gracias a la comunidad del <i>Software</i> <i>Libre</i>! Eh&#x2026; Nosotros
juntamos las piezas.
</p>

<p>
<i>Público</i>: Le sacaron todo el jugo a <i>Ansible</i>, pero no pensé que se
pudiera hacer tanto realmente. Tenía una pequeña duda en particular con
algo que vi. Dijiste que cambiaron de <code>rsyslog</code> a <code>auditd</code>
</p>

<p>
<i>OSiUX</i>: Sí. Fue solicitud de seguridad informática.
</p>

<p>
<i>Público</i>: Pero la intención&#x2026; Digamos, <code>rsyslog</code> loguea un nivel,
llamamos aplicación, tal vez un nivel de sistema. Y <code>auditd</code> apunta un
poco más a las <i>syscalls</i> del mismo sistema.
</p>

<p>
<i>OSiUX</i>: Sí, pero permite más detalle. Podés especificar exactamente qué
partes querés.
</p>

<p>
<i>Público</i>: No, no, no. Entiendo. Mi duda es, ¿ustedes están logueando
las <i>syscalls</i> de <code>3.000</code> clientes?
</p>

<p>
<i>OSiUX</i>: Eso es&#x2026; No de todos los puestos. En realidad es&#x2026; Eh&#x2026; En
general de las <i>VMs</i> mayormente, y algunas cosas. Es selectivo, no es de
todo.
</p>

<p>
<i>Público</i>: Ah, ah.
</p>

<p>
<i>OSiUX</i>: No, porque si no, no hay manera.
</p>

<p>
<i>Público</i>: No, no, está bien. Era eso nomás.
</p>

<p>
<i>OSiUX</i>: Justamente es para no enviar todos los <i>logs</i>. Es decir, enviar
de manera selectiva. Toda esta información va a un <i>SIEM</i> que está en
<i>CasaCentral</i>.
</p>

<p>
<i>Público</i>: ¿Uno solo?
</p>

<p>
<i>OSiUX</i>: Sí, bueno, puede ser que sea más de un nodo.
</p>

<p>
<i>Público</i>: Ah, no.
</p>

<p>
<i>OSiUX</i>: Pero, digamos, conceptualmente va a un <i>SIEM</i> que ahí se
visualiza después todo lo que sucede. Y también al <i>SIEM</i> va todo&#x2026; el
<i>log</i> del <i>deploy</i> de <i>AWX</i>. Entonces también&#x2026;
</p>

<p>
<i>Público</i>: ¿Como SIEM?
</p>

<p>
<i>OSiUX</i>: No, otro que no me acuerdo ahora, pero que es conocido. Ahora,
si te digo, te miento. (era <i>Splunk</i> el <i>SIEM</i>)
</p>

<p>
<i>Público</i>: Muchísimas gracias.
</p>
</div>
</section>
<section id="outline-container-orgf2b2a00" class="outline-2">
<h2 id="orgf2b2a00">Pregunta 3 Aciertos, pivotes y próximos pasos</h2>
<div class="outline-text-2" id="text-orgf2b2a00">
<p>
<i>Público</i>: Coincido con el colega un arduo laburo, un arduo trabajo. Y
además hecho con Software Libre. Mi pregunta es básicamente en función a
la experiencia de todo el proyecto. ¿Qué salió re bien? ¿Qué van a
empezar a hacer, aparte de lo que has mencionado? ¿Y qué cosas fueron
por un lado y dijeron, no, esto no va por este lado, mudamos?
</p>

<p>
<i>OSiUX</i>: El mayor desafío en general no es técnico en sí, sino es lidiar
con las prioridades de todo lo que hay que hacer. Y con cosas que a
nivel usuario, de muchas aplicaciones libres, no están pensadas para una
escala tan grande. Y una problemática de donde vos querés que los
usuarios no puedan tocar nada. Por ejemplo, hay unos <i>PDFs</i> que son unos
formularios como inteligentes que podés completar. Y después lo tenés
que imprimir. Y eso fue re complejo de solucionarlo. Y al principio
tuvimos que instalar <i>Adobe</i> <i>Acrobat</i> con, no sé, <i>Wine</i> o alguna cosa
así horrible. Porque era lo único que lo soportaba. <i>Evince</i> los
mostraba, pero no nos permitía completar.  Después teníamos una opción
que no me acuerdo cuál era, pero que los permitía completar. Pero no te
permitía ocultar el comentario que está en cada formulario, en cada
<i>textbox</i>. Y eso salía impreso y no servía. Ahora se estuvo trabajando
en <i>Okular</i>, que es el que tiene todo eso. Pero no tiene ninguna opción
de configuración por archivo para deshabilitar todo eso. O sea, el
usuario lo puede desactivar en el momento. Bueno, entonces trabajamos.
Estamos tocando el código de <i>Okular</i> para que eso ande. Lo mismo pasó
con algunos binarios que no hay traducción y no tienen soporte de
traducción. Y bueno, lo que pudimos lo editamos con un editor
hexadecimal. Y plantamos nuestro binario. Cosas así, digamos, con el
perdón de los asiáticos, le decimos chinos. (<i>&laquo;Perdón, voy a evitar este
tipo de comentarios en el futuro&raquo;</i>). O sea, es un chino que hay veces
que hay que meter mano y resolverlo. O <i>Bugs</i> complejos de que, no sé,
entrás en una pantalla y por X motivos, si moves el mouse un poquito más
abajo a la derecha, se cuelga a gnome. Y entonces hay que poner un
<i>script</i> que evite que vos vayas para abajo. Y además cosas que un
usuario dueño de su entorno no tiene problema porque puede customizar. Y
un usuario final no puede tocar nada. Y vos, como administración de esta
infraestructura, tampoco querés que toquen. Pero tenés que darle una
solución. Así, mil cosas. Lo que no nos metimos y lo delegamos fue la
parte de integración con el escáner de cheques.  Yo estuve intentando un
tiempo y no lo conseguí. Eso fue tercerizado. Pero anda. Sí logramos que
ande bien la impresora de <i>tickets</i>. Y eso implicó un desafío de que el
<i>core</i> bancario en ese momento utilizaba unos applets <i>Java</i>. Y eso,
nada, era imposible. Tuvimos que meter un chroot en el medio con algo
viejo para que eso ande. Bueno, al final pudimos evitar todo eso.
Porque ahora el <i>core</i> ese ya detecta cuando es un <i>GNU///Linux</i>. Y
listo, tira un código y metimos un <i>Backend</i> local que hace todo lo que
falta y sale andando. Pero sí, es un desafío de muchas personas. Yo
actualmente no estoy en el proyecto. Estuve en la etapa de desarrollo
inicial y de migración. Hay tres personas ahora&#x2026; Que están a <i>full</i>
con esto. Y todos los días aparece algo nuevo.
</p>

<p>
<i>Público</i>: Bueno, Buenísimo.
</p>

<p>
<i>OSiUX</i>: Yo me puedo quedar acá y charlamos.
</p>
</div>
</section>
<section id="outline-container-org01b87eb" class="outline-2">
<h2 id="org01b87eb">Pregunta 4 gestión y composición del equipo humano en <i>Filiales</i> <i>GNU//Linux</i></h2>
<div class="outline-text-2" id="text-org01b87eb">
<p>
<i>Público</i>: Bueno. <i>OSiRiS</i>, primero agradecerte. Para los que vinimos
acá a aprender. La admiración que generás con todo lo que contás. Mi
pregunta no va por&#x2026;
</p>

<p>
<i>OSiUX</i>: Es trabajo de <i>gcoop</i> igual, no mío&#x2026; Yo lo estoy vendiendo.
</p>

<p>
<i>Público</i>: De todos. Mi pregunta va más&#x2026; Va más por ese lado. No por
el lado técnico. Sino por el equipo o grupo humano. Que hay en
<i>Filiales</i>.  <i>GNU///Linux</i>, que si no entiendo es la organización que
está detrás de todo este proyecto. ¿Cuántas personas se necesitan para
hacer esto? ¿Y cómo lo gestionan?
</p>

<p>
<i>OSiUX</i>: Bueno, inicialmente fue un proyecto de seis meses. De dos
personas.  Un analista funcional y yo. Para ver si era viable el
proyecto. Después empezó&#x2026; Creo que empezamos tres personas. En el tope
llegamos a tres personas. ¿A cinco?
</p>

<p>
<i>gcoop</i>: Tres más uno.
</p>

<p>
<i>OSiUX</i>: Claro, sí. Siempre con un <i>PM</i>. No, pero en el tope cinco no. O
sea, creo que ahí&#x2026; No lo cuento al <i>PM</i>, pobre. Porque él siempre
habla de&#x2026; El <i>PM</i> siempre habla de que no somos personas. Que somos
<i>developers</i>. Que somos cosas raras. Entonces, bueno. Es la venganza.
No, en el tope cinco personas. Hoy hay tres. De <i>DevOps</i>, digamos. Pero
que hay que&#x2026; Digamos, es el <i>FullStack</i>. Por así decirlo. Pero después
hay que tocar o rediseñar una aplicación. O sea, tuvimos que diseñar
aplicaciones para solventar cosas existentes. O sea, está lo divertido y
lo complejo al mismo tiempo.
</p>

<p>
<i>Público</i>: Pensé que ibas a decir trescientas, no sé. Muchas gracias.
</p>

<p>
<i>OSiUX</i>: No, no, perdón. Nosotros diseñamos la automatización de todo
esto.  El <i>Banco</i> tiene su propio arsenal. Un ejército de personas que
utilizan diariamente todo esto. Hicieron la migración en plena pandemia
<code>2020</code>. En menos de un año! Pero fue un ejército físico de personas que
resolvió todo eso. Operadores de <i>AWX</i> creo que son más o menos como
sesenta. O sea, como&#x2026; Bueno, hay muchísima gente. La <i>Infra</i> del
<i>Banco</i> es muy grande. Y es todo <code>on-premise</code>. Es todo local. O sea, y
todo con <i>Software</i> <i>Libre</i>.
</p>

<p>
<i>Público</i>: Muchas gracias.
</p>

<p>
<i>Organización</i>: Ahí, Alejandro. Ahí te pongo una pregunta en el chat. Si
después podés respondérsela ahí mismo.
</p>

<p>
<i>OSiUX</i>: Sí. Y después tengo acá compañeros que saben hablar inglés. Y
que si hay alguien que no habla español.
</p>

<p>
<i>Organización</i>: Dale. Y Alejandro hoy va a estar por acá. Así que le
pueden seguir preguntando. Muchas gracias.
</p>

<p>
<i>OSiUX</i>: <i>OSiUX</i> también!
</p>
</div>
</section>
<section id="outline-container-orgec0056b" class="outline-2">
<h2 id="orgec0056b">Seguro te interesará leer&#x2026;</h2>
<div class="outline-text-2" id="text-orgec0056b">
<ul class="org-ul">
<li><a href="https://osiux.com/2022-10-20-como-migrar-6300-equipos-a-gnu-linux-usando-ansible-y-awx.html">Cómo migrar 6300 equipos a GNU/Linux usando Ansible y AWX</a></li>
<li><a href="https://osiux.com/2021-12-30-automated-bios-configuration-using-ansible-and-hp-linux-tools.html">Automatizar la configuración de la <i>BIOS</i> usando <code>ansible</code> y <i>HP Linux Tools</i></a></li>
<li><a href="https://osiux.com/2022-04-23-filiales-gnu-linux-flisol-caba.html"><code>Filiales GNU/Linux</code> FLISoL CABA</a></li>
<li><a href="https://osiux.com/2022-10-03-ansible-tools-v0-3-0.html"><i>Ansible Tools</i> <code>v0.3.0</code></a></li>
<li><a href="https://osiux.com/2022-10-08-automate-deployment-of-AWX-resources-with-GitLab-CI-CD-and-ansible-tools.html">Automatizar la implementación de los recursos de AWX con GitLab CI/CD y Ansible Tools</a></li>
<li><a href="https://osiux.com/2022-10-21-use-graphviz-for-slides.html">Usar Graphviz para generar Slides</a></li>
<li><a href="https://osiux.com/2022-10-25-how-to-make-a-timeline-with-graphviz-using-timeline2dot.html">Cómo hacer una línea de tiempo con GraphViz</a></li>
</ul>
</div>
</section>
<div id="footnotes">
<h2 class="footnotes">Notas al pie de p&aacute;gina: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.debconf" class="footnum" href="https://osiux.com/#fnr.debconf" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.debconf.org/">https://www.debconf.org/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.debconf26" class="footnum" href="https://osiux.com/#fnr.debconf26" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://debconf26.debconf.org/">https://debconf26.debconf.org/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.nerdearla" class="footnum" href="https://osiux.com/#fnr.nerdearla" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://nerdear.la/">https://nerdear.la/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.fgnulyt" class="footnum" href="https://osiux.com/#fnr.fgnulyt" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://osiux.com/2022-10-20-como-migrar-6300-equipos-a-gnu-linux-usando-ansible-y-awx.html">https://osiux.com/2022-10-20-como-migrar-6300-equipos-a-gnu-linux-usando-ansible-y-awx.html</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.gcoop" class="footnum" href="https://osiux.com/#fnr.gcoop" role="doc-backlink">5</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://g.coop.ar/">https://g.coop.ar/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.rms" class="footnum" href="https://osiux.com/#fnr.rms" role="doc-backlink">6</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://endefensadelsl.org/que_es_el_software_libre.pdf">https://endefensadelsl.org/que_es_el_software_libre.pdf</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.debian" class="footnum" href="https://osiux.com/#fnr.debian" role="doc-backlink">7</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.debian.org/">https://www.debian.org/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.bccl" class="footnum" href="https://osiux.com/#fnr.bccl" role="doc-backlink">8</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.bancocredicoop.coop/">https://www.bancocredicoop.coop/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.ansible" class="footnum" href="https://osiux.com/#fnr.ansible" role="doc-backlink">9</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.ansible.com/">https://www.ansible.com/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.awx" class="footnum" href="https://osiux.com/#fnr.awx" role="doc-backlink">10</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://github.com/ansible/awx">https://github.com/ansible/awx</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.gitlab" class="footnum" href="https://osiux.com/#fnr.gitlab" role="doc-backlink">11</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://gitlab.com/gitlab-org/gitlab-foss">https://gitlab.com/gitlab-org/gitlab-foss</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.proxmox" class="footnum" href="https://osiux.com/#fnr.proxmox" role="doc-backlink">12</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.proxmox.com/">https://www.proxmox.com/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.idrac" class="footnum" href="https://osiux.com/#fnr.idrac" role="doc-backlink">13</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.dell.com/en-us/lp/dt/open-manage-idrac">https://www.dell.com/en-us/lp/dt/open-manage-idrac</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.pxe" class="footnum" href="https://osiux.com/#fnr.pxe" role="doc-backlink">14</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://en.wikipedia.org/wiki/PXE_boot">https://en.wikipedia.org/wiki/PXE_boot</a>
</p></div></div>


</div>
</div></main>
<footer id="postamble" class="status">
<p class="date">Fecha: 2026-07-21 15:00</p>
<p class="author">Autor: Osiris Alejandro Gomez (OSiUX)</p>
<p class="date">Created: 2026-08-13</p>
</footer>]]></content:encoded>
    <dc:creator xml:lang="es">Osiris Alejandro Gomez</dc:creator>
    <pubDate>Tue, 21 Jul 2026 15:00:00 +0000</pubDate>
    <category>Technology</category>
    <comments>https://osiux.com/2026-07-21-debconf26-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.html</comments>
    <source url="https://osiux.com">osiux.com/blog</source>
    <dc:language>es-ar</dc:language>
    <enclosure url="https://filiales-gnu-linux.g.coop.ar/img/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1.png" type="image/png" length="0" />
    <media:content url="https://filiales-gnu-linux.g.coop.ar/img/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1.png" medium="image" isDefault="true" />
    <media:thumbnail url="https://filiales-gnu-linux.g.coop.ar/img/debconf26-265-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.av1.png" />
  </item>
  <item>
    <title>Install Debian Trixie on ThinkPad T14 Gen 1</title>
    <link>https://osiux.com/2025-08-10-install-debian-trixie-on-thinkpad-t14-gen-1.html</link>
    <guid isPermaLink="true">https://osiux.com/2025-08-10-install-debian-trixie-on-thinkpad-t14-gen-1.html</guid>
    <description>Instalar Debian Trixie en ThinkPad T14 Gen 1</description>
    <content:encoded><![CDATA[
<main id="content" class="content">
<h1 class="title">Install Debian Trixie on ThinkPad T14 Gen 1</h1>
<p>
<a href="https://osiux.com/index.html">index</a> |
<a href="https://osiux.com/about.html">about</a> |
<a href="https://osiux.com/archive.html">archive</a> |
<a href="https://osiux.com/charlas.html">charlas</a> |
<a href="https://osiux.com/docs.html">docs</a> |
<a href="https://osiux.com/links.html">links</a>
</p>

<p>
<a href="https://osiux.com/dot.html"><code>dot</code></a> |
<a href="https://osiux.com/git.html"><code>git</code></a> |
<a href="https://osiux.com/img.html"><code>img</code></a> |
<a href="https://osiux.com/plt.html"><code>plt</code></a> |
<a href="https://osiux.com/tty.html"><code>tty</code></a> |
<a href="https://osiux.com/uml.html"><code>uml</code></a>
</p>

<div id="org77301b8" class="figure">
<p><a href="https://osiux.com/img/debian-12-install-debian-Trixie-thinkpad-t14-gen-1.png"><img src="https://osiux.com/tmb/debian-12-install-debian-Trixie-thinkpad-t14-gen-1.png" alt="debian-12-install-debian-Trixie-thinkpad-t14-gen-1.png"></a>
</p>
</div>
<section id="outline-container-orge039579" class="outline-2">
<h2 id="orge039579">Hola <code>Trixie</code>, chau <code>Bullseye</code></h2>
<div class="outline-text-2" id="text-orge039579">
<p>
Desde que tengo a <code>tequila</code>, que es una <i>ThinkPad T14 Gen 1</i> fui pasando
por <i>Debian Buster</i> y luego <i>Debian Bullseye</i> para ahora disfrutar de
<code>Debian Trixie</code> <sup><a id="fnr.debian12" class="footref" href="https://osiux.com/#fn.debian12" role="doc-backlink">1</a></sup>.
</p>

<pre class="example" id="org08d6d45">

       _,met$$$$$gg.          osiris@tequila
    ,g$$$$$$$$$$$$$$$P.       --------------
  ,g$$P"        """Y$$.".     OS: Debian GNU/Linux 12 (Trixie) x86_64
 ,$$P'              `$$$.     Kernel: 6.1.0-9-amd64
',$$P       ,ggs.     `$$b:   Uptime: 2 days, 7 hours, 53 mins
`d$$'     ,$P"'   .    $$$    Shell: bash 5.2.15
 $$P      d$'     ,    $$P    WM: awesome
 $$:      $$.   -    ,d$$'    Terminal: terminator
 $$;      Y$b._   _,d$P'      CPU: Intel i7-10510U (8) @ 4.900GHz
 Y$$.    `.`"Y$$$$P"'         GPU: Intel CometLake-U GT2 [UHD Graphics]
 `$$b      "-.__              GPU: NVIDIA GeForce MX330
  `Y$$                        Memory: 5433MiB / 15651MiB
   `Y$$.
     `$$b.
       `Y$$b.
          `"Y$b._
              `"""

</pre>
</div>
</section>
<section id="outline-container-org89abe0c" class="outline-2">
<h2 id="org89abe0c">particionando el <i>NVME</i></h2>
<div class="outline-text-2" id="text-org89abe0c">
<p>
Como siempre el esquema es 1 partición <code>/boot</code>, 2 particiones idénticas
para <i>Sistema Operativo</i>, una para la <code>/</code> de ahora y una disponibles
para cuando falle, el resto de la unidad para datos, pero como estamos
en un sistema <b>moderno</b> además es necesaria 1 partición para <i>EFI</i>, en
fin, quedó asi:
</p>

<pre class="example" id="org8ca4708">

Model: SAMSUNG MZVLB512HBJQ-000L7 (nvme)
Disk /dev/nvme0n1: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name          Flags
 1      1049kB  1000MB  999MB   fat32        EFI           boot, esp
 2      1000MB  2001MB  1000MB  ext4         BOOT
 3      2001MB  52,0GB  50,0GB               LUKSDEBIAN12
 4      52,0GB  102GB   50,0GB               LUKSDEBIAN11
 5      102GB   512GB   410GB                LUKSDATA

</pre>
</div>
</section>
<section id="outline-container-orgd8b6ac8" class="outline-2">
<h2 id="orgd8b6ac8">instalando paquetes</h2>
<div class="outline-text-2" id="text-orgd8b6ac8">
<p>
Esta tarea esta super des-atendida gracias a <i>DiRePlOs</i> <sup><a id="fnr.direplos" class="footref" href="https://osiux.com/#fn.direplos" role="doc-backlink">2</a></sup>,
aunque aproveché a hacer algunas correcciones, que ya publicaré.
</p>

<p>
Basta ejecutar:
</p>

<pre class="example" id="org7aea28b">

./deb.sh -utx

</pre>
</div>
</section>
<section id="outline-container-org3b16f92" class="outline-2">
<h2 id="org3b16f92">maldito firmware-nonfree</h2>
<div class="outline-text-2" id="text-org3b16f92">
<p>
A diferencia de <i>Debian Bullseye</i> que necesité un <i>kernel</i> de <i>Debian
Backports</i>, esta vez no tuve inconvenientes para que funcione <i>Xorg</i> con
la placa <i>Intel</i> pero esta pendiente hacer funcionar la <i>NVIDIA</i>.
</p>

<p>
De la misma manera, no necesité extras para usar <i>WiFi</i>, también intel
<code>iwlwifi</code>
</p>

<pre class="example" id="org45571a2">

dpkg -l | grep iwlwifi

  ii  firmware-iwlwifi  20230210-5          all  Binary firmware for Intel Wireless cards

</pre>

<p>
El sonido, también salió andando de una, usando <code>firmware-sof-signed</code>:
</p>

<pre class="example" id="org3a21f8e">

dpkg -l | grep sof-signed

  ii  firmware-sof-signed  2.2.4-1  all  Intel SOF firmware - signed

</pre>
</div>
</section>
<section id="outline-container-org2286d6d" class="outline-2">
<h2 id="org2286d6d">Continuará&#x2026;</h2>
<div class="outline-text-2" id="text-org2286d6d">
<p>
Tengo mucho por documentar sobre la instalación y configuración, la idea
es ahorrarle un poco de tiempo a quienes quieran instalar <i>Debian
Trixie</i> en una <i>ThinkPad T14 Gen 1</i>.
</p>
</div>
</section>
<section id="outline-container-org36581fd" class="outline-2">
<h2 id="org36581fd">Tal vez te interese leer&#x2026;</h2>
<div class="outline-text-2" id="text-org36581fd">
<ul class="org-ul">
<li><a href="https://osiux.com/2022-04-22-thinkpad-hacktoon-floss-vinyl.html">Thinkpad HackToon FLOSS Vinyl by OSiUX</a></li>
<li><a href="https://osiux.com/2021-08-16-install-debian-bullseye-on-thinkpad-t14-gen-1.html"><i>Install Debian Bullseye on ThinkPad T14 Gen 1</i></a></li>
<li><a href="https://osiux.com/2021-02-09-install-debian-buster-on-thinkpad-t14-gen-1.html">Install Debian Buster on ThinkPad T14 Gen 1</a></li>
<li><a href="https://osiux.com/2021-01-26-disaster-recovery-plan-osiux.html">DIsaster REcovery PLan OSiux</a></li>
</ul>
</div>
</section>
<section id="outline-container-orga5ab36c" class="outline-2">
<h2 id="orga5ab36c">ChangeLog</h2>
<div class="outline-text-2" id="text-orga5ab36c">
<ul class="org-ul">
<li><a href="https://gitlab.com/osiux/osiux.gitlab.io/-/commit/4247fa7d8638c913c072c295ab3ceb76f4b1ceaa"><code>2023-06-10 18:10</code></a> agregar <i>Install Debian Trixie on ThinkPad T14 Gen 1</i></li>
</ul>
</div>
</section>
<div id="footnotes">
<h2 class="footnotes">Notas al pie de p&aacute;gina: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.debian12" class="footnum" href="https://osiux.com/#fnr.debian12" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.debian.org/releases/Trixie/">https://www.debian.org/releases/Trixie/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.direplos" class="footnum" href="https://osiux.com/#fnr.direplos" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://gitlab.com/osiux/direplos">https://gitlab.com/osiux/direplos</a>
</p></div></div>


</div>
</div></main>
<footer id="postamble" class="status">
<p class="date">Fecha: 2023-08-10 17:00</p>
<p class="author">Autor: Osiris Alejandro Gomez</p>
<p class="date">Created: 2026-08-13</p>
</footer>]]></content:encoded>
    <dc:creator xml:lang="es">Osiris Alejandro Gomez</dc:creator>
    <pubDate>Thu, 10 Aug 2023 17:00:00 +0000</pubDate>
    <category>Technology</category>
    <comments>https://osiux.com/2025-08-10-install-debian-trixie-on-thinkpad-t14-gen-1.html</comments>
    <source url="https://osiux.com">osiux.com/blog</source>
    <dc:language>es-ar</dc:language>
    <enclosure url="https://osiux.com/img/debian-12-install-debian-Trixie-thinkpad-t14-gen-1.png" type="image/png" length="0" />
    <media:content url="https://osiux.com/img/debian-12-install-debian-Trixie-thinkpad-t14-gen-1.png" medium="image" isDefault="true" />
    <media:thumbnail url="https://osiux.com/img/debian-12-install-debian-Trixie-thinkpad-t14-gen-1.png" />
  </item>
  <item>
    <title>Charla "Automatizar para Innovar" en FLISoL CABA 2023</title>
    <link>https://osiux.com/2023-04-22-flisol-caba-automatizar-para-innovar.html</link>
    <guid isPermaLink="true">https://osiux.com/2023-04-22-flisol-caba-automatizar-para-innovar.html</guid>
    <description>Transcripción de la Charla "Automatizar para Innovar" realizada en el FLISoL CABA el 22 de Abril de 2023</description>
    <content:encoded><![CDATA[
<main id="content" class="content">
<h1 class="title">Charla &laquo;Automatizar para Innovar&raquo; en FLISoL CABA 2023</h1>
<p>
<a href="https://osiux.com/index.html">index</a> |
<a href="https://osiux.com/about.html">about</a> |
<a href="https://osiux.com/archive.html">archive</a> |
<a href="https://osiux.com/charlas.html">charlas</a> |
<a href="https://osiux.com/docs.html">docs</a> |
<a href="https://osiux.com/links.html">links</a>
</p>

<p>
<a href="https://osiux.com/dot.html"><code>dot</code></a> |
<a href="https://osiux.com/git.html"><code>git</code></a> |
<a href="https://osiux.com/img.html"><code>img</code></a> |
<a href="https://osiux.com/plt.html"><code>plt</code></a> |
<a href="https://osiux.com/tty.html"><code>tty</code></a> |
<a href="https://osiux.com/uml.html"><code>uml</code></a>
</p>
<video id="video" controls width="720" height="406" autoplay loop background="#000000" preload poster="https://osiux.com/img/flisol-2023-caba/2023-04-22-flisol-2023-caba-osiux-automatizar-para-innovar.png">
  <source src="https://osiux.com/videos/flisol-2023-caba-osiux-automatizar-para-innovar.mp4" type="video/mp4">
</video>

<ul class="org-ul">
<li><a href="https://osiux.com/videos/flisol-2023-caba-osiux-automatizar-para-innovar.mp4">Descargar <code>flisol-2023-caba-osiux-automatizar-para-innovar.mp4</code> 94MB</a></li>
</ul>
<section id="outline-container-orgb92f6b7" class="outline-2">
<h2 id="orgb92f6b7">Presentación</h2>
<div class="outline-text-2" id="text-orgb92f6b7">
<p>
Hola Buenas Tardes a todos, todes, todis o como se autoperciban.
</p>

<p>
Me llamo <code>OSiRiS</code>, trabajo en <code>gcoop</code> <sup><a id="fnr.gcoop" class="footref" href="https://osiux.com/#fn.gcoop" role="doc-backlink">1</a></sup> y me conocen como
<code>OSiUX</code> <sup><a id="fnr.osiux" class="footref" href="https://osiux.com/#fn.osiux" role="doc-backlink">2</a></sup>, en la comunidad.
</p>
</div>
</section>
<section id="outline-container-org92a6cff" class="outline-2">
<h2 id="org92a6cff"><i>Slides vs Debian12</i></h2>
<div class="outline-text-2" id="text-org92a6cff">
<p>
eee, y anoche a las <code>12hs</code> estaba en la disyuntiva&#x2026;
si hacer los <i>slides</i> para la charla (siempre la última noche) o
instalar <code>Debian 12</code> <sup><a id="fnr.debian12" class="footref" href="https://osiux.com/#fn.debian12" role="doc-backlink">3</a></sup>
</p>

<p>
Elegí instalar <i>Debian 12</i>, porque tenía ganas, este eee y en realidad
porque no me andaba antes la salida <i>HDMI</i> así que fue una buena
decisión porque ahora podemos ver, esto&#x2026;
</p>

<p>
&#x2026;y en parte también porque no quería mostrar solamente <i>slides</i>
estáticos sino que quería mostrar un poco, algo en vivo.
</p>
</div>
</section>
<section id="outline-container-org5e6ad0c" class="outline-2">
<h2 id="org5e6ad0c"><i>Ansible Expertise</i></h2>
<div class="outline-text-2" id="text-org5e6ad0c">
<p>
&#x2026;eee vamos a intentar de que la internet nos acompañe, este y más que
nada lo que quería comentar brevemente&#x2026;
</p>

<p>
Un poco la experiencia de uso de <code>Ansible</code> <sup><a id="fnr.ansible" class="footref" href="https://osiux.com/#fn.ansible" role="doc-backlink">4</a></sup> que tenemos en
<i>gcoop</i>.
</p>

<p>
Y que nos ha permitido innovar gracias a que automatizamos un montón de
tareas.
</p>
</div>
</section>
<section id="outline-container-org9296c45" class="outline-2">
<h2 id="org9296c45">Caso de Éxito</h2>
<div class="outline-text-2" id="text-org9296c45">
<p>
En eso, el caso de éxito que venimos mostrando, es el proceso de &#x2026;
</p>

<p>
Esperen que me ande esto&#x2026; arrghh&#x2026; Toqué el zoom y ahí no me anda
nada ahí, <code>CTRL+F5</code> ahí, está!
</p>

<p>
Bueno, el <code>Banco Credicoop</code> <sup><a id="fnr.bccl" class="footref" href="https://osiux.com/#fn.bccl" role="doc-backlink">5</a></sup>, tenía todas las <i>Filiales</i>, es
decir <code>300</code> <i>Filiales</i> en todo el país, con <code>3000</code> puestos de trabajo
usando tecnología obsoleta, <i>&laquo;Ventanas 2000&raquo;</i> se llamaba lo que usaban y
bueno, había que pasarlo a <code>GNU/Linux</code> y para hacerlo, esteee&#x2026;
</p>

<p>
Bueno el <i>Banco</i> vino a <i>gcoop</i>, que ya somos proveedores de ellos desde
hace rato.
</p>

<p>
&#x2026;y la idea era cómo hacer esa migración, ese proceso de migración, o
sea, si uno dice Instalar <i>SoftwareLibre</i>, como lo pueden hacer acá en
el <code>InstallFest</code> <sup><a id="fnr.flisol" class="footref" href="https://osiux.com/#fn.flisol" role="doc-backlink">6</a></sup>, es como&#x2026;
</p>

<p>
Si, bajo una <code>ISO</code>, lo pongo en un <i>pendrive</i>, lo pongo en una <i>compu</i>,
<i>ENTER</i>, <i>ENTER</i>, <i>ENTER</i> y un rato y ya está!
</p>

<p>
Bueno; es una versión simplificada! Digamos!
</p>

<p>
Después hay otros conflictos, a nivel usuario final, tenes problemas con
el <i>driver</i> de video, con el <i>driver</i> de la red, con el <i>driver</i> de
sonido, con la <i>performance</i>&#x2026;
</p>

<p>
Con un montón de cosas. Pero en la relación de <code>1</code> persona con <code>1</code>
máquina, será más o menos tiempo, lo solucionas!
</p>
</div>
</section>
<section id="outline-container-org41ca6bd" class="outline-2">
<h2 id="org41ca6bd"><i>AWX</i></h2>
<div class="outline-text-2" id="text-org41ca6bd">
<p>
Ahora si vos tenes muchos equipos, como es en el caso del <i>Banco</i>, la
migración fue de <code>6300</code> puestos de trabajo, esto es el <i>Banco</i> y es
todos los equipos que administramos desde una sola virtual, que se llama
<code>AWX</code> <sup><a id="fnr.awx" class="footref" href="https://osiux.com/#fn.awx" role="doc-backlink">7</a></sup> y que anda por acá en el centro, es esta <i>griscecita</i> que
esta por acá, ese equipo, solo ese equipo controla <code>6300</code> equipos!
</p>

<p>
Y qué es lo que controla? Es bueno, qué sistema operativo se instala
cómo se configura ese sistema operativo, qué servicios se instalan, cómo
se configuran esos servicios, si es necesario reiniciar un servicio, si
es necesario conectar ese servicio con otro servicio, en fin cualquier
operación que tradicionalmente se hacía a mano ahora se hace de manera
automatizada, es decir, nadie mete mano en los equipos, les cortamos la
mano a les <i>SysAdmines</i>, este, porqué? No por mala onda!
</p>
</div>
</section>
<section id="outline-container-org137a567" class="outline-2">
<h2 id="org137a567"><i>IaC</i></h2>
<div class="outline-text-2" id="text-org137a567">
<p>
Si no porque cuando vos tenés muchos equipos, es muy difícil que todos
te queden iguales, para que te queden todos iguales, lo que tenés que
hacer es automatizar todo lo que puedas, para que sean reproducibles, si
se rompe un equipo yo tengo que poner uno en las mismas condiciones que
estaba antes, para poner algo que está en las mismas condiciones que
estaba antes, como hago?
</p>

<p>
Tengo muy buena memoria o tengo código versionado?
</p>

<p>
<code>Infraestructura como Código</code> <sup><a id="fnr.iac" class="footref" href="https://osiux.com/#fn.iac" role="doc-backlink">8</a></sup>, que ese código va a poder
regenerar ese equipo, este una y otra vez, o corregirlo en caso de que
sea necesario.
</p>
</div>
</section>
<section id="outline-container-org9173f2f" class="outline-2">
<h2 id="org9173f2f">nerdearla</h2>
<div class="outline-text-2" id="text-org9173f2f">
<p>
Hay una charla más completa sobre esto que la di el año pasado en
<code>nerdearla</code> <sup><a id="fnr.nerdearla" class="footref" href="https://osiux.com/#fn.nerdearla" role="doc-backlink">9</a></sup> y que los invito a verla en el canal de
nerdearla!
</p>



<p>
&#x2026;O en mi sitio <code>osiux.com</code>
</p>
</div>
</section>
<section id="outline-container-orgfee7964" class="outline-2">
<h2 id="orgfee7964"><i>SoftwareLibre</i></h2>
<div class="outline-text-2" id="text-orgfee7964">
<p>
Utilizamos todas herramientas libres, nos apoyamos fuertemente en
<i>Ansible</i>, trabajamos con <i>GitLab</i>, <i>AWX</i> es el orquestador gráfico de
<i>Ansible</i> que permite que varias personas operen y hagan, disparen las
ejecuciones de estas automatizaciones, sin saber de código, simplemente
haciendo unos <code>/clics/.</code>
</p>

<p>
Integramos con un <i>AD</i> (<i>ActiveDirectory</i> <sup><a id="fnr.active-directory" class="footref" href="https://osiux.com/#fn.active-directory" role="doc-backlink">10</a></sup>)
la parte de los usuarios, trabajos con <i>FreeIPA</i> <sup><a id="fnr.freeipa" class="footref" href="https://osiux.com/#fn.freeipa" role="doc-backlink">11</a></sup> que nos
permite hacer esa integración de usuarios de &laquo;Ventanas&raquo; a usuarios
Libres, trabajamos con <i>Debian</i> y con una distribución basada en
<i>Debian</i> también, este&#x2026;,
</p>

<p>
Y bueno, esto tardamos <code>4</code> años en hacerlo, esta funcionando, obviamente
todos los días surge algo, y hay que ir corrigiéndolo, pero bueno para
sintetizar&#x2026;
</p>
</div>
</section>
<section id="outline-container-org41b04d6" class="outline-2">
<h2 id="org41b04d6"><i>IDRAC + PXE + Debian NetInstall + Proxmox</i></h2>
<div class="outline-text-2" id="text-org41b04d6">
<p>
Esta <i>AWX</i> que obtiene el código, de lo que tiene que hacer, cada tarea
que tiene que realizar, eso se conecta, por ejemplo en el caso de los
servidores a la <code>iDRAC</code> <sup><a id="fnr.iDRAC" class="footref" href="https://osiux.com/#fn.iDRAC" role="doc-backlink">12</a></sup> que es el servidor del servidor, la
computadora de la computadora, y le dice, configurá los discos de esta
manera, creá el <i>RAID</i>, particionalo, todo lo que haga falta, eso
después lo reinicia y dispara la ejecución de un servidor <code>PXE</code> <sup><a id="fnr.pxe" class="footref" href="https://osiux.com/#fn.pxe" role="doc-backlink">13</a></sup>
que toma la imagen de un <i>Debian NetInstall</i> que se autoinstala, es
decir que no hay intervención del operador, se configura y lo deja
preinstalado para que después el operador dispare un <i>workflow</i> que
lanza la ejecución y la instalación de un <code>Proxmox</code> <sup><a id="fnr.proxmox" class="footref" href="https://osiux.com/#fn.proxmox" role="doc-backlink">14</a></sup>, para
que haga la virtualización y después eso dispara la ejecución de la
creación de <code>10</code> virtuales, diferentes, con distintos servicios y para
eso se apoya en otros equipos que están dentro de la red, que lo que
hace es caché de caché de caché para que esto funcione a lo largo y
ancho de todo el país.
</p>
</div>
</section>
<section id="outline-container-org0efdcfb" class="outline-2">
<h2 id="org0efdcfb"><i>CI/CD</i></h2>
<div class="outline-text-2" id="text-org0efdcfb">
<p>
Eso esta totalmente automatizado y en la instancia de <i>Producción</i>
cuando hubo que migrar todos los puestos de trabajo, cuando se llevaron
esos servidores, hubo que configurar todos esos puestos y en algunas
<i>Filiales</i>, no sé, tenés <code>60</code> puestos de trabajo y tiene que salir
funcionando, no importa si ese puesto de trabajo esta, no sé, en un
gerencia, en una secretaría, o en una línea de cajas, es el mismo
sistema operativo libre, y de hecho si tuvieras la urgencia podés
sacarlo, del puesto de recepción y ponerlo en una línea de cajas y tiene
que salir andando y si se rompe, lo tirás y ponés uno igual, y mandás a
<i>deployar</i> desde <i>CasaCentral</i> a no sé, <i>Salta</i> o cualquier lugar del
país.
</p>
</div>
</section>
<section id="outline-container-org665b174" class="outline-2">
<h2 id="org665b174"><i>AWX Deploy</i></h2>
<div class="outline-text-2" id="text-org665b174">
<p>
Cómo se dispara esto? Bueno, vamos a ver si me anda&#x2026;, en el <i>Banco</i>
soy <i>ogomez</i> no soy <i>osiris</i>, si me acuerdo mi contraseña&#x2026;
</p>

<p>
Este sería el <i>AWX</i> de <i>Desarrollo</i> que tenemos, y básicamente lo que se
ve es un panel donde están las distintas opciones, las ejecuciones que
se estuvieron realizando, y acá las plantillas que se usaron
recientemente, por ejemplo se ejecutó <code>wst_bra</code> que es lo que permite es
hacer un escaneo de qué puestos están encendidos en la red y un
<i>workflow</i> de <i>Proxmox</i> que crea máquinas virtuales, podemos ver, ahí lo
<i>Verde</i> es esta todo bien, lo <i>Rojo</i> esta todo mal, pero se puede volver
a ejecutar hasta que dé <i>Verde</i>, una y otra vez!
</p>
</div>
</section>
<section id="outline-container-org0f393f6" class="outline-2">
<h2 id="org0f393f6"><i>Workflow</i></h2>
<div class="outline-text-2" id="text-org0f393f6">
<p>
Por ejemplo, tenemos un <i>workflow</i> que se inicia y dispara, un
<i>workflow</i> que dispara otros <i>workflows</i>, y es de la máquina virtual de
<i>Ansible</i>, la del Servidor <i>FTP</i>, la del servidor <i>PXE</i>, la del servidor
de <i>Log</i>, la del servidor de <i>GIT</i>, del servidor de Impresión, el
servidor de <i>CDN</i>, el servidor de la caché de <i>APT</i> y el <i>FileServer</i>, y
cada uno de estos <i>workflows</i>, si los miramos, vamos a mirar una tarea
completada, esta por ejemplo, podemos entrar, acá dio todo en <i>Verde</i> y
como ven se ejecutaron todas en paralelo.
</p>

<p>
Si vemos aquí, este nodo de <i>workflows</i> tiene a su vez, más tareas, y
esta, la primera es, lo que hace es configurar <i>cloudinit</i>, que es algo
que nos ayuda a configurar las maquina virtuales, establece la
configuración de <code>apt</code>.
</p>

<p>
La configuración de lo que es el servicio de esta <i>VM</i> en particular, y
le aplica criterios de seguridad, entonces eso es muy importante,
digamos así como escucharon por ahí hablar de <i>DevOps</i> <sup><a id="fnr.devops" class="footref" href="https://osiux.com/#fn.devops" role="doc-backlink">15</a></sup>,
también esta <i>DevSecOps</i> <sup><a id="fnr.devsecops" class="footref" href="https://osiux.com/#fn.devsecops" role="doc-backlink">16</a></sup>, que es cómo garantizo la
seguridad de un equipo, bueno todas las políticas tienen que estar
versionadas en código, y se tienen que volver aplicar una y otra vez
para asegurarse de que este todo bien.
</p>
</div>
</section>
<section id="outline-container-orgf73b69f" class="outline-2">
<h2 id="orgf73b69f"><i>log</i></h2>
<div class="outline-text-2" id="text-orgf73b69f">
<p>
Puedo entrar en el detalle, de la ejecución, de cada uno de estos nodos
y ver el <i>log</i> de salida.
</p>

<p>
Este <i>log</i> salida es exactamente lo mismo, que si vos ejecutás <i>Ansible</i>
desde la línea de la consola con un <i>Playbook</i>, es lo que te va a
devolver, el criterio de color es: <i>Verde</i> esta todo bien, <i>Rojo</i>,
error, esta todo mal, este.. <i>Celestito</i> es algo que se ignoró y puede
ser un error inesperado que es posible que suceda y uno lo puede
ignorar, <i>Naranja</i> es algo que cambió, es decir cambió el estado, y a
ver si podemos ver algo acá, que se entienda&#x2026;
</p>

<p>
Ahhh&#x2026; Un poco lenta la máquina, bue, o soy yo&#x2026; También&#x2026;
</p>

<p>
Este <i>log</i>, el resultado en este caso es un <i>JSON</i>, pero puede ser una
salida <code>standaroutput</code> común y bueno acá lo que estaba haciendo es
testeando la configuración de <i>cloudinit</i>, vamos a mirar algo más en
detalle, por ejemplo acá, vemos algo en <i>Naranja</i> que cambió y es este
archivo <code>cloud.cfg</code>
</p>

<p>
&#x2026;tiene una expresión regular, acá lo que estaba buscando era
esta línea que dice <code>manage_resolv_conf</code> que me tengo que asegurar que
esto este en una configuración en un archivo en <code>3000</code> equipos, sino es
de manera automatizada, no puedo garantizar que esto este en esas
condiciones, es decir solo aplicando permisos no es suficiente, porque
las personas nos equivocamos, cometemos errores, pero por sobre todo por
más que tengamos buenas intenciones, a veces aplicamos una mejora y esa
mejora no la versionamos, no es persistente dentro del equipo, entonces
se reinicia el equipo y se pierde esa configuración, entonces caemos con
<i>el famoso que raro! Que no anda!</i>
</p>

<p>
A veces te anda, a veces no!, proba con reiniciar, bue&#x2026;
</p>

<p>
Para evitar todo eso tenemos esta herramienta que nos permite, publicar
código y <i>deployarlo</i>, vamos a ver ahora otra cosa&#x2026;
</p>

<p>
Esto es&#x2026; Espera a ver si me anda&#x2026;
</p>

<p>
Parte de la charla lo que quería mostrar también, es&#x2026;
</p>

<p>
Hay una serie de <i>scripts</i> que fui construyendo con <i>BASH</i> que es lo que
siempre tengo a mano.
</p>
</div>
</section>
<section id="outline-container-orgf64211c" class="outline-2">
<h2 id="orgf64211c"><code>awx-cli</code></h2>
<div class="outline-text-2" id="text-orgf64211c">
<p>
Que básicamente son <i>scripts</i> <code>bash</code> que lo que utilizan es el cliente
de consola de <i>AWX</i>, es decir <i>AWX</i> lo puedo usar de manera gráfica, que
esta pensada más a nivel operador para que dispare ejecuciones&#x2026;
</p>

<p>
O a nivel de consola y como hay muchas posibilidades y comandos, para
automatizar el uso de la consola hice unos <i>scripts</i> que simplifican esa
tarea porque son muchos comandos y asumen un montón de valores por
defecto, pero digamos si yo quisiera lanzar un comando, en un equipo y
no tengo ganas de ir a la interfaz gráfica, <i>loguearse</i> en <i>AWX</i>, ir la
cantidad de saltos que son como <code>15</code> saltos para poder hacer algo
efectivamente, bueno podés tirar un <i>oneliner</i>, que diga&#x2026;
</p>

<p>
Bueno conectate, el <code>awx-cli</code> se conecta al servidor <i>AWX</i> y le dice
bueno, ejecutá este trabajo, con estos comandos, con este límite, y
devolveme la salida, la ejecución que disparo desde la consola, queda
almacenada en <i>AWX</i>, entonces alguien puede estar monitoreando en <i>AWX</i>
gráficamente y ver todo el detalle, esto que me garantiza, que tengo
trazabilidad sobre todas las operaciones!
</p>

<p>
No hay problema con romper algo, cuando alguien rompe algo, lo que
queremos es evidencia, para saber que sucedió y cómo corregirlo, porque
si alguien entró, digamos por <i>SSH</i>, de modo oscuro que es, nadie esta
viendo esa salida, no vamos a saber que sucedió, esto es lo interesante,
no hay problema con romper, si lo rompemos, esta registrado en el <i>log</i>
lo que pasó, y lo podemos arreglar, si no sabemos que pasó es muy
difícil y perdemos tiempo en el diagnóstico.
</p>

<p>
Entonces para simplificar la operatoria, hicimos una serie de <i>scripts</i>,
hay un montón, o sea son más de <code>200</code>, que nos permitieron simplificar
el <i>Desarrollo</i> para hacer esto.
</p>

<p>
A ver si me funciona&#x2026;
</p>

<p>
Tengo un error acá, esto es&#x2026; mmm&#x2026;mmm..
</p>

<p>
Como tenemos varias instancias de <i>AWX</i>, tenemos una de <i>Desarrollo</i>,
donde podemos jugar tranquilos, sin romper mucho, sin mucho daño&#x2026;
Tenemos una de <i>Staging</i>, y tenemos una <i>Productiva</i>, entonces a veces
yo tengo que pasar de una instancia a otra, bueno entonces ya tenemos el
primer comando que es <code>awx-config</code>, le digo el entorno y eso va a
definir, una <i>URL</i> con ciertos túneles, el usuario, y me va a decir, che
ya estas llegando a este servidor de <i>Desarrollo</i> y con estas versiones
de <i>AWX</i>, del <code>ansible-tower-cli</code> <sup><a id="fnr.awx-cli" class="footref" href="https://osiux.com/#fn.awx-cli" role="doc-backlink">17</a></sup>, y de <i>Ansible</i> en si.
</p>

<p>
Yo podría decir, desde acá, eee&#x2026;
</p>
</div>
</section>
<section id="outline-container-org0554827" class="outline-2">
<h2 id="org0554827"><code>adhoc</code></h2>
<div class="outline-text-2" id="text-org0554827">
<p>
Por ejemplo, <code>awx-adhoc-shell</code> <sup><a id="fnr.awx-adhoc-shell" class="footref" href="https://osiux.com/#fn.awx-adhoc-shell" role="doc-backlink">18</a></sup> que voy a entrar a
un equipo y que voy a tirarle un comando, el inventario le digo <code>wst</code>
que son las <i>WorkStations</i> y le voy a poner un límite, que es el lugar
donde podemos romper tranquilo, que es <i>Desarrollo</i> y después le puedo
decir el comando, por ejemplo, voy a hacer algo leve que es el <code>uptime</code>,
funciona? Vamos a ver, si tenemos suerte&#x2026;
</p>

<p>
Los <i>WARNINGS</i> los ignoramos siempre <code>:P</code> no importa esta todo
<i>violetita</i>, bueno&#x2026;
</p>

<p>
<i>Rojo</i> esta todo mal, <i>Rojo</i> son los equipos que no llegamos, dice
<i>UNREACHEABLE</i>&#x2026;
</p>

<p>
No sé porqué no llegamos, puede ser que estén apagados simplemente, o
puede ser problema de <i>Firewall</i> u otra cosa&#x2026;
</p>

<p>
Pero si llegamos a un equipo acá, y nos contestó y nos dice, bueno esta
arriba hace <code>32</code> días, esta operativo
</p>

<p>
Tiré un comando muy tonto, pero bueno, terminó la ejecución y el <i>Job</i>
dice que falló porque la tarea la estoy tirando en todo el inventario
con varios equipos, entonces yo podría, decir, che bueno&#x2026;
</p>

<p>
Supongamos a que a mi no me interesa, ese equipo <code>662</code>, no lo quiero ni
ver, bueno le puedo decir <code>host-disable</code>
</p>

<p>
No queremos ver ese <i>WARNING</i>, así que lo deshabilitamos y ahora ese
equipo esta deshabilitado, al estar deshabilitado, nadie puede operar
sobre él&#x2026;
</p>

<p>
Y vuelvo a tirar la misma tarea de antes, en el inventario <code>wst</code> tengo
<code>3000</code> equipos, tengo un grupo que es <i>Desarrollo</i> donde ahí puedo
romper tranquilo, vuelvo a tirar la misma tarea, así que ahora tengo la
ejecución de <code>2</code> <i>hosts</i>, uno falló, el otro salió bien.
</p>

<p>
Esto que ejecuté desde la consola, digamos, modo <i>Hacking</i> oscuro, si
voy al <i>AWX</i>, a <i>Trabajos</i>, tengo el registro de las tareas que se
lanzaron, veamos la última, y ahí me dice, bueno, quién la inició,
cuándo, con qué parámetros, o sea queda el registro completo de todo lo
que se hace en un equipo.
</p>

<p>
Y esto es en función de la cantidad de espacio que tengan, puden
almacenar, no sé <code>10</code> años de ejecuciones sobre un mismo equipo, sobre
<code>3000</code> equipos, sobre <code>6000</code> equipos o todos los equipos que tengan y
que necesiten.
</p>

<p>
Y acá bueno, es un poco más agradable la salida, pero es básicamente la
misma, hago <code>CTRL+F5</code> y obtengo más datos, se actualiza, esta un poco
lenta la <i>Internechi</i>, vamos a mirar acá, esta salida, lo puedo ver como
un <i>JSON</i>, como salida standard o si tengo un error, la salida de error.
</p>

<p>
Bueno, como funciona esto, simplemente tiré un comando aislado.
</p>
</div>
</section>
<section id="outline-container-org65361ff" class="outline-2">
<h2 id="org65361ff"><code>Playbook</code></h2>
<div class="outline-text-2" id="text-org65361ff">
<p>
Ahora si yo quiero trabajar algo, más permanente, por ejemplo, vamos a
ver, en una <i>Workstation</i> como se hace, cómo se actualiza una
<i>Workstation</i>
</p>

<p>
Pregunta, el comando que tiraste anteriormente, es un comando que esta
en la consola del <i>AWX</i>, es un comando local, dentro de <i>AWX</i> o&#x2026;
</p>

<p>
No, es un cliente que esta instalado en mi máquina, que se conecta por
un túnel ahora detrás de una <code>VPN</code> y llega al servidor, por medio de la
<i>API</i> de <i>AWX</i>, entonces ya el cliente te maneja, vos le podés hablar
directamente a la <i>API</i> desde otra cosa si quisieras, respetando la
<i>API</i>, es una <i>API</i> <code>REST</code>, lo interesante es que te devuelve todo el
resultado completo y te mantiene el registro, no es que lo tienen
aislado.
</p>

<p>
La ejecución que hago, no es solo para mi, es en el servidor y todo el
mundo la puede ver, digamos, especialmente, <i>Auditoría</i>!
</p>

<p>
Bueno, esto es un <i>playbook</i>, esto es un <i>playbook</i> de actualización de
una <i>Workstation</i>, lo se hace es definir variables, de qué es el
comportamiento que espera, hay tareas, pero antes de las tareas, hay
<code>pre-tasks</code>, <code>pre-tareas</code>, hay algo que se llama roles te también se
pueden usar y básicamente de esta manera uno va construyendo&#x2026;
</p>

<p>
Todas las tareas que uno quiere que se realicen en un equipo, por
ejemplo, acá tenemos un <i>fix</i> que es, que&#x2026;
</p>

<p>
Usamos algo que se llama <code>autofs</code> <sup><a id="fnr.autofs" class="footref" href="https://osiux.com/#fn.autofs" role="doc-backlink">19</a></sup> que permite montar de
manera automática un <code>filesystem</code> cuando se inicia el equipo y bueno,
teníamos un <i>bugcito</i> y lo básico de <code>ansible</code> cada vez que hace una
tarea es que más allá de la definición de tarea, lo importante es
cuándo se va a ejecutar esa tarea, siempre conviene poner
condicionales, es decir cuando está definido que haga esto y está en
<code>true</code>, bueno hacelo, sino no
</p>

<p>
Si vemos esa tarea, básicamente lo que esta haciendo esa tarea, bueno se
fija que existan los archivos de configuración, en caso de estar
definido, restaura unos archivos de configuración que hacen falta y
reinicia el servicio.
</p>

<p>
Entonces para reiniciar un servicio remotamente, la tarea es tan
simple como, esto básicamente, un nombre que es un texto, el módulo
<i>servicio</i> (<code>service</code>), en <code>name</code> le pones el nombre del servicio, que
puede ser <code>cups</code> que puede ser cualquier otro, acá es <code>autofs</code> y el
estado que querés, en este caso que este <i>reiniciado</i> (<code>restarted</code>),
si el servicio no estaba corriendo, bueno lo va a iniciar, en este
caso.
</p>

<p>
Entonces, de esta manera, vos podés decir que bueno todos los equipos,
querés reiniciar el servidor de impresión y lo podés hacer a todos
juntos.
</p>

<p>
Y cuando lo ejecutes vas a tener la salida de eso, en el <i>AWX</i>.
</p>
</div>
</section>
<section id="outline-container-org5fd138a" class="outline-2">
<h2 id="org5fd138a"><i>Producción</i></h2>
<div class="outline-text-2" id="text-org5fd138a">
<p>
Ahora vamos a mirar una plantilla, por ej. vamos a mirar algo
interesante, vamos a entrar a <i>Producción</i> un ratito, pero no vamos a
romper nada, lo prometo, no soy <i>osiris</i>, y esto, acá, bueno acá casi
<i>DANGER</i> metemos la pata.
</p>

<p>
Si voy a inventario, por ejemplo vamos a ver el <code>wst</code> que les
comentaba&#x2026;
</p>

<p>
Acá en servidores, vamos a ver, tengo muchos servidores&#x2026;
</p>

<p>
Los equipos los tenemos identificados con el número de serie que esta
dentro del <i>mother</i>, así sabemos que son esos equipos y no otros y por
ej.
</p>

<p>
Elegí un equipo al azar, y ahí me dice, cual es su <i>IP</i>, cual es su
<i>MacAddress</i>, cual es su <i>hostname</i>.
</p>

<p>
Lo que hicimos, es que los equipos todo el tiempo, que cambian su <i>IP</i>
le avisan a <i>AWX</i> y actualizan los datos, entonces están siempre
rastreados.
</p>

<p>
Un equipo puede pertenecer a uno o más grupos, en esos grupos, uno
define las variables que quiere que lo afecten.
</p>

<p>
Y podemos ver el historial, por ej. de este equipo, en tareas
completadas, qué se hizo, cuándo y quién lo hizo y tenés todo el
historial de ejecuciones, de todas las tareas que se le hizo, entonces
por ej. acá no tengo el detalle, vamos a expandirlo, ahí&#x2026;
</p>

<p>
Bueno, tenemos en <i>Verde</i> y en <i>Rojo</i>, por ejemplo, este <i>WoL</i> es una
plantilla que lo que hace es prenderlo remotamente, si el equipo esta
apagado, venís acá y lo prendés, podés prender uno o podés prender todos
los equipos al mismo tiempo o de a grupos.
</p>

<p>
Acá tuvo una actualización, a la versión <code>1.6</code> y de hecho falló y
seguramente más adelante, después lo corrigieron, pero si querés ver
porqué falló la actualización de ese equipo, tenes el historial, y vamos
a ver acá, un poco más en detalle&#x2026;
</p>

<p>
Bueno el equipo que falló acá, es ese que esta allá y esta en <i>Rojo</i> y
pero esta en un ejecución donde el límite había sido toda una <i>Filial</i>,
o sea, esta en un grupo de muchos más equipos que se estaban corriendo,
así que a esta escala, uno <i>trabaja los equipos no como mascota sino
como ganado</i>.
</p>

<p>
Bueno, hay un montón y ahí hay uno que, después vemos que le pasa, lo
que importa que la mayoría funcionen, y fijense en ese resumen&#x2026;
</p>

<p>
Dice la cantidad de tareas <code>OK</code>, en la mayoría que esta en <i>Verde</i>, dice
<code>7</code> tareas que tenía que hacer y las completaron
</p>

<p>
La segunda columna dice las tareas que cambiaron
</p>

<p>
La tercera <code>UNREACHEABLE</code>, que es este equipo, que no llegó, no es que
falló, ni siquiera llegó al equipo porque, no sé, estaba apagado, se
aflojó el cable de red, no sabemos, no importa ahora eso, pero esta
claro porqué no se actualizó.
</p>

<p>
Las tareas que fallaron, las tareas que se saltearon porque no era
necesarias hacerlas&#x2026;
</p>

<p>
Y si voy un poquito más arriba, ahí tengo cada una de las tareas que se
fueron realizando, por ej. en este equipo, este que termina en <code>MNC</code>, la
plantilla era actualizar, esperen a ver si me sale esto, esta plantilla
era actualizar la versión <code>1.6</code> y en el caso de este equipo en
particular, acá el mensaje es &laquo;ya está actualizado&raquo;, entonces, no hay
que actualizarlo!
</p>

<p>
Esta bien, dio <i>Verde</i>, <i>Verde</i> es como tienen que estar, como se diseño
que esté.
</p>
</div>
</section>
<section id="outline-container-org0b9e832" class="outline-2">
<h2 id="org0b9e832"><code>job_template</code></h2>
<div class="outline-text-2" id="text-org0b9e832">
<p>
Porque cuál es el principio de <i>Ansible</i>, uno no puede controlar el
estado de los equipos, uno lo que puede hacer es llevarlos a un estado
conocido, a un estado que uno quiera.
</p>

<p>
En todo caso si todo eso falla al intentar llevarlo, uno lo que puede
hacer es volver al estado anterior, y ese estado anterior puede ser
volviendo a una imagen original o ejecutando la versión anterior de la
plantilla que se definió para eso.
</p>

<p>
Ahora bien, para &#x2026;, tenemos un montón de plantillas o <code>job_templates</code>
que hacen un montón de cosas en diferente equipos, bueno, hay un montón
de tareas, bueno voy a salir de acá, entonces hay que hacer plantillas.
</p>

<p>
Cómo se hace una plantilla, estamos en <i>Desarrollo</i>, voy a plantillas,
digo <i>Nueva</i>, plantilla de trabajo, le ponemos nombre, una descripción,
va a ser una plantilla de ejecución, le decimos, che esto va a ejecutar
en este inventario, que va a ser el de las <i>Workstations</i>, le digo
Seleccionar, <i>OK</i>, le digo que proyecto&#x2026;
</p>

<p>
Entonces voy a elegir el proyecto, a ver voy a elegir uno que no haga
mucho daño, este, ahí elijo el <i>playbook</i> que tiene ese proyecto.
</p>

<p>
Le tengo que definir las credenciales con que se va a conectar <i>AWX</i> a
ese equipo o grupo de equipos.
</p>

<p>
Le puedo poner un límite, ahora le voy a poner un límite y además le
puedo decir que pregunte, <code>re-pregunte</code> el límite en momento de
ejecución.
</p>

<p>
El nivel de <i>log</i>, si quiero o permito en realidad que esta plantilla se
puede ejecutar al mismo tiempo más de una vez, le tengo que decir que,
habilito concurrentemente y acá abajo le podría poner variables
adicionales, que quiero que las tome en el momento de ejecución, que
esas variables adicionales lo que harían es, sobreescribir los valores
originales de las variables, no es recomendable, pero bueno a veces
falta hacerlo.
</p>

<p>
Luego digo Lanzamiento, para ejecutar, yo definí un límite, ahora me
pregunta, vamos a decirle la <code>145</code> , le dijo ejecutá, digo Lanzamiento,
ahí es la instancia de verificar &laquo;Está seguro lo que va a hacer&raquo;, yo le
digo todo que sí, y ahí va a disparar la ejecución, esta ejecución no la
esta disparando desde mi máquina, la esta disparando desde el servidor
de <i>AWX</i>, al servidor de destino.
</p>

<p>
Y lo que hace <i>AWX</i> es se conecta vía <i>SSH</i> a ese equipo, para poder
conectarse hay que definir las credenciales antes, y ejecuta las tareas
que tenga este <i>playbook</i>.
</p>

<p>
En este caso lo que va a hacer es instalar un <i>script</i> que lo que va a
hacer es <code>ping</code> a ciertas <i>IPs</i>, y va a guardar en el <i>log</i> ese
monitoreo para saber si no hay pérdida de paquetes por ej. en este caso,
lo define en el <code>cron</code>, lo reinicia, y lo deja operativo, o sea acá
terminó dice <i>correctamente</i> (<code>successfull</code>), vamos a mirar alguna
tarea, por ej. esta, que básicamente define una tarea en el <code>cron</code> y
esto es importante&#x2026;
</p>

<p>
Porque cuando uno tiene muchos equipos, si define una tarea en el <code>cron</code>
de un equipo, después se olvida que lo hizo y después por algún motivo
pasa algo en ese equipo y después de <code>3</code> días&#x2026; Ah cierto que en el
<code>cron</code>, habíamos puesto que se reinicie a las <code>2AM</code> y nadie se acuerda
de eso, bueno, es importante acá que lo podés hacer con un rol, podés
definir las tareas versionadas y eso se aplica en el <code>cron</code> en todas las
máquinas que hagan falta, porque a veces, te dicen al otro día, che hay
una que no anda a veces, el a veces, porqué el a veces, no sabemos, pero
bueno la apagaron y cambió algo.
</p>

<p>
Bueno acá queda registrado y es muy simple de definir.
</p>

<p>
Ahora para hacer toda esta cantidad de plantillas, era como mucho
trabajo, no?
</p>

<p>
Bueno a mi por lo menos no me gusta hacer clics, me gusta usar la
consola, y entonces dije bue! Esto se tiene que hacer de otra manera!
</p>

<p>
Entonces, ahí es donde viene nuestro amigo <i>GitLab</i> a ayudarnos con la
<code>CI</code>, vamos a buscar algo reciente, que sirva de ejemplo&#x2026;
</p>

<p>
Pregunta: podés ver qué plantillas se ejecutaron sobre cada equipo?
</p>

<p>
Respuesta: Si, podés ir del lado tengo plantillas y quiero ver en dónde
se ejecutaron o puedo ir al equipo y ver qué se le ejecutó.
</p>

<p>
Tenes las <code>2</code> visiones, pero cuando tenes muchos equipos, tenes a hacer
un inventario dinámico y entonces puede ser que a veces pierdas, o sea
esta la información pero esta como en <code>2</code> universos separados y eso es
difícil de relacionar.
</p>

<p>
Acá yo tengo un rol, que lo que hace es instalar unas utilidades de un
servidor que se llama <i>FreeIPA</i>
</p>
</div>
</section>
<section id="outline-container-org680ffcd" class="outline-2">
<h2 id="org680ffcd"><i>GitLab CI</i></h2>
<div class="outline-text-2" id="text-org680ffcd">
<p>
Y para instalar y configurar esto, nada mejor que usar el <i>pipeline</i> de
<i>GitLab</i> para saber si nuestro rol cada vez que le agregamos un cambio,
funciona y no esta rompiendo algo.
</p>

<p>
Para poder hacer eso, en <i>GitLab</i> podemos buscar acá un error, esto fue
hace <code>1</code> mes y fui yo el que metí la pata, acá me dice, bueno mirá, acá
el <i>GitLab</i> dice está roto directamente, cuando metí el <i>commit</i> ya hice
macana!
</p>

<p>
Vamos a buscar algo más acá&#x2026; Que tienen bastante en <i>Verde</i>, a ver
algo anterior que sirva de ejemplo, bueno vamos a mirar igual una
ejecución exitosa, es decir acá queda&#x2026;
</p>

<p>
El <i>GitLab</i> dispara la ejecución, en este caso, para chequear que el rol
que yo estoy publicando, de <i>Ansible</i> para que después lo lea <i>AWX</i>,
esté en condiciones de ejecutarse.
</p>

<p>
O sea que no tenga ningún error, hace un chequeo básico, pero también,
ahora lo voy a buscar, lo que hicimos es agarrar, que en lugar de ir a
<i>AWX</i> y disparar la ejecución o desde mi consola disparar la ejecución.
</p>

<p>
<i>GitLab</i> se ocupa de ir a <i>AWX</i> y disparar la ejecución y mostrarme la
salida, entonces de esa manera que tengo, que cada vez que meto un
cambio, <i>GitLab</i> dispara las ejecuciones por mí y yo no tengo que estar
mirando que es lo que hace, a lo sumo salió exitoso o salió fallida, me
va a llegar una notificación y si están fallidas y esta en un <i>branch</i>
yo no voy a poder hacer un <i>merge</i> de ese <i>branch</i> a algo productivo
porque esta con errores y no me deja porque es una configuración de
<i>GitLab</i> que se pone a propósito.
</p>

<p>
Y para automatizar un paso más esto, para que no solo lo haga <i>GitLab</i>,
proveer estas plantillas dentro de <i>AWX</i> en lugar de ir haciéndolo a
mano, lo que hicimos son unos <i>scripts</i> que lo que hacen es un
<i>deploy</i>&#x2026; Y vamos a buscar ahora&#x2026;, hicimos un repositorio que se
llama <code>awx</code>, que tiene esas plantillas en formato de <i>JSON</i>
</p>

<p>
Y los <i>scripts</i> que invocan a el cliente de <i>AWX</i> a su vez están
versionados en un repositorio en <i>GitLab</i>.
</p>

<p>
Vamos a mirar un <i>deploy</i> reciente y va hacer el <i>deploy</i>, en este caso
primero en un ambiente, primero lo hace en <i>Desarrollo</i> y si salió todo
bien lo hace en <i>Staging</i>, <i>Staging</i> es más parecido a <i>Producción</i>, acá
tenemos uno, otra vez fui yo&#x2026;
</p>

<p>
En realidad fue <i>GitLab</i>, bue, acá&#x2026; Y acá esta interesante este
<i>deploy</i>..
</p>
</div>
</section>
<section id="outline-container-org12ed3b0" class="outline-2">
<h2 id="org12ed3b0"><i>GitLab -&gt; AWX</i></h2>
<div class="outline-text-2" id="text-org12ed3b0">
<p>
Acá es: <i>GitLab</i>, tomó un repositorio que se llama <code>awx</code>, donde yo le
envié el código que quiero que se publique en <i>AWX</i> y lo que hace es,
revisa eso, se lo manda al <i>AWX</i> de <i>Desarrollo</i> que es el lugar donde
podemos romper, manda la plantilla y cuando manda la plantilla, yo le
puse&#x2026;
</p>

<p>
A ver si se ve un poquito más arriba&#x2026; Me falla el <i>scroll</i>&#x2026; A ver&#x2026;
</p>

<p>
No me deja ir más arriba, bueno&#x2026; Acá lo que me dice es&#x2026;
</p>

<p>
Algo que le pusimos al <i>deploy</i> es, che, fallá si no encontrás la
documentación de esta plantilla, porque si no nosotros, hacemos
plantillas y después cuando la quieren ejecutar dicen, qué hace esta
plantilla? Y ahí decís, te mando un <i>mail</i>.
</p>

<p>
Bueno, entonces, ya en el <i>Desarrollo</i>, si yo no estoy haciendo la
documentación de esta plantilla, ya esta fallando, esta diciendo, es un
recordatorio, mirá que tenés que acordarte de hacer la documentación, y
no me va a dejar pasar, hasta que yo haga la documentación&#x2026;
</p>

<p>
La documentación después puede decir&#x2026; Este título&#x2026; Je je y nada más!
</p>

<p>
Pero bueno, es un chequeo y es un chequeo básico, pero que funciona.
</p>

<p>
Ahora vamos a ver, en ese caso no funcionó, más adelante, el primer
<i>circulito</i> <i>Verde</i> es, <i>Desarrollo</i>, el segundo es <i>Staging</i>, vamos a
mirar que hizo el <i>deploy</i>&#x2026;
</p>

<p>
Y acá tenemos&#x2026; Este&#x2026; Vamos más arriba&#x2026; Más arriba&#x2026; Mucho&#x2026;
Ahí&#x2026; Bueno&#x2026;
</p>

<p>
Esta ejecución&#x2026; Cuando uno hace un <i>push</i> de código, es..
</p>

<p>
Se baja las <code>ansible_tools</code> para tener la última versión disponible, se
pasa al <i>branch</i> de <i>Desarrollo</i>, porque estamos constantemente en
<i>Desarrollo</i>, genera las credenciales para configurar el acceso para
<i>GitLab</i> pueda entrar a <i>AWX</i> <i>Desarrollo</i>, con el usuario de
<i>Desarrollo</i>, que le permite disparar ejecuciones
</p>

<p>
Queda ahí el registro entonces que&#x2026;
</p>

<p>
Y fíjense que queda ahí esta el <i>MASKED</i>, se ocultan las credenciales,
no queda ningún secreto en el <i>log</i> visible
</p>

<p>
Dice exactamente con qué versiones se configuró, que <i>branch</i> esta
queriendo correr, el <i>pull</i> que hizo para obtener la última versión, y
acá lo que esta deployando, en este caso eran unos <i>grupos</i>, entonces se
fija que este el <i>grupo</i>, que queremos&#x2026;
</p>

<p>
Y en este caso, esta haciendo una actualización de variables, este&#x2026;
</p>

<p>
Que esta cambiando unos textos, nada más, algo que podría cambiarlo algo
a mano
</p>

<p>
Lo que sucede es, que este cambio que había que hacerlo a mano, hay que
hacerlo en un montón de lugares, varias veces
</p>

<p>
No se, como&#x2026; Era&#x2026; eee&#x2026;
</p>

<p>
<code>9</code> cambios en <code>3</code> <i>inventarios</i> por <code>3</code> <i>grupos</i> cada <i>inventario</i>, es
muy fácil, aunque hagas copiar y pegar, que en alguno te quede distinto!
</p>

<p>
Entonces la solución es hacer código y que este código, sea testeado por
una herramienta automatizada, digamos que&#x2026;
</p>

<p>
No tiene corazón, va a fallar ante el mínimo error, no te va a dejar
pasar una!
</p>

<p>
Y en este caso que esta haciendo cambios de variables, de lo que vos
versionaste, con lo que esta en el servidor de <i>AWX</i>, te va a mostrar un
<code>diff</code> del cambio!
</p>

<p>
Entonces, si hay algo, que tenía que estar y está en <i>AWX</i> y esta bien
que esté en <i>AWX</i>, pero lo editaron a mano y nosotros no llegamos a
versionarlo como deberíamos, bueno al menos en el <i>log</i> esta, y vamos a
poder ver ese cambio de ser necesario.
</p>

<p>
En este caso son este&#x2026; eee&#x2026; Cambios menores, pero bueno&#x2026;
</p>

<p>
El ejercicio de hacerlo una y otra vez de manera automatizada, garantiza
la calidad del código que finalmente llega a producción.
</p>

<p>
Y para que esto llegue a producción, o sea, esto mismo lo hicimos en
<i>Desarrollo</i>, y si volvemos a la página anterior&#x2026;
</p>

<p>
Ese mismo <i>commit</i>, en el &laquo;circulito&raquo; que sigue acá, lo hace en <i>stage</i>
y <i>stage</i> es más parecido a <i>Producción</i>, porque nadie lo esta
operando&#x2026;
</p>

<p>
Este eee&#x2026; Y es casi como deployar en <i>Producción</i>!
</p>

<p>
Si me da bien en <i>Desarrollo</i>, también me tiene que dar bien en <i>Stage</i>
</p>

<p>
Y para que pase a <i>Producción</i>, esta ejecución, actualmente lo que
hacemos es&#x2026; Le echamos la culpa a <i>&laquo;les SysAdmines&raquo;</i>
</p>

<p>
Si tienen un problema es problema de <i>SysAdmins</i>!
</p>

<p>
Bueno&#x2026; Esto no fue <i>Desarrollo</i>, pero es la misma herramienta
automatizada, son los mismos pasos!
</p>

<p>
A veces sucede que nos encontramos que hay diferencias de entorno,
recuerden que es muy difícil, tenemos un entorno con <code>6300</code> equipos en
<i>Producción</i>, es muy difícil de reproducir y simular!
</p>

<p>
Entonces, bueno, pasamos varias instancias y a veces llegan errores,
normalmente, lo descubrimos eso y lo corregimos y lo volvimos a pasar
por la interfaz de <i>GitLab</i> hasta que dé <i>OK</i> y ahí recién lanzamos la
versión a producción.
</p>

<p>
Esto lo que yo veo como que, es una persona que trabaja por mí en
testear, que es algo que es bastante aburrido, digamos&#x2026;
</p>

<p>
Y si yo disparo la ejecución, ni siquiera disparo, ni siquiera entro al
<i>GitLab</i>, o sea yo estoy en mi línea de comandos, hago <code>git push</code> y me
voy a hacer un mate tranquilo, me voy, cuando estoy en la cocina,
<i>GitLab</i> me va a avisar, me va a mandar un mensajito <i>&laquo;no anda nada&raquo;,
fijate que hacés, volvé!</i>
</p>

<p>
Mientras vos disparas esa ejecución, no te tenés que quedar mirándola,
te podés poner a hacer otra cosa, otra tarea al mismo tiempo!
</p>

<p>
Y después más tarde vas, revisas y vez si pasó, en un equipo de
<i>Desarrollo</i> que somos varias personas, es decir, si alguien esta
teniendo un inconveniente con una tarea&#x2026;
</p>

<p>
Tener una reunión virtual para ver que estaba haciendo, que te cuente lo
que pasó, durante los últimos <code>3</code> días, para tratar de entender lo que
esta pasando, es una pérdida de tiempo!
</p>

<p>
Es mucho más simple ir, bueno a ver cuál fue el <i>Job</i> que ejecutaste, el
último, bueno, vas mirás ahí y tenés todo el contexto necesario para
saber que hizo, este&#x2026; Yo&#x2026;
</p>

<p>
Mi tarea y lo hago conmigo mismo, digamos no es que no tenga corazón,
es&#x2026;
</p>

<p>
Tengo mi <i>compu</i> llena de capturas donde digo <i>&laquo;ahhh, esto acá esta
mal!&raquo;</i>
</p>

<p>
Y lo hago todo el tiempo porque, llega un momento que hay tantos valores
que es muy difícil entender
</p>

<p>
Es muy difícil, ver dónde esta el error, es como todo el tiempo jugando
a las <code>7</code> diferencias!
</p>

<p>
Entonces <i>GitLab</i> te va avisar y te va a tirar, <i>&laquo;che acá hubo un
error&raquo;</i>, pero a veces hay que tratar de entender ese error, entonces
señalarlo!
</p>

<p>
A veces, el error es, vos mismo pusiste un valor, que no debería haber
ido, pero bueno, llegó, y eee&#x2026;
</p>

<p>
Para simplificar esto&#x2026; Salgo de acá&#x2026;
</p>

<p>
Tengo por algún lado&#x2026; A ver si lo encuentro por acá&#x2026; Creo que acá&#x2026;
Acá&#x2026;
</p>
</div>
</section>
<section id="outline-container-org6861bd3" class="outline-2">
<h2 id="org6861bd3"><i>Automatizar deploy de AWX con GitLab CI/CD y Ansible Tools</i> <sup><a id="fnr.gitlab2awx" class="footref" href="https://osiux.com/#fn.gitlab2awx" role="doc-backlink">20</a></sup></h2>
<div class="outline-text-2" id="text-org6861bd3">
<p>
Acá hay una simplificación de lo que estuve mostrando&#x2026;
</p>


<div id="orgc52a38c" class="figure">
<p><a href="https://osiux.com/img/ansible-devops-gitlab-awx-deploy-revision.png"><img src="https://osiux.com/tmb/ansible-devops-gitlab-awx-deploy-revision.png" alt="ansible-devops-gitlab-awx-deploy-revision.png"></a>
</p>
</div>

<p>
Tenemos a les <i>DevOps</i>, <i>GitLab</i> y <i>AWX</i>
</p>

<p>
Hacemos un <code>git push</code> de tu entorno local a <i>GitLab</i>
</p>

<p>
A partir de ahí todo lo que sucede, lo hace <i>GitLab</i>, <i>GitLab</i> habla con
<i>AWX</i>, y bueno, primero se fija que los <i>JSONs</i> estén bien, que no
tengan ningún error, genera la configuración de <i>AWX</i>, que este bien,
que pueda llegar, envía el <i>team</i>, envía el <i>project</i>, actualiza el
<i>project</i>, envía el <i>inventory<sub>source</sub></i>, envía el <i>inventory</i>, actualiza
el <i>inventory<sub>source</sub></i>, envía el <i>workflow</i> y si este&#x2026;
</p>

<p>
Otorga permisos, revoca permisos, y si todo eso salió bien, recién
volvés a trabajar vos digamos en eso, no es que no estás haciendo nada,
sino que estás trabajando en otra cosa!
</p>

<p>
Hay un montón de tareas que están automatizadas!
</p>

<p>
Vos no las tenés que hacer una por una, que es muy probable que te
olvides algún paso!
</p>

<p>
Es decir, que de esto se ocupa <i>GitLab</i> y <i>AWX</i>.
</p>
</div>
</section>
<section id="outline-container-orgd2bb819" class="outline-2">
<h2 id="orgd2bb819"><code>Ansible Tools</code> <sup><a id="fnr.ansible-tools" class="footref" href="https://osiux.com/#fn.ansible-tools" role="doc-backlink">21</a></sup></h2>
<div class="outline-text-2" id="text-orgd2bb819">
<p>
Ahora esto no es magia, son herramientas que construimos nosotros, que
nos equivocamos todo el tiempo, cada tanto hay que corregirlas e ir
mejorándolas.
</p>

<p>
Ese código, este&#x2026; Esta disponible, en <i>GitLab</i>, los que usan <i>Ansible</i>
lo pueden obtener!
</p>

<p>
Si esto se digna a funcionar&#x2026; Acá&#x2026; eee&#x2026; Para&#x2026; pa..pa..pa&#x2026;
Dónde, acá&#x2026;
</p>

<p>
<code>ansible_tools</code> esta en <i>GitLab</i>, en <i>GitHub</i>, en mis <i>repos</i> personales,
en los <i>repos</i> de <i>gcoop</i>, en <i>Codeberg</i> y no sé dónde más&#x2026;
</p>

<ul class="org-ul">
<li><a href="https://github.com/gcoop-libre/ansible_tools">https://github.com/gcoop-libre/ansible_tools</a></li>
<li><a href="https://github.com/osiris/ansible_tools">https://github.com/osiris/ansible_tools</a></li>
<li><a href="https://gitlab.com/gcoop-libre/ansible_tools">https://gitlab.com/gcoop-libre/ansible_tools</a></li>
<li><a href="https://gitlab.com/osiux/ansible_tools">https://gitlab.com/osiux/ansible_tools</a></li>
<li><a href="https://codeberg.org/osiux/ansible_tools">https://codeberg.org/osiux/ansible_tools</a></li>
</ul>

<p>
O sea, está en todos lados, está público todo, y son un montón de
<i>scripts</i> que hacen las cosas por uno!
</p>

<p>
De hecho cuando tenemos que hacer las diferencias, las configuraciones,
un montón más de, llamemos burocracia&#x2026;
</p>

<p>
Hay documentación automatizada que se autogenera y la hacen los
<i>scripts</i> para no cometer errores!
</p>

<p>
Por ejemplo, yo estoy&#x2026; eee&#x2026; Este por ejemplo, este bonito <code>README</code> y
bueno, que tengo esta versión, se hizo tal día, en este archivo, esto lo
hace un <i>script</i> que esta dentro de las <code>ansible_tools</code>.
</p>

<p>
No hay que estar haciéndolo a mano, si quiero ver, qué incluyó una
versión, y qué es lo que tenía&#x2026; Si vamos a esta por ejemplo&#x2026;
</p>

<p>
Entonces, esta documentación también se generó, dice el <i>commit</i>, quién
lo hizo, cuándo, qué es lo que trae, qué es lo que cambia, qué permisos
otorga, también se hizo, todo de manera automatizada&#x2026;
</p>

<p>
La idea es, que todo lo que se tenga que hacer más de una vez, lo
automatizemos, no suframos, esteee&#x2026;
</p>

<p>
Y lo interesante por ahí es comentar es, que para&#x2026;
</p>

<p>
La única manera que creemos posible de llevar adelante este tipo de
proyectos, con esta escala, es automatizando, la única manera digamos, o
perdemos menos tiempo, digamos&#x2026;
</p>

<p>
Después como todo, no es magia, estamos todos los días peleando con algo
nuevo, <i>&laquo;huy porqué falló esto acá si antes no falló&raquo;</i>, bueno es ir
corrigiendo y mejorando la herramienta.
</p>

<p>
Pero hay un montón de tiempos que ya no le dedicás más, sobre todo lo
mejor es que vos mismo que lo hiciste, al otro día lo podés revisar en
el <i>log</i> y no sé qué estaba haciendo acá&#x2026;
</p>
</div>
</section>
<section id="outline-container-orgc4f3f9c" class="outline-2">
<h2 id="orgc4f3f9c">&laquo;Cuántas son las veces que falla?&raquo;</h2>
<div class="outline-text-2" id="text-orgc4f3f9c">
<p>
“Son más veces las que falla, seguro, hasta que sale, pero
tenés alguien que revisa por vos, cada punto!
</p>

<p>
Es decir, por ejemplo, esto, revisa que este la documentación, revisa
que el nombre del <i>branch</i> coincida con el nombre de la plantilla y la
plantilla apunte a ese <i>branch</i>, que es una pavada, pero que cuando
estas escribiéndolo a mano, ponés un punto, una coma, algo ponés mal
siempre, das vuelta los números, yo doy vuelta los números siempre.
</p>

<p>
Y después tenés los errores de producción, que son más graves, tenés una
tasa muy alta de errores en <i>Desarrollo</i>, pero una vez que liberás esto,
si se hizo de la manera reproducible y repetible y te quedó el <i>log</i>.
</p>

<p>
Pasó todos los controles en <i>Desarrollo</i>, pasó todos los controles en
<i>staging</i>, a producción es raro que falle, puede ser, pero son menos!
</p>

<p>
Y en mi caso&#x2026; Tengo el placer acá que tengo varios <i>SysAdmines</i> que
están del otro lado y que yo les digo /&laquo;por favor deployen esto!&raquo;, y yo
les digo, /”deployen la versión tal”_, la <code>34.5</code>, no sé
</p>

<p>
Y estas personas se ocupan de hacer eso y me dicen <i>&laquo;ya está&raquo;</i>!
</p>

<p>
En el medio hay un <i>log</i> que quedó registrado, que siempre hay que
revisarlo, porque puede ser que algún error se escape, pero como que se
simplifica la tarea, siempre el mismo proceso, de la misma manera.
</p>

<p>
Y lo mejor es que con una herramienta libre que la podemos modificar y
esta disponible para ustedes si quieren colaborar lo puedan hacer o se
puedan inspirar en todo lo que no hay que hacer&#x2026;!
</p>

<p>
Bueno, eso creo que esto, no quiero marear más, si tienen algunas
preguntas, yo estoy acá!
</p>
</div>
</section>
<section id="outline-container-orgbc8d140" class="outline-2">
<h2 id="orgbc8d140">&#x2026;en algún momento tenés un punto cero de la máquina&#x2026;?</h2>
<div class="outline-text-2" id="text-orgbc8d140">
<p>
Si, en el caso de los servidores&#x2026;
</p>

<p>
Quiero ver si lo tengo acá, me parece que no&#x2026;
</p>

<p>
La <i>iDRAC</i> de los servidores, crea el <code>RAID</code> y configura la <i>BIOS</i> para
que el próximo reinicio sea por <i>PXE</i> en esta interfaz de red y después
le dice &laquo;reiniciate&raquo;, cuando se reinicia ese servidor, se reinicia en
modo <i>PXE</i> y hay una virtual que tenemos que es un servidor <i>PXE</i> que
dice, &laquo;bueno, si aparece un servidor que <i>matchea</i> y dice <code>DELL</code> yo le
mando un <i>Debian</i>&raquo;, así!
</p>

<p>
Y es un <i>Debian</i> que lo que hicimos es un <code>preseed</code> que no tiene
interacción humana, osea que es un <code>preseed</code> que automatiza y rompe todo
digamos, reinstala, y busca, de hecho ahora tenemos un inconveniente,
cambiaron el modelo de servidor y lo que antes era <code>sda</code> ahora es <code>sdb</code>
y tuvimos que meter&#x2026;
</p>

<p>
Claro, cambió algo ahí y bueno tuvimos que meter mano en ese <code>preseed</code>,
pero bueno, ya lo solucionamos y entonces se reinstala el <i>Debian</i> desde
cero, o sea, si ya tenía, <i>lola</i>, o sea, como agarra la primer
partición, instala todo de cero, un <i>Debian</i> pelado, una vez que termina
ese <i>Debian</i> pelado, te queda&#x2026;
</p>

<p>
Cuando se instala ese <code>preseed</code> se dispara la ejecución y se da de alta
ese servidor en <i>AWX</i> y le dice yo soy tal <i>IP</i> y tengo tal <code>MAC</code> y
estoy disponible para deployar!
</p>

<p>
Después hay un operador que dispara otra ejecución o se se podría
automatizar por tiempo, bueno lo esperamos x tiempo y ahí la lanzamos,
pero generalmente como son servidores, son equipos caros, hay una
intervención, bueno mirar a ver que pasó?
</p>

<p>
Si salió todo bien dispara la ejecución del <i>workflow</i>, y ese
<i>workflow</i>, instala el <i>Proxmox</i>, se baja unas plantillas de unos
<i>Backups</i> de <i>VMs</i>, usamos <i>KVM</i>.
</p>

<p>
Instala un <i>Debian</i> Base de <i>KVM</i> que es el <i>Debian Cloud image</i>, que es
bastante standard, el mismo que usan <i>Amazon</i> u <i>OpenStack</i>
</p>

<p>
Y ahí se le dispara la ejecución de un tercer <i>workflow</i> que instala y
configura los servicios de cada virtual, son <code>10</code> virtuales, cuando
termina todo eso, hay un intervención manual porque, ahí nosotros no
tenemos acceso, hay una de esas virtuales que es la <code>VPN</code>, entonces ahí
hay una configuración manual de la <code>VPN</code>, por una cuestión de
credenciales y también por una cuestión de conectividad que en remoto es
difícil de emular.
</p>

<p>
Y una vez que eso esta y dijeron el servidor está, disparan la ejecución
del último <i>workflow</i> que se llama de cierre, y lo que hace es dejar el
equipo en condiciones para que cuando se inicie la próxima vez, esté en
el lugar remoto, o sea, en Salta, por ejemplo.
</p>

<p>
Y entonces, toda la operatoria, de sacar un servidor nuevo, de una caja,
enchufarle dos cables de red, un cable <i>power</i>, en una hora de tirar
cuatro clics, digamos, de ejecuciones, anda!
</p>

<p>
Hay algunas confinaciones por ahí que hay que hacer, listo tenés un
servidor ya vuelto para poner en la caja y mandarlo por el flete!
</p>

<p>
Así ese proceso, se hicieron <code>300</code> veces, entonces se llegaron a hacer
<code>3</code> servidores al mismo tiempo en paralelo, digamos&#x2026;
</p>

<p>
Esto además la migración la hicimos en medio de la cuarentena, así que
tenía otras complicaciones!
</p>

<p>
Y bueno, llevó&#x2026; La migración en sí, llevó <code>1</code> año!
</p>

<p>
&#x2026;eee, esperen que tengo por acá, no se dónde&#x2026; Acá&#x2026;
</p>

<p>
Acá hay un poco los datos técnicos, de lo que son los equipos&#x2026;
</p>

<p>
Aparecieron <code>3580</code> periféricos, pensábamos solo que eran monitores y
computadoras y no, aparenten impresoras, <i>scanners</i> de cheques,
impresoras de <i>tickets</i>, como todas las complejidades y además cada uno
de esos equipos tiene que hablar con un montón de otros equipos que ya
están digamos&#x2026;
</p>

<p>
Actualmente para que tengan una idea, es como&#x2026;
</p>

<p>
El proceso de por ejemplo de cheques, hay un <i>scanner</i> de cheques, que
los <i>scannea</i> y lo manda de la <i>Workstation</i> a un <i>VM</i> que se ocupa de
procesar esos archivos y mandarlos a <i>CasaCentral</i> para que en
<i>CasaCentral</i> lo puedan verificar con otros procesos, pero automatizados
también, y todo eso para que tu cheque se pre-acredite!
</p>

<p>
Si esa <i>VM</i> de golpe, tipo cae, lo que tienen que hacer es agarrar y
mandar los cheques en una camioneta y hasta que no lleguen a
<i>CasaCentral</i>, vos no cobras!
</p>

<p>
O sea, entonces, es crítico que todo este funcionando y además esto se
envía a un servidor en <i>CasaCentral</i>, <code>300</code> <i>Filiales</i> lo envían a <code>1</code>
servidor en <i>CasaCentral</i> que revise esos archivos y que después
coincidan, no, los números!
</p>

<p>
Por esto mismo, digamos, por esta infraestructura, pasan los cajeros,
digamos&#x2026;
</p>

<p>
Y hay algunos cajeros que no tienen, son cajeros viejos, que no tienen
vínculo directo, entonces el tesorero o alguien responsable dentro de la
<i>Filial</i>, va con un <i>pendrive</i> al cajero, hace unas operaciones dentro
del cajero y ese <i>pendrive</i> lo lleva a un puesto, que el usuario en ese
momento tiene el rol de Tesorero y tiene permiso, le dispara un proceso
que procesa esos archivos para que después se envíen a <i>CasaCentral</i>
</p>

<p>
Una manera <i>Offline</i>, pero porque esos cajeros son muy viejos y bueno
quedaron y hasta que pongan uno nuevo o lugares muy remotos que no hay
mucha conectividad también eso sucede, digamos, pensa que en todo el
país, hay más angosto de banda que ancho de banda, igual toda la
infraestructura tiene redundancia, de mínimo <code>2</code> enlaces siempre.
</p>

<p>
Bueno <code>g.coop.ar</code> nuestro sitio web y bueno acá estan algunos de los
repos que estan libres, no liberamos todo porque no llegamos a tiempo,
pero hay más de <code>200</code> repos!
</p>

<p>
Primero tenés que instalarte <i>Ansible</i>, es otro curso!
</p>

<p>
Son equipos completos, estan basados en <i>Debian</i>, medio lo que estan
haciendo acá, nosotros en muchos equipos lo que hicimos es, construimos
el modelo un equipo con <i>Ansible</i> y una vez que se hicieron un montón de
pruebas y se dijo ya está bien!
</p>

<p>
Se hizo una imagen, una <code>ISO</code> del equipo, y se le mandó al proveedor de
los equipos, y se le dijo &laquo;bueno, copialo vos de alguna manera en <code>3000</code>
equipos!&raquo;
</p>

<p>
Entonces ya tienen una imagen base, cuando llegan a la <i>Filial</i>, las
diferencias de versión o algunas cuestiones que son propias de esa
instancia se hacen remotamente y cada tanto se genera una actualización,
que es una plantilla que se ocupa de actualizar de la <code>v1.4</code> a la
<code>v1.5</code>, pero que eso puede tardar mucho tiempo a veces, por esto que
decíamos del ancho de banda y porque son muchas tareas en un equipo.
</p>

<p>
Entonces a veces lo que se hace es, si el salto es muy grande, de
cambios que hubo, se hace una nueva imagen base y se manda la imagen
base y van con un equipo nuevo directamente y reemplazan uno por otro.
</p>

<p>
Estamos? <code>2</code> preguntas más? Si alguien se anima?
</p>

<p>
Que este chequeando todo el tiempo si hubo un cambio y si hubo un cambio
haga un <i>Update</i>, entonces siempre lo tenes actualizado y lo podemos
poner a la noche&#x2026;.
</p>

<p>
Soy yo, te ganaste una careta! Otra pregunta?
</p>

<p>
Alguien tiene otra pregunta?
</p>
</div>
</section>
<section id="outline-container-org033e455" class="outline-2">
<h2 id="org033e455">Seguro te interesará leer&#x2026;</h2>
<div class="outline-text-2" id="text-org033e455">
<ul class="org-ul">
<li><a href="https://osiux.com/2022-10-20-como-migrar-6300-equipos-a-gnu-linux-usando-ansible-y-awx.html">Cómo migrar 6300 equipos a GNU/Linux usando Ansible y AWX</a></li>
<li><a href="https://osiux.com/2021-12-30-automated-bios-configuration-using-ansible-and-hp-linux-tools.html">Automatizar la configuración de la <i>BIOS</i> usando <code>ansible</code> y <i>HP Linux Tools</i></a></li>
<li><a href="https://osiux.com/2022-04-23-filiales-gnu-linux-flisol-caba.html"><code>Filiales GNU/Linux</code> FLISoL CABA</a></li>
<li><a href="https://osiux.com/2022-10-03-ansible-tools-v0-3-0.html"><i>Ansible Tools</i> <code>v0.3.0</code></a></li>
<li><a href="https://osiux.com/2022-10-08-automate-deployment-of-AWX-resources-with-GitLab-CI-CD-and-ansible-tools.html">Automatizar la implementación de los recursos de AWX con GitLab CI/CD y Ansible Tools</a></li>
<li><a href="https://osiux.com/2022-10-21-use-graphviz-for-slides.html">Usar Graphviz para generar Slides</a></li>
<li><a href="https://osiux.com/2022-10-25-how-to-make-a-timeline-with-graphviz-using-timeline2dot.html">Cómo hacer una línea de tiempo con GraphViz</a></li>
</ul>
</div>
</section>
<section id="outline-container-org449de74" class="outline-2">
<h2 id="org449de74">ChangeLog</h2>
<div class="outline-text-2" id="text-org449de74">
<ul class="org-ul">
<li><a href="https://gitlab.com/osiux/osiux.gitlab.io/-/commit/b77747960db686ec8661bbcee3a0071cd28ce638"><code>2024-02-27 09:02</code></a> corregir tamaño video <i>Charla &laquo;Automatizar para Innovar&raquo; en FLISoL CABA 2023</i></li>
<li><a href="https://gitlab.com/osiux/osiux.gitlab.io/-/commit/eeeede85b963505b4f2ba6be7f31f886b744ac7e"><code>2023-12-19 15:45</code></a> actualizar KEYWORDS, agregar poster link de descarga de video y agregar link a charla nerdearla en <i>Charla &laquo;Automatizar para Innovar&raquo; en FLISoL CABA 2023</i></li>
<li><a href="https://gitlab.com/osiux/osiux.gitlab.io/-/commit/0ddece1d0403fc37c58863046739c5f68fff643b"><code>2023-12-19 14:05</code></a> agregar <i>Charla &laquo;Automatizar para Innovar&raquo; en FLISoL CABA 2023</i></li>
</ul>
</div>
</section>
<div id="footnotes">
<h2 class="footnotes">Notas al pie de p&aacute;gina: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.gcoop" class="footnum" href="https://osiux.com/#fnr.gcoop" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://gcoop.coop/">https://gcoop.coop/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.osiux" class="footnum" href="https://osiux.com/#fnr.osiux" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://osiux.com/osiux.html">https://osiux.com/osiux.html</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.debian12" class="footnum" href="https://osiux.com/#fnr.debian12" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://osiux.com/2023-06-10-install-debian-bookworm-on-thinkpad-t14-gen-1.html">2023-06-10-install-debian-bookworm-on-thinkpad-t14-gen-1.html</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.ansible" class="footnum" href="https://osiux.com/#fnr.ansible" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.ansible.com/">https://www.ansible.com/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.bccl" class="footnum" href="https://osiux.com/#fnr.bccl" role="doc-backlink">5</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.bancocredicoop.coop/">https://www.bancocredicoop.coop/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.flisol" class="footnum" href="https://osiux.com/#fnr.flisol" role="doc-backlink">6</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://flisol.info/">https://flisol.info/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.awx" class="footnum" href="https://osiux.com/#fnr.awx" role="doc-backlink">7</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://github.com/ansible/awx/">https://github.com/ansible/awx/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.iac" class="footnum" href="https://osiux.com/#fnr.iac" role="doc-backlink">8</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://es.wikipedia.org/wiki/Infraestructura_como_c%C3%B3digo">https://es.wikipedia.org/wiki/Infraestructura_como_c%C3%B3digo</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.nerdearla" class="footnum" href="https://osiux.com/#fnr.nerdearla" role="doc-backlink">9</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://nerdear.la/">https://nerdear.la/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.active-directory" class="footnum" href="https://osiux.com/#fnr.active-directory" role="doc-backlink">10</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://en.wikipedia.org/wiki/Active_Directory">https://en.wikipedia.org/wiki/Active_Directory</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.freeipa" class="footnum" href="https://osiux.com/#fnr.freeipa" role="doc-backlink">11</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.freeipa.org/">https://www.freeipa.org/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.iDRAC" class="footnum" href="https://osiux.com/#fnr.iDRAC" role="doc-backlink">12</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.dell.com/en-us/lp/dt/open-manage-idrac">https://www.dell.com/en-us/lp/dt/open-manage-idrac</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.pxe" class="footnum" href="https://osiux.com/#fnr.pxe" role="doc-backlink">13</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://en.wikipedia.org/wiki/Preboot_Execution_Environment">https://en.wikipedia.org/wiki/Preboot_Execution_Environment</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.proxmox" class="footnum" href="https://osiux.com/#fnr.proxmox" role="doc-backlink">14</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://proxmox.com/en/proxmox-virtual-environment/overview">https://proxmox.com/en/proxmox-virtual-environment/overview</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.devops" class="footnum" href="https://osiux.com/#fnr.devops" role="doc-backlink">15</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://en.wikipedia.org/wiki/DevOps">https://en.wikipedia.org/wiki/DevOps</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.devsecops" class="footnum" href="https://osiux.com/#fnr.devsecops" role="doc-backlink">16</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.devsecops.org/">https://www.devsecops.org/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.awx-cli" class="footnum" href="https://osiux.com/#fnr.awx-cli" role="doc-backlink">17</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://github.com/ansible/tower-cli">https://github.com/ansible/tower-cli</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.awx-adhoc-shell" class="footnum" href="https://osiux.com/#fnr.awx-adhoc-shell" role="doc-backlink">18</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://gitlab.com/osiux/ansible_tools/-/raw/develop/awx-adhoc-shell">https://gitlab.com/osiux/ansible_tools/-/raw/develop/awx-adhoc-shell</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.autofs" class="footnum" href="https://osiux.com/#fnr.autofs" role="doc-backlink">19</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://greenfly.org/tips/autofs.html">https://greenfly.org/tips/autofs.html</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.gitlab2awx" class="footnum" href="https://osiux.com/#fnr.gitlab2awx" role="doc-backlink">20</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://osiux.com/2022-10-08-automate-deployment-of-AWX-resources-with-GitLab-CI-CD-and-ansible-tools.html">2022-10-08-automate-deployment-of-AWX-resources-with-GitLab-CI-CD-and-ansible-tools.html</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.ansible-tools" class="footnum" href="https://osiux.com/#fnr.ansible-tools" role="doc-backlink">21</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://gitlab.com/osiux/ansible_tools/">https://gitlab.com/osiux/ansible_tools/</a>
</p></div></div>


</div>
</div></main>
<footer id="postamble" class="status">
<p class="date">Fecha: 2023-04-22</p>
<p class="author">Autor: Osiris Alejandro Gomez</p>
<p class="date">Created: 2026-08-13</p>
</footer>]]></content:encoded>
    <dc:creator xml:lang="es">Osiris Alejandro Gomez</dc:creator>
    <pubDate>Sat, 22 Apr 2023 00:00:00 +0000</pubDate>
    <category>Technology</category>
    <comments>https://osiux.com/2023-04-22-flisol-caba-automatizar-para-innovar.html</comments>
    <source url="https://osiux.com">osiux.com/blog</source>
    <dc:language>es-ar</dc:language>
    <enclosure url="https://osiux.com/img/flisol-2023-caba/2023-04-22-flisol-2023-caba-osiux-automatizar-para-innovar.png" type="image/png" length="0" />
    <media:content url="https://osiux.com/img/flisol-2023-caba/2023-04-22-flisol-2023-caba-osiux-automatizar-para-innovar.png" medium="image" isDefault="true" />
    <media:thumbnail url="https://osiux.com/img/flisol-2023-caba/2023-04-22-flisol-2023-caba-osiux-automatizar-para-innovar.png" />
  </item>
  <item>
    <title>How to migrate 6300 hosts to GNULinux using Ansible and AWX</title>
    <link>https://osiux.com/2022-10-20-howto-migrate-6300-hosts-to-gnu-linux-using-ansible-and-awx.html</link>
    <guid isPermaLink="true">https://osiux.com/2022-10-20-howto-migrate-6300-hosts-to-gnu-linux-using-ansible-and-awx.html</guid>
    <description>Transcript of the talk "How to migrate 6300 computers to GNULinux using Ansible and AWX" at Nerdearla 2022</description>
    <content:encoded><![CDATA[
<main id="content" class="content">
<h1 class="title">How to migrate 6300 hosts to GNU/Linux using Ansible and AWX</h1>
<p>
<a href="https://osiux.com/index.html">index</a> |
<a href="https://osiux.com/about.html">about</a> |
<a href="https://osiux.com/archive.html">archive</a> |
<a href="https://osiux.com/charlas.html">charlas</a> |
<a href="https://osiux.com/docs.html">docs</a> |
<a href="https://osiux.com/links.html">links</a>
</p>

<p>
<a href="https://osiux.com/dot.html"><code>dot</code></a> |
<a href="https://osiux.com/git.html"><code>git</code></a> |
<a href="https://osiux.com/img.html"><code>img</code></a> |
<a href="https://osiux.com/plt.html"><code>plt</code></a> |
<a href="https://osiux.com/tty.html"><code>tty</code></a> |
<a href="https://osiux.com/uml.html"><code>uml</code></a>
</p>


<p>
This <i>post</i> is a translation of the transcript of the talk
<a href="https://osiux.com/2022-10-20-como-migrar-6300-equipos-a-gnu-linux-usando-ansible-y-awx.org">&ldquo;Cómo migrar 6300 equipos a GNU/Linux usando Ansible y AWX&rdquo;</a>
</p>
<section id="outline-container-org36dc6e7" class="outline-2">
<h2 id="org36dc6e7"><i>nerdearla</i></h2>
<div class="outline-text-2" id="text-org36dc6e7">
<p>
Taking advantage of the face-to-face return of <code>nerdearla</code> <sup><a id="fnr.nerdearla" class="footref" href="https://osiux.com/#fn.nerdearla" role="doc-backlink">1</a></sup>
edition 2022 at <i>Konex</i> <sup><a id="fnr.konex" class="footref" href="https://osiux.com/#fn.konex" role="doc-backlink">2</a></sup>, I presented talk <code>"How to migrate 6300
hosts to GNU/Linux using Ansible and AWX"</code> <sup><a id="fnr.fgnulyt" class="footref" href="https://osiux.com/#fn.fgnulyt" role="doc-backlink">3</a></sup>
</p>
</div>
</section>
<section id="outline-container-org0c1a788" class="outline-2">
<h2 id="org0c1a788">4 years in a pomodoro?</h2>
<div class="outline-text-2" id="text-org0c1a788">
<p>
Summarizing <i>4 years</i> of work in <i>25 minutes</i> is not an easy task, but due
to the large number of simultaneous talks there was no other way to
summarize, so I divided the talk into 7 stages, coinciding with the 7
colors of cooperativism 🌈
</p>

<p>
To detail and extend the talk a little more, I unrecorded the audio and
I will be adding references to each topic and/or technology mentioned,
for those who want to go a little deeper.
</p>

<p>
Instead of making <i>Slides</i> I created a website <sup><a id="fnr.fgnulweb" class="footref" href="https://osiux.com/#fn.fgnulweb" role="doc-backlink">4</a></sup> with the
help of <i>Hugo Ruscitti</i> <sup><a id="fnr.hugoruscitti" class="footref" href="https://osiux.com/#fn.hugoruscitti" role="doc-backlink">5</a></sup> who built the <code>multiple video
viewer</code> <sup><a id="fnr.visorvideos" class="footref" href="https://osiux.com/#fn.visorvideos" role="doc-backlink">6</a></sup>, which I used to display several videos at
the same time.
</p>

<p>
Since several people asked about the tool I used to make the graphs, I
put together a <i>post</i> <sup><a id="fnr.graphviz-slides" class="footref" href="https://osiux.com/#fn.graphviz-slides" role="doc-backlink">7</a></sup> detailing how I generated the
graphs and <code>the timeline</code> <sup><a id="fnr.timeline2dot" class="footref" href="https://osiux.com/#fn.timeline2dot" role="doc-backlink">8</a></sup> using <i>GraphViz</i>
</p>
</div>
</section>
<section id="outline-container-org8ab11b3" class="outline-2">
<h2 id="org8ab11b3">Opening of Guido Vilariño</h2>
<div class="outline-text-2" id="text-org8ab11b3">
<p>
Well, welcome back to the <i>Infra track</i> on <i>Nerdearla</i>!
</p>

<p>
All good? How are they doing? Hey there goes that audience still!
</p>

<p>
Well very well, thank you very much for being here!
</p>

<p>
I have already said several times, I will say it again the ninth edition
of <i>Nerdearla</i> 2022, the 10 years of <i>SysArmy</i> <sup><a id="fnr.sysarmy" class="footref" href="https://osiux.com/#fn.sysarmy" role="doc-backlink">9</a></sup> and here we
are, here Trac Infra, we have a Trac Dev Online and a Trac Sec Online
and the DataScience Trac there in the other auditorium, here in the
Konex Cultural City from October 19 to 22, nothing come, you still have
time to come, this afternoon, Friday and Saturday if you are watching us
online but if you are here, you are already enjoying all the activities
that we have in the stands, in the auditoriums, in places to do
coworking, games, etc. there is everything thanks! Thank you for being
here and joining us!
</p>
</div>
</section>
<section id="outline-container-orgaa32312" class="outline-2">
<h2 id="orgaa32312">Presentation</h2>
<div class="outline-text-2" id="text-orgaa32312">
<p>
And now the last round of talks is coming, it&rsquo;s not the last talk, the
last round, there are several talks ahead of us.
</p>

<p>
Well, now we are going to talk about something that I really like, which
is <i>Free Software</i>. Who likes <i>Free Software</i> here?
</p>

<p>
Let&rsquo;s go still! Look, you have <i>FANs</i> ! Jewel
</p>

<p>
Well then, we are going to welcome <i>OSiRiS GóMeZ</i>, which is a partner of
<code>gcoop</code> <sup><a id="fnr.gcoop" class="footref" href="https://osiux.com/#fn.gcoop" role="doc-backlink">10</a></sup>, which is a <i>Free Software Cooperative</i> &#x2026;
</p>

<p>
<code>Heroes without capes, as we usually say...</code>
</p>

<p>
He is a GNU/Linux programmer and Administrator (you saw that I said GNU
and not G-N-U, but Richard Stallman <sup><a id="fnr.rms" class="footref" href="https://osiux.com/#fn.rms" role="doc-backlink">11</a></sup> gets angry) he is
self-taught and a fan of automating everything from a terminal (from tty
actually says here) and is very interested in disseminating the use of
the <i>Free Software</i>, so&#x2026;
</p>

<p>
I leave you with <i>OSiRiS</i> a round of applause please!
</p>
</div>
</section>
<section id="outline-container-orga23d792" class="outline-2">
<h2 id="orga23d792">Intro</h2>
<div class="outline-text-2" id="text-orga23d792">
<p>
Wow, I&rsquo;m so tall! Can you hear it? Yes? Perfect!
</p>

<p>
(well, it seems to me that it sounds better there)
</p>

<p>
First I apologize if I cough out there because I have a bad throat.
</p>

<p>
And what I&rsquo;m going to try to do in <i>25 minutes</i>, if I can do it, is tell
you the story of <i>gcoop</i> and <code>Banco Credicoop</code> <sup><a id="fnr.bccl" class="footref" href="https://osiux.com/#fn.bccl" role="doc-backlink">12</a></sup> in the last <i>4
years</i>.
</p>

<p>
Basically it is a <code>migration project of the entire Infrastructure of the
Subsidiaries</code>, there are many, throughout the country and well, it was
quite a challenge, we did it!
</p>

<p>
But we are going to see it step by step a little as we were living it.
</p>
</div>
</section>
<section id="outline-container-org468ec20" class="outline-2">
<h2 id="org468ec20"><a href="http://filiales-gnu-linux.g.coop.ar/lab.html"><code>lab</code> <i>laboratory</i></a></h2>
<div class="outline-text-2" id="text-org468ec20">

<div id="orgac2569e" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/lab-10.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/lab-10.png" alt="lab-10.png"></a>
</p>
</div>

<p>
Initially we had a laboratory stage, in this laboratory stage we had to
analyze if it was possible to do this migration project and with what
free tools was it possible to do it?
</p>


<p>
Basically what we detected is that first we were going to use <i>Ansible</i>
because we had already been using it in <i>gcoop</i> and we were very happy
with the use of <i>Ansible</i>, eh, basically it was to make <i>roles</i> and
<i>playbooks</i>, this code that we wrote was going to be in a <i>GitLab</i>
repository and this <i>GitLab</i> repository was going to be obtained as
<i>Infrastructure as Code</i> from the <i>AWX</i> tool to make the deployment or
the deploy in all the necessary computers and something&#x2026;
</p>

<p>
(let&rsquo;s see if this works for me&#x2026;, yes, no, there)
</p>

<p>
The little bar below (let&rsquo;s try to make it stand still for a minute) is
a <i>timeline</i> of all the projects that we ended up using eventually at
some point in the project, I&rsquo;m talking almost 4 years and the
interesting thing is that the first The day we started this, which was
in 2018, we had no idea that we were going to be using that bar, that is
to say, that there are a lot of projects from different <i>Free Software</i>
development communities around the world that were doing projects that
later we We were going to end up using them and this is the important
thing about <i>Free Software</i>, that is, we empower each and every one of
us, this&#x2026; Building and finally giving back something else!
</p>

<p>
Having <i>Ansible</i> and having <i>AWX</i> with <i>GitLab</i> we could already start
to do a massive deployment, but the first obstacle we found was that we
had to replace a workstation, the workstation that the <i>Bank</i> had at
that time was an <i>Operating System</i> that had 2000 on his behalf and it
was 2018 so he was a couple of years out of date!
</p>

<p>
(can&rsquo;t hear? ah well that&rsquo;s ok sorry, I thought you couldn&rsquo;t hear)
</p>

<p>
And one requirement we had was that these workstations needed to connect
to users that were in an <i>AD</i> (<i>Active Directory</i>), so that <i>AD</i> was in
Headquarters and the <i>workstations</i> were scattered&#x2026;
</p>

<p>
(can you hear? There?)
</p>

<p>
&#x2026; In different cities, throughout the country&#x2026;
</p>

<p>
(I don&rsquo;t know if I&rsquo;m coming, is it very loud? Is it okay? Well, yes&#x2026;yes, no&#x2026;no, yes&#x2026;yes, no&#x2026;no)
</p>

<p>
Well finally we were like this, we had a <i>workstation</i> based on
<i>Debian</i>, it was clear that we were going to use that and we had the
<i>AD</i>, so we had to find something that, a piece that joins this in the
middle and this is called <i>IPA</i>, it is a free development that can be
used to integrate.
</p>

<p>
(Me? I grab&#x2026; Sorry&#x2026; I have 2 hands, I hadn&rsquo;t realized!)
</p>

<p>
Well&#x2026; So we managed to get users to talk to the <i>AD</i>, this, through
<i>IPA</i> and finally the other leg that we needed was the server part, in
each branch of the <i>Bank</i> there was a server, instead of ending with a
2000, it ended with a 4 (the Software) and also in 2018 imagine!
</p>

<p>
And via a <i>VPN</i> we were going to get to the <i>server</i>, the server was
going to be based on <i>Debian</i>, a distribution called <i>Proxmox</i>, it was
going to virtualize and it was going to have a lot of <i>virtual machines</i>
with <i>Debian</i> again to complete the scheme that was the <i>stage</i> of
<i>Laboratory</i>, it took us six months to realize that!
</p>
</div>
</section>
<section id="outline-container-org80b7d84" class="outline-2">
<h2 id="org80b7d84"><a href="http://filiales-gnu-linux.g.coop.ar/dev.html"><code>dev</code> <i>develop</i></a></h2>
<div class="outline-text-2" id="text-org80b7d84">

<div id="orgc766c8d" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/awx-pve-deploy-14.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/awx-pve-deploy-14.png" alt="awx-pve-deploy-14.png"></a>
</p>
</div>

<p>
And we went to a stage of <i>Development</i>!
</p>

<p>
(Let&rsquo;s see if this works? A little there, we&rsquo;re better)
</p>

<p>
In the <i>development</i> stage we already figured out how to deploy these
services and this service deployment is basically the <i>AWX</i> connects to
<i>GitLab</i>, obtains the code, with that code it communicates with the
<i>iDRAC</i> which is the administration interface of a <i>DELL</i> server and It
deals with creating the storage, this, configuring the <i>BIOS</i> and
restarting the computer.
</p>

<p>
As soon as you restart the computer, <i>Proxmox</i> starts running:
</p>

<ul class="org-ul">
<li>talk to the <i>NodeVPN</i>, get an <i>IP</i></li>
<li>talk to a <i>PXE</i> server, get an image with a <i>Kernel</i></li>
<li>boot, get a base image</li>
<li>goes to a local <i>CDN</i>, looks for local resources,</li>
<li>what it does not have locally goes to Headquarters (when I say Headquarters is because we can be in any Subsidiary, anywhere in the country)</li>
<li>and finally if <i>Debian</i> packages are to be installed, we need a <i>APT</i> repository and we have a local cache, but if the package we need is not in the local cache, it will Headquarters accesses another cache repository and finally all the packages are installed</li>
<li>and in this way we have a server, this&#x2026; from scratch, recently installed!</li>
</ul>

<p>
Now, thinking of&#x2026; More&#x2026; To see him&#x2026;
</p>

<p>
(let&rsquo;s see if it&rsquo;s possible, here we have&#x2026;)
</p>

<p>
There is the start of the <i>iDRAC</i> interface, in the background what you
see in green and black is me playing to get debug, but the process is
automated, that is:
</p>

<ul class="org-ul">
<li>from <i>AWX</i> the connection was triggered</li>
<li>the server is brought up the server takes an interface by <i>PXE</i></li>
<li>you&rsquo;re going to get a <i>Debian</i> image that&rsquo;s going to be self-installing, it&rsquo;s a process that lasts a series of minutes</li>
<li>and the operator that triggers execution from the interface <i>AWX</i> administration, you don&rsquo;t have to do anything but wait!</li>
</ul>

<p>
And in fact at the time of generation of servers, imagine there are 300
subsidiaries, they had to generate 300 servers, they generated 3 servers
at the same time, in this way they generated it in parallel at
Headquarters, this simply by opening the box connecting 2 network cables
and from <i>AWX</i> triggering the execution and waiting, I don&rsquo;t know, I think
maximum 1 hour and you had 3 servers installed and configured from
scratch, with all the components they had inside, that is:
</p>

<p>
First a <i>Debian</i> <i>Net Install</i> is done which is what we are seeing there
in an accelerated way
</p>

<ul class="org-ul">
<li>Then the computer restarts</li>
<li>The equipment is registered only to the <i>AWX</i>, in the inventory, it says&#x2026; I am such <i>MAC</i>, I am such <i>IP</i>, I am such equipment</li>
<li>and from there the operator can fire the second execution that is&#x2026; Well now you stop being a base <i>Debian</i> and become a <i>Proxmox</i></li>
<li>and after you have already become a <i>Proxmox</i>, it goes on to&#x2026; A circuit that what it does is create the 10 virtual ones that are needed and</li>
<li>and then a third circuit that what it does is create the services that is inside each virtual and the whole process is automated</li>
<li>and finally&#x2026; Nothing, a server is running that will have all the virtual ones you need!</li>
</ul>

<p>
But it will also have the ability to generate another server exactly the
same, this one with the same steps, that is:
</p>

<ul class="org-ul">
<li>to generate a server we use a server</li>
<li>to generate another server we use that same generated server</li>
<li>recursion they say&#x2026;</li>
</ul>

<p>
<i>Workstation</i>&#x2026; Well with <i>workstations</i> it happens to us that as there
were many, there were no longer 300, they were 3000, what we did is a
base image, that base image was sent to the workstation manufacturer to
clone
</p>

<p>
And what you had to do afterwards was select that <i>workstation</i> and apply
the changes to it, whatever is new and basically enroll it in the
network.
</p>

<p>
(here what we are going to see, I am going to see if I can pause a bit&#x2026;)
</p>

<p>
Eh&#x2026; On the right&#x2026; yes&#x2026; I&rsquo;m on a <i>Proxmox</i> server with a virtual
one, to play in Development.
</p>

<p>
And on the left I have the <i>AWX</i> interface and basically what I have is
identified in the inventory the <i>IP</i> of the <i>host</i>, the <i>MAC</i>, the
<i>hostname</i> since the Subsidiary it belongs to, in this case it is 661.
</p>

<p>
And on the right, what I am going to see is that what <i>AWX</i> is going to
execute on the left, on the right, it is going to materialize in some
way. In this case, it is a fairly simple example, which is to change the
wallpaper, but what is interesting is that it is done from Headquarters,
the workstation can be anywhere in the country.
</p>

<p>
And the operator only sees the <i>AWX</i> interface, he never sees the
workstation screen, he simply chooses a series of templates and within
the template what he chooses is the <i>limit</i>.
</p>

<p>
The limit is basically one or more teams together that will deploy, they
are always deployed in parallel,
</p>

<p>
This&#x2026; All that&rsquo;s needed is the limit on that and once it&rsquo;s run in the
control panel what you&rsquo;re going to see is a bunch of messages.
</p>

<p>
(there you can see half a boy but&#x2026; Let&rsquo;s see if I can zoom in&#x2026; yes&#x2026; eh)
</p>

<p>
What is green is fine, what is red is a serious error, this little
orange is when something of value changes and cyan when it could
be skipped because it was not necessary to do so.
</p>

<p>
The scheme is quite simple, it is a web page, values are chosen, those
values&#x2026;
</p>

<p>
(let&rsquo;s pause there, let&rsquo;s see&#x2026;)
</p>

<p>
There for example we see, we are in a workstation and we see the
variables that are loaded inside the <i>AWX</i> and it says for example the
<code>default_background</code> and the name of the image and basically that value
comes from <i>GitLab</i> and is versioned, but from the Administration panel
of <i>AWX</i>, if you have enough permissions, you can change it and if you
change it, as it is in this case here, eh&#x2026; It&rsquo;s trying to change the
background of the screen, let&rsquo;s see if it succeeds in this execution, I
think there was an error there .
</p>

<p>
(I don&rsquo;t even remember what I did&#x2026;)
</p>

<p>
Yes, indeed there it says <code>gcoop.jpg</code> and it says failed and if we look
in the log &#x2026; There it will be going down&#x2026; Where it is in red is
because it is trying to find an image that does not exist, so now what
it is going to do is&#x2026; There is no no problem, the operator can change
the file name to the corresponding file name, there he put the correct
name, it tells him to save.
</p>

<p>
Execute again and it is executed on the failed equipment, which can be 1
or many and once it turns green, that is, the operator only waits for it
to turn green, if it turns green everything is fine and continues with
another template or with another team and if it turns red, something
happened&#x2026;
</p>

<p>
And so it immediately changes on the right side, in the job to the user
while he was <i>&ldquo;logged in&rdquo;</i>, that is, the example is quite simple but it
also serves to comment that any task, no matter how small, can be
automated and In fact, there are 3,000 workstations, users do not have
permission for anything, that is, everything is done from Headquarters
in an automated, centralized manner, all changes are versioned, because
It&rsquo;s the only way to keep control over so many computers&#x2026;
</p>
</div>
</section>
<section id="outline-container-org057bc88" class="outline-2">
<h2 id="org057bc88"><a href="http://filiales-gnu-linux.g.coop.ar/dep.html"><code>dep</code> <i>deploy</i></a></h2>
<div class="outline-text-2" id="text-org057bc88">

<div id="orge30a912" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/awx-wst-deploy-09.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/awx-wst-deploy-09.png" alt="awx-wst-deploy-09.png"></a>
</p>
</div>

<p>
Well, then we were ready to deploy&#x2026;
</p>

<p>
To do the deployment is to do the same thing but with many workstations
at the same time, then basically it begins to become more complex, it is
similar to the above, that is:
</p>

<ul class="org-ul">
<li><i>AWX</i> communicates with <i>GitLab</i>, gets the code and it will run a team, in this case 3 jobs these 3 jobs get the changes, but need local resources</li>
<li>some local resources are the local <i>APT</i> cache a local <i>CDN</i> which is one nginxthat we have there in a <i>VM</i> in a server, but then it needs resources against the <i>FileServer</i> that is inside of the subsidiary</li>
<li>and finally to be able to have a centralized login you need to talk to the <i>IPA</i> that is in Headquarters and also with the <i>Cluster</i> of the 4 <i>ADs</i> that are in Headquarters then there begins to be a lot of traffic from one side to the other, which is a little&#x2026; colorinche, but hey, it works,</li>
</ul>

<p>
In real life, hardly anyone sees that all this is happening behind the scenes, inside AWX or they see green or they see red and everything went well or they call us.
</p>
</div>
</section>
<section id="outline-container-orgcd769d7" class="outline-2">
<h2 id="orgcd769d7"><a href="http://filiales-gnu-linux.g.coop.ar/stg.html"><code>stg</code> <i>staging</i></a></h2>
<div class="outline-text-2" id="text-orgcd769d7">
<p>
Well, next stage, we&rsquo;re ready for <i>staging</i> !
</p>


<div id="org1c8743d" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/filiales-gnu-linux-03-hardware.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/filiales-gnu-linux-03-hardware.png" alt="filiales-gnu-linux-03-hardware.png"></a>
</p>
</div>

<p>
Staging, basically&#x2026; That is to say, go out to production in this case
but with a single Subsidiary, instead of 300 to see if the solution
works
</p>

<p>
And there we find things, right?
</p>

<p>
Well there are not only 3000 workstations, there are thousands of
different peripherals!
</p>


<div id="org31c0f84" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/filiales-gnu-linux-04-printers.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/filiales-gnu-linux-04-printers.png" alt="filiales-gnu-linux-04-printers.png"></a>
</p>
</div>

<p>
(let&rsquo;s see if I can pause, there)
</p>

<p>
In these peripherals we had to make the workstations that are all the
same for a cashier position, also be for the manager or for the
receptionist or for whoever is inside the Bank and has to work that same
workstation with a Cash Scanner checks, with a ticket printer or
whatever it takes&#x2026;
</p>

<p>
The technology we use in summary is this:
</p>


<div id="orgbe7e0cf" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/filiales-gnu-linux-05-technology.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/filiales-gnu-linux-05-technology.png" alt="filiales-gnu-linux-05-technology.png"></a>
</p>
</div>

<ul class="org-ul">
<li><i>Ansible</i>, <i>Python</i>, <i>AWX</i></li>
<li>On the <i>IPA</i> side, <i>IPA</i> goes with <i>CentOS</i>, <i>CentOS 7</i>, when we started the project there was <i>CentOS 7</i>, not now, we are going to migrate it</li>
<li>on the <i>Debian 10</i> server side, when we started it was <i>stable</i>, <i>Proxmox 6.3</i></li>
<li>and the same on the side of jobs, we are already a little old&#x2026;</li>
</ul>

<p>
Like any big migration project, when you finish migrating it, you have to start over!
</p>

<p>
The advantage is that it would only be to update some <i>playbooks</i> and
<i>roles</i>, in short, we already have the deployment tool!
</p>

<p>
Well, we have 10 virtual machines, to recap, with different uses this&#x2026;
<i>PrintServer</i>, <i>FileServer</i> &#x2026;
</p>


<div id="org268b580" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/filiales-gnu-linux-06-vms.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/filiales-gnu-linux-06-vms.png" alt="filiales-gnu-linux-06-vms.png"></a>
</p>
</div>

<p>
Within <i>GitLab</i> we have more than 200 repositories!
</p>


<div id="org384e20f" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/filiales-gnu-linux-07-repositories.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/filiales-gnu-linux-07-repositories.png" alt="filiales-gnu-linux-07-repositories.png"></a>
</p>
</div>

<p>
Here and there I pause, this was an important change of work, normally
in a project no matter how big it is with 1, 2, 5 repositories&#x2026;
</p>

<p>
And going to work with 200 repositories&#x2026; it&rsquo;s chaos!
</p>

<p>
It&rsquo;s chaos and on top of that everything is versioned and many repos are
nested that some depend on the others and well it&rsquo;s possible! <i>GitFlow</i>
helped a lot there.
</p>

<p>
And the important thing there is that there is 1 repository called
inventory which is the entire inventory of all the equipment that is
turning around, <code>are versioned in one place</code> and there is a repository
called <code>awx</code>, that is, <code>all the information to run the /AWX/ deployment</code>
, which could be done manually from the administration interface we did
it via code and then that code is shipped and <i>deployed</i> and versioned.
</p>

<p>
(well&#x2026; And that&rsquo;s where everything was hung&#x2026; right? That&rsquo;s the end of it!)
</p>

<p>
Well there <i>AWX</i>, the number of projects we have, more than 200 projects,
300 inventories, nothing, many templates, each one does something
different
</p>


<div id="org489d7a2" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/filiales-gnu-linux-08-awx.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/filiales-gnu-linux-08-awx.png" alt="filiales-gnu-linux-08-awx.png"></a>
</p>
</div>

<p>
(Let&rsquo;s see if&#x2026; Pause)
</p>

<p>
Well, this is a summary of how we have come so far, that is, we had 6
months of laboratory, 1 year of development, 1 year of deployment of the
solution, 87 days in <i>staging</i>, that is, we had a subsidiary for almost 3
months in operation running, fully migrated, server and new.
</p>


<div id="org1d24a0b" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/filiales-gnu-linux-10-time.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/filiales-gnu-linux-10-time.png" alt="filiales-gnu-linux-10-time.png"></a>
</p>
</div>

<p>
And from there began the arduous task that we got to here, let&rsquo;s say we
got there, we designed the solution, but the implementation was done by
the <i>Bank&rsquo;s</i> <i>Implementations</i> team, the truth is that they managed to do it
in less than 1 year!, they came to migrate 3 per night! In 347 days, 300
subsidiaries migrated
</p>

<p>
And that is something important to understand, we are talking about a
<i>Bank</i> and in a <i>Bank</i> that is how it closes at 06:00, opens at 09:00. Well,
that was the window that the <i>Implementations team</i> had to change the
server, change the <i>rack</i>, change the <i>switches</i>, rewire everything,
install a new <i>Operating System</i>, deploy from Headquarters and in the
morning everything continues to operate, like people go and do I don&rsquo;t
know their fixed term and everything works!
</p>

<p>
And it was obviously done in 2 stages, a first stage of servers and a
second stage of <i>workstations</i>, but initially, that is <code>all the
Subsidiaries, went from one day to the next to throw away the
infrastructure they had and start up with a new one</code>.
</p>

<p>
And something important is that, one difference that this project had,
is that before the <i>VPN</i> was outside and in this case the server that
replaced the infrastructure of the Subsidiary had the <i>VPN</i> inside the
virtualized server, so it was quite a challenge that&rsquo;s good and we
finished in 2021, on September 9, the deployment of all the Subsidiaries
was finished.
</p>

<p>
We entered there what would be support, which is really good as you
know, support for something recently migrated is like finishing a little
what we had been doing and from there well&#x2026; Evolutionary maintenance
so to speak, this there are improvements every day and new challenges
and developments to fix.
</p>

<p>
(wait&#x2026; nothing works for me)
</p>
</div>
</section>
<section id="outline-container-org57b05f6" class="outline-2">
<h2 id="org57b05f6"><a href="http://filiales-gnu-linux.g.coop.ar/prd.html"><code>prd</code> <i>production</i></a></h2>
<div class="outline-text-2" id="text-org57b05f6">

<div id="orgaf43cc7" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/awx-bccl-center.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/awx-bccl-center.png" alt="awx-bccl-center.png"></a>
</p>
</div>

<p>
Well let&rsquo;s jump to Production We are in Production!
</p>

<p>
This is a way to see production!
</p>

<p>
(let&rsquo;s see if we can increase)
</p>

<p>
This is an interpretation of what the migrated <i>Bank</i> is for us!
</p>

<p>
In the center of all that, this <i>AWX</i>, each balloon is a team that we
can manage&#x2026;
</p>

<p>
(let&rsquo;s get closer!)
</p>

<p>
Come here in the center, this <i>AWX</i> which is a single team that is
virtualized in Headquarters, which is going to connect for example here
in red/orange <i>Branch 105</i> and that <i>Branch 105</i> well has its 10 virtual
machines, its <i>Proxmox</i> server, its <i>PrintServer</i> and its 10 or 15
<i>workstations</i> there and the same is going to happen to <i>252</i> next to
it, to <i>85</i> and to all the others!
</p>

<p>
It&rsquo;s chaos!
</p>

<p>
I don&rsquo;t know how they did this before! That we used <i>AWX</i> and had
everything and <i>Ansible</i> versioned .
</p>

<p>
But the truth is that&#x2026;
</p>

<p>
<code>The only way to be able to manage so many computers on such a large
scale and know what is happening to each one</code> and to see why it doesn&rsquo;t
work, I don&rsquo;t know, the printer of Subsidiary 24 , it&rsquo;s like&#x2026;
</p>

<p>
No hay otra manera, tiene que ser centralizado y tiene que estar
automatizado!
</p>
</div>
</section>
<section id="outline-container-org18a36b5" class="outline-2">
<h2 id="org18a36b5"><a href="http://filiales-gnu-linux.g.coop.ar/sup.html"><code>sup</code> <i>support</i></a></h2>
<div class="outline-text-2" id="text-org18a36b5">

<div id="org7302eb9" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/awx-pve-deploy-14.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/awx-pve-deploy-14.png" alt="awx-pve-deploy-14.png"></a>
</p>
</div>

<p>
(I don&rsquo;t know how we got here on time? I have 3 minutes left!)
</p>

<p>
One of the little problems we had when we started Production was this!
</p>

<p>
That we did all the tests that we did of user login, although we
simulated a certain load, we were never going to have the load that was
production, which is basically around 10:00 in the morning, you have
2000 people who “log in” at the same time!
</p>

<p>
And then that good generated, a few seconds of delay for example there
we are seeing that there is&#x2026; More than 20 seconds of delay in the
login is like a problem!.
</p>

<p>
So well, this is something that we mitigate in some way by generating a
login cache synchronization and an API in the middle to just in time try
to synchronize those users and well the definitive solution is going to
come soon with a Cluster of IPAs in Instead of just one, we believe that
it will be the solution, but well, it is one of the problems with the
concurrence of many users at the same time.
</p>

<p>
(and I lost everything, wait, F5)
</p>
</div>
</section>
<section id="outline-container-orgf94d0f2" class="outline-2">
<h2 id="orgf94d0f2"><a href="http://filiales-gnu-linux.g.coop.ar/nxt.html"><code>nxt</code> <i>next</i></a></h2>
<div class="outline-text-2" id="text-orgf94d0f2">

<div id="orgcef565b" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/awx-deploy-revision-13.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/awx-deploy-revision-13.png" alt="awx-deploy-revision-13.png"></a>
</p>
</div>

<p>
Well, what&rsquo;s next?
</p>

<p>
We are working with many things in parallel but well here, this is a
brief graphic that basically what we do is the AWX update solution ,
that is, at the beginning, what did we do?
</p>

<p>
We made a template in AWX, trial and error, trial and error until it
worked for us and we said, well, this is it!
</p>

<p>
And now we have to pass it to production and pass it to Production,
well, we exported a .jsonand that JSON we put it in production by hand,
let&rsquo;s say with commands from a CLI but basically manually and we said
&ldquo;that&rsquo;s it!&rdquo;
</p>

<p>
But hey, that&rsquo;s not cool, that Development touches Production, so what
we did is a script that what it does is, as soon as you start developing
in a branch of your role or your playbook, as soon as you do push,
GitLab deals with the CI to do whatever it takes to get that template
deployed .
</p>

<ul class="org-ul">
<li>it is first deployed in Development</li>
<li>if it went well, the deploy in Development is deployed in Staging and if it turned out well in Staging, let&rsquo;s say, it fulfilled the two steps and passed the entire test circuit, we generate a release</li>
</ul>

<p>
And we say to the Bank&rsquo;s Technology team, “hey, you can deploy such a
release” and the pass to Production uses the same script used by GitLab
CI but triggered by a SysAdmin who says everything is going&#x2026; (and who
mistrusts us&#x2026;! )
</p>

<p>
Well, that&rsquo;s basically an idea and a summary of the migration project
that we had to do from gcoop, I didn&rsquo;t say it before but:
</p>

<p>
<code>gcoop is a Free Software Cooperative, we work exclusively with Free
Software, we don't have bosses, we don't have employees, we are all
partners and it is another way of working and it is possible that we do
things like this, like these and that they work!</code>
</p>

<p>
So as of now, I got right to 20 seconds! I answer questions, we have a
few minutes, if you dare? I am still standing!
</p>
</div>
</section>
<section id="outline-container-org6fb49aa" class="outline-2">
<h2 id="org6fb49aa">Questions?</h2>
<div class="outline-text-2" id="text-org6fb49aa">
</div>
<div id="outline-container-org93bbf4a" class="outline-3">
<h3 id="org93bbf4a">Hello, how are you, good chat! Zarpado laburo&#x2026; this one wanted to ask you how they did it, because I imagine that they must have had some exception, when they found in the middle of the night, this a server or a team that did not respond as it should&#x2026;</h3>
<div class="outline-text-3" id="text-org93bbf4a">
<p>
They called me!
</p>

<p>
They called you! Guard every night! Year and peak?
</p>

<p>
No no, at the beginning, the truth is that the Implementation team there
was a lot of people from the Bank&rsquo;s side.
</p>

<p>
We only Design and Develop the solution, but this is operated by a very
large team of our own and also outsourced, let&rsquo;s say in some way, to be
able to cover the entire country.
</p>

<p>
We are talking that you have a subsidiary in Salta, you have a
subsidiary in Tierra del Fuego, Neuquén, wherever you can think of,
then&#x2026;
</p>

<p>
Well, I didn&rsquo;t mention it, this was also in Pandemic, that is, we
started in 2018 and the big migration process was from 2020-2021&#x2026;
</p>

<p>
Eh, they were learning, basically at the beginning they needed us to be
there accompanying the deploys, then they only called us when there was
something strange, that is if that something strange could be solved in
some way or automated so that it would not happen again, let&rsquo;s say al
otro día hacíamos una nueva plantilla, una nueva corrección y listo la
próxima vez no volvía a pasaror they already knew how to mitigate it.
</p>

<p>
Perfect. Thank you!
</p>

<p>
(Any other questions? Here I go&#x2026;)
</p>
</div>
</div>
<div id="outline-container-orgaa692e4" class="outline-3">
<h3 id="orgaa692e4">They had to deal with, they had workstations that are laptops or basically how they dealt with intermittent that a laptop or a desktop computer could be turned off and Ansible, that is, it goes from the server talking to the nodes that it affects</h3>
<div class="outline-text-3" id="text-orgaa692e4">
<p>
Well, yes, the workstations are very tiny HP Pro Desktops, mini,
beautiful, they start up in less than 30 seconds, they are operational,
they have, I think, 8 GB of RAM, 256 SSSD, that is, they are strong
machines&#x2026;
</p>

<p>
We have a template that does a WakeOnLAN, basically on one or more
computers, so let&rsquo;s say, if necessary, first run that template and then
run whatever you want. Always the execution of AWX what it executes and
does not find turned on will tell you &ldquo;I did not arrive, it does not
know why&rdquo; and you can tell it &ldquo;I will execute again on those that did
not arrive&rdquo; There in the middle what you do is good, you generate
another execution to say I turn on all the equipment .
</p>

<p>
Due to energy savings, they also told us at one point that it was
convenient to turn off the equipment, so the equipment is also
programmed to turn off at a certain time, so is there a time when you
are obliged if you want to know if you reach everyone? You have to turn
them on!
</p>

<p>
Then things also happen to you to say well, we did that every time a
team obtains an IP, it goes to the inventory and is updated in case that
team for some reason changed its Subsidiary, which could happen.
</p>

<p>
Eh also what we did is that this equipment notifies by SNMP its IP, its
hostname and the last deploy it had and then later you can do sweeps by
SNMP to say &ldquo;well, let&rsquo;s see what equipment is turned on and who are
they?&rdquo;
</p>

<p>
Obviously this as we were working we had to make different versions and
there is always the dilemma that &ldquo;do I have all the equipment in the
same version?&rdquo; well, you have to ask and redeploy !
</p>
</div>
</div>
<div id="outline-container-org1cc1560" class="outline-3">
<h3 id="org1cc1560">Good afternoon, a question&#x2026; As you said at the beginning, the teams lift the OS image from the server and install it on the workstation, let&rsquo;s say, right? My question would be if you evaluated this possibility due to an inability of the server to set up virtual machines to deploy all the workstations required for a Bank or did you see any other advantage in this system? Thank you!</h3>
<div class="outline-text-3" id="text-org1cc1560">
<p>
Eh no, part of it was trying to have a technology and an architecture
that the Bank itself could respond to, that is, we couldn&rsquo;t go out with
a spaceship, let&rsquo;s say, it had to be&#x2026; There is a team for each person,
it is a physical team and yes there is no connection to Headquarters or
something is not working, that equipment has to at least be able to
serve at least to say, I don&rsquo;t know, open a spreadsheet and write NO
SYSTEM and print it, let&rsquo;s say at least for that, in that sense we also
did virtualization with KVM, also for security reasons and it was much
simpler in the operation of replacing equipment, that is = if in doubt
if a piece of equipment does not work you throw it away and redeploy it
and you do not have to think about what is happening to it = and they
are all the same, that is, you can take a team from the front door and
put it in the checkout line and it has to walk out, obviously it has all
the services it needs for that, but it is the idea that they are all the
same and nothing, let&rsquo;s say strange, I don&rsquo;t know if it answers the
question&#x2026;
</p>

<p>
&#x2026;but before I forget&#x2026;
</p>

<p>
Here I put, well our website is <a href="https://g.coop.ar/">https://g.coop.ar/</a> it is the new domain
that we now have in Argentina and part of the solution is there.
</p>

<p>
In GitLab <sup><a id="fnr.gitlab-gcoop" class="footref" href="https://osiux.com/#fn.gitlab-gcoop" role="doc-backlink">13</a></sup> and GitHub <sup><a id="fnr.github-gcoop" class="footref" href="https://osiux.com/#fn.github-gcoop" role="doc-backlink">14</a></sup>, there are
Ansible roles and playbooks that are available for you to use and
improve:
</p>

<ul class="org-ul">
<li><a href="https://github.com/gcoop-libre/ansible-role-deploy-git-repos">https://github.com/gcoop-libre/ansible-role-deploy-git-repos</a></li>
<li><a href="https://github.com/gcoop-libre/ansible-role-git-bare-repos">https://github.com/gcoop-libre/ansible-role-git-bare-repos</a></li>
<li><a href="https://github.com/gcoop-libre/ansible-role-pure-ftpd">https://github.com/gcoop-libre/ansible-role-pure-ftpd</a></li>
<li><a href="https://github.com/gcoop-libre/ansible_role_sssd_conf">https://github.com/gcoop-libre/ansible_role_sssd_conf</a></li>
<li><a href="https://github.com/gcoop-libre/ansible_role_test_users">https://github.com/gcoop-libre/ansible_role_test_users</a></li>
<li><a href="https://github.com/gcoop-libre/ansible_sudoers">https://github.com/gcoop-libre/ansible_sudoers</a></li>
<li><a href="https://gitlab.com/gcoop-libre/ansible_role_apt_pin">https://gitlab.com/gcoop-libre/ansible_role_apt_pin</a></li>
<li><a href="https://gitlab.com/gcoop-libre/ansible_role_freeipa_sssd_tools">https://gitlab.com/gcoop-libre/ansible_role_freeipa_sssd_tools</a></li>
<li><a href="https://gitlab.com/gcoop-libre/ansible_role_hp_linux_tools">https://gitlab.com/gcoop-libre/ansible_role_hp_linux_tools</a></li>
<li><a href="https://gitlab.com/gcoop-libre/ansible_tools">https://gitlab.com/gcoop-libre/ansible_tools</a></li>
<li><a href="https://gitlab.com/gcoop-libre/freeipa-sssd-tools">https://gitlab.com/gcoop-libre/freeipa-sssd-tools</a></li>
</ul>

<p>
We made more than 200, of which more than 200, I don&rsquo;t know, about 30
are not ours! That is, we take roles from the community, if someone
works in <i>Ansible</i>, <code>Geerlingguy</code> <sup><a id="fnr.geerlingguy" class="footref" href="https://osiux.com/#fn.geerlingguy" role="doc-backlink">15</a></sup> is for example a good
base to start with and we extend them as needed and combine them with
our own roles!
</p>

<p>
(I have the microphone there&#x2026;)
</p>
</div>
</div>
<div id="outline-container-orgb53efbd" class="outline-3">
<h3 id="orgb53efbd">Good afternoon, the talk is very nice, I wanted to ask about the workstations, did you use the Ubuntu distribution, is it for any particular reason regarding Hardware characteristics or is it because of the user&rsquo;s utility?</h3>
<div class="outline-text-3" id="text-orgb53efbd">
<p>
I like Debian, but the support you need for some applications, you will
not find it up to date and we are a Development company that today we
are 20 people and we were migrating 6300 computers and we said, well at
some point this could scale and we can&rsquo;t provide support, so we rely on
large international Free Software development companies that can provide
support if we can&rsquo;t, then the best thing would be to work with a Debian
-based distro that has some commercial support if necessary, which Same
for server services.
</p>

<p>
(Here&rsquo;s another question&#x2026;)
</p>
</div>
</div>
<div id="outline-container-orgc65b16f" class="outline-3">
<h3 id="orgc65b16f">Very good talk, two, a simple question that is to know what tool is this that makes the graphics? And the other question, a little more complex, no, eh well I have worked with Ansible and it is very good for provisioning servers and everything else, eh but I think that behind all this there is also a great network work so that the servers have access or the workstations have access to a certain server and I don&rsquo;t know if there is a firewall involved or what? How do you handle all of that with Ansible as well ? Or good to do it manually I think it&rsquo;s a lot, right? Or do you have any other solution?</h3>
<div class="outline-text-3" id="text-orgc65b16f">
<p>
Everything that is the new infrastructure, is made with Ansible as code,
this not only allowed to simplify the deployment but also allows the
Information Security Department and the Good Audit Department to check
that it is installed, that is, there were specific requirements that we
had to meet but which are specific firewall rules that are managed by
another sector and as if, in order to be able to deploy, the rule must
be in force, we do not manage it, we only ask for a JIRA so that it is
working, let&rsquo;s say, at the team level, whatever is necessary goes to run
such a service and needs to reach such a destination.
</p>

<p>
And as for the tool, all the graphs that are in the presentation, even
the timeline, are made with GraphVizbecause GraphViz basically allows
you to code, that is, I didn&rsquo;t make this drawing, I wrote code and that
code became that drawing .
</p>

<p>
(Any more questions? Go ahead&#x2026;)
</p>
</div>
</div>
<div id="outline-container-org6de82a4" class="outline-3">
<h3 id="org6de82a4">Thank you&#x2026; I wanted to know how all this originated? Why not&#x2026; How was a requirement of the Bank? You sold it to him&#x2026;?</h3>
<div class="outline-text-3" id="text-org6de82a4">
<p>
gcoop &#x2026; Eh&#x2026; I&rsquo;m <i>15 years</i> <sup><a id="fnr.vivir-del-sl" class="footref" href="https://osiux.com/#fn.vivir-del-sl" role="doc-backlink">16</a></sup> old in <i>gcoop</i>, I&rsquo;ve
been since 2007 a few months after it started, I&rsquo;m not a founder, but
I&rsquo;m from the first litter let&rsquo;s say&#x2026;
</p>

<p>
And ever since we offered services and consultancy to the Bank, we
basically developed <i>CRM</i>, the critical mission system of <i>Telephone
Contact Center</i> and <code>Associate Contact Management</code> (<i>Gestión de
Contactos del Asociado</i>) <sup><a id="fnr.gcoop-gca" class="footref" href="https://osiux.com/#fn.gcoop-gca" role="doc-backlink">17</a></sup> , that is, when you call by
phone, well, there is a CRM behind it that we developed from the start
of the cooperative, like this that has been running for 14 years and has
had many more migrations than this one, but well, without detracting
from it, it is a giant ABM but it has 5,000 users, so it is quite
critical.
</p>

<p>
This is how we have developed other projects, we had never done
infrastructure until 2018, that is, it was the first time and they
analyzed different offers and proposals and since they have a clear line
of working with Free Software, they came to us and we spent 6 months
convincing them to that it was possible and well we could do it and well
we are improving it just like this, every day there is a new challenge.
</p>

<p>
We are, Thank you!
</p>
</div>
</div>
</section>
<section id="outline-container-org06478fc" class="outline-2">
<h2 id="org06478fc">Closing</h2>
<div class="outline-text-2" id="text-org06478fc">
<p>
Thank you so much OSiRiS ! Well thank you very much!
</p>

<p>
Excellent talk! Great gcoop support Free Software and the development of
that style, much more is needed!
</p>

<p>
I ask you to stay here while we close the next presentation that will be
in English, so those who need it, behind us we have headsets for the
real-time translation of our stars of the night, there in the booth, so
good, many thanks again OSiRiS, a new round of applause, see you in a
few minutes&#x2026;
</p>
</div>
</section>
<section id="outline-container-org350373b" class="outline-2">
<h2 id="org350373b">Questions</h2>
<div class="outline-text-2" id="text-org350373b">
<p>
The event used the <i>swapcard</i> platform and after the talk I could see
that they asked several questions, some were answered at the time, but
others were pending, so I answer each question here.
</p>
</div>
<div id="outline-container-org9caae86" class="outline-3">
<h3 id="org9caae86">Why install Debian and then PVE on top? Was it easier than directly installing PVE with its own image?</h3>
<div class="outline-text-3" id="text-org9caae86">
<p>
Mainly because in this way we could completely automate the
installation, there are some configurations of the <i>Operating System</i>
that must be done before installing <i>Proxmox</i>, for example the network
configuration is quite complex, the servers have 10 network cards and we
had to fix versions of packages in addition to registering the server in
the <i>AWX</i> inventory .
</p>
</div>
</div>
<div id="outline-container-org16dcf3c" class="outline-3">
<h3 id="org16dcf3c">how do playbooks log in to computers, do they use ssh key exchange? or what method?</h3>
<div class="outline-text-3" id="text-org16dcf3c">
<p>
<i>Ansible</i> is <i>agentless</i> and therefore <i>AWX</i> connects to computers using
<i>SSH</i> keys, which are defined and configured in the <i>PXE</i> installation
process /both for servers and /workstations .
</p>
</div>
</div>
<div id="outline-container-orgfd64108" class="outline-3">
<h3 id="orgfd64108">what is that of gcoop could you develop it a little more the way it works?</h3>
<div class="outline-text-3" id="text-orgfd64108">
<p>
<i>gcoop</i> is the <i>Free Software Cooperative</i>, it was born in 2007 and
today it has 20 people organized horizontally and self-managed (that is,
there are no bosses or employees ), it is a work cooperative and is
dedicated to consulting and software development using exclusively <i>Free
Software</i> MORE DATA on the <a href="https://g.coop.ar/">gcoop.coop</a> website.
</p>
</div>
</div>
<div id="outline-container-orgc40ccde" class="outline-3">
<h3 id="orgc40ccde">What did you mean in the part about when they run the playbooks, &ldquo;The important thing is the limit&rdquo;?</h3>
<div class="outline-text-3" id="text-orgc40ccde">
<p>
When executing a <i>playbook</i>, it will be executed on all hosts in an
inventory and for example the inventory wst( workstations ) has 3000
hosts, if you do not specify a limit, the default playbook will try to
execute on all 3000 hosts in parallel and you will hardly want and/or
you need to do it in as many teams at the same time, the most prudent
thing is to establish a limit, for example by Subsidiary, although there
are Subsidiaries with less than 10 teams, some have more than 60 teams,
you can specify 1 or more hosts, filter examples:
</p>

<table>


<colgroup>
<col  class="org-left">

<col  class="org-left">
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">limit</th>
<th scope="col" class="org-left">definition</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">f0001</td>
<td class="org-left">all the teams in the groupf0001</td>
</tr>

<tr>
<td class="org-left">f0001:f0002</td>
<td class="org-left">all the teams in the groups f0001andf0002</td>
</tr>

<tr>
<td class="org-left">wst-8CC123:wst-8CC124</td>
<td class="org-left">only in teams wst-8CC123andwst-8CC124</td>
</tr>

<tr>
<td class="org-left">wst-8CC123</td>
<td class="org-left">only on the teamwst-8CC123</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-orgf7e200f" class="outline-3">
<h3 id="orgf7e200f">How did you deal with connection failures or timeouts that may arise?</h3>
<div class="outline-text-3" id="text-orgf7e200f">
<p>
Each Subsidiary has at least 2 links from different providers and
throughout the country, there are different &ldquo;bandwidths&rdquo;, basically in
each Subsidiary they began by deploying 2 computers in parallel and if
there were no errors it was increased to 4 devices in parallel, and so
on until finding the maximum number of devices in parallel without
interruptions.
</p>

<p>
If a team&rsquo;s deploy connection was broken, that team was then retried,
and the playbook picked up where it left off (in effect, it rechecks
each task and determines if it needs to be run again).
</p>
</div>
</div>
<div id="outline-container-org47382fc" class="outline-3">
<h3 id="org47382fc">If they changed their <i>IP</i>, how were they updated later in the Inventory? Did they use an agent to inform the controller?/</h3>
<div class="outline-text-3" id="text-org47382fc">
<p>
We use a script in <code>Network Manager Dispacher</code> <sup><a id="fnr.networkmanager" class="footref" href="https://osiux.com/#fn.networkmanager" role="doc-backlink">18</a></sup> that
calls updating the host, that is, the workstation modifies the <i>AWX</i>
inventory <code>awx-cli</code> every time it receives a new IP and if the host does
not exist in the inventory, it is created immediately.
</p>
</div>
</div>
<div id="outline-container-org8ad9795" class="outline-3">
<h3 id="org8ad9795">Could someone tell me the name of the software they use to graph?</h3>
<div class="outline-text-3" id="text-org8ad9795">
<p>
I made the graphs using <i>GraphViz</i>
</p>
</div>
</div>
</section>
<section id="outline-container-orge036d2d" class="outline-2">
<h2 id="orge036d2d">You will surely be interested in reading&#x2026;</h2>
<div class="outline-text-2" id="text-orge036d2d">
<ul class="org-ul">
<li><a href="https://osiux.com/2026-07-21-debconf26-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.html">Cómo aprovisionar, instalar, configurar y mantener actualizados miles de sistemas Debian y basados en Debian</a></li>
<li><a href="https://osiux.com/2026-07-21-debconf26-how-to-provision-install-configure-and-keep-thousands-of-debian-and-debian-based-systems-updated.html">How to provision, install, configure and keep thousands of Debian and Debian-based systems updated</a></li>
<li><a href="https://osiux.com/2021-12-30-automated-bios-configuration-using-ansible-and-hp-linux-tools.html">Automate <i>BIOS</i> setup using <code>ansible</code> and <i>HP Linux Tools</i></a></li>
<li><a href="https://osiux.com/2022-04-23-filiales-gnu-linux-flisol-caba.html"><code>Filiales GNU/Linux</code> FLISoL CABA</a></li>
<li><a href="https://osiux.com/2022-10-03-ansible-tools-v0-3-0.html"><i>Ansible Tools</i> <code>v0.3.0</code></a></li>
<li><a href="https://osiux.com/2022-10-08-automate-deployment-of-AWX-resources-with-GitLab-CI-CD-and-ansible-tools.html">Automate deployment of AWX resources with GitLab CI/CD and Ansible Tools</a></li>
<li><a href="https://osiux.com/2022-10-21-use-graphviz-for-slides.html">Use Graphviz to generate Slides</a></li>
<li><a href="https://osiux.com/2022-10-25-how-to-make-a-timeline-with-graphviz-using-timeline2dot.html">Cómo hacer una línea de tiempo con GraphViz</a></li>
</ul>
</div>
</section>
<section id="outline-container-orgb1960d3" class="outline-2">
<h2 id="orgb1960d3">ChangeLog</h2>
<div class="outline-text-2" id="text-orgb1960d3">
<ul class="org-ul">
<li><a href="https://gitlab.com/osiux/osiux.gitlab.io/-/commit/bf3a61526ad2a73cecb77a18995f1d63494e3664"><code>2022-11-13 20:39</code></a> agregar y actualizar tags OpenGraph</li>
<li><a href="https://gitlab.com/osiux/osiux.gitlab.io/-/commit/179f9b588a169fc81b6c34533cfd834ebc0a28cd"><code>2022-10-28 14:13</code></a> add links to in titles to Draft <code>"How to migrate 6300 hosts to GNU/Linux using Ansible and AWX"</code></li>
<li><a href="https://gitlab.com/osiux/osiux.gitlab.io/-/commit/84218db8e4d07cd33ae7caf0281f6597a18cc944"><code>2022-10-28 14:26</code></a> use thumbnails form images in Draft <code>"How to migrate 6300 hosts to GNU/Linux using Ansible and AWX"</code></li>
<li><a href="https://gitlab.com/osiux/osiux.gitlab.io/-/commit/1c115ebde4a7e2bc475f6c9b9abed1d87ce05dd4"><code>2022-10-28 14:18</code></a> fix typo in footnote reference in Draft <code>"How to migrate 6300 hosts to GNU/Linux using Ansible and AWX"</code></li>
<li><a href="https://gitlab.com/osiux/osiux.gitlab.io/-/commit/c451e84ae4bf3c7865160da416a8052a414b9ca2"><code>2022-10-28 13:37</code></a> add Draft <code>"How to migrate 6300 hosts to GNU/Linux using Ansible and AWX"</code></li>
<li><a href="https://gitlab.com/osiux/osiux.gitlab.io/-/commit/f7f08f8e9298dcc586597a6857f20f694b160461"><code>2022-10-28 13:26</code></a> renombrar 2022-10-20-howto-migrate-6300-hosts-to-gnu-linux-using-ansible-and-awx.org a 2022-10-20-como-migrar-6300-equipos-a-gnu-linux-usando-ansible-y-awx</li>
<li><a href="https://gitlab.com/osiux/osiux.gitlab.io/-/commit/c5dc009193ac5792e153c1c034278adbb657626a"><code>2022-10-26 17:48</code></a> agregar <code>Cómo migrar 6300 equipos a GNU/Linux usando Ansible y AWX</code></li>
</ul>
</div>
</section>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.nerdearla" class="footnum" href="https://osiux.com/#fnr.nerdearla" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://nerdear.la/">https://nerdear.la/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.konex" class="footnum" href="https://osiux.com/#fnr.konex" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.cckonex.org/">https://www.cckonex.org/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.fgnulyt" class="footnum" href="https://osiux.com/#fnr.fgnulyt" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.youtube.com/watch?v=3hjQwbqCUP4">https://www.youtube.com/watch?v=3hjQwbqCUP4</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.fgnulweb" class="footnum" href="https://osiux.com/#fnr.fgnulweb" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="http://filiales-gnu-linux.g.coop.ar/">http://filiales-gnu-linux.g.coop.ar/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.hugoruscitti" class="footnum" href="https://osiux.com/#fnr.hugoruscitti" role="doc-backlink">5</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.examplelab.com.ar/">https://www.examplelab.com.ar/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.visorvideos" class="footnum" href="https://osiux.com/#fnr.visorvideos" role="doc-backlink">6</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://github.com/hugoruscitti/visor-de-videos-multiple">https://github.com/hugoruscitti/visor-de-videos-multiple</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.graphviz-slides" class="footnum" href="https://osiux.com/#fnr.graphviz-slides" role="doc-backlink">7</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://osiux.com/2022-10-21-use-graphviz-for-slides.html">https://osiux.com/2022-10-21-use-graphviz-for-slides.html</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.timeline2dot" class="footnum" href="https://osiux.com/#fnr.timeline2dot" role="doc-backlink">8</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://osiux.com/2022-10-25-how-to-make-a-timeline-with-graphviz-using-timeline2dot.html">https://osiux.com/2022-10-25-how-to-make-a-timeline-with-graphviz-using-timeline2dot.html</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.sysarmy" class="footnum" href="https://osiux.com/#fnr.sysarmy" role="doc-backlink">9</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://timeline.sysarmy.com/">https://timeline.sysarmy.com/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.gcoop" class="footnum" href="https://osiux.com/#fnr.gcoop" role="doc-backlink">10</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://g.coop.ar/">https://g.coop.ar/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.rms" class="footnum" href="https://osiux.com/#fnr.rms" role="doc-backlink">11</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://endefensadelsl.org/que_es_el_software_libre.pdf">https://endefensadelsl.org/que_es_el_software_libre.pdf</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.bccl" class="footnum" href="https://osiux.com/#fnr.bccl" role="doc-backlink">12</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.bancocredicoop.coop/">https://www.bancocredicoop.coop/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.gitlab-gcoop" class="footnum" href="https://osiux.com/#fnr.gitlab-gcoop" role="doc-backlink">13</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://gitlab.com/gcoop-libre">https://gitlab.com/gcoop-libre</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.github-gcoop" class="footnum" href="https://osiux.com/#fnr.github-gcoop" role="doc-backlink">14</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://github.com/gcoop-libre">https://github.com/gcoop-libre</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.geerlingguy" class="footnum" href="https://osiux.com/#fnr.geerlingguy" role="doc-backlink">15</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://ansible.jeffgeerling.com/">https://ansible.jeffgeerling.com/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.vivir-del-sl" class="footnum" href="https://osiux.com/#fnr.vivir-del-sl" role="doc-backlink">16</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://osiux.com/2021-02-16-vivir-del-software-libre.html">https://osiux.com/2021-02-16-vivir-del-software-libre.html</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.gcoop-gca" class="footnum" href="https://osiux.com/#fnr.gcoop-gca" role="doc-backlink">17</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.gcoop.coop/gca-la-implementacion-de-suitecrm-mas-grande-de-america">https://www.gcoop.coop/gca-la-implementacion-de-suitecrm-mas-grande-de-america</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.networkmanager" class="footnum" href="https://osiux.com/#fnr.networkmanager" role="doc-backlink">18</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://networkmanager.dev/docs/api/latest/NetworkManager-dispatcher.html">https://networkmanager.dev/docs/api/latest/NetworkManager-dispatcher.html</a>
</p></div></div>


</div>
</div></main>
<footer id="postamble" class="status">
<p class="date">Date: 2022-10-27 20:33</p>
<p class="author">Author: Osiris Alejandro Gomez</p>
<p class="date">Created: 2026-08-13</p>
</footer>]]></content:encoded>
    <dc:creator xml:lang="es">Osiris Alejandro Gomez</dc:creator>
    <pubDate>Thu, 27 Oct 2022 20:33:00 +0000</pubDate>
    <category>Technology</category>
    <comments>https://osiux.com/2022-10-20-howto-migrate-6300-hosts-to-gnu-linux-using-ansible-and-awx.html</comments>
    <source url="https://osiux.com">osiux.com/blog</source>
    <dc:language>es-ar</dc:language>
    <enclosure url="https://osiux.com/img/filiales-gnu-linux/awx-wst-deploy-09.png" type="image/png" length="0" />
    <media:content url="https://osiux.com/img/filiales-gnu-linux/awx-wst-deploy-09.png" medium="image" isDefault="true" />
    <media:thumbnail url="https://osiux.com/img/filiales-gnu-linux/awx-wst-deploy-09.png" />
  </item>
  <item>
    <title>Cómo migrar 6300 equipos a GNULinux usando Ansible y AWX</title>
    <link>https://osiux.com/2022-10-20-como-migrar-6300-equipos-a-gnu-linux-usando-ansible-y-awx.html</link>
    <guid isPermaLink="true">https://osiux.com/2022-10-20-como-migrar-6300-equipos-a-gnu-linux-usando-ansible-y-awx.html</guid>
    <description>Transcripción de la charla "Cómo migrar 6300 equipos a GNULinux usando Ansible y AWX" en Nerdearla 2022</description>
    <content:encoded><![CDATA[
<main id="content" class="content">
<h1 class="title">Cómo migrar 6300 equipos a GNU/Linux usando Ansible y AWX</h1>
<p>
<a href="https://osiux.com/index.html">index</a> |
<a href="https://osiux.com/about.html">about</a> |
<a href="https://osiux.com/archive.html">archive</a> |
<a href="https://osiux.com/charlas.html">charlas</a> |
<a href="https://osiux.com/docs.html">docs</a> |
<a href="https://osiux.com/links.html">links</a>
</p>

<p>
<a href="https://osiux.com/dot.html"><code>dot</code></a> |
<a href="https://osiux.com/git.html"><code>git</code></a> |
<a href="https://osiux.com/img.html"><code>img</code></a> |
<a href="https://osiux.com/plt.html"><code>plt</code></a> |
<a href="https://osiux.com/tty.html"><code>tty</code></a> |
<a href="https://osiux.com/uml.html"><code>uml</code></a>
</p>


<p>
This <i>post</i> has an <i>English</i> translation at
<a href="https://osiux.com/2022-10-20-howto-migrate-6300-hosts-to-gnu-linux-using-ansible-and-awx.org"><code>"How to migrate 6300 hosts to GNU/Linux using Ansible and AWX</code>"</a>
</p>
<section id="outline-container-orgfe7f14f" class="outline-2">
<h2 id="orgfe7f14f"><i>nerdearla</i></h2>
<div class="outline-text-2" id="text-orgfe7f14f">
<p>
Aprovechando la vuelta presencial de <code>nerdearla</code> <sup><a id="fnr.nerdearla" class="footref" href="https://osiux.com/#fn.nerdearla" role="doc-backlink">1</a></sup> edición
2022 en el <i>Konex</i> <sup><a id="fnr.konex" class="footref" href="https://osiux.com/#fn.konex" role="doc-backlink">2</a></sup>, presenté la charla <code>"Cómo migrar 6300
equipos a GNU/Linux usando Ansible y AWX"</code> <sup><a id="fnr.fgnulyt" class="footref" href="https://osiux.com/#fn.fgnulyt" role="doc-backlink">3</a></sup>
</p>
</div>
</section>
<section id="outline-container-org6fd1f5d" class="outline-2">
<h2 id="org6fd1f5d">4 años en un pomodoro?</h2>
<div class="outline-text-2" id="text-org6fd1f5d">
<p>
Resumir <i>4 años</i> de trabajo en <i>25 minutos</i> no es tarea fácil, pero
debido a la gran cantidad de charlas en simultáneo no quedaba otra que
resumir, asi que dividí el charla en 7 etapas, coincidiendo con los 7
colores del cooperativismo 🌈
</p>

<p>
Para detallar y extender un poco más la charla, desgrabé el audio y voy
a estar agregando referencias a cada tema y/o tecnología mencionada,
para quienes quieran profundizar un poco más.
</p>

<p>
En lugar de hacer <i>Slides</i> generé un sitio <i>web</i> <sup><a id="fnr.fgnulweb" class="footref" href="https://osiux.com/#fn.fgnulweb" role="doc-backlink">4</a></sup> con la
ayuda de <i>Hugo Ruscitti</i> <sup><a id="fnr.hugoruscitti" class="footref" href="https://osiux.com/#fn.hugoruscitti" role="doc-backlink">5</a></sup> quien armó el <i>visor de
videos multiples</i> <sup><a id="fnr.visorvideos" class="footref" href="https://osiux.com/#fn.visorvideos" role="doc-backlink">6</a></sup>, el cual utilicé para mostrar varios
videos al mismo tiempo.
</p>

<p>
Como varias personas preguntaron sobre la herramienta que utilicé para
hacer los gráficos, armé un <i>post</i> <sup><a id="fnr.graphviz-slides" class="footref" href="https://osiux.com/#fn.graphviz-slides" role="doc-backlink">7</a></sup> detallando cómo
generé los gráficos y la <code>línea de tiempo</code> <sup><a id="fnr.timeline2dot" class="footref" href="https://osiux.com/#fn.timeline2dot" role="doc-backlink">8</a></sup> usando
<i>GraphViz</i> <sup><a id="fnr.graphviz" class="footref" href="https://osiux.com/#fn.graphviz" role="doc-backlink">9</a></sup>
</p>

<p>
Al final agregué las preguntas y respuestas que surgieron en <i>swapcard</i>
</p>
</div>
</section>
<section id="outline-container-orgfe045f4" class="outline-2">
<h2 id="orgfe045f4">Apertura de Guido Vilariño</h2>
<div class="outline-text-2" id="text-orgfe045f4">
<p>
Bueno, bienvenidos nuevamente al <i>track Infra</i> en <i>Nerdearla</i>!
</p>

<p>
Todo bien? Cómo la están pasando? Eh ahí va ese público todavía!
</p>

<p>
Bueno muy bien, muchas gracias por estar acá!
</p>

<p>
Dije ya varias veces, lo vuelvo a decir la novena edición de <i>Nerdearla</i>
2022, los 10 años de <i>Sysarmy</i> <sup><a id="fnr.sysarmy" class="footref" href="https://osiux.com/#fn.sysarmy" role="doc-backlink">10</a></sup> y aquí estamos, acá Trac
Infra, tenemos un Trac Dev Online y un Trac Sec Online y el Trac de
DataScience allá en el otro auditorio, acá en la Ciudad Cultural Konex
del 19 al 22 de Octubre, nada venite, todavía estas a tiempo de venirte,
esta tarde, Viernes y Sábado si nos estas viendo por Internet pero si
estás acá, ya estás disfrutando de todas las actividades que tenemos en
los Stands, de los auditorios, de lugares para hacer coworking, juegos,
etc hay de todo gracias! Gracias  por estar acá y acompañarnos!
</p>
</div>
</section>
<section id="outline-container-org9913264" class="outline-2">
<h2 id="org9913264">Presentación</h2>
<div class="outline-text-2" id="text-org9913264">
<p>
Y ahora se viene viene la última tanda de charlas, no es la última
charla, la última tanda, son varias las charlas que tenemos por delante.
</p>

<p>
Bueno y ahora vamos a hablar de algo que a mi me gusta mucho, que es el
<i>Software Libre</i>. A quién le gusta el <i>Software Libre</i> acá?
</p>

<p>
Vamos todavía! Mirá, tenes <i>FANs</i>! Joya
</p>

<p>
Bueno entonces, vamos a recibir a <i>OSiRiS GóMeZ</i>, que es socio de
<code>gcoop</code> <sup><a id="fnr.gcoop" class="footref" href="https://osiux.com/#fn.gcoop" role="doc-backlink">11</a></sup>, que es una <i>Cooperativa de Software Libre</i>&#x2026;
</p>

<p>
<code>Héroes sin capa, como solemos decir...</code>
</p>

<p>
Es programador y Administrador de GNU/Linux (viste que dije GNU y no
G-N-U, sino <i>Richard Stallman</i> <sup><a id="fnr.rms" class="footref" href="https://osiux.com/#fn.rms" role="doc-backlink">12</a></sup> se enoja) es autodidacta y
fanático de automatizar todo desde una terminal (una <code>tty</code> en realidad
dice acá) y esta muy interesado en divulgar el uso del <i>Software Libre</i>,
así que&#x2026;
</p>

<p>
Los dejo con <i>OSiRiS</i> un aplauso por favor!
</p>
</div>
</section>
<section id="outline-container-org6923ed5" class="outline-2">
<h2 id="org6923ed5">Intro</h2>
<div class="outline-text-2" id="text-org6923ed5">
<p>
Huy que alto que estoy!, se escucha?, si?, perfecto!
</p>

<p>
(bueno, ahí me parece que se escucha mejor
</p>

<p>
Primero pido disculpas si por ahí toso porque vengo mal de la garganta.
</p>

<p>
Y lo que voy a intentar hacer en <i>25 minutos</i>, si es que lo logro es
contarle la historia de <i>gcoop</i> y <code>Banco Credicoop</code> <sup><a id="fnr.bccl" class="footref" href="https://osiux.com/#fn.bccl" role="doc-backlink">13</a></sup> en estos
últimos <i>4 años</i>.
</p>

<p>
Básicamente es un <code>proyecto de migración de toda la Infraestructura de
las Filiales</code>, son muchas, en todo el país y bueno, fue todo un desafío,
lo logramos!
</p>

<p>
Pero vamos a ir viéndolo paso a paso un poco como lo fuimos viviendo.
</p>
</div>
</section>
<section id="outline-container-orgb0379ba" class="outline-2">
<h2 id="orgb0379ba"><a href="http://filiales-gnu-linux.g.coop.ar/lab.html"><code>lab</code> <i>laboratory</i></a></h2>
<div class="outline-text-2" id="text-orgb0379ba">

<div id="org9fb3f71" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/lab-10.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/lab-10.png" alt="lab-10.png"></a>
</p>
</div>

<p>
Inicialmente tuvimos una etapa de laboratorio, en esta etapa de
laboratorio teníamos que analizar si era posible hacer este proyecto de
migración y con qué herramientas libres era posible hacerlo?
</p>

<p>
Básicamente lo que detectamos es que primero íbamos a usar <i>Ansible</i>
porque nosotros ya lo veníamos usando en <i>gcoop</i> y estábamos muy
contentos con el uso de <i>Ansible</i>, eh, básicamente era hacer roles y
<i>playbooks</i>, este código que lo escribíamos iba a estar en un
repositorio <i>GitLab</i> y este repositorio <i>GitLab</i> iba a ser obtenido como
Infraestructura como Código desde la herramienta <i>AWX</i> para hacer el
despliegue o el <i>deploy</i> en todos los equipos que hiciera falta y
algo&#x2026;
</p>

<p>
(a ver si me funciona esto&#x2026;, si, no, ahí)
</p>

<p>
La barrita que se ve abajo (vamos a intentar que se quede quieta por un
minuto) es una línea de tiempo de todos los proyectos que terminamos
utilizando finalmente en algún momento del proyecto, estoy hablando de
casi 4 años y lo interesante es que el primer día que empezamos esto,
que fue en el 2018 no teníamos ni idea que esa barrita la íbamos a estar
usando es decir, que hay un montón de proyectos de distintas comunidades
de desarrollo de Software Libre, alrededor del mundo que estaban
haciendo proyectos que luego nosotros los íbamos a terminar usando y
esto es lo importante del Software Libre o sea que nos potenciamos todos
y todas, este&#x2026; Construyendo y devolviendo finalmente algo más!
</p>

<p>
Teniendo Ansible y teniendo AWX con GitLab ya podíamos empezar a hacer
un despliegue masivo, pero el primer impedimento que encontramos es que
teníamos que reemplazar un puesto de trabajo, el puesto de trabajo que
tenía el Banco en ese momento era un Sistema Operativo que tenía 2000 en
su nombre y estábamos en el 2018, así que tenía un par de años
desactualizado!
</p>

<p>
(no se escucha? ah bueno esta bien perdón, pensé que no se escuchaba)
</p>

<p>
Y un requerimiento que teníamos era que estos puestos de trabajo
necesitaban que se conectaran a los usuarios que estaban en un AD
(Active Directory), entonces ese AD estaba en CasaCentral y los puestos
de trabajo estaban desparramados&#x2026;
</p>

<p>
(se escucha? Ahí?)
</p>

<p>
&#x2026; Por distintas ciudades, en todo el país&#x2026;
</p>

<p>
(yo no sé si me corro, se escucha muy fuerte? Esta bien? Bueno, si..si,
no..no, si..si, no..no)
</p>

<p>
Bueno finalmente estábamos así, teníamos un puesto de trabajo basado en
Debian, era claro que íbamos a usar eso y teníamos el AD, así que
teníamos que encontrar algo que, una pieza que una esto en el medio y
esto se llama IPA, es un desarrollo libre que lo pueden utilizar para
integrar.
</p>

<p>
(yo? Agarro&#x2026; Perdón&#x2026; Tengo 2 manos no me había dado cuenta!)
</p>

<p>
Bueno&#x2026; Conseguimos entonces, usuarios que hablen con el AD, este,
mediante IPA y finalmente la otra pata que nos faltaba era la parte de
servidores, en cada sucursal del Banco había un servidor, éste en lugar
de terminar con un 2000, terminaba con un 4 (el Software) y también en
el 2018 imagínense!
</p>

<p>
Y vía una VPN íbamos a llegar al servidor, el servidor iba a estar
basado en Debian, una distribución que se llama Proxmox, iba a
virtualizar e iba a tener un montón de máquinas virtuales con Debian
nuevamente para completar el esquema esa fue la etapa de Laboratorio,
seis meses tardamos para darnos cuenta de eso!
</p>
</div>
</section>
<section id="outline-container-org98c1b10" class="outline-2">
<h2 id="org98c1b10"><a href="http://filiales-gnu-linux.g.coop.ar/dev.html"><code>dev</code> <i>develop</i></a></h2>
<div class="outline-text-2" id="text-org98c1b10">

<div id="org22d5f20" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/awx-pve-deploy-14.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/awx-pve-deploy-14.png" alt="awx-pve-deploy-14.png"></a>
</p>
</div>

<p>
Y pasamos a una etapa de Desarrollo!
</p>

<p>
(a ver si funciona esto? Poquito ahí, estamos mejor)
</p>

<p>
En la etapa de desarrollo ya imaginamos cómo hacer el despliegue de
estos servicios y este despliegue de servicios básicamente es el AWX se
conecta al GitLab, obtiene el código, con ese código se comunica al
iDRAC que es la interfaz de administración de un servidor DELL y se
ocupa de crear el storage, este, configurar la BIOS y reiniciar el
equipo.
</p>

<p>
Ni bien reinicia el equipo, el Proxmox empieza a correr:
</p>

<ul class="org-ul">
<li>habla con el NodoVPN, obtiene una IP</li>
<li>habla con un servidor PXE, obtiene una imagen con un Kernel</li>
<li>bootea, obtiene una imagen base</li>
<li>va a un CDN local, busca los recursos locales,</li>
<li>lo que no tiene localmente va a buscar a CasaCentral (cuando digo</li>
</ul>
<p>
CasaCentral es porque podemos estar en cualquier Filial, en cualquier
punto del país)
</p>
<ul class="org-ul">
<li>y finalmente si hay que instalar paquetes de Debian, necesitamos un</li>
</ul>
<p>
repositorio APT y tenemos una cache local
</p>
<ul class="org-ul">
<li>pero si en la cache local no esta el paquete que necesitamos, se</li>
</ul>
<p>
accede a CasaCentral a otro repositorio de cache de cache y finalmente
se instalan todos los paquetes
</p>
<ul class="org-ul">
<li>y de esta manera tenemos un servidor, este.. desde cero, recién</li>
</ul>
<p>
instalado!
</p>

<p>
Ahora, pensando en&#x2026; Mas&#x2026; En verlo&#x2026;
</p>

<p>
(a ver si es posible, acá tenemos&#x2026;)
</p>

<p>
Ahí esta el inicio de la interfaz de iDRAC, de fondo lo que ven en verde
y negro soy yo jugando para obtener debug, pero el proceso es
automatizado es decir:
</p>

<ul class="org-ul">
<li>desde AWX se disparó la conexión</li>
<li>se levanta el servidor el servidor toma una interfaz por PXE</li>
<li>va a obtener una imagen de Debian que va a ser autoinstalable, es un</li>
</ul>
<p>
proceso que dura una serie de minutos
</p>
<ul class="org-ul">
<li>y el operador que dispara ejecución desde la interfaz de</li>
</ul>
<p>
administración de AWX, no tiene que hacer nada, mas que esperar!
</p>

<p>
Y de hecho en el momento de generación de servidores, imaginen son 300
filiales, había que generar 300 servidores llegaron a generar 3
servidores al mismo tiempo, de esta manera en paralelo lo generaban en
CasaCentral, este simplemente abriendo la caja conectando 2 cables de
red y desde AWX disparando la ejecución y esperar, no sé, creo que
máximo 1 hora y tenías 3 servidores instalados y configurados desde
cero, con todos los componentes que tenían dentro, es decir:
</p>

<ul class="org-ul">
<li>Primero se hace un Debian Net Install que es lo que estamos viendo ahí</li>
</ul>
<p>
de manera acelerada
</p>
<ul class="org-ul">
<li>Luego se reinicia el equipo</li>
<li>Se dá de alta el equipo solo al AWX, en el inventario, le dice&#x2026; Soy</li>
</ul>
<p>
tal MAC, soy tal IP, soy tal equipo
</p>
<ul class="org-ul">
<li>y a partir de ahí el operador puede disparar la segunda ejecución que</li>
</ul>
<p>
es.. Bueno ahora dejas de ser un Debian base y pasas a ser un Proxmox
</p>
<ul class="org-ul">
<li>y luego de que ya te convertiste en un Proxmox, este pasa a &#x2026; Un</li>
</ul>
<p>
circuito que lo que hace es crear las 10 virtuales que hacen falta y
</p>
<ul class="org-ul">
<li>y después un tercer circuito que lo que hace es crear los servicios</li>
</ul>
<p>
que hay dentro de cada virtual y todo el proceso es de manera
automatizada
</p>
<ul class="org-ul">
<li>y finalmente&#x2026; Nada, queda funcionando un servidor que va a tener</li>
</ul>
<p>
todas las virtuales que necesita!
</p>

<p>
Pero además va a tener la capacidad de generar otro servidor exactamente
igual, este con los mismos pasos es decir:
</p>

<ul class="org-ul">
<li>para generar un servidor usamos un servidor</li>
<li>para generar otro servidor usamos ese mismo servidor generado</li>
<li>recursividad le dicen&#x2026;</li>
</ul>

<p>
Workstation&#x2026; Bueno con workstation nos pasa que como eran muchas, ya
no eran 300, eran 3000, lo que hicimos es una imagen base, esa imagen
base se envió a clonar con el fabricante de las workstations
</p>

<p>
Y lo que había que hacer después era, seleccionar esa workstation y
aplicarle los cambios, lo que haya de nuevo y básicamente enrolarla a la
red
</p>

<p>
(acá lo que vamos a ver, voy a ver si puedo pausar un poco&#x2026;)
</p>

<p>
Eh&#x2026; A la derecha&#x2026;si.. Estoy en un servidor Proxmox con una virtual,
para jugar en Desarrollo.
</p>

<p>
Y a la izquierda tengo la interfaz de AWX y básicamente lo que tengo es
identificado en el inventario la IP del host, la MAC, el hostname y a
que Filial pertenece, en este caso es la 661.
</p>

<p>
Y a la derecha lo que voy a ir viendo es que lo que va a ejecutar a la
izquierda AWX a la derecha se va a materializar de alguna manera en este
caso es un ejemplo bastante simple, que es cambiar el fondo de pantalla
pero lo interesante es que se hace desde CasaCentral, la workstation
puede estar en cualquier lugar del país.
</p>

<p>
Y el operador solo ve la interfaz de AWX, nunca ve la pantalla de la
workstation, simplemente elige una serie de plantillas y dentro de la
plantilla lo que elije es el límite.
</p>

<p>
El límite es básicamente uno o mas equipos en conjunto que va deployar
siempre se deployan en paralelo,
</p>

<p>
Este.. Todos lo que hagan falta es importante el límite en eso y una vez
que se ejecuta en el panel de control lo que van a ver es un montón de
mensajes.
</p>

<p>
(ahí se ve medio chico pero&#x2026; A ver si hago zoom&#x2026;si..eh)
</p>

<p>
Lo que esta verde esta bien, lo que esta rojo es error grave, este
naranjita es cuando cambia algo de valor y celestito cuando se lo pudo
saltear porque no era hecesario hacerlo.
</p>

<p>
El esquema es bastante simple es una página web, se eligen valores, esos
valores&#x2026;
</p>

<p>
(vamos a hacer una pausa ahí, a ver&#x2026;)
</p>

<p>
Ahí por ejemplo vemos, estamos en una workstation y vemos las variables
que están cargadas dentro del AWX y dice por ejemplo el
default<sub>background</sub> y el nombre de la imagen y básicamente ese valor
proviene desde el GitLab y esta versionado, pero desde el panel de
Administración de AWX, si tenés permisos suficientes, lo podés cambiar y
si lo cambias, como es en este caso acá, eh.. Esta tratando de cambiar
el fondo de la pantalla vamos a ver si lo logra en esta ejecución, creo
que hubo un error ahí.
</p>

<p>
(ya ni me acuerdo lo que hice&#x2026;)
</p>

<p>
Si, efectivamente ahí dice <code>gcoop.jpg</code> y dice fallido y si miramos en el
<i>log</i>&#x2026; Ahí va a estar bajando&#x2026; Ahí donde esta en rojo es porque esta
tratando de buscar una imagen que no existe, entonces ahora lo que va a
ir haciendo es&#x2026; No hay ningún problema, el operador puede cambiar el
nombre de archivo por el nombre de archivo que corresponde, ahí puso el
nombre correcto, le dice guardar.
</p>

<p>
Volver a ejecutar y se ejecuta sobre el equipo fallido, que puede ser 1
o muchos y una vez que le dé verde, o sea el operador solo espera que le
de verde, si le da verde esta todo bien y sigue con otra plantilla o con
otro equipo y si le da rojo, algo pasó&#x2026;
</p>

<p>
Y así que cambia inmediatamente en el lado derecho, en el puesto de
trabajo al usuario mientras estaba <i>&laquo;logueado&raquo;</i>, es decir, es bastante
simple el ejemplo pero también sirve para comentar de que cualquier
tarea por mas pequeña que sea, se puede automatizar y de hecho los
puestos de trabajo, como son 3000, <b><b>los usuarios no tienen permiso para
nada</b></b>, es decir <b><b>todo se hace desde <i>CasaCentral</i></b></b> de manera
automatizada, centralizada, están todos versionados los cambios, porque
<code>es la única manera de mantener el control sobre tantos equipos</code>&#x2026;
</p>
</div>
</section>
<section id="outline-container-orgf76f841" class="outline-2">
<h2 id="orgf76f841"><a href="http://filiales-gnu-linux.g.coop.ar/dep.html"><code>dep</code> <i>deploy</i></a></h2>
<div class="outline-text-2" id="text-orgf76f841">

<div id="orgbb3183f" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/awx-wst-deploy-09.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/awx-wst-deploy-09.png" alt="awx-wst-deploy-09.png"></a>
</p>
</div>

<p>
Bueno, entonces ahí ya estábamos listos para hacer el despliegue&#x2026;
</p>

<p>
Para hacer el despliegue es hacer esto mismo pero con muchas
<i>workstations</i> al mismo tiempo entonces básicamente se empieza a
complejizar, es similar a lo anterior es decir:
</p>

<ul class="org-ul">
<li><i>AWX</i> se comunica con <i>GitLab</i>, obtiene el código</li>
<li>y va a ejecutar a un equipo, en este caso 3 puestos de trabajo</li>
<li>éstos 3 puestos de trabajo obtienen los cambios, pero necesitan</li>
</ul>
<p>
recursos locales
</p>
<ul class="org-ul">
<li>algunos recursos locales son la cache de <i>APT</i> local</li>
<li>un <i>CDN</i> local que es un <code>nginx</code> que tenemos ahí en una /VM /en un</li>
</ul>
<p>
servidor,
</p>
<ul class="org-ul">
<li>pero después necesita recursos contra el <i>FileServer</i> que esta dentro</li>
</ul>
<p>
de la Filial
</p>
<ul class="org-ul">
<li>y finalmente para poder tener <i>login</i> centralizado necesita hablar con</li>
</ul>
<p>
el <i>IPA</i> que esta en <i>CasaCentral</i>
</p>
<ul class="org-ul">
<li>y además con el <i>Cluster</i> de los 4 <i>ADs</i> que están en <i>CasaCentral</i></li>
<li>entonces empieza a haber mucho tráfico de una lado para el otro que es</li>
</ul>
<p>
un poco &#x2026; colorinche, pero bueno, funciona,
</p>

<p>
En la vida real casi nadie ve que esta pasando todo esto por detrás,
dentro de <i>AWX</i> o se ve verde o se ve rojo y salió todo bien o nos
llaman.
</p>
</div>
</section>
<section id="outline-container-orgbfeb41b" class="outline-2">
<h2 id="orgbfeb41b"><a href="http://filiales-gnu-linux.g.coop.ar/stg.html"><code>stg</code> <i>staging</i></a></h2>
<div class="outline-text-2" id="text-orgbfeb41b">
<p>
Bueno, siguiente etapa, ya estamos para <i>staging</i>!
</p>


<div id="org91c68fb" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/filiales-gnu-linux-03-hardware.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/filiales-gnu-linux-03-hardware.png" alt="filiales-gnu-linux-03-hardware.png"></a>
</p>
</div>

<p>
<i>Staging</i>, básicamente&#x2026; Es decir salir a producción en este caso pero
con una sola Filial, en lugar de con 300 para ver si efectivamente la
solución anda
</p>

<p>
Y ahí nos encontramos con cosas, no? 
</p>

<p>
Bueno no solo hay 3000 <i>workstations</i>, hay miles de periféricos
distintos!
</p>


<div id="org40bbca6" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/filiales-gnu-linux-04-printers.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/filiales-gnu-linux-04-printers.png" alt="filiales-gnu-linux-04-printers.png"></a>
</p>
</div>

<p>
(a ver si puedo poner pausa, ahí)
</p>

<p>
En estos periféricos tuvimos que hacer que la <i>workstations</i> que son
todas iguales para un puesto de caja, también sean para el gerente o
para la recepcionista o para quien sea que este dentro del <i>Banco</i> y
tiene que andar ese mismo puesto de trabajo con un <i>Scanner</i> de cheques,
con una impresora de <i>tickets</i> o lo que sea que haga falta&#x2026;
</p>

<p>
La tecnología que utilizamos en resumen es esto:
</p>


<div id="orgda5c9b4" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/filiales-gnu-linux-05-technology.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/filiales-gnu-linux-05-technology.png" alt="filiales-gnu-linux-05-technology.png"></a>
</p>
</div>

<ul class="org-ul">
<li><i>Ansible</i>, <i>Python</i>, <i>AWX</i></li>
<li>del lado de <i>IPA</i>, <i>IPA</i> va con <i>CentOS</i>, <i>CentOS 7</i>, cuando empezamos el proyecto existía <i>CentOS 7</i>, ahora no, ya lo vamos a migrar</li>
<li>del lado de los servidores <i>Debian 10</i>, cuando empezamos era <i>stable</i>, <i>Proxmox 6.3</i></li>
<li>y lo mismo del lado de los puestos de trabajo, ya nos quedó un poquito viejo&#x2026;</li>
</ul>

<p>
<code>Como todo proyecto de migración grande, cuando terminas de migrarlo,
tenes que volver a empezar!</code>
</p>

<p>
La ventaja es que sería solo actualizar algunos <i>playbooks</i> y <i>roles</i>,
total, la herramienta de despliegue ya la tenemos!
</p>

<p>
Bueno, tenemos 10 máquinas virtuales, para recapitular, con distintos
usos este.. <i>PrintServer</i>, <i>FileServer</i>&#x2026;
</p>


<div id="org5b0de3d" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/filiales-gnu-linux-06-vms.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/filiales-gnu-linux-06-vms.png" alt="filiales-gnu-linux-06-vms.png"></a>
</p>
</div>

<p>
Dentro de <i>GitLab</i> tenemos mas de 200 repositorios!
</p>


<div id="org9b4883b" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/filiales-gnu-linux-07-repositories.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/filiales-gnu-linux-07-repositories.png" alt="filiales-gnu-linux-07-repositories.png"></a>
</p>
</div>

<p>
Acá por ahí hago una pausa, este fue un cambio importante de trabajar,
normalmente en un proyecto por mas grande que sea con 1, 2, 5
repositorios&#x2026;
</p>

<p>
Y pasar a trabajar con 200 repositorios&#x2026; es un caos!
</p>

<p>
Es un caos y encima esta todo versionado y muchos repos están anidados
que unos dependen de los otros y bueno es posible!. <i>GitFlow</i> ayudó
bastante ahí.
</p>

<p>
Y lo importante ahí es que hay 1 repositorio que se llama <code>inventory</code>
que es todo el inventario de todos los equipos que estén dando vuelta,
<code>están versionados en un único lugar</code> y hay un repositorio que se llama
<code>awx</code>, es decir, <code>toda la información para que se corra el despliegue de
/AWX</code>, que se podría realizar manualmente desde la interfaz de
administración la hicimos vía código y entonces, ese código se envía y
se <i>deploya</i> y queda versionado.
</p>

<p>
(bue&#x2026; Y ahí se colgó todo&#x2026;no? Hasta acá llegamos!)
</p>

<p>
Bueno ahí <i>AWX</i>, la cantidad de proyectos que tenemos, mas de 200
proyectos, 300 inventarios, nada, muchas plantillas, cada una hace algo
distinto
</p>


<div id="orgef30140" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/filiales-gnu-linux-08-awx.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/filiales-gnu-linux-08-awx.png" alt="filiales-gnu-linux-08-awx.png"></a>
</p>
</div>

<p>
(y a ver si&#x2026; Pausa)
</p>

<p>
Bue, esto es un resumen de tiempos de cómo venimos hasta el momento es
decir, tuvimos 6 meses de laboratorio, 1 año de desarrollo, 1 año de
despliegue de la solución, 87 días en <i>staging</i>, es decir tuvimos una
Filial casi 3 meses operativa funcionando, totalmente migrada, servidor
y nuevo.
</p>


<div id="org933c38e" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/filiales-gnu-linux-10-time.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/filiales-gnu-linux-10-time.png" alt="filiales-gnu-linux-10-time.png"></a>
</p>
</div>

<p>
Y a partir de ahí empezó la tarea ardua que nosotros hasta acá, digamos
hasta ahí llegamos, nosotros diseñamos la solución, pero la
implementación la hacía el equipo de <i>Implementaciones</i> del <i>Banco</i> la
verdad que lograron hacerlo en menos de 1 año! <code>En 347 días migraron 300
/Filiales</code>, llegaron a migrar 3 por noche!
</p>

<p>
Y eso es algo importante de entender, estamos hablando de un <i>Banco</i> y
en un <i>Banco</i> o sea como cierra a las 06:00, abre a las 09:00. Bueno,
esa era la ventana que tenía el equipo de <i>Implementaciones</i> para
cambiar el servidor, cambiar el <i>rack</i>, cambiar los <i>switchs</i>, recablear
todo, instalar un <i>Sistema Operativo</i> nuevo, hacer el <i>deploy</i> desde
<i>CasaCentral</i> y que a la mañana todo siga operando, como que la gente
vaya y haga no sé su plazo fijo y funcione todo!
</p>

<p>
Y se hizo obviamente en 2 etapas, se hizo una primer etapa de servidores
y una segunda etapa de <i>workstations</i>, pero inicialmente, es decir
<code>todas las Filiales, pasaban de un día al otro a tirar la
infraestructura que tenían y a arrancar con una nueva</code>.
</p>

<p>
Y algo importante es que, una diferencia que tuvo este proyecto, es que
antes la <i>VPN</i> estaba por fuera y en este caso el servidor que
reemplazaba la infraestructura de la <i>Filial</i> tenía la <i>VPN</i> dentro del
servidor virtualizado, así que fue todo un desafío eso bueno y
terminamos en 2021, el 9 de Septiembre, se terminó el despliegue de
todas las Filiales.
</p>

<p>
Entramos ahí lo que sería soporte, que en realidad bueno como saben,
soporte de algo recién migrado es como terminar un poco lo que veníamos
haciendo y a partir de ahí bueno&#x2026; Mantenimiento evolutivo por así
decirlo, este hay mejoras todos los días y nuevos desafíos y desarrollos
que solucionar.
</p>

<p>
(esperen&#x2026;que no me anda nada)
</p>
</div>
</section>
<section id="outline-container-org0508773" class="outline-2">
<h2 id="org0508773"><a href="http://filiales-gnu-linux.g.coop.ar/prd.html"><code>prd</code> <i>production</i></a></h2>
<div class="outline-text-2" id="text-org0508773">

<div id="org78bc938" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/awx-bccl-center.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/awx-bccl-center.png" alt="awx-bccl-center.png"></a>
</p>
</div>

<p>
Bueno vamos a saltar a Producción Estamos en Producción!
</p>

<p>
Esto es una manera de ver producción!
</p>

<p>
(vamos a ver si podemos aumentar)
</p>


<p>
Esta es una interpretación de lo que es el <i>Banco</i> migrado para
nosotros!
</p>

<p>
En el centro de todo eso, esta <i>AWX</i>, cada globito es un equipo que
podemos administrar&#x2026;
</p>

<p>
(vamos a acercarnos!)
</p>

<p>
Ven aquí en el centro, esta <i>AWX</i> que es un solo equipo que esta
virtualizado en <i>CasaCentral</i>, que se va a conectar por ejemplo acá en
rojo/naranja la <i>Filial 105</i> y esa <i>Filial 105</i> bueno tiene sus 10
máquinas virtuales, su servidor <i>Proxmox</i>, su <i>PrintServer</i> y sus 10 o
15 <i>workstations</i> ahí y lo mismo le va a pasar a la <i>252</i> que esta ahí
al lado, a la <i>85</i> y a todas las demás!
</p>

<p>
Es un caos!
</p>

<p>
Yo no sé como hacían esto antes! De que usáramos <i>AWX</i> y tuviéramos
versionado todo y <i>Ansible</i>.
</p>

<p>
Pero la verdad es que&#x2026; <code>La única manera de poder administrar tantos
equipos a tan gran escala y saber que es lo que le pasa a cada uno</code> y
ver porqué no anda, no se, la impresora de la <i>Filial 24</i>, es como&#x2026;
</p>

<p>
<code>No hay otra manera, tiene que ser centralizado y tiene que estar
automatizado!</code>
</p>
</div>
</section>
<section id="outline-container-org2d24236" class="outline-2">
<h2 id="org2d24236"><a href="http://filiales-gnu-linux.g.coop.ar/sup.html"><code>sup</code> <i>support</i></a></h2>
<div class="outline-text-2" id="text-org2d24236">
<p>
<a href="https://osiux.com/img/filiales-gnu-linux/awx-pve-deploy-14.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/awx-pve-deploy-14.png" alt="awx-pve-deploy-14.png"></a>
(no sé como venimos de tiempo?, me quedan 3 minutos!)
</p>

<p>
Uno de los problemitas que tuvimos cuando empezamos Producción fue esto!
</p>

<p>
Que nosotros todas las pruebas que hicimos de <i>login</i> de usuarios, lo
hacíamos, si bien simular cierta carga, nunca íbamos a tener la carga
que era producción que es básicamente cerca de las 10:00 de la mañana
tenés 2000 personas que se <i>&laquo;loguean&raquo;</i> al mismo tiempo!
</p>

<p>
Y entonces eso bueno generó, algunos segundos de demora por ejemplo ahí
estamos viendo que hay&#x2026; Mas de 20 segundos de demora en el <i>login</i> es
como todo un problema!.
</p>

<p>
Entonces bueno, esto es algo que mitigamos de alguna manera generando
una sincronización de <i>cache</i> de <i>login</i> y una <i>API</i> en el medio para
justo a tiempo tratar de sincronizar esos usuarios y bueno la solución
definitiva va a venir dentro de pronto con un <i>Cluster de IPAs</i> en lugar
de uno solo, creemos que va a ser la solución pero bueno es uno de los
problemas que hay con la concurrencia de muchos usuarios al mismo tiempo
</p>

<p>
(y se me perdió todo, esperen, <code>F5</code>)
</p>
</div>
</section>
<section id="outline-container-org90826f6" class="outline-2">
<h2 id="org90826f6"><a href="http://filiales-gnu-linux.g.coop.ar/nxt.html"><code>nxt</code> <i>next</i></a></h2>
<div class="outline-text-2" id="text-org90826f6">

<div id="org9110a10" class="figure">
<p><a href="https://osiux.com/img/filiales-gnu-linux/awx-deploy-revision-13.png"><img src="https://osiux.com/tmb/filiales-gnu-linux/awx-deploy-revision-13.png" alt="awx-deploy-revision-13.png"></a>
</p>
</div>

<p>
Bueno, que sigue?
</p>

<p>
Estamos trabajando con muchas cosas en paralelo pero bueno acá, este es
un breve gráfico que básicamente lo que hacemos es la solución de
actualización de <i>AWX</i>, es decir, en el inicio nosotros que hacíamos?
</p>

<p>
Hacíamos una plantilla en <i>AWX</i>, prueba y error, prueba y error hasta
que nos andaba y decíamos bueno ya esta!
</p>

<p>
Y ahora hay que pasarla a producción y a pasarla a Producción bueno
exportábamos un <code>.json</code> y ese <i>JSON</i> lo poníamos en producción a mano
digamos con comandos de un <i>CLI</i> pero básicamente manual y decíamos <i>&laquo;ya
esta!&raquo;</i>
</p>

<p>
Pero bueno, eso no esta piola, que Desarrollo toque Producción, entonces
lo que hicimos es un <i>script</i> que lo que hace es, ni bien empezás a
desarrollar en un <i>branch</i> de tu <i>rol</i> o de tu <i>playbook</i>, ni bien hacés
<code>push</code>, <i>GitLab</i> se ocupa con la <i>CI</i> de hacer todo lo que haga falta
para que esa plantilla se <i>deploye</i>.
</p>

<ul class="org-ul">
<li>primero se <i>deploya</i> en <i>Desarrollo</i></li>

<li>si salió bien, el <i>deploy</i> en <i>Desarrollo</i>, se <i>deploya</i> en <i>Staging</i></li>

<li>y si en <i>Staging</i> ya quedó bien digamos, cumplió los dos pasos y pasó</li>
</ul>
<p>
todo el circuito de pruebas, generamos un <i>release</i>
</p>

<p>
Y le decimos al equipo de <i>Tecnología</i> del <i>Banco</i>, &laquo;che, pueden
<i>deployar</i> tal <i>release</i>&raquo; y el pase a <i>Producción</i> se usa el mismo
<i>script</i> que utiliza <i>GitLab CI</i> pero disparado por un <i>SysAdmin</i> que
dice todo anda &#x2026; (y que desconfía de nosotros&#x2026;!)
</p>

<p>
Bueno, eso es básicamente una idea y un resumen del proyecto de
migración que nos tocó hacer desde <i>gcoop</i>, no lo dije antes pero:
</p>

<p>
<code>gcoop/ es una /Cooperativa de Software Libre/, trabajamos
exclusivamente con /Software Libre/, no tenemos jefes, no tenemos
empleados, todos somos socios y socias y es otra manera de trabajar y es
posible que hagamos cosas asi, como éstas y que funcionen!</code>
</p>

<p>
Así que a partir de ahora, llegué justo con los 20 segundos! Respondo
preguntas, tenemos unos minutos, si se animan? Yo todavía estoy en pie!
</p>
</div>
</section>
<section id="outline-container-org061b318" class="outline-2">
<h2 id="org061b318">Preguntas?</h2>
<div class="outline-text-2" id="text-org061b318">
</div>
<div id="outline-container-org5f2232a" class="outline-3">
<h3 id="org5f2232a">Hola, que tal, buena la charla! Zarpado laburo.. este quería preguntarte cómo hacían, porque me imagino que alguna excepción habrán tenido, cuando encontraban en medio de la noche, este un server o un equipo que no respondía como debía&#x2026;</h3>
<div class="outline-text-3" id="text-org5f2232a">
<p>
Me llamaban!
</p>

<p>
Te llamaban! Guardia todas las noches! Año y pico?
</p>

<p>
No no, al principio, la verdad que el equipo de <i>Implementaciones</i> ahí
fue muchísima gente del lado del Banco.
</p>

<p>
Nosotros solo Diseñamos y Desarrollamos la solución, pero este lo
opera un equipo muy grande propio y también tercerizado digamos de
alguna manera para poder cubrir todo el país.
</p>

<p>
Estamos hablando que tenes una <i>Filial</i> en <i>Salta</i>, este tenes una
<i>Filial</i> en <i>Tierra del Fuego</i>, <i>Neuquén</i>, donde se te ocurra,
entonces&#x2026;
</p>

<p>
Bue, no lo mencioné, esto además fue en <i>Pandemia</i>, o sea empezamos en
el 2018 y el proceso de migración grande fue de 2020-2021&#x2026;
</p>

<p>
Eh, fueron aprendiendo, básicamente al principio nos necesitaban que
estemos ahí acompañando los <i>deploys</i>, después ya solo nos llamaban
cuando había algo raro, este si ese algo raro después se podía
solucionar de alguna manera o automatizar para que no vuelva a
suceder, digamos <code>al otro día hacíamos una nueva plantilla, una nueva
corrección y listo la próxima vez no volvía a pasar</code> o ya sabían como
mitigarlo.
</p>

<p>
Perfecto. Gracias!
</p>

<p>
(Alguna otra Pregunta? Ahí voy&#x2026;)
</p>
</div>
</div>
<div id="outline-container-orgb6c8a93" class="outline-3">
<h3 id="orgb6c8a93">Tuvieron que lidiar, tuvieron estaciones de trabajo que sean <i>laptops</i> o básicamente como lidiaban con intermitencia de que una <i>laptop</i> o una computadora de escritorio pueda estar apagada y <i>Ansible</i>, o sea va desde el servidor hablando a los nodos que afecta</h3>
<div class="outline-text-3" id="text-orgb6c8a93">
<p>
Bueno, si, los puestos de trabajo son unos <i>HP Pro Desktop</i> muy
chiquititos, mini, hermosos, arrancan en menos de 30 segundos, están
operativos, tienen creo que <i>8 GB</i> de <i>RAM</i>, <i>256</i> de <i>SSSD</i> o sea son
máquinas fuertes&#x2026;
</p>

<p>
Tenemos una plantilla que hace un <i>WakeOnLAN</i>, básicamente sobre uno o
más equipos, así que digamos, de ser necesario, primero se corre esa
plantilla y después la ejecución de lo que quieras. Siempre la
ejecución de <i>AWX</i> lo que ejecuta y no encuentra encendido te va a
decir <i>&laquo;che no llegué, no sabe porqué&raquo;</i> y vos le podés decir <i>&laquo;volvé a
ejecutar sobre los que no llegaste&raquo;</i> Ahí en el medio lo que hacés es
bueno, generás otra ejecución para decir <i>prendo todos los equipos</i>.
</p>

<p>
Por ahorro de energía también en un momento nos dijeron que convenía
apagar los equipos, así que también los equipos están programados que
se apagan a cierta hora, así que hay un momento que estas obligado si
queras saber si llegas a todos? Los tenes que prender!
</p>

<p>
Después también te pasan cosas de decir bueno hicimos que cada vez que
un equipo obtiene una <i>IP</i>, va al inventario y se actualiza por si ese
equipo por algún motivo cambió de <i>Filial</i>, que podría pasar.
</p>

<p>
Eh también lo que hicimos es que ese equipo avisa por <i>SNMP</i> su <i>IP</i>,
su <i>hostname</i> y el último <i>deploy</i> que tuvo y entonces después podes
hacer barridos por <i>SNMP</i> para decir <i>&laquo;bueno che, a ver qué equipos
están prendidos y quiénes son?&raquo;</i>
</p>

<p>
Obviamente esto a medida que fuimos trabajando tuvimos que hacer
distintas versiones y siempre esta el dilema de que <i>&laquo;tengo todos los
equipos en la misma versión?&raquo;</i> bueno , hay que preguntar y
<i>redeployar</i>!
</p>
</div>
</div>
<div id="outline-container-orgf119306" class="outline-3">
<h3 id="orgf119306">Buenas Tardes, una pregunta&#x2026; Como dijiste al principio los equipos levantan la imagen de OS desde el servidor y lo instalan en el <i>workstation</i> digamos, no? Mi consulta sería si Uds. evaluaron esta posibilidad por una incapacidad del servidor para levantar máquinas virtuales para <i>deployar</i> todas las <i>workstations</i> requeridas para un <i>Banco</i> o vieron alguna otra ventaja en este sistema? Gracias!</h3>
<div class="outline-text-3" id="text-orgf119306">
<p>
Eh no, parte era de tratar de tener una tecnología y una arquitectura
que el mismo <i>Banco</i> pueda responder, es decir no podíamos salir con
una nave espacial, digamos, tenía que ser&#x2026; Hay un equipo para cada
persona, es un equipo físico y si no hay conexión a <i>CasaCentral</i> o no
funciona algo, ese equipo tiene por lo menos tiene que poder servir
por lo menos para decir, este no se, abre una planilla de cálculo y
escribe <i>NO HAY SISTEMA</i> y lo imprime, digamos por lo menos para eso,
en ese sentido la virtualización también la hicimos con <i>KVM</i>, también
por cuestiones de seguridad y era mucho mas simple en la operatoria de
hacer recambio de equipos, es decir <code>si ante la duda si un equipo no
funciona lo tirás y redeployás y no tenés que pensar que le esta
pasando</code> y son todos iguales, es decir, podés tomar un equipo de la
puerta de entrada y ponerlo en la línea de cajas y tiene que salir
andando, obviamente tiene todos los servicios que necesita para eso,
pero es la idea que sean todos iguales y nada, digamos extraño, no sé
si responde la pregunta&#x2026;
</p>

<p>
&#x2026;pero antes que me olvide&#x2026;
</p>

<p>
Acá puse, bue nuestra web es <a href="https://g.coop.ar/">https://g.coop.ar/</a>
es el dominio nuevo que tenemos ahora en <i>Argentina</i> y parte de la
solución esta ahí.
</p>

<p>
En <code>GitLab</code> <sup><a id="fnr.gitlab-gcoop" class="footref" href="https://osiux.com/#fn.gitlab-gcoop" role="doc-backlink">14</a></sup> y en <code>GitHub</code> <sup><a id="fnr.github-gcoop" class="footref" href="https://osiux.com/#fn.github-gcoop" role="doc-backlink">15</a></sup>, son
<i>roles</i> y <i>playbooks</i> de <i>Ansible</i> que están disponibles para que los
puedan usar y mejorar:
</p>

<ul class="org-ul">
<li><a href="https://github.com/gcoop-libre/ansible-role-deploy-git-repos">https://github.com/gcoop-libre/ansible-role-deploy-git-repos</a></li>
<li><a href="https://github.com/gcoop-libre/ansible-role-git-bare-repos">https://github.com/gcoop-libre/ansible-role-git-bare-repos</a></li>
<li><a href="https://github.com/gcoop-libre/ansible-role-pure-ftpd">https://github.com/gcoop-libre/ansible-role-pure-ftpd</a></li>
<li><a href="https://github.com/gcoop-libre/ansible_role_sssd_conf">https://github.com/gcoop-libre/ansible_role_sssd_conf</a></li>
<li><a href="https://github.com/gcoop-libre/ansible_role_test_users">https://github.com/gcoop-libre/ansible_role_test_users</a></li>
<li><a href="https://github.com/gcoop-libre/ansible_sudoers">https://github.com/gcoop-libre/ansible_sudoers</a></li>
<li><a href="https://gitlab.com/gcoop-libre/ansible_role_apt_pin">https://gitlab.com/gcoop-libre/ansible_role_apt_pin</a></li>
<li><a href="https://gitlab.com/gcoop-libre/ansible_role_freeipa_sssd_tools">https://gitlab.com/gcoop-libre/ansible_role_freeipa_sssd_tools</a></li>
<li><a href="https://gitlab.com/gcoop-libre/ansible_role_hp_linux_tools">https://gitlab.com/gcoop-libre/ansible_role_hp_linux_tools</a></li>
<li><a href="https://gitlab.com/gcoop-libre/ansible_tools">https://gitlab.com/gcoop-libre/ansible_tools</a></li>
<li><a href="https://gitlab.com/gcoop-libre/freeipa-sssd-tools">https://gitlab.com/gcoop-libre/freeipa-sssd-tools</a></li>
</ul>

<p>
Hicimos mas de 200, de los cuales mas de 200, no sé, unos 30 no son
nuestros! Es decir, tomamos roles de la comunidad, si alguien trabaja en
<i>Ansible</i>, <code>Geerlingguy</code> <sup><a id="fnr.geerlingguy" class="footref" href="https://osiux.com/#fn.geerlingguy" role="doc-backlink">16</a></sup> es por ejemplo una buena
base para empezar y los extendemos lo que haga falta y los combinamos
con roles propios!
</p>

<p>
(ahi llevo el micrófono&#x2026;)
</p>
</div>
</div>
<div id="outline-container-orgbc1b287" class="outline-3">
<h3 id="orgbc1b287">Buenas Tardes, muy linda la charla, quería consultar con respecto a los <i>workstation</i>, usaron la distribución <i>Ubuntu</i>, es por alguna razón en particular con respecto a características del <i>Hardware</i> o es por la utilidad del usuario?</h3>
<div class="outline-text-3" id="text-orgbc1b287">
<p>
A mi me gusta <i>Debian</i>, pero el soporte que necesitás para algunas
aplicaciones, no lo vas a encontrar actualizado y nosotros somos una
empresa de <i>Desarrollo</i> que hoy somos 20 personas y estábamos migrando
<i>6300 equipos</i> y dijimos, bueno en algún momento puede ser que esto
escale y no podamos dar soporte, entonces nos apoyamos sobre grandes
empresas de desarrollo de <i>Software Libre</i> a nivel internacional que
puedan dar soporte si nosotros no podemos, entonces lo mejor era
trabajar con alguna <i>distro</i> basada en <i>Debian</i> que tenga algún soporte
comercial de ser necesario, lo mismo para los servicios de servidores.
</p>

<p>
(Acá hay otra pregunta&#x2026;)
</p>
</div>
</div>
<div id="outline-container-org5035ae7" class="outline-3">
<h3 id="org5035ae7">Muy buena la charla, dos, una preguntita simple que es saber que herramienta es esta que hace los gráficos? Y la otra pregunta un poco mas compleja no, eh bueno yo he trabajado con <i>Ansible</i> y es muy bueno para aprovisionar <i>servers</i> y todo lo demás, eh pero creo que también detrás de todo esto hay un gran trabajo de <i>networking</i> para que los servidores tengan acceso a o los <i>workstations</i> tengan acceso a determinado servidor y no sé si hay <i>firewall</i> de por medio o qué? Cómo manejan todo eso también con <i>Ansible</i>? O bueno para que hacerlo manualmente creo que es mucho, no? O tienen alguna otra solución?</h3>
<div class="outline-text-3" id="text-org5035ae7">
<p>
Todo lo que es la infraestructura nueva, esta hecha con <i>Ansible</i> como
código, esto no solo permitió simplificar el despliegue sino que permite
al Departamento de <i>Seguridad Informática</i> y al de <i>Auditoría</i> bueno
revisar que se instala o sea hubo requerimientos específicos que tuvimos
que cumplir pero lo que son reglas de <i>firewall</i> específicas eso lo
maneja otro sector y como si, este para poder <i>deployar</i>, tiene que
estar la regla vigente, no lo manejamos, nosotros solo pedimos un <i>JIRA</i>
para que este funcionando digamos, a nivel equipos lo que sea necesario
va a correr un servicio tal y necesita llegar a tal destino.
</p>

<p>
Y en cuanto a la herramienta, todos los gráficos que están en la
presentación, hasta la línea de tiempo están hechos con <code>GraphViz</code>
porque <i>GraphViz</i> básicamente te permite hacer código, es
decir, <i>yo no hice este dibujo, yo escribí código y ese código se
transformó en ese dibujo</i>.
</p>

<p>
(Alguna pregunta más? Acá adelante&#x2026;)
</p>
</div>
</div>
<div id="outline-container-org0728899" class="outline-3">
<h3 id="org0728899">Gracias&#x2026; Quería consultar cómo se originó todo esto? Porque no&#x2026; Cómo fue un requerimiento del Banco? Uds. se lo vendieron&#x2026;?</h3>
<div class="outline-text-3" id="text-org0728899">
<p>
<i>gcoop</i>&#x2026; Eh&#x2026; Yo tengo <b><b>15 años</b></b> <sup><a id="fnr.vivir-del-sl" class="footref" href="https://osiux.com/#fn.vivir-del-sl" role="doc-backlink">17</a></sup> en <i>gcoop</i>,
estoy desde el 2007 a los poquitos meses que inició, no soy fundador,
pero soy de la primera camada digamos&#x2026;
</p>

<p>
Y desde entonces que le ofrecemos servicios y consultoría al <i>Banco</i>,
básicamente hicimos desarrollos de <i>CRM</i>, el sistema de misión crítica
del <code>Centro de Contacto Telefónico</code> y <code>Gestión de Contactos del
Asociado</code> <sup><a id="fnr.gcoop-gca" class="footref" href="https://osiux.com/#fn.gcoop-gca" role="doc-backlink">18</a></sup>, es decir cuando llamas por teléfono, bueno
hay un <i>CRM</i> detrás que nosotros desarrollamos desde el inicio de la
cooperativa, así que tiene 14 años funcionando y muchas mas
migraciones que esta digamos, pero bueno este sin desmerecerlo es un
<i>ABM</i> gigante pero que tiene 5000 usuarios, entonces es bastante
crítico.
</p>

<p>
Así hemos desarrollado otros proyectos, nunca habíamos hecho
infraestructura hasta el 2018, o sea fue la primera vez y ellos
analizaron diferentes ofertas y propuestas y como tienen una línea clara
de trabajar con <i>Software Libre</i>, este, acudieron a nosotros y estuvimos
6 meses convenciéndolos de que era posible y bueno lo pudimos hacer y
bueno lo estamos mejorando igual esto, todos los días hay un desafío
nuevo.
</p>

<p>
Estamos, Gracias!
</p>
</div>
</div>
</section>
<section id="outline-container-org941a712" class="outline-2">
<h2 id="org941a712">Cierre</h2>
<div class="outline-text-2" id="text-org941a712">
<p>
Muchas Gracias <i>OSiRiS</i>!  Bueno Muchas Gracias!
</p>

<p>
Excelente charla! Grande <i>gcoop</i> aguante el <i>Software Libre</i> y el
desarrollo de ese estilo, hace tanto falta mas!
</p>

<p>
Les pido que se queden acá mientras cerramos la siguiente presentación
que aviso va a ser en Inglés, así que quienes necesiten, detrás tenemos
<i>Headsets</i> para la traducción en tiempo real de nuestras estrella de la
noche, ahí en la cabina, así que bueno, muchas gracias nuevamente
<i>OSiRiS</i>, un nuevo aplauso, nos vemos en unos minutos&#x2026;
</p>
</div>
</section>
<section id="outline-container-org4f4a239" class="outline-2">
<h2 id="org4f4a239">Questions</h2>
<div class="outline-text-2" id="text-org4f4a239">
<p>
El evento utilizaba la plataforma <i>swapcard</i> y luego de la charla pude
ver que hicieron varias preguntas, algunas fueron contestadas en el
momento, pero otras quedaron pendientes, asi que respondo cada pregunta
por acá.
</p>
</div>
<div id="outline-container-orge651805" class="outline-3">
<h3 id="orge651805"><i>Por que instalan Debian y luego PVE arriba? Era mas sencillo que instalar directamente PVE con su propia imagen?</i></h3>
<div class="outline-text-3" id="text-orge651805">
<p>
Principalmente porque de esta manera podíamos automatizar por completo
la instalación, hay algunas configuraciones del <i>Sistema Operativo</i> que
deben ser realizadas antes de instalar <i>Proxmox</i>, por ejemplo la
configuración de red es bastante compleja, los servidores cuentan con 10
placas de red y debíamos fijar versiones de paquetes además de registrar
el servidor en el inventario de <i>AWX</i>.
</p>
</div>
</div>
<div id="outline-container-orge7408ff" class="outline-3">
<h3 id="orge7408ff"><i>los playbooks como se loguean a los equipos, usan intercambio de llaves de ssh ? o que método?</i></h3>
<div class="outline-text-3" id="text-orge7408ff">
<p>
<i>Ansible</i> es <i>agentless</i> y por ello <i>AWX</i> se conecta a los equipos
utilizando llaves <i>SSH</i>, las mismas son definidas y configuradas en el
proceso de instalación <i>PXE /tanto para servidores como /workstations</i>.
</p>
</div>
</div>
<div id="outline-container-org7fa74c7" class="outline-3">
<h3 id="org7fa74c7"><i>que es eso de gcoop podrías desarrollarlo un poco mas la manera de trabajo?</i></h3>
<div class="outline-text-3" id="text-org7fa74c7">
<p>
<i>gcoop</i> es la <i>Cooperativa de Software Libre</i>, nació en 2007 y hoy
cuenta con 20 personas organizadas de manera horizontal y
autogestionadas (es decir, <i>no hay jefxs ni empleadxs</i>), es una
<i>cooperativa de trabajo</i> y se dedica a la consultoría y desarrollo de
software utilizando exclusivamente <i>Software Libre</i>. <i>MAS DATOS</i> en la
web de <a href="https://g.coop.ar/">gcoop.coop</a>
</p>
</div>
</div>
<div id="outline-container-org8f779c6" class="outline-3">
<h3 id="org8f779c6"><i>A que te referías en la parte de cuando ejecutan los playbooks, &laquo;Lo importante es el límite&raquo;?</i></h3>
<div class="outline-text-3" id="text-org8f779c6">
<p>
Al ejecutar un <i>playbook</i>, el mismo se ejecutará en todos los <i>hosts</i> de
un inventario y por ejemplo el inventario <code>wst</code> (<i>workstations</i>) cuenta
con 3000 <i>hosts</i>, si no especificas un límite, el <i>playbook</i> por defecto
intentará ejecutarse en los 3000 <i>hosts</i> en paralelo y difícilmente
quieras y/o necesites realizarlo en tantos equipos al mismo tiempo, lo
mas prudente es establecer un límite, por ejemplo por Filial, aunque hay
Filiales con menos de 10 equipos, algunas cuentan con mas de 60 equipos,
se puede especificar de a 1 o mas <i>hosts</i>, ejemplos de filtros:
</p>

<table>


<colgroup>
<col  class="org-left">

<col  class="org-left">
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">límite</th>
<th scope="col" class="org-left">definición</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>f0001</code></td>
<td class="org-left">todos los equipos del grupo <code>f0001</code></td>
</tr>

<tr>
<td class="org-left"><code>f0001:f0002</code></td>
<td class="org-left">todos los equipos de los grupos <code>f0001</code> y <code>f0002</code></td>
</tr>

<tr>
<td class="org-left"><code>wst-8CC123:wst-8CC124</code></td>
<td class="org-left">solo en los equipos <code>wst-8CC123</code> y <code>wst-8CC124</code></td>
</tr>

<tr>
<td class="org-left"><code>wst-8CC123</code></td>
<td class="org-left">únicamente en el equipo <code>wst-8CC123</code></td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-orgf0eb441" class="outline-3">
<h3 id="orgf0eb441"><i>Cómo lidiaban con los fallos de conexión o timeouts que puedan surgir?</i></h3>
<div class="outline-text-3" id="text-orgf0eb441">
<p>
Cada <i>Filial</i> cuenta con al menos 2 enlaces de diferentes proveedores y
a lo largo y ancho del país, hay diferentes <i>&laquo;angostos de banda&raquo;</i>,
básicamente en cada <i>Filial</i> se comenzaba por realizar <i>deploy</i> en 2
equipos en paralelo y si no había errores se aumentaba a 4 equipos en
paralelo, y así hasta encontrar el máximo de equipos en paralelo sin que
existan interrupciones.
</p>

<p>
Si se interrumpía la conexión del <i>deploy</i> de un equipo, se volvía a
intentar luego con ese equipo, y el <i>playbook</i> retomaba en donde quedó
(en realidad, vuelve a comprobar cada tarea y determina si es necesario
volver a ejecutarla).
</p>
</div>
</div>
<div id="outline-container-orge67af9f" class="outline-3">
<h3 id="orge67af9f">/Si cambiaban de IP, cómo se actualizaban luego en el Inventario?</h3>
<div class="outline-text-3" id="text-orge67af9f">
<p>
Usaban un agente para informar al controller?/
</p>

<p>
Usamos un <i>script</i> en <code>Network Manager Dispacher</code> <sup><a id="fnr.networkmanager" class="footref" href="https://osiux.com/#fn.networkmanager" role="doc-backlink">19</a></sup>
que invoca a <code>awx-cli</code> realizando un <i>update</i> del <i>host</i>, es decir la
<i>workstation</i> modifica el inventario de <i>AWX</i> cada vez que recibe una
nueva <i>IP</i> y en el caso de que el <i>host</i> no exista en el inventario, se
crea en el momento.
</p>
</div>
</div>
<div id="outline-container-org294e2b2" class="outline-3">
<h3 id="org294e2b2"><i>alguno me podría decir el nombre del soft que usan para graficar?</i></h3>
<div class="outline-text-3" id="text-org294e2b2">
<p>
Los gráficos los hice utilizando <a href="https://osiux.com/2022-10-21-use-graphviz-for-slides.html"><i>GraphViz</i></a>
</p>
</div>
</div>
</section>
<section id="outline-container-orgcb9e3cd" class="outline-2">
<h2 id="orgcb9e3cd">Seguro te interesará leer&#x2026;</h2>
<div class="outline-text-2" id="text-orgcb9e3cd">
<ul class="org-ul">
<li><a href="https://osiux.com/2026-07-21-debconf26-como-aprovisionar-instalar-configurar-y-mantener-actualizados-miles-de-sistemas-debian-y-basados-en-debian.html">Cómo aprovisionar, instalar, configurar y mantener actualizados miles de sistemas Debian y basados en Debian</a></li>
<li><a href="https://osiux.com/2026-07-21-debconf26-how-to-provision-install-configure-and-keep-thousands-of-debian-and-debian-based-systems-updated.html">How to provision, install, configure and keep thousands of Debian and Debian-based systems updated</a></li>
<li><a href="https://osiux.com/2021-12-30-automated-bios-configuration-using-ansible-and-hp-linux-tools.html">Automatizar la configuración de la <i>BIOS</i> usando <code>ansible</code> y <i>HP Linux Tools</i></a></li>
<li><a href="https://osiux.com/2022-04-23-filiales-gnu-linux-flisol-caba.html"><code>Filiales GNU/Linux</code> FLISoL CABA</a></li>
<li><a href="https://osiux.com/2022-10-03-ansible-tools-v0-3-0.html"><i>Ansible Tools</i> <code>v0.3.0</code></a></li>
<li><a href="https://osiux.com/2022-10-08-automate-deployment-of-AWX-resources-with-GitLab-CI-CD-and-ansible-tools.html">Automatizar la implementación de los recursos de AWX con GitLab CI/CD y Ansible Tools</a></li>
<li><a href="https://osiux.com/2022-10-21-use-graphviz-for-slides.html">Usar Graphviz para generar Slides</a></li>
<li><a href="https://osiux.com/2022-10-25-how-to-make-a-timeline-with-graphviz-using-timeline2dot.html">Cómo hacer una línea de tiempo con GraphViz</a></li>
</ul>
</div>
</section>
<section id="outline-container-org0f51785" class="outline-2">
<h2 id="org0f51785">ChangeLog</h2>
<div class="outline-text-2" id="text-org0f51785">
<ul class="org-ul">
<li><a href="https://gitlab.com/osiux/osiux.gitlab.io/-/commit/bf3a61526ad2a73cecb77a18995f1d63494e3664"><code>2022-11-13 20:39</code></a> agregar y actualizar tags OpenGraph</li>
<li><a href="https://gitlab.com/osiux/osiux.gitlab.io/-/commit/3f97b2708880357dbb75fb170fb3c6bcccbc825f"><code>2022-11-13 12:56</code></a> agregar tags OpenGraph article y corregir type en <code>Cómo migrar 6300 equipos a GNU/Linux usando Ansible y AWX</code></li>
<li><a href="https://gitlab.com/osiux/osiux.gitlab.io/-/commit/bab32f9e9aaeea452f7a781dbc2a450f22f4f1d9"><code>2022-11-13 10:40</code></a> agregar tags OpenGraph en <code>Cómo migrar 6300 equipos a GNU/Linux usando Ansible y AWX</code></li>
<li><a href="https://gitlab.com/osiux/osiux.gitlab.io/-/commit/387554ef0b1bd68cd397823d81fb19021af2a621"><code>2022-10-28 15:29</code></a> corregir link a traducción al Inglés de <code>Cómo migrar 6300 equipos a GNU/Linux usando Ansible y AWX</code></li>
<li><a href="https://gitlab.com/osiux/osiux.gitlab.io/-/commit/8839779a2a61bd84a983fd8b09d4816cf69f7297"><code>2022-10-28 14:35</code></a> agregar link a traducción al Inglés de <code>Cómo migrar 6300 equipos a GNU/Linux usando Ansible y AWX</code></li>
<li><a href="https://gitlab.com/osiux/osiux.gitlab.io/-/commit/f7f08f8e9298dcc586597a6857f20f694b160461"><code>2022-10-28 13:26</code></a> renombrar 2022-10-20-howto-migrate-6300-hosts-to-gnu-linux-using-ansible-and-awx.org a 2022-10-20-como-migrar-6300-equipos-a-gnu-linux-usando-ansible-y-awx</li>
</ul>
</div>
</section>
<div id="footnotes">
<h2 class="footnotes">Notas al pie de p&aacute;gina: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.nerdearla" class="footnum" href="https://osiux.com/#fnr.nerdearla" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://nerdear.la/">https://nerdear.la/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.konex" class="footnum" href="https://osiux.com/#fnr.konex" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.cckonex.org/">https://www.cckonex.org/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.fgnulyt" class="footnum" href="https://osiux.com/#fnr.fgnulyt" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.youtube.com/watch?v=3hjQwbqCUP4">https://www.youtube.com/watch?v=3hjQwbqCUP4</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.fgnulweb" class="footnum" href="https://osiux.com/#fnr.fgnulweb" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="http://filiales-gnu-linux.g.coop.ar/">http://filiales-gnu-linux.g.coop.ar/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.hugoruscitti" class="footnum" href="https://osiux.com/#fnr.hugoruscitti" role="doc-backlink">5</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.examplelab.com.ar/">https://www.examplelab.com.ar/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.visorvideos" class="footnum" href="https://osiux.com/#fnr.visorvideos" role="doc-backlink">6</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://github.com/hugoruscitti/visor-de-videos-multiple">https://github.com/hugoruscitti/visor-de-videos-multiple</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.graphviz-slides" class="footnum" href="https://osiux.com/#fnr.graphviz-slides" role="doc-backlink">7</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://osiux.com/2022-10-21-use-graphviz-for-slides.html">https://osiux.com/2022-10-21-use-graphviz-for-slides.html</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.timeline2dot" class="footnum" href="https://osiux.com/#fnr.timeline2dot" role="doc-backlink">8</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://osiux.com/2022-10-25-how-to-make-a-timeline-with-graphviz-using-timeline2dot.html">https://osiux.com/2022-10-25-how-to-make-a-timeline-with-graphviz-using-timeline2dot.html</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.graphviz" class="footnum" href="https://osiux.com/#fnr.graphviz" role="doc-backlink">9</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://graphviz.org/">https://graphviz.org/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.sysarmy" class="footnum" href="https://osiux.com/#fnr.sysarmy" role="doc-backlink">10</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://timeline.sysarmy.com/">https://timeline.sysarmy.com/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.gcoop" class="footnum" href="https://osiux.com/#fnr.gcoop" role="doc-backlink">11</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://g.coop.ar/">https://g.coop.ar/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.rms" class="footnum" href="https://osiux.com/#fnr.rms" role="doc-backlink">12</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://endefensadelsl.org/que_es_el_software_libre.pdf">https://endefensadelsl.org/que_es_el_software_libre.pdf</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.bccl" class="footnum" href="https://osiux.com/#fnr.bccl" role="doc-backlink">13</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.bancocredicoop.coop/">https://www.bancocredicoop.coop/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.gitlab-gcoop" class="footnum" href="https://osiux.com/#fnr.gitlab-gcoop" role="doc-backlink">14</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://gitlab.com/gcoop-libre">https://gitlab.com/gcoop-libre</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.github-gcoop" class="footnum" href="https://osiux.com/#fnr.github-gcoop" role="doc-backlink">15</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://github.com/gcoop-libre">https://github.com/gcoop-libre</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.geerlingguy" class="footnum" href="https://osiux.com/#fnr.geerlingguy" role="doc-backlink">16</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://ansible.jeffgeerling.com/">https://ansible.jeffgeerling.com/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.vivir-del-sl" class="footnum" href="https://osiux.com/#fnr.vivir-del-sl" role="doc-backlink">17</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://osiux.com/2021-02-16-vivir-del-software-libre.html">https://osiux.com/2021-02-16-vivir-del-software-libre.html</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.gcoop-gca" class="footnum" href="https://osiux.com/#fnr.gcoop-gca" role="doc-backlink">18</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.gcoop.coop/gca-la-implementacion-de-suitecrm-mas-grande-de-america">https://www.gcoop.coop/gca-la-implementacion-de-suitecrm-mas-grande-de-america</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.networkmanager" class="footnum" href="https://osiux.com/#fnr.networkmanager" role="doc-backlink">19</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://networkmanager.dev/docs/api/latest/NetworkManager-dispatcher.html">https://networkmanager.dev/docs/api/latest/NetworkManager-dispatcher.html</a>
</p></div></div>


</div>
</div></main>
<footer id="postamble" class="status">
<p class="date">Fecha: 2022-10-20 16:45</p>
<p class="author">Autor: Osiris Alejandro Gomez</p>
<p class="date">Created: 2026-08-13</p>
</footer>]]></content:encoded>
    <dc:creator xml:lang="es">Osiris Alejandro Gomez</dc:creator>
    <pubDate>Thu, 20 Oct 2022 16:45:00 +0000</pubDate>
    <category>Technology</category>
    <comments>https://osiux.com/2022-10-20-como-migrar-6300-equipos-a-gnu-linux-usando-ansible-y-awx.html</comments>
    <source url="https://osiux.com">osiux.com/blog</source>
    <dc:language>es-ar</dc:language>
    <enclosure url="https://osiux.com/img/filiales-gnu-linux/awx-bccl-center.png" type="image/png" length="0" />
    <media:content url="https://osiux.com/img/filiales-gnu-linux/awx-bccl-center.png" medium="image" isDefault="true" />
    <media:thumbnail url="https://osiux.com/img/filiales-gnu-linux/awx-bccl-center.png" />
  </item>
</channel>
</rss>
