<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Archives des Saltstack - Xavki</title>
	<atom:link href="https://xavki.blog/category/saltstack/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Open your Sources..</description>
	<lastBuildDate>Tue, 16 Nov 2021 20:28:01 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Saltstack : vagrantfile avec master et minions</title>
		<link>https://xavki.blog/saltstack-vagrantfile-avec-master-et-minions/</link>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Tue, 16 Nov 2021 20:27:59 +0000</pubDate>
				<category><![CDATA[Saltstack]]></category>
		<guid isPermaLink="false">https://xavki.blog/?p=1379</guid>

					<description><![CDATA[<p><img width="1920" height="1080" src="https://xavki.blog/wp-content/uploads/2021/11/wallhaven-5deyr9.jpg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" fetchpriority="high" srcset="https://xavki.blog/wp-content/uploads/2021/11/wallhaven-5deyr9.jpg 1920w, https://xavki.blog/wp-content/uploads/2021/11/wallhaven-5deyr9-300x169.jpg 300w, https://xavki.blog/wp-content/uploads/2021/11/wallhaven-5deyr9-1024x576.jpg 1024w, https://xavki.blog/wp-content/uploads/2021/11/wallhaven-5deyr9-768x432.jpg 768w, https://xavki.blog/wp-content/uploads/2021/11/wallhaven-5deyr9-1536x864.jpg 1536w, https://xavki.blog/wp-content/uploads/2021/11/wallhaven-5deyr9-624x351.jpg 624w" sizes="(max-width: 1920px) 100vw, 1920px" />Quelques articles plus tôt, je vous parlais du plaisir d&#8217;utiliser vagrant pour partager et pour itérer dans mon apprentissage. C&#8217;est tellement important de pouvoir casser et refaire les choses sans se poser de questions et sans perdre de temps. C&#8217;est... <a href="https://xavki.blog/saltstack-vagrantfile-avec-master-et-minions/" class="suite"><i class="fal fa-long-arrow-right"></i></a></p>
<p>L’article <a href="https://xavki.blog/saltstack-vagrantfile-avec-master-et-minions/">Saltstack : vagrantfile avec master et minions</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="1920" height="1080" src="https://xavki.blog/wp-content/uploads/2021/11/wallhaven-5deyr9.jpg" class="attachment- size- wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" srcset="https://xavki.blog/wp-content/uploads/2021/11/wallhaven-5deyr9.jpg 1920w, https://xavki.blog/wp-content/uploads/2021/11/wallhaven-5deyr9-300x169.jpg 300w, https://xavki.blog/wp-content/uploads/2021/11/wallhaven-5deyr9-1024x576.jpg 1024w, https://xavki.blog/wp-content/uploads/2021/11/wallhaven-5deyr9-768x432.jpg 768w, https://xavki.blog/wp-content/uploads/2021/11/wallhaven-5deyr9-1536x864.jpg 1536w, https://xavki.blog/wp-content/uploads/2021/11/wallhaven-5deyr9-624x351.jpg 624w" sizes="(max-width: 1920px) 100vw, 1920px" />
<p>Quelques articles plus tôt, je vous parlais <a href="https://xavki.blog/pourquoi-vagrant-maide-dans-mon-quotidien-vagrantfile-complet/">du plaisir d&#8217;utiliser vagrant</a> pour partager et pour itérer dans mon apprentissage. C&#8217;est tellement important de pouvoir casser et refaire les choses sans se poser de questions et sans perdre de temps. C&#8217;est clairement quelque chose que je ne pouvais pas faire avec mes raspberry ou avec de simples serveurs.</p>



<p>Avec des machines c&#8217;est assez cools, parfois je passe par docker mais pas pour utiliser saltstack. </p>



<p>Alors, aujourd&#8217;hui, je vous propose de découvrir le petit vagrantfile et les scripts qui me permettent de partir à la création de tutoriels saltstack si facilement <a href="https://xavki.blog/saltstack-formation-et-tutoriels-gratuits/">comme vous pouvez les retrouver ici</a>.</p>



<p>Rien de compliqué, prenons cela dans l&#8217;ordre.</p>



<h2 class="wp-block-heading">Le vagrantfile pour commencer</h2>



<p>On va repartir de mon squelette classique. Et commencer à demander à l&#8217;utilisateur si il souhaite que l&#8217;on installe salt master et ses minions ou juste des VM vierges.</p>



<pre class="wp-block-preformatted">Vagrant.configure(2) do |config|

  config.cache.auto_detect = true

	saltSatckInstall = ""

  case ARGV[0]
		when "provision", "up"
    	print "Do you want to install salt Stack master/minion (y/n) ?\n"
    	saltSatckInstall = STDIN.gets.chomp
    	print "\n"
  end

</pre>



<p>Donc on a ouvert la boucle vagrant. Et surtout derrière on alimente une variable dédiée à l&#8217;installation de vagrant ou non.</p>



<pre class="wp-block-preformatted">  etcHosts=""
  common = &lt;&lt;-SHELL
  sudo apt update -qq 2&gt;&amp;1 &gt;/dev/null
  sudo apt install -y -qq git vim tree net-tools telnet 2&gt;&amp;1 &gt;/dev/null
  sudo echo "autocmd filetype yaml setlocal ai ts=2 sw=2 et" &gt; /home/vagrant/.vimrc
  sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/g' /etc/ssh/sshd_config
  sudo systemctl restart sshd
  SHELL
</pre>



<p>On créé une variable vide pour le moment en vue de stocker notre liste qui mettra à jour nos /etc/hosts sur chaque machine. Et on créé une variable contenant les opérations communes de bases (tooing, ssh etc).</p>



<p>On définie l&#8217;os que nous allons utiliser sur toute la stack (ce serait assez facile de permettre des variations pour développer sur différents OS à la fois).</p>



<pre class="wp-block-preformatted"># set vagrant image
	config.vm.box = "ubuntu/focal64"
	config.vm.box_url = "ubuntu/focal64"</pre>



<p>Puis on déclare nos serveurs avec leurs ressources et leurs types.</p>



<pre class="wp-block-preformatted">	NODES = [
  	{ :hostname =&gt; "salt1", :ip =&gt; "192.168.123.10", :cpus =&gt; 4, :mem =&gt; 2096, :type =&gt; "master" },
  	{ :hostname =&gt; "salt2", :ip =&gt; "192.168.123.11", :cpus =&gt; 2, :mem =&gt; 2096, :type =&gt; "minion" },
  	{ :hostname =&gt; "salt3", :ip =&gt; "192.168.123.12", :cpus =&gt; 2, :mem =&gt; 2096, :type =&gt; "minion" },
  	{ :hostname =&gt; "salt4", :ip =&gt; "192.168.123.13", :cpus =&gt; 2, :mem =&gt; 2096, :type =&gt; "minion" }
	]
</pre>



<p>Easy !!!</p>



<p>Maintenant que l&#8217;on a notre liste on va pouvoir préparer la variable qui contient le script d&#8217;édition du /etc/hosts de chacune des machines.</p>



<pre class="wp-block-preformatted">  NODES.each do |node|
   	etcHosts += "echo '" + node[:ip] + "   " + node[:hostname] + "' &gt;&gt; /etc/hosts" + "\n"
  end #end NODES
</pre>



<p>On boucle sur la liste des serveurs et on fait un echo dans /etc/hosts, il ne reste plus qu&#8217;à jouer le script via la variable à l&#8217;installation.</p>



<pre class="wp-block-preformatted">  NODES.each do |node|
    config.vm.define node[:hostname] do |cfg|
			cfg.vm.hostname = node[:hostname]
      cfg.vm.network "private_network", ip: node[:ip]
      cfg.vm.provider "virtualbox" do |v|
				v.customize [ "modifyvm", :id, "--cpus", node[:cpus] ]
        v.customize [ "modifyvm", :id, "--memory", node[:mem] ]
        v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
        v.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
        v.customize ["modifyvm", :id, "--name", node[:hostname] ]
      end #end provider</pre>



<p>On ouvre la boucle du provisionning avec les éléments assez standards d&#8217;un vagrantfile et en récupérant les éléments de notre table des noeuds.</p>



<pre class="wp-block-preformatted">			#for all
      cfg.vm.provision :shell, :inline => etcHosts
      cfg.vm.provision :shell, :inline => common
      if node[:type] == "master" and saltSatckInstall == "y"
        cfg.vm.provision :shell, :path => "install_master.sh"
      end
      if node[:type] == "minion" and saltSatckInstall == "y"
        cfg.vm.provision :shell, :path => "install_minion.sh"
      end

    end # end config
  end # end nodes
end </pre>



<p>Enfin on joue le script des variables etcHosts et common. Puis on installe le master et ensuite les minion.</p>



<h2 class="wp-block-heading">Les scripts Shell d&#8217;installation de salt master et les minions</h2>



<p>Alors la partie simple et sympa avec du bash simple comme tout pour installer saltstack sur les machines en s&#8217;adaptant.</p>



<p>Pour le master :</p>



<pre class="wp-block-preformatted">curl -sL https://bootstrap.saltstack.com -o install_salt.sh 2&gt;&amp;1 &gt;/dev/null 
chmod 755 install_salt.sh
sudo sh install_salt.sh -P -M 2&gt;&amp;1 &gt;/dev/null
sudo mkdir -p /home/vagrant/{salt,pillar}
sudo chown vagrant:vagrant  /home/vagrant/salt /home/vagrant/pillar

echo "
file_roots:
  base:
    - /home/vagrant/salt
    - /home/vagrant/pillar
" &gt;&gt; /etc/salt/master

echo "
master: 127.0.0.1
" &gt;/etc/salt/minion

sudo systemctl restart salt-master
sudo systemctl restart salt-minion
sleep 10
sudo salt-key -A -y
sleep 5
sudo salt '*' test.ping
</pre>



<p>On bootstrap salt en mode master. On créé les répertoires de pillars et file_root. Pour cela on s&#8217;est adapté à la configuration standard d&#8217;un master salt pour le pillar_roots et le file_roots.</p>



<p>On configure le minion local au master. On restart le tout et on attend 10 secondes avant d&#8217;accepter toutes les clefs et on termine par un simple ping.</p>



<p>A ce stade on peut y faire des ajustements.</p>



<p>Pour les minions :</p>



<pre class="wp-block-preformatted">curl -sL https://bootstrap.saltstack.com -o install_salt.sh 2>&amp;1 >/dev/null
chmod 755 install_salt.sh
sudo sh install_salt.sh -P 2>&amp;1 >/dev/null

echo "
master: salt1
" >/etc/salt/minion

sudo systemctl restart salt-minion
sudo apt install -y sshpass
sleep 10
sshpass -p 'vagrant' ssh -o StrictHostKeyChecking=no vagrant@salt1 "sudo salt-key -A -y"</pre>



<p>Un peu la même opération mais en plus simple. On installe un salt simple avec le script de bootstrap puis on édite le nom du master. Ensuite on restart le minion. Enfin, la dernière ligne permet d&#8217;envoyer via SSH une acceptation de toutes les clefs sur le master (la on est super large lol).</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Vagrant c&#8217;est vraiment cool pour ce genre de chose. Comme je l&#8217;avais expliqué ce genre de scripts bash pourraient se mettre plutôt avec un provisionner ansible. Mais comme j epréfère permettre au plus grand nombre de reprendre tout ça, Bash c&#8217;est vraiment pas mal même si j&#8217;aodre ansible.</p>



<p>Source : <a href="https://gitlab.com/xavki/vagrant-files/-/tree/master/saltstack">Vagrantfile</a></p>



<p>Alors à vous de vous faire plaisir avec tout ça !!!</p>
<p>L’article <a href="https://xavki.blog/saltstack-vagrantfile-avec-master-et-minions/">Saltstack : vagrantfile avec master et minions</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
