<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>In-Finnish on Puppeteers Oy</title>
		<link>https://www.puppeteers.net/categories/in-finnish/</link>
		<description>Recent content in In-Finnish on Puppeteers Oy</description>
		<generator>Hugo</generator>
		<language>en-US</language>
		
		
		
		
			<lastBuildDate>Mon, 20 Nov 2023 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://www.puppeteers.net/categories/in-finnish/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>COSS-webinaari: automaatio avoimen lähdekoodin välinein</title>
				<link>https://www.puppeteers.net/blog/coss-webinaari-automaatio-avoin-lahdekoodi/</link>
				<pubDate>Mon, 20 Nov 2023 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/coss-webinaari-automaatio-avoin-lahdekoodi/</guid>
				<description>&lt;p&gt;&lt;img src=&#34;https://puppeteers-public.hel1.your-objectstorage.com/Kuvakaappaus-2023-11-20-10-26-49.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Toimitusjohtajamme &lt;strong&gt;Samuli Seppänen&lt;/strong&gt; on kutsuttu puhujaksi &lt;strong&gt;COSS ry&lt;/strong&gt;:n webinaariin ma 4.12. 2023 klo 9. Webinaarin aiheena avoimen lähdekootin välinein toteutettava IT-automaatio.&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;IT-automaatiolla nostetaan kierroksia samalla kun vähennetään kaasua. Avoimen lähdekoodin välinein tehdyllä IT-automaatiolla voidaan nopeuttaa ja tehostaa toimintaa sekä parantaa työn tuloksia mitattavasti. Yrityksille ja organisaatioille, joiden on pakko hakea yhä uusia keinoja kilpailukykynsä parantamiseen, IT-automaatio antaa syvällisesti toteutettuna mukavan lisäpotkun kilpailijoista erottautumiseen laadulla ja nopeudella. Strategisella automaatiolla voidaan lisäksi vähentää organisaation siiloutumista ja poistaa prosessien pullonkauloja. Mitä sitten avoimen lähdekoodin IT-automaatiosta tulisi tietää, jotta yritykset ja organisaatiot voivat valjastaa sen keskeiseksi osaksi tehokkuuden ja laadun maksimointia?&amp;rdquo;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Red Hat -automaatiolounas 1.11.2023</title>
				<link>https://www.puppeteers.net/blog/red-hat-automaatiolounas-1-11-2023/</link>
				<pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/red-hat-automaatiolounas-1-11-2023/</guid>
				<description>&lt;p&gt;&lt;img src=&#34;https://puppeteers-public.hel1.your-objectstorage.com/Red-Hat-automaatiolounas.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Järjestämme yhteisen lounastapahtuman &lt;a href=&#34;https://www.redhat.com/en&#34;&gt;Red Hat&lt;/a&gt;in ja &lt;a href=&#34;https://6gnordic.com/&#34;&gt;6G Nordic Oy&lt;/a&gt;n kanssa Turussa 1.11.2023. Tapahtuma kulkee nimellä automaatiolounas ja siellä kuullaan käytännön esimerkkejä ja ajatuksia IT-automaatiosta ja siitä, miten se kannattaa valjastaa koko yrityksen käyttöön strategiseksi voimavaraksi. Tilaisuus on tarkoitettu tekijöille, tiiminvetäjille ja managereille - kaikille, jotka näkevät, että automaatiotason nostosta olisi hyötyä.&lt;/p&gt;&#xA;&lt;p&gt;Lämpimästä tervetuloa!&lt;/p&gt;&#xA;&lt;p&gt;Lisätietoja ja ilmoittautumiset &lt;a href=&#34;https://events.redhat.com/profile/form/index.cfm?PKformID=0x8666290001&#34;&gt;tästä&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Helpotusta työsuhde-etujen lataamiseen: Edenred-latausten automatisointi</title>
				<link>https://www.puppeteers.net/blog/edenred-lataus-automaattisesti/</link>
				<pubDate>Fri, 27 Jan 2023 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/edenred-lataus-automaattisesti/</guid>
				<description>&lt;p&gt;&lt;img src=&#34;https://puppeteers-public.hel1.your-objectstorage.com/Edenred-koodi.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Kyllästyimme Edenred-korttien latauksen kankeuteen ja automatisoimme latausprosessin. Tässä artikkelissa kerrotaan, miten automaatio toteutettiin &lt;strong&gt;CSV-tiedostoilla ja ohjelmistorobotilla&lt;/strong&gt;. Lisäksi artikkelista löytyy linkit GitHub-sivustollemme, josta voit ladata koodit käyttöösi.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;edenred-korttien-lataustapoja&#34;&gt;Edenred-korttien lataustapoja&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://edenred.fi/fi/&#34;&gt;Edenred&lt;/a&gt; on yksi suurimmista suomalaisista työsuhde-etujen tarjoajista. Edenred tarjoaa fyysisiä ja virtuaalisia kortteja, joihin voidaan ladata työntekijöiden lounas-, virike- ja työmatkaetuja. Edenred-korttien lataamiseen on lukuisia tapoja, mutta kaikki ne vaativat merkittävästi käsityötä työntekijän ja/tai työnantajan puolelta. Vaikka työntekijät voivatkin &lt;a href=&#34;https://edenred.fi/fi/knowledge/edunsaaja/miten-teen-lounasedun-saldolatauspyynnon-ja-toistotoiminnon&#34;&gt;automatisoida omat saldolatauspyyntönsä&lt;/a&gt;, pitää työnantajan silti muistaa hyväksyä ne. Tässä artikkelissa esitellään tapa automatisoida Edenred lataus kokonaan CSV-tiedostolla ja Robot Frameworkia käyttävällä ohjelmistorobotilla. Ainoastaan Edenredin lähettämien saldotilauslaskujen maksu pitää tehdä käsin, joskin tämäkin olisi haluttaessa automatisoitavissa.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Webinaaritallenne: Infrastruktuurin rakentaminen koodilla</title>
				<link>https://www.puppeteers.net/blog/webinaaritallenne-infrastruktuurin-rakentaminen-koodilla/</link>
				<pubDate>Wed, 06 May 2020 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/webinaaritallenne-infrastruktuurin-rakentaminen-koodilla/</guid>
				<description>&lt;p&gt;Järjestimme &lt;a href=&#34;https://turkubusinessregion.com/&#34;&gt;Turku Business Region&lt;/a&gt;in kanssa yhteistyössä webinaarin 5.5.2020 aiheesta &amp;ldquo;Infrastruktuurin rakehtaminen koodilla&amp;rdquo;. Webinaaritallenne on saatavilla täällä:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=pfT8lU_teuM&amp;amp;t=1s&#34;&gt;Infrastruktuurin rakentaminen koodilla&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Webinaarissa käsiteltiin perusasioita seuraavista aiheista: infrastruktuurin rakentaminen koodilla eli IaC, versionhallint, laadunhallintamenetelmät sekä työkalut kuten Puppet, Terraform, Ansible sekä Puppet Bolt.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Video: infrastruktuurin rakentaminen koodilla</title>
				<link>https://www.puppeteers.net/blog/video-infrastruktuurin-rakentaminen-koodilla/</link>
				<pubDate>Tue, 05 May 2020 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/video-infrastruktuurin-rakentaminen-koodilla/</guid>
				<description>&lt;p&gt;Tässä webinaaritallenteessa esittelemme perusteet infrastruktuurin rakentamisesta koodilla, mukaan luettuna versionhallinnan, laadunvarmistuksen ja erilaiset työkalut kuten Puppetin, Terraformin, Ansiblen ja Puppet Boltin:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=pfT8lU_teuM&amp;amp;t=1s&#34;&gt;Infrastruktuurin rakentaminen koodilla&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Toteutettu yhteistyössä &lt;a href=&#34;https://turkubusinessregion.com/&#34;&gt;Turku Business Regionin&lt;/a&gt; kanssa 5.5.2020.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Webinaari: etäyhteydet tietoturvallisesti kuntoon VPN:llä</title>
				<link>https://www.puppeteers.net/blog/webinaari-etayhteydet-tietoturvallisesti-kuntoon-vpnlla/</link>
				<pubDate>Tue, 14 Apr 2020 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/webinaari-etayhteydet-tietoturvallisesti-kuntoon-vpnlla/</guid>
				<description>&lt;p&gt;Turku Business Region webinaari 22.4.2020 kello 13–13.30, osana ICT-webinaarisarjaa.&lt;/p&gt;&#xA;&lt;p&gt;Webinaarinaarissa kerromme lyhyesti mitä VPN (&amp;ldquo;Virtual Private Network&amp;rdquo;) tarkoittaa ja miksi VPN:n käyttö on käytännössä välttämätöntä turvallisten etäyhteyksien luomisessa. Lisäksi käymme lyhyesti läpi VPN-yhteyksien käyttöönoton yleiset vaatimukset.&lt;/p&gt;&#xA;&lt;p&gt;Tämän jälkeen esittelemme &lt;a href=&#34;https://openvpn.net/community/&#34;&gt;OpenVPN&lt;/a&gt;:n, avoimen lähdekoodin VPN-sovelluksen, jota käytetään erittäin laajalti ympäri maailmaa. Sitten siirrymme OpenVPN:ään pohjautuvaan kaupalliseen &lt;a href=&#34;https://openvpn.net/vpn-server-resources/openvpn-access-server-features-overview/&#34;&gt;OpenVPN Access Serveriin&lt;/a&gt;, joka tekee VPN-yhteyksien luomisesta ja ylläpidosta merkittävästi helpompaa. Esittelyn jälkeen teemme OpenVPN Access Serverin käyttödemon:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Foreman ja puppetserverin environment cache</title>
				<link>https://www.puppeteers.net/blog/foreman-ja-puppetserverin-environment-cache/</link>
				<pubDate>Wed, 07 Aug 2019 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/foreman-ja-puppetserverin-environment-cache/</guid>
				<description>&lt;p&gt;Kun käytetään r10k:ta ja Foremania yhdessä on uusien luokkien tuonti kaksivaiheinen prosessi. Oletetaan vaikka, että &amp;ldquo;production&amp;rdquo; environmentiin on luotu uusi luokka, esim. &amp;ldquo;role::ipa_server&amp;rdquo;. Ilman Foremania riittäisi tuoda muutos puppetmasterille r10k:lla:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ r10k deploy environment production -vp&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Foreman ei kuitenkaan vielä tiedä uudesta luokasta mitään:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ hammer puppet-class list --environment production|grep ipa_server&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Foremanin komponentti, joka hakee Puppetmasterilta uudet luokat on nimeltään &amp;ldquo;Smart proxy&amp;rdquo;, joka tunnetaan myös nimellä &amp;ldquo;foreman-proxy&amp;rdquo;. Uusimpien Puppetin versioiden kanssa se hakee luokat Puppetserverin API:a käyttäen. Luokat saa päivitettyä komentoriviltä melko triviaalisti:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Neulan erottaminen Git-muutosten heinäsuovasta</title>
				<link>https://www.puppeteers.net/blog/neulan-erottaminen-git-muutosten-heinasuovasta/</link>
				<pubDate>Mon, 15 Jul 2019 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/neulan-erottaminen-git-muutosten-heinasuovasta/</guid>
				<description>&lt;p&gt;Toisinaan käy niin, että on tarpeen varmistua siitä aiheuttaako iso kasa Git-committeja jotain sivuvaikutuksia esimerkiksi Puppet-tuotantoympäristössä. Hyvistä commit-viesteistä on aina toki apua, mutta toisinaan commitit eivät ole täysin atomisia, eli tekevät enemmän kuin yhden (dokumentoidun) asian. Lisäksi esimerkiksi Puppet control reposta saattaa löytyä paitsi Puppet-koodia, myös Terraformia ja Ansiblea. Tälläisessä tapauksessa on kätevää näyttää vain muutokset, jotka ovat oikeasti relevantteja. Ensin tarkistetaan, mikä &amp;ldquo;production&amp;rdquo;-ympäristön viimeisin commit on:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ ssh puppet$ cd /etc/puppetlabs/code/environments/production$ git rev-parse --short HEAD86c2152&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Tämän jälkeen voidaan tarkista control reposta muutokset Puppetin kannalta oleellisiin kansioihin ja tiedostoihin:&lt;/p&gt;</description>
			</item>
			<item>
				<title>FreeIPA:an liitettyjen hostien SSH-avaimien päivitys</title>
				<link>https://www.puppeteers.net/blog/freeipaan-liitettyjen-hostien-ssh-avaimien-paivitys/</link>
				<pubDate>Thu, 07 Feb 2019 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/freeipaan-liitettyjen-hostien-ssh-avaimien-paivitys/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://www.freeipa.org/page/Main_Page&#34;&gt;FreeIPA&lt;/a&gt; on Linux-verkkojen &amp;ldquo;Active Directory&amp;rdquo;, jossa on integroitu lukuisia eri komponentteja (mm. LDAP, Kerberos, CA, sssd) siten, että Linux-koneet saadaan liitettyä domainiin. Domainiin liittäminen mahdollistaa mm. keskitetyt käyttäjätunnukset, kertakirjautumisen ja SSH-avaimien ja SSH host-avaimien jakelun. FreeIPA:n voi pystyttää sen omalla asennusohjelmalla, johon iso osa myös &lt;a href=&#34;https://github.com/Puppet-Finland/puppet-ipa&#34;&gt;puppet-ipa&lt;/a&gt; moduulin toiminnallisuudesta perustuu.&lt;/p&gt;&#xA;&lt;p&gt;FreeIPA:ssa on kuitenkin yksi pieni ärsyttävyys: mikäli noodi (esim. palvelin) rakennetaan (esim. AWS EC2 snapshotista) tai provisioidaan (esim. PXE boot) uudelleen, saattavat FreeIPA:ssa säilytettävät SSH host-avaimet mennä epäsynkkaan todellisuuden kanssa. Käytännössä koneelle ei enää silloin pääse kirjautumaan ilman SSH:n tietoturvamekanismien härskiä kiertämistä:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Puppeteersin Puppetmaster installer-tuote nyt AWS:ssä</title>
				<link>https://www.puppeteers.net/blog/puppeteersin-puppetmaster-installer-tuote-nyt-awsssa/</link>
				<pubDate>Mon, 07 Jan 2019 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/puppeteersin-puppetmaster-installer-tuote-nyt-awsssa/</guid>
				<description>&lt;p&gt;&lt;strong&gt;HUOM: Tuote on poistunut!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Pitkällisen kehitystyön tuloksena saimme kuin saimmekin tehtyä Puppetmasterin Kafo-pohjaisesta asentimestamme oikean AWS Marketplace-tuotteen: Configuration Manager By Puppeteers Oy.&lt;/p&gt;&#xA;&lt;p&gt;Tuotteen hinnoittelu perustuu käyttötunteihin. Tuote tukee kolmea eri skenaariota:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pelkkä Puppetserver&lt;/li&gt;&#xA;&lt;li&gt;Puppetserver ja PuppetDB&lt;/li&gt;&#xA;&lt;li&gt;Puppetserver, PuppetDB ja Puppetboard&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Installer tekee aiemmin jokseenkin rasittavasti Puppetmasterien asentelusta suorastaan naurettavan helppoa:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ ssh -i ~/.ssh/mykey.pem ubuntu@instance-ip&#xA; $ sudo -i&#xA; $ puppetmaster-installer -i&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Tämän jälkeen valitaan skenaario ja mahdollisesti muutetaan joitain parametreja ja ajetaan asennin. PuppetDB:n ja Puppetboardin salasanat luodaan automaattisesti jos niitä ei ole määritetty.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Puppet-moduulien dokumentaation automaattinen päivittäminen</title>
				<link>https://www.puppeteers.net/blog/puppet-moduulien-dokumentaation-automaattinen-paivittaminen/</link>
				<pubDate>Mon, 19 Nov 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/puppet-moduulien-dokumentaation-automaattinen-paivittaminen/</guid>
				<description>&lt;p&gt;Puppet-moduulien dokumentaation saa helposti päivitettyä &lt;a href=&#34;https://github.com/puppetlabs/puppet-strings&#34;&gt;&amp;ldquo;puppet strings&amp;rdquo;-työkalulla&lt;/a&gt;, jonka käyttö yleisellä tasolla on dokumentoitu &lt;a href=&#34;https://puppet.com/docs/puppet/6.0/puppet_strings.html&#34;&gt;varsin hyvin&lt;/a&gt;. Kun komento vielä yhdistetään Gitin pre-commit -hookiin, saadaan dokumentaatio päivitettyä automaattisesti joka commitilla. Alla näytetään, miten tämä saadaan toteutettua niin Linuxissa kuin Windowsissa. Oletuksena on, että molemmissa tapauksissa Puppet Agent 5.x on asennettu virallisista Puppetlabsin paketeista.&lt;/p&gt;&#xA;&lt;p&gt;Aloitan helpommasta eli Linuxista käyttäen esimerkkinä Debian 9:iä: ohjeiden pitäisi kuitenkin toimia myös Ubuntuissa aivan samalla tavoin. Ensin asennetaan Git:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ sudo -s&#xA; $ apt-get update &amp;amp;&amp;amp; apt-get install git&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Sen jälkeen asennetaan tarvittavat gemmit käyttäen Puppetin gem-komentoa:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Kansioiden siistiminen turhasta tauhkasta Powershellillä</title>
				<link>https://www.puppeteers.net/blog/kansioiden-siistiminen-turhasta-tauhkasta-powershellilla/</link>
				<pubDate>Wed, 08 Aug 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/kansioiden-siistiminen-turhasta-tauhkasta-powershellilla/</guid>
				<description>&lt;p&gt;Toisinaan voi tulla tarve säilyttää jonkin kansion hakemistorakenne, mutta poistaa sieltä suuria määriä tiedostoja. Näin voi käydä esimerkiksi silloin, kun halutaan säästää käännösprosessin tulokset, esim. exe-tiedostot, mutta päästä eroon lähdekoodista ja käännöksen tuottamista väliaikaistiedostoista. Tämä onnistuu kätevästi Powershellin Where-Object CmdLetillä. Alla oletetaan, että komennot ajetaan kansiosta, jonka sisältö halutaan siistiä. Lähtötilanteessa kansiossa on 91 tiedostoa ja hakemistoa:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;PS&amp;gt; Get-Childitem -Recurse|Measure-Object|Select Count|Format-List&#xA; Count : 91&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Seuraavaksi poistetaan ne &lt;em&gt;ei-hakemistot&lt;/em&gt; (~tiedostot), joiden tiedostopääte &lt;em&gt;ei&lt;/em&gt; ole .exe:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Zip-arkistojen käsittely Powershellillä</title>
				<link>https://www.puppeteers.net/blog/zip-arkistojen-kasittely-powershellilla/</link>
				<pubDate>Wed, 08 Aug 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/zip-arkistojen-kasittely-powershellilla/</guid>
				<description>&lt;p&gt;Powershell 5:n myötä myös ZIP-arkistoja &lt;a href=&#34;https://www.rootusers.com/how-to-zipunzip-files-in-windows-with-powershell/&#34;&gt;voi käsitellä&lt;/a&gt; Powershellillä. Tätä aiemmin piti käyttää jos jonkinmoisia kikkoja arkistojen purkamiseen, mikä etenkin komentoriviltä työskenneltäessä oli erittäin ärsyttävää. Arkisto luodaan tähän tapaan:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;PS&amp;gt; Compress-Archive -LiteralPath tap-windows6 -DestinationPath tap-windows6-9.22.3.zip&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Yleensä ottaen kohdetiedoston nimeen ei tarvitse lisätä tiedostopäätettä (.zip). Tässä tapauksessa Compress-Archive CmdLet kuitenkin hämmentyy, jos sitä ei ole:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;PS&amp;gt; Compress-Archive -LiteralPath tap-windows6 -DestinationPath tap-windows6-9.22.3&#xA; Compress-Archive : .3 is not a supported archive file format. .zip is the only supported archive file format.&#xA; --- snip ---&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Syynä ovat tietenkin kohdetiedoston nimessä olevat pisteet. Compress-Archive CmdLetissä on dokumentoimaton ja jokseenkin ärsyttävä bugi tai ominaisuus: se ei lisää pisteellä alkavia piilohakemistoja arkistoon paitsi jos ne määritellään eksplisiittisesti lähdetiedostolistauksessa (-LiteralPath). Lisäksi kaikki lähdetiedostolistauksen tiedostot ja kansiot lisätään suoraan arkiston juureen, eikä niiden polkua kunnioiteta. Siis esimerkiksi&lt;/p&gt;</description>
			</item>
			<item>
				<title>Windows-ajurien tietojen näyttäminen Powershellillä</title>
				<link>https://www.puppeteers.net/blog/windows-ajurien-tietojen-nayttaminen-powershellilla/</link>
				<pubDate>Thu, 26 Jul 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/windows-ajurien-tietojen-nayttaminen-powershellilla/</guid>
				<description>&lt;p&gt;Windowsissa on useita komentorivityökaluja asennettujen ajurien tietojen selvittämiseen. Usein törmää seuraavaan komentoon:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;PS&amp;gt; Get-WmiObject Win32_PnPSignedDriver&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://msdn.microsoft.com/en-us/library/aa394354%5C%28v=vs.85%5C%29.aspx&#34;&gt;Luokka Win32_PnpSignedDriver&lt;/a&gt; sisältää tiedot ajurien digitaalisista allekirjoituksista sekä lisätietoja, kuten ajurin version. Useimmissa tapauksissa tämä komento riittää, sillä Windows ei ole Windows Vistan jälkeen suostunut lataamaan kuin kaupallisin varmentein allekirjoitettuja ajureita ilman, että se on &lt;a href=&#34;https://docs.microsoft.com/en-us/windows-hardware/drivers/install/the-testsigning-boot-configuration-option&#34;&gt;test-signing -tilassa&lt;/a&gt;. Windows 10:n mukana tuli vaatimus siitä, että ajuri sisältää &lt;a href=&#34;https://docs.microsoft.com/en-us/windows-hardware/drivers/dashboard/attestation-signing-a-kernel-driver-for-public-release&#34;&gt;Microsoftin digitaalisen allekirjoituksen&lt;/a&gt;. Windows Server 2016 vaatii myöskin Microsoftin allekirjoituksen, mutta sen saaminen ajurille vaatii lisäksi, että &lt;a href=&#34;https://docs.microsoft.com/en-us/windows-hardware/test/hlk/windows-hardware-lab-kit&#34;&gt;Windows Hardware Lab Kit&lt;/a&gt; -testit on läpäisty. Käytännössä kehitys- ja testikoneita lukuun ottamatta kaikkien ajurien voidaan siis olettaa olevan kaupallisin varmentein allekirjoitettuja.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Select-Stringin käyttö grepin korvikkeena</title>
				<link>https://www.puppeteers.net/blog/select-stringin-kaytto-grepin-korvikkeena/</link>
				<pubDate>Thu, 07 Jun 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/select-stringin-kaytto-grepin-korvikkeena/</guid>
				<description>&lt;p&gt;Kun unixeissa pitää etsiä neula tekstimuotoisen datan heinäsuovasta, käytetään yleensä &lt;em&gt;grep&lt;/em&gt;-komentoa. Jos tekstirivi täsmää annettuun hakuparametriin tulostetaan se oletustulostevirtaan (stdout). Grepin kanssa voidaan käyttää hakuparametreina yksinkertaisten merkkijonojen lisäksi säännöllisiä lausekkeita ja käyttää vaikka mitä muita hienoja kikkoja.&lt;/p&gt;&#xA;&lt;p&gt;Powershellissä ei (ilmeisesti) ole mitään näin hienoa työkalua, mutta onneksi tekstimassasta saa useimmiten seulottua esille oleellisen Select-Stringin merkkijonohaulla. Esimerkiksi Windowsissa on oletuksena palomuurisääntöjä niin valtavat määrät, että niiden kaikkien läpikäynti jonkin tietyn säännön löytämiseksi on hullun hommaa. Hommaa voi helpottaa Select-Stringillä:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Funktioiden kirjoittaminen Puppet-kielellä</title>
				<link>https://www.puppeteers.net/blog/functioniden-kirjoittaminen-puppet-kielella/</link>
				<pubDate>Wed, 23 May 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/functioniden-kirjoittaminen-puppet-kielella/</guid>
				<description>&lt;p&gt;Puppetissa on suuri määrä erilaisia rakenteita, joilla turhaa toistoa koodissa voidaan vähentää. &lt;a href=&#34;https://www.puppeteers.fi/puppet-koodin-tiivistaminen-each-functionlla-ja-resurssien-oletusarvoilla/&#34;&gt;Aiemmin&lt;/a&gt; käsiteltiin jo resurssien oletusarvoja ja each-funktiota, joilla toistoa voidaan vähentää yksittäisessä manifest-tiedostossa. Funktiolla samalle koodilohkolle voidaan välittää parametreja, joiden perusteella se laskee mekaanisesti jonkin paluuarvon. Kuten Puppetin &lt;a href=&#34;https://puppet.com/docs/puppet/5.3/function.html&#34;&gt;virallisten funktioiden listasta&lt;/a&gt; näkyy, tätä funktioiden ominaisuutta hyödynnetään mitä erilaisimpiin käyttötarkoituksiin. Funktioita voi paitsi käyttää eri manifesteissa, myös eri moduuleissa kuin missä ne on määritetty.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://puppet.com/docs/puppet/5.3/functions_ruby_overview.html&#34;&gt;Perinteisesti&lt;/a&gt; funktioita kirjoitettiin Ruby-kielellä. Sittemmin on tullut mahdolliseksi kirjoittaa niitä myös Puppet-kielellä. Alla yksinkertainen esimerkki &lt;a href=&#34;https://github.com/Puppet-Finland/puppet-openvpn&#34;&gt;puppetfinland/openvpn&lt;/a&gt;-moduulista:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Windowsien palomuurin hallinta Puppetilla</title>
				<link>https://www.puppeteers.net/blog/windowsien-palomuurin-hallinta-puppetilla/</link>
				<pubDate>Wed, 23 May 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/windowsien-palomuurin-hallinta-puppetilla/</guid>
				<description>&lt;p&gt;Linuxissa palomuurina - tai tarkemmin pakettisuodattimena - käytetään &lt;a href=&#34;https://www.netfilter.org/&#34;&gt;netfilteriä&lt;/a&gt;, jota hallitaan yleensä &lt;a href=&#34;https://www.netfilter.org/projects/iptables/index.html&#34;&gt;iptables&lt;/a&gt; (IPv4) ja ip6tables (IPv6) komennoilla. Iptables-sääntöjen määritys Puppetissa onnistuu helpoiten &lt;a href=&#34;https://github.com/puppetlabs/puppetlabs-firewall&#34;&gt;puppetlabs/firewall&lt;/a&gt; -moduulilla. Tyypillinen käyttötapaus on portin avaaminen palomuuriin; tästä tyypillisenä esimerkkinä Puppet-Finland-projektin &lt;a href=&#34;https://github.com/Puppet-Finland/puppet-snmpd/blob/master/manifests/packetfilter.pp&#34;&gt;::snmp::packetfilter&lt;/a&gt; -luokka, jossa avataan pääsy UDP-portiin 161 määritetyistä IPv4 ja IPv6-osoitteista.&lt;/p&gt;&#xA;&lt;p&gt;Myös Windowsin palomuurisääntöjä voi muokata Puppetilla käyttämällä &lt;a href=&#34;https://github.com/voxpupuli/puppet-windows_firewall&#34;&gt;puppet/windows_firewall&lt;/a&gt; -moduulia. Kyseinen moduuli on melko yksinkertainen kääre &amp;ldquo;netsh advfirewall&amp;rdquo;-komennon ympärillä, mutta se hoitaa hommansa hyvin.&lt;/p&gt;&#xA;&lt;p&gt;Linuxissa koko palomuurisäännöstö on helppo pitää ruodussa Puppetilla (ks. esim. &lt;a href=&#34;https://github.com/Puppet-Finland/puppet-packetfilter&#34;&gt;puppetfinland/packetfilter&lt;/a&gt; moduuli), mutta Windowsissa on pitkälti tyytyminen sääntöjen kevyeen lisäämiseen ja muokkaamiseen. Tämä käy ilmeiseksi, kun listaa tuoreen Windows-koneen palomuurisäännöt:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Puppet-moduulien julkaisu Puppet Forgessa</title>
				<link>https://www.puppeteers.net/blog/puppet-moduulien-julkaisu-puppet-forgessa/</link>
				<pubDate>Wed, 02 May 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/puppet-moduulien-julkaisu-puppet-forgessa/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://forge.puppet.com/&#34;&gt;Puppet Forge&lt;/a&gt; on Puppetlabsin tarjoama repo Puppet-moduuleille. Forge-moduuleja voi asentaa &amp;ldquo;puppet module install&amp;rdquo;-komennolla, mutta niihin voi viitata myös &lt;a href=&#34;https://github.com/puppetlabs/r10k&#34;&gt;r10k:n&lt;/a&gt; tai &lt;a href=&#34;http://librarian-puppet.com/&#34;&gt;librarian-puppetin&lt;/a&gt; Puppetfilessä. Nykyisin Puppet Forge on ensimmäinen paikka, josta katson, onko joku muu jo ratkaissut käsilläni olevan ongelman Puppetilla - pyörää kun on toisinaan turha keksiä uudelleen.&lt;/p&gt;&#xA;&lt;p&gt;Olen itse käyttänyt vuosia &lt;a href=&#34;https://git-scm.com/book/en/v2/Git-Tools-Submodules&#34;&gt;Git Submoduleja&lt;/a&gt;, koska niiden avulla Puppet-moduuleihin ulkopuolelta tulevat muutokset on helppo tarkistaa Gitin lokeista ja diffeistä. Niiden käyttö menee kuitenkin kankeaksi kun moduulien määrä kasvaa suureksi: sekä päärepo että submodulet vaativat jatkuvaa paapomista. Tuloksena on turhanpäiväisiä, samankaltaisina toistuvia commit-viestejä kuten &amp;ldquo;Update Git submodule pointers&amp;rdquo;, joilla ei ole mitään muuta käytännön merkitystä kuin Gitin pitäminen tyytyväisenä.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Bashin ja Powershellin komentohistorian käyttö</title>
				<link>https://www.puppeteers.net/blog/bashin-ja-powershellin-komentohistorian-kaytto/</link>
				<pubDate>Mon, 23 Apr 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/bashin-ja-powershellin-komentohistorian-kaytto/</guid>
				<description>&lt;p&gt;Unix-komentotulkeissa kuten Bashissa on ollut vuosikaudet varsin monipuoliset tavat palata komentotulkin historiasta löytyviin komentoihin. Nuoli ylös palaa komentohistoriassa taaksepäin ja nuoli alas vie eteenpäin. Koko historian näkee komennolla &amp;ldquo;history&amp;rdquo;:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ history&#xA; 1257 git remote -v&#xA; 1258 cd /tmp/&#xA; --- snip ---&#xA; 2242 id -un 0&#xA; 2243 id -gn 0&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Tämän voi yhdistää grepin kanssa:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ history|grep remote&#xA; 1264 git remote -v&#xA; --- snip --&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Yksi kätevimmistä on haku historiasta: ensin painetaan Ctrl-R ja sen jälkeen syötetään hakusana (alla &amp;ldquo;gpg&amp;rdquo;):&lt;/p&gt;</description>
			</item>
			<item>
				<title>RAL ja järjestelmän tilan muuntaminen puppet-koodiksi</title>
				<link>https://www.puppeteers.net/blog/ral-ja-jarjestelman-tilan-muuntaminen-puppet-koodiksi/</link>
				<pubDate>Mon, 23 Apr 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/ral-ja-jarjestelman-tilan-muuntaminen-puppet-koodiksi/</guid>
				<description>&lt;p&gt;Joskus käy niin että verkosta löytyy huolellisesti vuosien mittaan käsin säädetty, mahdollisesti jo edesmenneeltä sysadminilta peritty taideteos, jonka sielunelämästä ei kukaan enää ymmärrä, ja joka uhkaa romahtaa jos hengittää kohti liian kovaa. Se tuottaa mahdollisesti vielä jotakin yritykselle merkityksellistä palveluakin. Mikä avuksi?&lt;/p&gt;&#xA;&lt;p&gt;Jos näin on päässyt käymään, tai odotetaan suoritettavan muun toistaiseksi villinä ja vapaana ajelevan järjestelmän hallinta puppetilla, on hyvä palauttaa mieleen, että puppet sisältää RAL-kuoren (Resource Abstraction Layer), jonka avulla voidaan tarkastella sitä miten puppet näkee järjestelmän. RAL-kuoren avulla voidaan järjestelmän tila muuntaa puppet-koodiksi pienellä vaivalla. Esimerkiksi hakemistopuun muuntaminen:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Puppet-koodin tiivistäminen each-funktiolla ja resurssien oletusarvoilla</title>
				<link>https://www.puppeteers.net/blog/puppet-koodin-tiivistaminen-each-functionlla-ja-resurssien-oletusarvoilla/</link>
				<pubDate>Tue, 13 Mar 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/puppet-koodin-tiivistaminen-each-functionlla-ja-resurssien-oletusarvoilla/</guid>
				<description>&lt;p&gt;Puppet-koodissa on monia tapoja vähentää koodiin määrää. Silloin, kun pitää luoda useita hyvin samankaltaisia resursseja, on &lt;a href=&#34;https://puppet.com/docs/puppet/5.3/function.html#each&#34;&gt;each-funktio&lt;/a&gt; erittäin kätevä työkalu. Jos luotavien resurssien erot rajoittuvat yhden parametrin arvoon, riittää seuraava:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# testfiles.pp&#xA; $testfiles = [&amp;#39;/tmp/foo&amp;#39;,&amp;#39;/tmp/bar&amp;#39;]&#xA; $testfiles.each |$testfile| {&#xA; file { $testfile:&#xA; ensure =&amp;gt; &amp;#39;present&amp;#39;,&#xA; }&#xA; }&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Yllä oleva koodi luo molemmat tiedostot:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ puppet apply testfiles.pp&#xA; Notice: Compiled catalog for computer.example.org in environment production in 0.13 seconds&#xA; Notice: /Stage[main]/Main/File[/tmp/foo]/ensure: created&#xA; Notice: /Stage[main]/Main/File[/tmp/bar]/ensure: created&#xA; Notice: Applied catalog in 0.03 seconds&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Each-funktio on erityisen voimallinen, kun sen käyttämä data määritetään Hash-tyyppisessä muuttujassa. Alla esimerkki ini-tiedoston muokkauksesta &lt;a href=&#34;https://github.com/Puppet-Finland/puppet-gitdaemon&#34;&gt;gitdaemon-moduulissa&lt;/a&gt;:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Ulkoisten faktojen perusteet</title>
				<link>https://www.puppeteers.net/blog/ulkoisten-faktojen-perusteet/</link>
				<pubDate>Wed, 28 Feb 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/ulkoisten-faktojen-perusteet/</guid>
				<description>&lt;p&gt;Aiemmassa blogikirjoituksessa käsittelin &lt;a href=&#34;https://www.puppeteers.net/blog/custom-faktojen-luonti-ohjelmallisesti/&#34;&gt;custom faktojen&lt;/a&gt; luontia dynaamisesti. Tällä kertaa käsittelemme ulkoisten faktojen (&amp;ldquo;external facts&amp;rdquo;) perusteita. Puppetlabsin &lt;a href=&#34;https://puppet.com/docs/facter/3.9/custom_facts.html&#34;&gt;oma dokumentaatio aiheesta&lt;/a&gt; on varsin laadukasta, kunhan sen vain malttaa lukea ajatuksen kanssa (toisin kuin allekirjoittanut).&lt;/p&gt;&#xA;&lt;p&gt;Ulkoisilla faktoilla tarkoitetaan faktoja, joiden arvon Facter päättelee niiden tulosteesta ja joita ei tyypillisesti ole kirjoitettu Rubyllä vaan esim. Bashilla, Pythonilla tai PowerShellillä. Ne toimivat muutoin kuin &amp;ldquo;oikeat&amp;rdquo; faktat, mutta niissä ei voida viitata muihin faktoihin, eikä niitä voi rajata (&amp;ldquo;confine&amp;rdquo;) toimimaan vain jossain käyttöjärjestelmässä.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Custom faktojen luonti ohjelmallisesti</title>
				<link>https://www.puppeteers.net/blog/custom-faktojen-luonti-ohjelmallisesti/</link>
				<pubDate>Wed, 21 Feb 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/custom-faktojen-luonti-ohjelmallisesti/</guid>
				<description>&lt;p&gt;Staattisten faktojen kirjoittaminen on varsin helppoa melko vähäisinkin Ruby-taidoin. Alla esimerkki faktasta, joka palauttaa true tai false riippuen siitä, onko noodilla /boot-osiota:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Facter.add(:has_bootfs) do&#xA; setcode do&#xA; if Facter.value(:mountpoints)[&amp;#39;/boot&amp;#39;].nil?&#xA; false&#xA; else&#xA; true&#xA; end&#xA; end&#xA; end&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Kuten yltä näkyy, itse tieto löytyi jo valmiiksi Facterin &amp;ldquo;mountpoints&amp;rdquo;-faktan sisältä: yllä sen sisältöä vain muunnettiin erilliseksi, helposti käsiteltäväksi faktaksi visualisointia ja skriptausta helpottamaan.&lt;/p&gt;&#xA;&lt;p&gt;Mountpoints-fakta sisältää myös paljon muuta kiinnostaa tietoa, kuten sen, miten suuri osio on ja paljonko siellä on tilaa vapaana. Jos näistäkin tiedoista halutaan luoda samaan tapaan erilliset faktat, voidaan ne helposti luoda dynaamisesti:&lt;/p&gt;</description>
			</item>
			<item>
				<title>XML-tiedostojen muokkaus Puppetin Augeas-resurssilla</title>
				<link>https://www.puppeteers.net/blog/xml-tiedostojen-muokkaus-puppetin-augeas-resurssilla/</link>
				<pubDate>Sun, 18 Feb 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/xml-tiedostojen-muokkaus-puppetin-augeas-resurssilla/</guid>
				<description>&lt;p&gt;NOTE: this article is now also available in English (&lt;a href=&#34;https://www.puppeteers.net/blog/modifying-xml-files-with-puppets-augeas-resource/&#34;&gt;here&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.puppeteers.fi/augeas-resurssien-luonnista-ja-debuggaamisesta/&#34;&gt;Aiemmassa blogikirjoituksessa&lt;/a&gt; käsittelin Augeaksen käyttöä Puppetin kanssa esimerkkinä PostgreSQL:n pg_hba.conf -tiedoston muokkaus. Tässä kirjoituksessa käsitellään XML-tiedostojen muokkausta Augeaksella, mikä on luultavasti siistein ratkaisu silloin, kun ei haluta hallita koko tiedostoa esimerkiksi ERB-templatena. Alla muokataan &lt;a href=&#34;https://github.com/pwm-project/pwm&#34;&gt;Pwm:n&lt;/a&gt; web.xml-tiedostoa, johon on määritettävä asetushakemiston polku.&lt;/p&gt;&#xA;&lt;p&gt;Ennen itse Augeas-resurssin kirjoitusta kannattaa tarkistaa, mikä Augeaksen käsitys muokattavan tiedoston rakenteesta on. Ensin augtoolille pitää kertoa, mistä hallittava tiedosto löytyy:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lisää läskiä työnkulkuun, osa 5: Hiera ja sisällön kryptaaminen</title>
				<link>https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-5-hiera-ja-sisallon-kryptaaminen/</link>
				<pubDate>Mon, 05 Feb 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-5-hiera-ja-sisallon-kryptaaminen/</guid>
				<description>&lt;p&gt;Puppet-moduulien ja manifestien uudelleenkäytettävyyden vuoksi on suositeltavaa pitää data niistä erillään. Tämä tapahtuu käyttämällä hieraa. Moduulit voivat esimerkiksi tuottaa erilaisia asetuksia käyttämällä hieran perusteella organisaatiohin tai sijainteihin määriteltyä dataa&lt;/p&gt;&#xA;&lt;p&gt;Hieraan tallennetaan tyypillisesti myös sellaista yksityistä dataa mikä pitää olla suojattua, ja minkä ei haluta joutuvan ulkopuolisten saataville. Tyypillisesti data tallennetaan muun koodin ohella versionhallintajärjestelmään, joka voi olla organisaation rajojen ulkopuolella. Tällöin on käytettävä hieran encryptionta.&lt;/p&gt;&#xA;&lt;p&gt;Aiemmin yleisesti käytetty hieran salauksen menetelmä oli hiera-gpg. Hiera-gpg:n avulla salattiin koko tiedosto. Hiera-eyaml parantaa tilannetta sallimalla hieratiedoston sisällä haluttujen datalohkojen salaamisen, mikä parantaa käytettävyyttä.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Yleiskatsaus moderniin Puppet 5 ympäristöön</title>
				<link>https://www.puppeteers.net/blog/yleiskatsaus-moderniin-puppet-5-ymparistoon/</link>
				<pubDate>Mon, 05 Feb 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/yleiskatsaus-moderniin-puppet-5-ymparistoon/</guid>
				<description>&lt;p&gt;Puppetin palvelinpuoleen kuuluu on nykyisin aikamoinen tukku palvelinsovelluksia, työkaluja ja suositeltuja työnkulkuja:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Palvelinkomponentit&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Puppetserver:&lt;/strong&gt; Varsinainen Puppet-palvelin, johon Puppet agentit ottavat yhteyttä. Toimii myös itsenäisesti ilman PuppetDB:tä ja Puppetboardia&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;PuppetDB:&lt;/strong&gt; Datasäilö, johon Puppet agentit tallentavat faktojaan ja raporttejaan. Dataan päästään haluttaessa käsin ohjelmallisesti.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;PostgreSQL:&lt;/strong&gt; PuppetDB:n taustalla oleva tietokantapalvelin&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Puppetboard:&lt;/strong&gt; PuppetDB:n datan visualisoitiin tarkoitettu webbisovellus.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Apache 2:&lt;/strong&gt; Puppetboardin taustalla oleva webbipalvelin&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Työkalut&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Git:&lt;/strong&gt; versionhallintajärjestelmä, josta &lt;a href=&#34;https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-1-hallintarepo/&#34;&gt;hallintarepo&lt;/a&gt;, &lt;a href=&#34;https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-2-r10k/&#34;&gt;r10k&lt;/a&gt; ja monien Puppet moduulien käyttö on riippuvaista.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Hiera:&lt;/strong&gt; hierarkinen datasäilö Puppet-moduulien, esim. &lt;a href=&#34;https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-4-roolit-ja-profiilit/&#34;&gt;profiilien&lt;/a&gt;, parametreille. Voidaan käyttää asiakaskoneiden asetusten räätälöintiin eri luokitteluperustein. Luokittelu voi perustua faktoihin (esim. käyttöjärjestelmäversio, datakeskus) tai asiakaskoneelle erikseen määritettyihin arvoihin (esim. asiakas, koneen kriittisyys liiketoiminnan kannalta).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Eyaml:&lt;/strong&gt; Hieran datatiedostossa (yaml) olevan &lt;a href=&#34;https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-5-hiera-ja-sisallon-kryptaaminen/&#34;&gt;datan kryptaukseen tarkoitettu työkalu&lt;/a&gt;. Tärkeä erityisesti silloin, kun Hieran dataa säilötään organisaation ulkopuolella kuten esimerkiksi &lt;a href=&#34;https://www.puppeteers.fi/lisaa-laskia-tyonkulkuun-osa-3-gitlab-ja-vastaavat/&#34;&gt;GitLabissa&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;R10k:&lt;/strong&gt; työkalu dynaamisten Puppet environmentien hallintaan. Käytännössä r10k luo kustakin &lt;a href=&#34;https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-1-hallintarepo/&#34;&gt;hallintarepon&lt;/a&gt; haarasta Puppet environmentin. Kukin haara sisältää environmentin vaatimat Puppet-moduulit sekä niiden tarvitsemat parametrit.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Suositellut työnkulut&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-4-roolit-ja-profiilit/&#34;&gt;Komponenttimoduulien, roolien ja profiilien käyttö&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-1-hallintarepo/&#34;&gt;Hallintarepon&lt;/a&gt; ja &lt;a href=&#34;https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-2-r10k/&#34;&gt;r10k&lt;/a&gt;:n käyttö&lt;/li&gt;&#xA;&lt;li&gt;Versionhallinnan (Gitin) käyttö on perusoletus&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
			</item>
			<item>
				<title>Lisää läskiä työnkulkuun, osa 1: Hallintarepo</title>
				<link>https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-1-hallintarepo/</link>
				<pubDate>Wed, 31 Jan 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-1-hallintarepo/</guid>
				<description>&lt;p&gt;Mikäli muutosten tekeminen Puppet-koodiin ja Hieraan suoraan puppetmasterilla tuntuu liian kevyeltä ja helpolta, voi Puppet-työnkulusta tehdä asteittain vaikeammaksi oman sietokyvyn mukaan lisäämällä palettiin lisää komponentteja. Esimerkiksi ns. &lt;a href=&#34;https://puppet.com/docs/pe/2017.3/code_management/control_repo.html&#34;&gt;control repon&lt;/a&gt; ja &lt;a href=&#34;https://github.com/puppetlabs/r10k&#34;&gt;r10k&lt;/a&gt;:n käyttö &lt;a href=&#34;https://puppet.com/docs/puppet/5.3/environments_about.html&#34;&gt;Puppetin environmentien&lt;/a&gt; ylläpitoon lisää heti useita vaiheita aiemmin yksinkertaiseen työnkulkuun. Toki tällä saavutetaan myös ihan oikeita etuja, joista lisää tuonnempana.&lt;/p&gt;&#xA;&lt;p&gt;Control repo - tästä lähtien osin suomennettuna &amp;ldquo;hallintarepo&amp;rdquo; - on käytännössä Git repository, jonka jokaisesta haarasta (branch) luodaan (tai ainakin voidaan luoda) dynaamisesti Puppet masterille vastaava Puppet-environment. Hallintarepon oletushaaran nimi, &amp;ldquo;production&amp;rdquo;, on tästä syystä sama, kuin Puppet agenttien oletuksena käyttämä environment. Hallintarepon haaroissa on pitkälti sama sisältö kuin tavanomaisessa &lt;em&gt;/etc/puppetlabs/code/environments/production&lt;/em&gt; -kansiossakin olisi:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lisää läskiä työnkulkuun, osa 2: r10k</title>
				<link>https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-2-r10k/</link>
				<pubDate>Wed, 31 Jan 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-2-r10k/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-1-hallintarepo/&#34;&gt;Edellisessä blogipostauksessa&lt;/a&gt; esiteltiin tyypillinen hallintarepon rakenne. Tässä artikkelissa käsitellään &lt;a href=&#34;https://github.com/puppetlabs/r10k&#34;&gt;r10k&lt;/a&gt;:ta, jolla hallintarepon haaroista muodostetaan Puppet-palvelimelle vastaavat Puppet-environmentit. R10k:n asennus Puppet 4:een tai uudempaan on suoraviivaista Puppet-pakettien mukana tulevalla gem-ohjelmalla:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ /opt/puppetlabs/puppet/bin/gem install r10k&#xA; &lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Tämän jälkeen luodaan r10k:lle asetustiedosto &lt;em&gt;/etc/puppetlabs/r10k/r10k.yaml:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA; :cachedir: /opt/puppetlabs/puppet/cache/r10k&#xA; :sources:&#xA; control:&#xA; basedir: /etc/puppetlabs/code/environments&#xA; prefix: false&#xA; remote: git@gitlab.com:myorg/control-repo.git&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Yllä oletetaan, että hallintarepo (&amp;ldquo;control repo&amp;rdquo;) on jo olemassa GitLabissa tai vastaavassa, ja että &lt;a href=&#34;https://docs.gitlab.com/ce/ssh/README.html&#34;&gt;SSH-avaimet&lt;/a&gt; on luotu ja lisätty hallintarepoon sekä mahdollisiin yksityisiin Puppet-moduulirepoihin, joihin Puppetfilessä viitataan.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lisää läskiä työnkulkuun, osa 3: GitLab ja vastaavat</title>
				<link>https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-3-gitlab-ja-vastaavat/</link>
				<pubDate>Wed, 31 Jan 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-3-gitlab-ja-vastaavat/</guid>
				<description>&lt;p&gt;Edellisissä artikkeleissa käsiteltiin &lt;a href=&#34;https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-1-hallintarepo/&#34;&gt;hallintarepoa&lt;/a&gt; ja &lt;a href=&#34;https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-2-r10k/&#34;&gt;r10k&lt;/a&gt;:ta. Vaikka mikään ei estäkään hallintarepon pitämistä Puppetmaster-koneella ja &lt;a href=&#34;https://www.puppeteers.fi/lisaa-laskia-tyonkulkuun-osa-2-r10k/&#34;&gt;r10k.yaml&lt;/a&gt;:n osoittamista siihen, menetettäisiin silloin monta työvaihetta eikä ratkaisu siten sopisi tämän artikkelisarjan teemaan. Viimeinen puuttuva komponentti työnkulun läskiyttämisessä onkin GitLab tai vastaava, kuten GitHub tai Bitbucket. Näistä ensimmäinen soveltuu parhaiten tilanteeseen, jossa halutaan luoda paljon yksityisiä Git-repoja, joista ei haluta maksaa, eikä GitLabin edistyneemmille ominaisuuksille ole käyttöä. GitHubissa jokainen yksityinen repository maksaa, joten se on kallis ratkaisu yksityisten puppet-moduulien säilömiseen. Bitbucket sallii GitLabin tavoin rajoittamattomasti yksityisiä repositoryjä, mutta rajoittaa käyttäjien määrän tällä hetkellä viiteen, eikä tarjoa merkittävästi etuja, paitsi ehkä &lt;a href=&#34;https://blog.bitbucket.org/2017/09/13/say-trello-to-boards-in-bitbucket/&#34;&gt;Trello-integraation&lt;/a&gt;, jos Kanbania haluaa käytellä. GitLabilla on puolellaan vielä se etu, että se on avointa lähdekoodia, joten sen voi asentaa myös omaan sisäverkkoon ja käyttää sieltä.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lisää läskiä työnkulkuun, osa 4: Roolit ja profiilit</title>
				<link>https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-4-roolit-ja-profiilit/</link>
				<pubDate>Wed, 31 Jan 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-4-roolit-ja-profiilit/</guid>
				<description>&lt;p&gt;Mikäli &lt;a href=&#34;https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-1-hallintarepo/&#34;&gt;hallintarepon&lt;/a&gt;, &lt;a href=&#34;https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-2-r10k/&#34;&gt;r10k:n&lt;/a&gt; ja &lt;a href=&#34;https://www.puppeteers.net/blog/lisaa-laskia-tyonkulkuun-osa-3-gitlab-ja-vastaavat/&#34;&gt;GitLab:in&lt;/a&gt; sisältävä työnkulku tuntuu vielä liian kevyeltä, on läskiä ja abstraktiotasoja lisättävissä onneksi toisaalla, nimittäin itse Puppet-moduuleissa. Pelastuksen tarjoaa ns. &amp;ldquo;Roles and Profiles pattern&amp;rdquo;, jonka &lt;a href=&#34;http://www.craigdunn.org/2012/05/239/&#34;&gt;kehitti alunperin&lt;/a&gt; Craig Dunn, ja joka löi läpi todennäköisesti Gary Larizzan &lt;a href=&#34;http://garylarizza.com/blog/2014/02/17/puppet-workflow-part-2/&#34;&gt;blogikirjoitusten&lt;/a&gt; myötä. Alla käytämme englanninkielisen termin sijaan lähes suomenkielistä termiä &amp;ldquo;roolit ja profiilit&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Roolit ja profiilit ovat aivan tavallisia Puppet-luokkia. Ne eivät ole kuitenkaan ole &lt;a href=&#34;http://garylarizza.com/blog/2014/02/17/puppet-workflow-part-1/&#34;&gt;Gary Larizzan termiä&lt;/a&gt; käyttäen ns. komponenttimoduuleja, jotka on suunniteltu jonkin yksittäisen asian tekoon, ja jotka olisivat siten (ainakin periaatteessa) jaettavissa muiden käyttäjien kesken esim. Puppet Forgessa.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Windows hallintaan Puppetilla</title>
				<link>https://www.puppeteers.net/blog/windows-hallintaan-puppetilla/</link>
				<pubDate>Tue, 16 Jan 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/windows-hallintaan-puppetilla/</guid>
				<description>&lt;p&gt;Puppet on jo pitkään tukenut Windowsia. Monet natiivit Puppet-resurssit, kuten File, Package ja Service ovat jo pitkään toimineet sekä *NIX-käyttöjärjestelmissä että Windowsissa. Lisäksi osa natiiveista Puppet-resursseista, kuten &lt;a href=&#34;https://github.com/puppetlabs/puppetlabs-registry&#34;&gt;Registry&lt;/a&gt; on suunniteltu pelkästään Windows-käyttöön.&lt;/p&gt;&#xA;&lt;p&gt;Puppetin käyttömukavuus Windows-järjestelmien ylläpidossa on parantunut mutkan kautta muutamien uusien teknologioiden myötä:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://docs.microsoft.com/en-us/powershell/dsc/overview&#34;&gt;Powershell DSC&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://chocolatey.org/&#34;&gt;Chocolatey&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/Puppet-Finland/puppetlabs-powershell&#34;&gt;Powershell Exec provider&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Powershell DSC perustuu resurssien tilan hallintaan, aivan kuten Puppetkin. Mikä parasta, Puppet-koodissa voi käyttää natiivien Puppet-resurssien lisäksi Powershell DSC-resursseja. Puppetlabsin &lt;a href=&#34;https://puppet.com/blog/managing-powershell-dsc-puppet&#34;&gt;blogikirjoitus&lt;/a&gt; on hyvä alustus tähän aiheeseen. DSC vaatii toimiakseen Powershell 5.0:n, joka tulee &lt;a href=&#34;https://www.microsoft.com/en-us/download/details.aspx?id=50395&#34;&gt;Windows Management Framework 5.0:n&lt;/a&gt; mukana.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Powershell ja Windows hosts-tiedoston muokkaaminen</title>
				<link>https://www.puppeteers.net/blog/powershell-ja-windows-hosts-tiedoston-muokkaaminen/</link>
				<pubDate>Mon, 15 Jan 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/powershell-ja-windows-hosts-tiedoston-muokkaaminen/</guid>
				<description>&lt;p&gt;Windowsissa voidaan käyttää hosts-tiedostoa ip-osoitteiden ja nimien liittämiseen toisiinsa, aivan kuten Linuxissakin. Linuxissa tiedoston sijainti on /etc/hosts, Windowsissa se on c:windowssystem32driversetchosts, tai oikeastaan $env:windirsystem32driversetchosts.&lt;/p&gt;&#xA;&lt;p&gt;Hosts-tiedoston käyttäminen tulee ajankohtaiseksi silloin kun sovellus tarvitsee DNS-nimen, eikä DNS-palvelinta ole käytettävissä, tai sitä ei voida jostakin syystä käyttää.&lt;/p&gt;&#xA;&lt;p&gt;Jos Puppet agentille ei ole määritetty palvelinta, se yrittää oletuksena yhteyttä palvelimeen jonka DNS-nimi on &amp;lsquo;puppet&amp;rsquo;, eli jos palvelimelle on määritetty domain &amp;rsquo;example.com&amp;rsquo;, agent hakee palvelinta jonka DNS-nimi on &amp;lsquo;puppet.example.com&amp;rsquo; Määrittämällä server-asetuksella palvelimen DNS-nimi, voidaan Puppet agent osoittaa haluttuun palvelimeen. Tämä määritetään Linuxeissa tyypillisesti uusimmissa puppet-versioissa tiedostossa /etc/puppetlabs/puppet/puppet.conf osiossa main tai agent.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Powershell-provisiointiskriptien käyttö Vagrantissa</title>
				<link>https://www.puppeteers.net/blog/powershell-provisiointiskriptien-kaytto-vagrantissa/</link>
				<pubDate>Mon, 15 Jan 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/powershell-provisiointiskriptien-kaytto-vagrantissa/</guid>
				<description>&lt;p&gt;Vagrantin &lt;a href=&#34;https://www.vagrantup.com/docs/provisioning/shell.html&#34;&gt;shell-provisioner&lt;/a&gt; tukee suoraan Powershell-skriptejä. Toisin sanoen Windows-virtuaalikoneen asetuksia voi muokata Powershellillä ilman, että tarvitsee &lt;a href=&#34;https://www.puppeteers.net/blog/vagrant-ja-windows-boxien-rakentaminen/&#34;&gt;rakentaa uusi virtuaalikonekuva&lt;/a&gt;. Tyypillinen esimerkki on Windows liittäminen konfiguraationhallintajärjestelmään kuten Puppetiin.&lt;/p&gt;&#xA;&lt;p&gt;Vagrantin dokumentaatiossa mainitaan, että Powershell-skriptille voi välittää parametreja &lt;em&gt;powershell_args&lt;/em&gt; -valinnalla joko merkkijonona (string) tai listana (array). Esimerkkejä etenkin Powershell-provisioinnista on kuitenkin heikosti, mistä syystä tämäkin blogipostaus on kirjoitettu. Otetaan esimerkkinä skripti &lt;em&gt;bootstrap_windows.ps1&lt;/em&gt;_,_ joka liittää Windows-virtuaalikoneen olemassa olevaan Puppetserveriin. Sitä käytetään käsin Powershellistä seuraavasti:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;gt; .bootstrap_windows.ps1 -certName win2012r2.local&#xA; -ServerName puppet.local&#xA; -puppetServerAddress 192.168.137.10&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Rivinvaihdot on lisätty selvyyden vuoksi.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Vagrant ja Windows-boxien rakentaminen</title>
				<link>https://www.puppeteers.net/blog/vagrant-ja-windows-boxien-rakentaminen/</link>
				<pubDate>Mon, 15 Jan 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/vagrant-ja-windows-boxien-rakentaminen/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://www.vagrantup.com/&#34;&gt;Vagrant&lt;/a&gt; on erittäin kätevä työkalu kehitys- ja testausympäristöjen rakentamiseen. Sillä voidaan helposti ja toistettavasti luoda virtuaalikoneita, joiden asetukset säädetään halutunlaisiksi &lt;a href=&#34;https://www.vagrantup.com/docs/provisioning/&#34;&gt;provisioning-vaiheessa&lt;/a&gt; esimerkiksi &lt;a href=&#34;https://www.vagrantup.com/docs/provisioning/shell.html&#34;&gt;skripteillä&lt;/a&gt; (shell, powershell) tai konfiguraationhallintatyökaluilla kuten &lt;a href=&#34;https://www.vagrantup.com/docs/provisioning/puppet_apply.html&#34;&gt;Puppetilla&lt;/a&gt;. Vagrantin taustalla on yleensä käytössä &lt;a href=&#34;https://www.virtualbox.org/&#34;&gt;Oraclen Virtuabox&lt;/a&gt;, mutta myös muita virtualisointialustoja tuetaan ns. &lt;a href=&#34;https://www.vagrantup.com/docs/providers/&#34;&gt;providerien&lt;/a&gt; avulla.&lt;/p&gt;&#xA;&lt;p&gt;Vagrantilla luodut virtuaalikoneen on myös helppo verkottaa keskenään. Vagrant toimiikin siten hyvin palvelinympäristöjen testauksessa; hyvänä esimerkkinä käy &lt;a href=&#34;https://github.com/Puppet-Finland/puppet-ipa/blob/master/Vagrantfile&#34;&gt;puppet-ipa&lt;/a&gt; -moduuli, jossa Vagrantilla luodaan &lt;a href=&#34;https://www.freeipa.org&#34;&gt;FreeIPA&lt;/a&gt; multi-master -palvelinympäristö sekä useita asiakaskoneita eri käyttöjärjestelmillä. Toinen hyvä esimerkki on &lt;a href=&#34;https://github.com/Puppet-Finland/puppet-bacula/blob/master/Vagrantfile&#34;&gt;puppet-bacula&lt;/a&gt; -moduuli, jossa Vagrantilla luodaan täydellinen &lt;a href=&#34;https://blog.bacula.org/&#34;&gt;Bacula&lt;/a&gt;-varmuuskopiointiympäristö.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Vagrant ja Windows-virtuaalikoneet</title>
				<link>https://www.puppeteers.net/blog/vagrant-ja-windows-virtuaalikoneet/</link>
				<pubDate>Mon, 15 Jan 2018 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/vagrant-ja-windows-virtuaalikoneet/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/vagrant-ja-windows-boxien-rakentaminen/&#34;&gt;Edellisessä artikkelissa&lt;/a&gt; rakennettiin Packerilla ja Boxcutter-templateilla Windows box Vagrant-käyttöön. Tässä artikkelissa näytetään, miten Vagrantilla rakennetaan varsinaisia Windows-virtuaalikoneita.&lt;/p&gt;&#xA;&lt;p&gt;Vagrantia ohjataan &lt;a href=&#34;https://www.vagrantup.com/docs/vagrantfile/&#34;&gt;Vagrantfile&lt;/a&gt;-tiedostolla, joka usein sijaitsee projektin (esim. Puppet-moduuli) päähakemistossa. Jopa hyvin yksinkertainen Vagrantfile riittää Windows-virtuaalikoneen pystyttämiseen:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# -*- mode: ruby -*-&#xA; # vi: set ft=ruby :&#xA; &#xA; Vagrant.configure(&amp;#34;2&amp;#34;) do |config|&#xA; config.vm.define &amp;#34;win2012r2&amp;#34; do |box|&#xA; box.vm.box = &amp;#34;mwrock/Windows2012R2&amp;#34;&#xA; box.vm.box_version = &amp;#34;0.6.1&amp;#34;&#xA; box.vm.hostname = &amp;#34;windows2012r2a&amp;#34;&#xA; box.vm.network &amp;#34;private_network&amp;#34;, ip: &amp;#34;192.168.31.101&amp;#34;&#xA; box.vm.provider &amp;#34;virtualbox&amp;#34; do |vb|&#xA; # Poistetaan Virtualboxin konsolinäkymä käytöstä&#xA; vb.gui = false&#xA; vb.memory = 2048&#xA; end&#xA; end&#xA; end&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Yllä käytetään &lt;a href=&#34;https://app.vagrantup.com/mwrock/boxes/Windows2012R2&#34;&gt;erästä&lt;/a&gt; julkista Windows 2012r2 boxia. Aivan yhtä hyvin voitaisiin käyttää &lt;a href=&#34;https://www.puppeteers.fi/vagrant-ja-windows-boxien-rakentaminen/&#34;&gt;aiemmassa artikkelissa&lt;/a&gt; Packerilla luotua boxia tähän tapaan:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Puppet-pohjaisten asennusohjelmien luonti Kafolla</title>
				<link>https://www.puppeteers.net/blog/puppet-pohjaisten-asennusohjelmien-luonti-kafolla/</link>
				<pubDate>Wed, 29 Nov 2017 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/puppet-pohjaisten-asennusohjelmien-luonti-kafolla/</guid>
				<description>&lt;p&gt;Puppet on erittäin kätevä erityisesti hyvin monimutkaisten järjestelmien rakentamisessa ja ylläpidossa. Sen avulla on helppoa myös häivyttää suuriakin käyttöjärjestelmäeroja yhden luokkarajapinnan taakse. Hyvänä esimerkkinä käyvät Puppet-Finland-projektin &lt;a href=&#34;https://github.com/Puppet-Finland/thunderbird&#34;&gt;thunderbird&lt;/a&gt;- ja &lt;a href=&#34;https://github.com/Puppet-Finland/openvpn&#34;&gt;openvpn&lt;/a&gt;-moduulit, jotka toimivat useilla eri Linux-jakeluilla ja Windowsilla.&lt;/p&gt;&#xA;&lt;p&gt;Yleensä Puppettia varten rakennetaan palvelinympäristö, joka koostuu &lt;a href=&#34;https://github.com/puppetlabs/puppetserver&#34;&gt;puppetserveristä,&lt;/a&gt; yleensä &lt;a href=&#34;https://github.com/puppetlabs/puppetdb&#34;&gt;puppetdb&lt;/a&gt;:stä sekä mahdollisesti myös &lt;a href=&#34;https://github.com/voxpupuli/puppetboard&#34;&gt;puppetboardista&lt;/a&gt; tai &lt;a href=&#34;https://github.com/theforeman/foreman&#34;&gt;foremanista.&lt;/a&gt; Kullekin hallittavalle koneelle asennettu &lt;a href=&#34;https://github.com/puppetlabs/puppet-agent&#34;&gt;puppet-agent&lt;/a&gt; ottaa yhteyden puppetserveriin esim. kerran puolessa tunnissa, päivittää konfiguraationsa vastaamaan puppetserverillä määriteltyä tilaa ja lähettää raportin puppetserverin kautta puppetdb:lle.&lt;/p&gt;&#xA;&lt;p&gt;Puppettia voidaan ajaa myös paikallisesti ilman puppetserveriä käyttämällä &lt;a href=&#34;https://puppet.com/docs/puppet/5.3/services_apply.html&#34;&gt;puppet apply&lt;/a&gt;-komentoa esimerkiksi seuraavasti:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Vagrant, Powershell ja parametrien välittäminen</title>
				<link>https://www.puppeteers.net/blog/vagrant-powershell-ja-parametrit/</link>
				<pubDate>Mon, 13 Nov 2017 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/vagrant-powershell-ja-parametrit/</guid>
				<description>&lt;p&gt;Vagrant on näppärä väline myös Windows-virtuaalikoneiden luontiin esim. Puppet-resurssien testauksessa. Windows-virtuaalikoneille on luontevaa käyttää Powershell-provisiointia, minkä Vagrant tekee melkoisen yksinkertaiseksi. Aika nopeasti ilmenee tarve välittää Powershell-skriptille parametrejä Vagrantin kautta. Tästä on hieman hankalaa löytää esimerkkejä, joten tässä yksi.&lt;/p&gt;&#xA;&lt;p&gt;Oletetaan että meillä on Powershell-skripti nimeltä bootstrap_windows.ps1 Vagrant-projektin alihakemistossa &amp;lsquo;provision&amp;rsquo;. Skripti asentaa ja konfiguroi Puppet-agentin Windows-virtuaalikoneelle. Skriptille pitää välittää kaksi parametria: Puppetserverin FQDN (serverName) ja mukavuusbonuksena virtuaalikoneelle haluttu FQDN (certName). (Käytän itse Vagrantille yaml-muotoista ns. data-driven vagrant-tiedostoa, joten syntaksi on hieman erilainen vakiomuotoiseen Vagrant-tiedostoon verrattuna).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Debian 9 automaattisen asennuksen tekeminen muistitikulta</title>
				<link>https://www.puppeteers.net/blog/debian-9-automaattisen-asennuksen-tekeminen-muistitikulta/</link>
				<pubDate>Thu, 21 Sep 2017 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/debian-9-automaattisen-asennuksen-tekeminen-muistitikulta/</guid>
				<description>&lt;p&gt;Tässä artikkelissa näytetään kaksi tapaa Debianin asentamiseksi muistitikulta. Ensimmäisessä CD/DVD-asennin yksinkertaisesti kopioidaan muistitikulla, jolloin siitä tulee kätevämpi ja nopeampi CD-levyn korvike. Toinen tapa on monimutkaisempi, mutta mahdollistaa asennusten automatisoinnin helposti. Alla oletetaan, että muistitikun laitetiedosto on /dev/sdb ja että komennot ajetaan pääkäyttäjän oikeuksin esim. sudoa käyttämällä.&lt;/p&gt;&#xA;&lt;p&gt;Koska väärän laitetiedoston käyttäminen voi ylikirjoittaa koko järjestelmälevyn, on muistitikun laitetiedosto syytä tarkistaa esimerkiksi &amp;ldquo;dmesg&amp;rdquo;-komennolla:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[79499.127904] usb 2-1.2: new high-speed USB device number 13 using ehci-pci&#xA; [79499.230913] usb 2-1.2: New USB device found, idVendor=0951, idProduct=1607&#xA; [79499.230918] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3&#xA; [79499.230920] usb 2-1.2: Product: DataTraveler 2.0&#xA; [79499.230921] usb 2-1.2: Manufacturer: Kingston&#xA; [79499.230923] usb 2-1.2: SerialNumber: 5B840D0001DA&#xA; [79499.231294] usb-storage 2-1.2:1.0: USB Mass Storage device detected&#xA; [79499.231633] scsi16 : usb-storage 2-1.2:1.0&#xA; [79500.230217] scsi 16:0:0:0: Direct-Access Kingston DataTraveler 2.0 PMAP PQ: 0 ANSI: 0 CCS&#xA; [79500.230722] sd 16:0:0:0: Attached scsi generic sg1 type 0&#xA; [79500.460385] sd 16:0:0:0: [sdb] 15646720 512-byte logical blocks: (8.01 GB/7.46 GiB)&#xA; [79500.461321] sd 16:0:0:0: [sdb] Write Protect is off&#xA; [79500.461327] sd 16:0:0:0: [sdb] Mode Sense: 23 00 00 00&#xA; [79500.462022] sd 16:0:0:0: [sdb] No Caching mode page found&#xA; [79500.462028] sd 16:0:0:0: [sdb] Assuming drive cache: write through&#xA; [79500.465797] sdb: sdb1&#xA; [79500.468449] sd 16:0:0:0: [sdb] Attached SCSI removable disk&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Lisäksi on syytä vamistaa, että kyseiseltä muistitikulta on ylipäätään mahdollista bootata käyttöjärjestelmä tai sen asennin; kaikilta ei nimittäin voi.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Debian snapshots</title>
				<link>https://www.puppeteers.net/blog/debian-snapshots/</link>
				<pubDate>Tue, 20 Dec 2016 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/debian-snapshots/</guid>
				<description>&lt;p&gt;Törmäsin eilen varsin hyödylliseen sivustoon nimeltään &lt;a href=&#34;http://snapshot.debian.org/&#34;&gt;snapshot.debian.org&lt;/a&gt;. Sieltä löytyvät kaikki julkaistut Debian-projektin pakettien versiot. Tämä mahdollistaa pakettien päivittämisen sekä vanhempiin että uudempiin versioihin, mistä on hyötyä mm. selvitettäessä onko jonkin ongelman syy ohjelmistovirhe vai konfiguraatiovirhe.&lt;/p&gt;&#xA;&lt;p&gt;Ohjelmistolähteenä snapshots.debian.org ei toimi, toisin kuin esim. &lt;a href=&#34;https://backports.debian.org/&#34;&gt;backports.debian.org&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Sekalaisia komentoja Samban debuggaukseen</title>
				<link>https://www.puppeteers.net/blog/sekalaisia-komentoja-samban-debuggaukseen/</link>
				<pubDate>Tue, 20 Dec 2016 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/sekalaisia-komentoja-samban-debuggaukseen/</guid>
				<description>&lt;p&gt;Alla tukku hyödyllisiä komentoja Samban debuggaukseen. Oletus on, että Samba AD DC ja Domain Member-palvelinten konfiguraatiot ovat pääosin kunnossa. Tähän pisteeseen päästään helpohkosti Puppet-Finland -projektin &lt;a href=&#34;https://github.com/Puppet-Finland/samba4&#34;&gt;samba4-moduulilla&lt;/a&gt;. Täysin hands off -asennus on varsin haastava, joten debuggaustyökaluille tulee väistämättä tarvetta.&lt;/p&gt;&#xA;&lt;p&gt;Tarkistetaan, onko &lt;em&gt;member&lt;/em&gt;-nimisellä koneella jo machine account Samban LDAP:ssa, eli onko se jo liitetty domainiin:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ net ads dn &amp;#39;CN=member,CN=Computers,DC=smb,DC=domain,dc=com&amp;#39; cn -U administrator%password&#xA; Got 1 replies&#xA; &#xA; cn: member&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Tässä eräs toinen tapa selvittää, onko member-kone liitetty domainiin. Tähän vaaditaan Debianissa &lt;em&gt;ldb-tools&lt;/em&gt; -paketin asentaminen ja komento on ajettava DC-koneella:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Prosessien tietojen etsiminen Powershellillä</title>
				<link>https://www.puppeteers.net/blog/prosessien-tietojen-etsiminen-powershellilla/</link>
				<pubDate>Wed, 09 Nov 2016 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/prosessien-tietojen-etsiminen-powershellilla/</guid>
				<description>&lt;p&gt;UNIX-tyyppissä järjestelmissä prosessitaulun tarkastelu on helppoa &lt;em&gt;ps&lt;/em&gt;-komennolla. Samainen komento löytyy Powershellistäkin, mutta se on vain alias &lt;em&gt;Get-Process&lt;/em&gt; CmdLetille, jolla saadaan helposti selville, mitä prosesseja järjestelmässä on käynnissä (alla typistetty tuloste):&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;gt; Get-Process&#xA; &#xA; Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName&#xA; ------- ------ ----- ----- ----- ------ -- -----------&#xA; 136 8 6428 8084 569 0.08 916 bash&#xA; 26 3 1496 2272 16 0.02 1560 cmd&#xA; 57 7 1096 5852 57 0.03 2144 firefox&#xA; 0 0 0 4 0 0 openvpn&#xA; 88 7 988 3668 50 0.02 2676 openvpnserv&#xA; 34 3 500 2332 14 0.00 4940 openvpnserv&#xA; 562 27 151992 161440 615 4.27 2388 powershell&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Jos prosessin nimi on jo tiedossa, voidaan se antaa -Name -parametrilla - huomaa, että .exe jätetään pois lopusta:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Cobbler autodetect system name</title>
				<link>https://www.puppeteers.net/blog/cobbler-autodetect-system-name/</link>
				<pubDate>Wed, 05 Oct 2016 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/cobbler-autodetect-system-name/</guid>
				<description>&lt;p&gt;Cobblerissa on eräs varsin heikosti dokumentoitu ominaisuus, jonka avulla on mahdollista selvittää, mikä kyselyn tekevän koneen nimi Cobblerissa on. Tästä on hyötyä esimerkiksi Windowsin bootstrappauksessa, jotta saadaan noudettua oikeaan Cobbler System-olioon liittyvä &lt;em&gt;Unattended.xml&lt;/em&gt; -tiedosto. Linuxien tapauksessa tähän kikkailuun ei ole tarvetta, koska Cobblerin parametrit välittyvät käyttöjärjestelmän asentimelle suoraan kickstart- tai preseed tiedoston mukana.&lt;/p&gt;&#xA;&lt;p&gt;Itse ominaisuus on erittäin yksinkertainen käyttää, kunhan muistaa ajaa sen siltä koneelta, jonka System name halutaan tietää:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Cobbler templatet</title>
				<link>https://www.puppeteers.net/blog/cobbler-templatet/</link>
				<pubDate>Wed, 05 Oct 2016 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/cobbler-templatet/</guid>
				<description>&lt;p&gt;Käytämme työasemien ja osin myös palvelimien provisioinnissa &lt;a href=&#34;https://cobbler.github.io/&#34;&gt;Cobbleria&lt;/a&gt;. Se on vahvimmillaan juuri fyysisten laitteiden provisionnissa, vaikka perustason tuki myös virtuaalikoneiden provisioinnille löytyykin. Cobbler nitoo yhteen lukuisia eri palveluita (dhcp, dns, tftp) Python-koodin avulla, joten aivojen vääntäminen sen vaatimiin asetuksiin vie aikansa. Cobblerin perusdokumentaatio on RedHatille tyypilliseen tyyliin varsin hyvää, mutta ongelmiin joutuu helposti, kun halua tehdä jotain virallisen dokumentaation ulkopuolelta. Esimerkiksi Cobblerin web-API on dokumentoitu varsin heikosti, lähinnä &lt;a href=&#34;https://fedorahosted.org/cobbler/wiki/ModPythonDetails&#34;&gt;tässä Wiki-artikkelissa&lt;/a&gt;. Tässä ja tulevissa blogikirjoituksissa pyritään paikkaamaan Cobblerin dokumentaation puutetta.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Hieran debuggauksesta</title>
				<link>https://www.puppeteers.net/blog/hieran-debuggauksesta/</link>
				<pubDate>Wed, 15 Jun 2016 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/hieran-debuggauksesta/</guid>
				<description>&lt;p&gt;Toisinaan Puppet-koodissa on tarve tehdä &lt;a href=&#34;https://docs.puppet.com/hiera/3.1/lookup_types.html&#34;&gt;haku Hierasta&lt;/a&gt;, mutta se ei toimi odotetulla tavalla. Näissä tapauksissa auttaa &amp;ldquo;puppet lookup&amp;rdquo;-komento:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ puppet lookup --node www.domain.com --explain bacula::filedaemon::backup_files&#xA; Data Binding &amp;#34;hiera&amp;#34;&#xA; Found key: &amp;#34;bacula::filedaemon::backup_files&amp;#34; value: [&#xA; &amp;#34;/etc&amp;#34;,&#xA; &amp;#34;/var/lib/puppet/ssl&amp;#34;,&#xA; &amp;#34;/var/backups/local&amp;#34;&#xA; ]&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Erikoista kyllä, tämä komento löytää ainoastaan ne Hieran hierarkian tasot, jotka perustuvat faktoihin:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA; :backends:&#xA; - yaml&#xA; :hierarchy:&#xA; - &amp;#34;nodes/%{::trusted.certname}&amp;#34;&#xA; - &amp;#34;roles/%{::role}&amp;#34;&#xA; - &amp;#34;lsbdistcodename/%{::lsbdistcodename}&amp;#34;&#xA; - &amp;#34;osfamily/%{::osfamily}&amp;#34;&#xA; - &amp;#34;kernel/%{::kernel}&amp;#34;&#xA; - common&#xA; &#xA; :yaml:&#xA; :datadir:&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Yllä muuttuja &lt;em&gt;role&lt;/em&gt; ei siis ole fakta, vaan se on oikeastaan parametri tai käytänne, joka määritetään noodin yaml-tiedostossa:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Windowsin järjestelmätiedostojen ylikirjoittaminen Puppetilla</title>
				<link>https://www.puppeteers.net/blog/windowsin-jarjestelmatiedostojen-ylikirjoittaminen-puppetilla/</link>
				<pubDate>Sat, 09 Apr 2016 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/windowsin-jarjestelmatiedostojen-ylikirjoittaminen-puppetilla/</guid>
				<description>&lt;p&gt;Windowsin järjestelmätiedostoja ei useinkaan pysty muuttamaan käsin - tai Puppetilla - ilman niiden suojaustason alentamista. Ongelma on siinä, että järjestelmätiedostojen omistaja on usein (pseudo)käyttäjä &amp;ldquo;TrustedInstaller&amp;rdquo;, eikä edes administrator-tason käyttäjillä ole niihin kirjoitusoikeutta. Onneksi rajoitukset voi kiertää melko suoraviivaisesti käyttämällä &lt;a href=&#34;https://technet.microsoft.com/en-us/library/cc753024.aspx&#34;&gt;takeown.exe&lt;/a&gt; -komentoa sekä &lt;a href=&#34;https://github.com/puppetlabs/puppetlabs-acl&#34;&gt;puppetlabs/acl&lt;/a&gt; -moduulia. Alla on muokattu erästä Group Policyn XML-tiedostoa, jonka merkistökoodaus oli siinä määrin poikkeuksellinen, että sen lukeminen Rubyn reXML -kirjastolla ei onnistunut:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;include ::acl&#xA; &#xA; # Vaihda tiedoston omistaja&#xA; exec { &amp;#39;takeown-Search.admx&amp;#39;:&#xA; command =&amp;gt; &amp;#39;C:WindowsSystem32takeown.exe /f C:WindowsPolicyDefinitionsSearch.admx&amp;#39;,&#xA; }&#xA; &#xA; # Määritä uudet oikeudet&#xA; acl { &amp;#39;Search.admx&amp;#39;:&#xA; target =&amp;gt; &amp;#39;C:/Windows/PolicyDefinitions/Search.admx&amp;#39;,&#xA; permissions =&amp;gt; [&#xA; { identity =&amp;gt; &amp;#39;Järjestelmänvalvojat&amp;#39;, rights =&amp;gt; [&amp;#39;full&amp;#39;] },&#xA; { identity =&amp;gt; &amp;#39;SYSTEM&amp;#39;, rights =&amp;gt; [&amp;#39;full&amp;#39;] }&#xA; ],&#xA; require =&amp;gt; Exec[&amp;#39;takeown-Search.admx&amp;#39;],&#xA; }&#xA; &#xA; # Korvaa tiedosto&#xA; file { &amp;#39;C:/Windows/PolicyDefinitions/Search.admx&amp;#39;:&#xA; source =&amp;gt; &amp;#39;puppet:///modules/winpolicydefinitions/Search.admx&amp;#39;,&#xA; require =&amp;gt; Acl[&amp;#39;Search.admx&amp;#39;], &#xA; }&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Tästä prosessista kannattaisi muokata oma määritelty resurssinsa, tai jopa peräti oma tyyppinsä, mikäli sille löytyisi runsaasti käyttöä. Takeown-komentoon kannattaisi lisätä myös &amp;ldquo;unless&amp;rdquo;-parametri, jotta sitä ei ajeta turhaan joka kerta. Jos Execissä olisi &amp;ldquo;provider =&amp;gt; &amp;lsquo;powershell&amp;rsquo;&amp;rdquo;, niin tarkistuksen voisi tehdä &lt;a href=&#34;http://stackoverflow.com/questions/22943289/powershell-what-is-the-best-way-to-check-whether-the-current-user-has-permissio&#34;&gt;muutamin eri tavoin&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Windowsin paikallisten ryhmäkäytäntöjen muokkaus Puppetilla</title>
				<link>https://www.puppeteers.net/blog/windowsin-paikallisten-ryhmakaytantojen-muokkaus-puppetilla/</link>
				<pubDate>Sat, 09 Apr 2016 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/windowsin-paikallisten-ryhmakaytantojen-muokkaus-puppetilla/</guid>
				<description>&lt;p&gt;Monia Windowsien asetuksia on perinteisesti muokattu ryhmäkäytänteillä (&amp;ldquo;Group Policy&amp;rdquo;). Vaikka ryhmäkäytänteiden teho &lt;a href=&#34;http://www.theregister.co.uk/2010/07/06/sysadmin_using_group_policy/&#34;&gt;onkin melko rajallinen&lt;/a&gt;, pystyy niillä tekemään yhtä ja toista. Microsoft on kuitenkin &lt;a href=&#34;https://msdn.microsoft.com/en-us/PowerShell/dsc/overview&#34;&gt;Powershell DSC:n&lt;/a&gt; kuitenkin siirtymässä tilan hallintaan perustuviin modernimpiin ratkaisuja, joten Group Policyt jäänevät lähivuosina historiaan.&lt;/p&gt;&#xA;&lt;p&gt;Tästä huolimatta ryhmäkäytänteitä hyödynnetään yhä erityisesti Active Directory -toimialueiden (&amp;ldquo;domain&amp;rdquo;) kanssa silloin, kun halutaan standardisoida työasemien asetuksia. Myös Samba 4 tukee ryhmäkäytänteiden jakelua työasemille. Ryhmäkäytänteet eivät kuitenkaan vaadi Active Directoryn tai Samba 4:n käyttöä, sillä käytänteitä voidaan määrittää paitsi verkkoalueelle, myös paikallisesti (&amp;ldquo;Local Group Policy&amp;rdquo;). Käytänteet voidaan lisäksi jakaa käyttäjäkohtaisiin (&amp;ldquo;User policy&amp;rdquo;) ja tietokonekohtaisiin (&amp;ldquo;Machine policy&amp;rdquo;).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Powershelliä UNIX-ylläpitäjille, osa 12</title>
				<link>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-12/</link>
				<pubDate>Wed, 06 Apr 2016 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-12/</guid>
				<description>&lt;p&gt;Toisinaan tulee tarpeelliseksi etsiä yhdestä tai useammasta tiedostosta jotakin merkkijonoa ja tulostaa täsmäävä rivi sekä tiedosto, jossa se on, sekä rivinumero. GNU grepillä tämä onnistuu triviaalisti komennolla &amp;ldquo;grep -HN pattern&amp;rdquo;:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ grep -Hn REXML *.rb&#xA; group_policy.rb:71: dFile = REXML::Document.new( File.new(&amp;#34;#{dDir}\#{array[0][0]}.admx&amp;#34;))&#xA; group_policy.rb:72: eFile = REXML::Document.new( File.new(&amp;#34;#{eDir}\#{array[0][0]}.adml&amp;#34;))&#xA; group_policy.rb:154: dFile = REXML::Document.new( File.new(&amp;#34;#{dDir}\#{sys_tShort}.admx&amp;#34;))&#xA; group_policy.rb:155: eFile = REXML::Document.new( File.new(&amp;#34;#{eDir}\#{sys_tShort}.adml&amp;#34;))&#xA; group_policy.rb:428: dFile = REXML::Document.new( File.new(&amp;#34;#{dDir}\#{tShort}.admx&amp;#34;))&#xA; group_policy.rb:429: eFile = REXML::Document.new( File.new(&amp;#34;#{dDir}\#{adml}&amp;#34;))&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Sama homma onnistuu myös Powershellissä, mutta hieman vaikeammin:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Powershelliä UNIX-ylläpitäjille, osa 10</title>
				<link>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-10/</link>
				<pubDate>Thu, 10 Mar 2016 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-10/</guid>
				<description>&lt;p&gt;Windowsin käynnistyviin ohjelma- ja kirjastotiedostoihin liittyy paljon erilaista metatietoa, esimerkiksi ohjelman versionumero, julkaisija yms. Näiden metatietojen tarkastelu on toisinaan hyödyllistä, etenkin ohjelmistoja testattaessa. Alla OpenVPN:n &lt;em&gt;bin&lt;/em&gt; -kansion sisältö kokonaisuudessaan:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;PS C:Program FilesOpenVPNbin&amp;gt; Get-ChildItem &#xA; &#xA; Directory: C:Program FilesOpenVPNbin &#xA; &#xA; Mode LastWriteTime Length Name&#xA; ---- ------------- ------ ----&#xA; -a--- 7.3.2016 16:40 1753440 libeay32.dll &#xA; -a--- 7.3.2016 16:40 226432 liblzo2-2.dll&#xA; -a--- 7.3.2016 16:40 123000 libpkcs11-helper-1.dll &#xA; -a--- 7.3.2016 16:40 465760 openvpn-gui.exe&#xA; -a--- 7.3.2016 16:40 965984 openvpn.exe &#xA; -a--- 7.3.2016 16:40 65888 openvpnserv.exe &#xA; -a--- 7.3.2016 16:40 396640 ssleay32.dll&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Metatiedot on tallennettu tiedosto-objektin VersionInfo-parametriin - alla tarkastellaan &lt;em&gt;openvpn.exe&lt;/em&gt; -tiedoston metatietoja:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Powershelliä UNIX-ylläpitäjille, osa 11</title>
				<link>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-11/</link>
				<pubDate>Thu, 10 Mar 2016 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-11/</guid>
				<description>&lt;p&gt;Windowsin tuoteavain (&amp;ldquo;Product Key&amp;rdquo;) löytyy esiasennetuissa koneissa usein koneen pohjasta, mutta entäpä jos Windows onkin jälkiasennettu, tai koneen pohjassa oleva tarra ei edustakaan todellisuutta? Jos tällainen kone soseutuu, ei tuoteavainta löydy tietenkään mistään fyysisestä paikasta, ja tuloksena on kone ilman Windowsia; tämä voi toki olla toivottavakin asiaintila, mutta lähdetään siitä oletuksesta, ettei näin ole.&lt;/p&gt;&#xA;&lt;p&gt;Tuoteavain on onneksi tallennettu Windowsin rekisteriin, mistä sen saa otettua talteen &lt;a href=&#34;http://www.howtogeek.com/206329/how-to-find-your-lost-windows-or-office-product-keys/&#34;&gt;useilla eri tavoilla.&lt;/a&gt; Koska tässä blogissa keskitytään automaatioon ja Powershellin, mitkään graafiset kikkareet eivät luonnollisestikaan tule kyseeseen. Onneksi homma hoituu myös alla olevalla Powershell-skriptillä (&lt;a href=&#34;http://powershell.com/cs/blogs/tips/archive/2012/04/30/getting-windows-product-key.aspx&#34;&gt;lähde&lt;/a&gt;):&lt;/p&gt;</description>
			</item>
			<item>
				<title>Powershelliä UNIX-ylläpitäjille, osa 9</title>
				<link>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-9/</link>
				<pubDate>Sun, 03 Jan 2016 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-9/</guid>
				<description>&lt;p&gt;Toisinaan on tarpeen lisätä tekstitiedoston loppuun rivejä. UNIX:ssa tämä onnistuu helposti echo-komennolla:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ echo matti &amp;gt;&amp;gt; vpn.pass&#xA; $ echo salasana &amp;gt;&amp;gt; vpn.pass&#xA; $ cat vpn.pass&#xA; matti&#xA; salasana&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Sama onnistuu Powershellissä, mutta ei suinkaan Write-Host -komennolla, joka olisi echo-komennon lähin vastine, vaan Add-Content -komennolla:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;gt; Add-Content vpn.pass -Value matti&#xA; &amp;gt; Add-Content vpn.pass -Value salasana&#xA; &amp;gt; Get-Content vpn.pass&#xA; matti&#xA; salasana&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Toinen melko yleinen tarve on tiedostojen lataaminen verkosta suoraan komentoriviltä. UNIX:ssa tämä onnistuu helpoiten wget-komennolla:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Powershelliä UNIX-ylläpitäjille, osa 8</title>
				<link>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-8/</link>
				<pubDate>Mon, 22 Jun 2015 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-8/</guid>
				<description>&lt;p&gt;Tietyn nimisten tiedostojen (tai tyyppisten) poistaminen hakemistosta on melko suoraviivaista GNU findilla:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ ls&#xA; README.txt stderr.log stdout.log&#xA; $ find . -maxdepth 1 -type f -name &amp;#34;*.log&amp;#34; -exec rm -f {} +&#xA; $ ls&#xA; README.txt&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Valinta &lt;em&gt;&amp;ldquo;maxdepth 1&amp;rdquo;&lt;/em&gt; estää findia poistamasta tiedostoja mahdollisista alihakemistoista.&lt;/p&gt;&#xA;&lt;p&gt;Toinen vaihtoehto on putkittaa tiedostolistaus xargsille:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ ls&#xA; README.txt stderr.log stdout.log&#xA; $ ls *.log|xargs rm -f&#xA; $ ls&#xA; README.txt&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Tässä ei kuitenkaan erotella toisistaan tiedostoja ja hakemistoja, joten myös mahdolliset .log -päätteiset hakemistot yrittäisiin poistaa siinä epäonnistuen.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Powershelliä UNIX-ylläpitäjille, osa 6</title>
				<link>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-6/</link>
				<pubDate>Wed, 17 Jun 2015 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-6/</guid>
				<description>&lt;p&gt;UNIX-tyyppisissä käyttöjärjestelmissä on tulee usein tarve etsiä jostain hakemistosta lähiaikoina (alla minuutin sisällä) muuttuneet tiedostot:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ find /var/log/ -mmin -1&#xA; /var/log/debug&#xA; /var/log/user.log&#xA; /var/log/auth.log&#xA; /var/log/syslog&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Sama onnistuu myös Powershellissä ainakin kahdella tavalla, joista ensimmäinen on toiminnallisesti identtinen yllä olevan komennon kanssa:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;PS C:UsersAdministratorDownloads&amp;gt; Get-ChildItem . -Recurse|Where-Object { $_.LastWriteTime -ge $(Get-Date).AddMinutes(-120) }|Select LastWriteTime, Name&#xA; &#xA; LastWriteTime Name &#xA; ------------- ----&#xA; 6/18/2015 install.bat&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Yllä oleva komento käy läpi koko hakemiston rekursiivisesti tarkistaen jokaisen tiedoston kohdalla viimeisimmän kirjoitusajan ja verraten sitä Date-objektiin, jossa nykyisestä kellonajasta on vähennetty 120 minuuttia. Toisin sanoen komento näyttää ne tiedostot tai hakemistot, joita on muokattu viimeisen 120 minuutin sisällä. Selkeyden vuoksi tiedostojen tiedoista näytetään selkeyden vuoksi vain nimi ja kirjoitusaika.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Powershelliä UNIX-ylläpitäjille, osa 7</title>
				<link>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-7/</link>
				<pubDate>Wed, 17 Jun 2015 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-7/</guid>
				<description>&lt;p&gt;Tulosteiden uudelleenohjaus ja paluuarvojen käsittely toimii lähes samoin *NIX-shelleissä ja Windowsin Powershellissä. Alla tarkistetaan Linuxin systemctl-komennolla olemassa olevan (&amp;ldquo;openvpn&amp;rdquo;) ja olemattoman (&amp;ldquo;fake&amp;rdquo;) palvelun tila, ohjataan sekä tuloste että virhetuloste bittitaivaaseen ja tulostetaan komennon paluuarvo:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ systemctl status openvpn &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&#xA; $ echo $?&#xA; 0&#xA; $ systemctl status fake &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&#xA; $ echo $?&#xA; 3&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Kuten näkyy, paluuarvo on 0 jos palvelu on olemassa ja 3 jos sitä ei löydy.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Useiden resurssien luonti lista-parametrien avulla</title>
				<link>https://www.puppeteers.net/blog/useiden-resurssien-luonti-lista-parametrien-avulla/</link>
				<pubDate>Mon, 15 Jun 2015 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/useiden-resurssien-luonti-lista-parametrien-avulla/</guid>
				<description>&lt;p&gt;Toisinaan tulee tarve luoda useita samankaltaisia resursseja, joissa vain jonkin yksittäisen ominaisuuden arvo muuttuu. Esimerkiksi intranetin webbipalvelimeen voi joutua sallimaan yhteydet palomuurin läpi sekä sisäverkon että VPN:n osoiteavaruudesta. Vaikka Puppet ei suoraan tuekaan iteraatiota, sitä voi emuloida antamalla resurssin nimeksi ($title) listan merkkijonon sijaan.&lt;/p&gt;&#xA;&lt;p&gt;Esimerkiksi Puppet-Finlandin &lt;a href=&#34;https://github.com/Puppet-Finland/webserver&#34; title=&#34;Puppet-Finlandin webserver-moduuli&#34;&gt;webserver-moduulissa&lt;/a&gt; on parametrit &lt;em&gt;$allow_address_ipv4&lt;/em&gt; ja &lt;em&gt;$allow_address_ipv6.&lt;/em&gt; Ne voivat saada arvokseen joko merkkijonon (&lt;em&gt;&amp;lsquo;192.168.55.0/24&amp;rsquo;&lt;/em&gt;) tai listan (&lt;em&gt;[&amp;lsquo;192.168.55.0/24&amp;rsquo;, &amp;lsquo;10.69.0.0/16&amp;rsquo;]&lt;/em&gt;):&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;class webserver::packetfilter&#xA; (&#xA; $allow_address_ipv4,&#xA; $allow_address_ipv6&#xA; &#xA; ) inherits webserver::params&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Kummankin parametrin arvo annetaan &lt;em&gt;::webserver::packetfilter::allow_ip&lt;/em&gt; -resurssin nimeksi (&lt;em&gt;$title&lt;/em&gt;):&lt;/p&gt;</description>
			</item>
			<item>
				<title>Powershelliä UNIX-ylläpitäjille, osa 5</title>
				<link>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-5/</link>
				<pubDate>Wed, 13 May 2015 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-5/</guid>
				<description>&lt;p&gt;Windowsissa tekstimuotoisia lokitiedostoja UNIX:in tapaan ole, vaan niitä vastaa EventLog, jonka sisältöä voi tutkia kätevästi PowerShellillä. EventLogin lokit (Logs) voi listata seuraavasti:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;PS C:&amp;gt; Get-EventLog -List &#xA; &#xA; Max(K) Retain OverflowAction Entries Log &#xA; ------ ------ -------------- ------- --- &#xA; 20 480 0 OverwriteAsNeeded 3 787 Application &#xA; 20 480 0 OverwriteAsNeeded 0 HardwareEvents &#xA; 512 7 OverwriteOlder 0 Internet Explorer &#xA; 20 480 0 OverwriteAsNeeded 0 Key Management Service &#xA; 20 480 0 OverwriteAsNeeded 2 606 Security &#xA; 20 480 0 OverwriteAsNeeded 1 684 System &#xA; 15 360 0 OverwriteAsNeeded 4 823 Windows PowerShell &lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Halutun lokin (alla &lt;em&gt;System&lt;/em&gt;) viimeisimmät kirjaukset (alla 10) saa näytettyä &lt;em&gt;-Newest&lt;/em&gt; -vivulla:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Puppet-moduulien laadunvarmistus, osa 1: automaattiset tarkistustyökalut</title>
				<link>https://www.puppeteers.net/blog/puppet-moduulien-laadunvarmistus-osa-1-automaattiset-tarkistustyokalut/</link>
				<pubDate>Mon, 27 Apr 2015 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/puppet-moduulien-laadunvarmistus-osa-1-automaattiset-tarkistustyokalut/</guid>
				<description>&lt;p&gt;Puppet-moduulien laatu pysyy korkeana, kun syntaksi- ja tyylivirheitä päästetä edes versionhallintaan asti. Puppet-koodin syntaksivirheet löytyvät helposti:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ puppet parser validate tiedosto&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;ERB-templateiden virheet saa selvitettyä seuraavalla tavalla:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ erb -P -x -T &amp;#39;-&amp;#39; tiedosto|ruby -c&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;JSON-tiedostojen (metadata.json) virheet etsiminen vaatii hieman kikkailua:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ cat tiedosto|json_pp -f json -t null&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Tyylivirheitä voi etsiä puppet-lint -työkalulla:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ puppet-lint tiedosto&#xA; $ puppet-lint .&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Puppet-lint tunnistaa myös puppet-koodin, joka on eteenpäin tai taaksepäin epäyhteensopivaa. Onkin hyvin järkevää ajaa puppet-koodi aina puppet-lintin läpi ennen suuria Puppet-ympäristön päivityksiä.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Käyttöjärjestelmäerojen hallinta Puppetissa, osa 1</title>
				<link>https://www.puppeteers.net/blog/kayttojarjestelmaerojen-hallinta-puppetissa-osa-1/</link>
				<pubDate>Sun, 26 Apr 2015 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/kayttojarjestelmaerojen-hallinta-puppetissa-osa-1/</guid>
				<description>&lt;p&gt;Puppet-moduulit on melko helppo rakentaa siten, että ne saa helposti toimimaan eri käyttöjärjestelmissä ja käyttöjärjestelmäversioissa. Alla ovat itse hyväksi toteamani kolme korkea tason tapaa käyttöjärjestelmäerojen hallintaan kevyimmästä raskaimpaan:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Params-luokan käyttö&lt;/li&gt;&#xA;&lt;li&gt;Käyttöjärjestelmäriippuvaisten aliluokkien käyttö&lt;/li&gt;&#xA;&lt;li&gt;Uuden moduulin rakentaminen&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Menetelmillä 1 ja 2 pystyy käytännössä hallitsemaan kaikki Unix-tyyppisten käyttöjärjestelmien väliset erot. Menetelmää 3 ei juuri tarvita, paitsi jos jokin käyttöjärjestelmä (lue: Windows) eroa muista käytössä olevista huomattavan paljon.&lt;/p&gt;&#xA;&lt;p&gt;Pieniin eroihin riittää siis &lt;em&gt;params&lt;/em&gt;-luokan käyttö. Otetaan esimerkiksi vaikkapa Puppet-Finlandin &lt;a href=&#34;https://github.com/Puppet-Finland/ntp&#34; title=&#34;ntp-moduuli&#34;&gt;ntp-moduuli&lt;/a&gt;:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Augeas-resurssien luonnista ja debuggaamisesta</title>
				<link>https://www.puppeteers.net/blog/augeas-resurssien-luonnista-ja-debuggaamisesta/</link>
				<pubDate>Tue, 14 Apr 2015 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/augeas-resurssien-luonnista-ja-debuggaamisesta/</guid>
				<description>&lt;p&gt;NOTE: this article is now also available &lt;a href=&#34;https://www.puppeteers.net/blog/using-augeas-to-manage-resources-in-puppet/&#34;&gt;in English&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Puppetin Augeas-resurssilla voidaan muokata konfiguraatiotiedostojen osia sen sijaan, että hallittaisiin koko tiedostoa esim. templatella tai staattisella tiedostolla. Koko tiedoston hallinta tuottaa yleensä varmemmin ja vähemmällä vaivalla halutun lopputuloksen, mutta erityisesti luettelomaisten konfiguraatiotiedostojen tapauksessa Augeas-resurssi on erittäin käyttökelpoinen. Augeaksen käyttö ei-triviaaleissa tapauksissa on kuitenkin varsin haastavaa, ja usein onkin hyödyllistä rakentaa oikeat komennot käsin &amp;ldquo;augtool&amp;rdquo;-kehotteessa ja vasta sitten muuntaa ne Puppetin Augeas-resurssiksi.&lt;/p&gt;&#xA;&lt;p&gt;Aluksi kannattaa tutkia, mikä Augeaksen näkemys jonkin konfiguraatiotiedoston rakenteesta on (ylimääräisiä rivejä on poistettu):&lt;/p&gt;</description>
			</item>
			<item>
				<title>Powershelliä UNIX-ylläpitäjille, osa 3</title>
				<link>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-3/</link>
				<pubDate>Thu, 19 Mar 2015 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-3/</guid>
				<description>&lt;p&gt;Powershelliä konffatessa on tullut taas törmättyä useisiin varsin käyttökelpoisiin komentoihin. Alla ei-kattava lista, sillä lisää on luvassa sopivalla hetkellä.&lt;/p&gt;&#xA;&lt;p&gt;Hakemiston poistaminen rekursiivisesti:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ rm -rf hakemisto&#xA; &amp;gt; Remove-Item -Recurse -Path hakemisto&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Tiedoston viimeisten rivien näyttäminen:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ cat tiedosto|tail -n &amp;lt;rivien_määrä&amp;gt;&#xA; &amp;gt; Get-Content tiedosto -Last &amp;lt;rivien_määrä&amp;gt;&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Tiedoston ensimmäisten rivien näyttäminen&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ cat tiedosto|head -n &amp;lt;rivien_määrä&amp;gt;&#xA; &amp;gt; Get-Content tiedosto -First &amp;lt;rivien_määrä&amp;gt;&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Tiedoston rivien määrän laskeminen:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Powershelliä UNIX-ylläpitäjille, osa 4</title>
				<link>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-4/</link>
				<pubDate>Thu, 19 Mar 2015 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-4/</guid>
				<description>&lt;p&gt;Lisävinkkejä tuli keksittyä nopeammin kuin alunperin osasin uumoillakaan. Näille on ollut käyttöä jo useaan kertaan.&lt;/p&gt;&#xA;&lt;p&gt;Prosessin ID:n löytäminen:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ ps aux|grep nimi&#xA; &amp;gt; Get-Process -Name nimi&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Prosessin tappaminen PID:n perusteella&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kill pid&#xA; &amp;gt; Stop-Process -Id pid&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Prosessin tappaminen nimen perusteella&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ pkill nimi&#xA; &amp;gt; Stop-Process -Name nimi&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;h2 id=&#34;powershelliä-unix-ylläpitäjille--artikkelisarjan-muut-osat&#34;&gt;Powershelliä UNIX-ylläpitäjille -artikkelisarjan muut osat:&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-1/&#34;&gt;Osa 1&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-2/&#34;&gt;Osa 2&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-3/&#34;&gt;Osa 3&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Osa 4&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-5/&#34;&gt;Osa 5&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-6/&#34;&gt;Osa 6&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-7/&#34;&gt;Osa 7&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-8/&#34;&gt;Osa 8&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-9/&#34;&gt;Osa 9&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-10/&#34;&gt;Osa 10&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-11/&#34;&gt;Osa 11&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-12/&#34;&gt;Osa 12&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Powershelliä UNIX-ylläpitäjille, osa 2</title>
				<link>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-2/</link>
				<pubDate>Mon, 23 Feb 2015 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-2/</guid>
				<description>&lt;p&gt;Alla on varsin hyvä vertailu Bashin ja Powershellin komennoista englanniksi (EDIT: sivu on sittemmin valitettavasti poistunut):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://cecs.wright.edu/~pmateti/Courses/233/Labs/Scripting/bashVsPowerShellTable.html&#34; title=&#34;BASH and PowerShell Quick Reference&#34;&gt;BASH and PowerShell Quick Reference&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Kuten näkyy, Powershellissä on valmiina melko suuri määrä UNIX-tyyppisiä komentojen aliaksia. Aliakset viittaavat kuitenkin Powershell-komentoihin, joten esimerkiksi niiden valitsimet poikkeavat merkittävästi UNIX-komentojen vastaavista.&lt;/p&gt;&#xA;&lt;h2 id=&#34;powershelliä-unix-ylläpitäjille--artikkelisarjan-muut-osat&#34;&gt;Powershelliä UNIX-ylläpitäjille -artikkelisarjan muut osat:&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-1/&#34;&gt;Osa 1&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Osa 2&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-3/&#34;&gt;Osa 3&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-4/&#34;&gt;Osa 4&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-5/&#34;&gt;Osa 5&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-6/&#34;&gt;Osa 6&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-7/&#34;&gt;Osa 7&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-8/&#34;&gt;Osa 8&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-9/&#34;&gt;Osa 9&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-10/&#34;&gt;Osa 10&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-11/&#34;&gt;Osa 11&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-12/&#34;&gt;Osa 12&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Powershelliä UNIX-ylläpitäjille, osa 1</title>
				<link>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-1/</link>
				<pubDate>Wed, 18 Feb 2015 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/powershellia-unix-yllapitajille-osa-1/</guid>
				<description>&lt;p&gt;Windows-työasemien ja -palvelinten ylläpidosta voi tehdä huomattavasti tehokkaampaa ja hauskempaa &lt;a href=&#34;http://en.wikipedia.org/wiki/Windows_PowerShell&#34;&gt;Windows Powershellillä&lt;/a&gt;. Aiempaan Windowsin komentoriviin (cmd.exe) verrattuna Powershell on varsin ylivoimainen. Tietyt toimet ovat Powershellissä jopa helpompia kuin Unixin komentorivissä kuten Bashissa.&lt;/p&gt;&#xA;&lt;p&gt;Powershellissä käsitellään tekstirivien tai binääridatan sijaan objekteja. joita voidaan putkittaa komennolta toiselle. Objektien käsittely on usein huomattavasti yksinkertaisempaa kuin tekstin, koska komennoissa voidaan viitata objektien ominaisuuksiin, eikä syötettä tarvitse UNIX:in komentorivien tapaan ensin siistiä ja pilkkoa lukuisilla komennoilla (esim. &lt;em&gt;sed, cut, tr&lt;/em&gt; ja &lt;em&gt;awk&lt;/em&gt;) oleellisen tiedon erottelemiseksi.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Määriteltyjen resurssien luonti suoraan Puppet-luokista</title>
				<link>https://www.puppeteers.net/blog/maariteltyjen-resurssien-luonti-suoraan-puppet-luokista/</link>
				<pubDate>Mon, 02 Feb 2015 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/maariteltyjen-resurssien-luonti-suoraan-puppet-luokista/</guid>
				<description>&lt;p&gt;Jotkin Puppet ENC:t (&lt;a href=&#34;https://docs.puppetlabs.com/guides/external_nodes.html&#34;&gt;External Node Classifier&lt;/a&gt;), hyvänä esimerkkinä &lt;a href=&#34;http://theforeman.org/&#34;&gt;Foreman&lt;/a&gt;, eivät tue määriteltyjen resurssien (&lt;a href=&#34;https://docs.puppetlabs.com/puppet/latest/reference/lang_defined_types.html&#34;&gt;Defined Resource Types&lt;/a&gt;) käyttöä suoraan, vaan kaikki konfiguraatiot pitää sisällyttää &lt;a href=&#34;https://docs.puppetlabs.com/puppet/latest/reference/lang_classes.html&#34;&gt;Puppet-luokkiin&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Myös &lt;a href=&#34;https://docs.puppetlabs.com/hiera/1/index.html&#34;&gt;Hieran&lt;/a&gt; kanssa määritellyt resurssit ovat hieman ongelmallisia, koska ne pitää erikseen luoda create_resources funktiolla. Eräs ratkaisu on määrittää kaikki create_resources -funktiot site.pp-tiedostossa (sovellettu &lt;a href=&#34;http://drewblessing.com/blog/-/blogs/puppet-hiera-implement-defined-resource-types-in-hiera&#34;&gt;täältä&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;create_resources(&amp;#39;mysqldump::backup&amp;#39;,hiera(&amp;#39;mysqldump_backups&amp;#39;, {}))&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Tämän lähestymistavan ongelma on se, että uudet määritellyt resurssit pitää muistaa lisätä site.pp-tiedostoon.&lt;/p&gt;&#xA;&lt;p&gt;Yksinkertaisempi ja myös Foremanin kanssa toimiva ratkaisu on luoda määritellyt resurssit suoraan Puppet-moduulin pääluokasta (sovellettu &lt;a href=&#34;https://github.com/arnoudj/puppet-sudo&#34;&gt;täältä&lt;/a&gt;):&lt;/p&gt;</description>
			</item>
			<item>
				<title>Hakemistorakenteen luonti rekursiivisesti Puppetilla</title>
				<link>https://www.puppeteers.net/blog/testi/</link>
				<pubDate>Tue, 20 Jan 2015 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/testi/</guid>
				<description>&lt;p&gt;Puppetin File-resurssilla hallitaan tyypillisesti yksittäisiä tiedostoja, hakemistoja tai linkkejä. Tämä on ongelmallista, jos hallittava tiedosto on syvän hakemistorakenteen alla, eikä hakemistorakennetta ole luotu esimerkiksi ohjelman asennuksen yhteydessä. File-resurssi osaa kuitenkin luoda useita tiedostoja, kun sen otsakkeelle ($title) annetaan merkkijonon sijaan lista-tyyppinen muuttuja. Alla esimerkki bind-moduulista&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;file { [ &amp;#39;/var/named/chroot&amp;#39;,&#xA; &amp;#39;/var/named/chroot/var&amp;#39;,&#xA; &amp;#39;/var/named/chroot/var/named&amp;#39;,&#xA; &amp;#39;/var/named/chroot/Var/named/data&amp;#39; ]:&#xA; ensure =&amp;gt; directory,&#xA; owner =&amp;gt; root,&#xA; group =&amp;gt; &amp;#34;${::os::params::admingroup}&amp;#34;,&#xA; mode =&amp;gt; 755,&#xA; require =&amp;gt; Class[&amp;#39;bind::install&amp;#39;],&#xA; }&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;Bindin zone-tiedostoja ei voi asentaa, ennen kuin hakemisto &lt;em&gt;/var/named/chroot/var/named/data&lt;/em&gt; on olemassa. Siis zone-tiedostoon pitää lisätä riippuvuus (Require) yllä olevan luettelon viimeiseen tiedostoon:&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
