This may be a controversial opinion…

… but you don’t need --- at the start of a YAML file in Ansible.

What does the Ansible documentation say?

I know, I know, if you look at the official documentation on docs.ansible.com, then all of the examples start with ---. And if the official examples do it, then everyone should just blindly copy that without thinking, right?

Wrong! The Ansible documentation on YAML syntax says:

There’s another small quirk to YAML. All YAML files (regardless of their association with Ansible or not) can optionally begin with --- and end with .... This is part of the YAML format and indicates the start and end of a document.

© Copyright Ansible project contributors.

I’ve added the emphasis: optionally. They then continue with one example with --- at the start and ... at the end. The funny thing is, that’s about the only example on the Ansible documentation site (that I could find) that ends with .... So the end marker ... is clearly optional. What about the start marker ---?

What does the YAML specification say?

Ansible uses version 1.2 of the YAML specification and unless you are doing something really exotic, that’s the only version you should care about. Revision 1.2.0 was published in July 2009 and revision 1.2.2 in October 2021. That last revision doesn’t make any changes to the specification, it only corrects some errors and adds clarity.

Chapter 9 of the YAML spec introduces two concepts: documents and streams.

A stream can contain zero or more documents. It’s called a (character) stream because it can be something else than a file on your hard disk, for example some data that’s sent over a network connection. So your Ansible playbook file with extension .yml or .yaml is not a YAML document, it’s a YAML stream.

A document can have several parts:

  • Document prefix: optional character encoding and optional comment lines.
    Seriously, it’s 2022, are you going to make life hard for yourself and use any other encoding than ASCII or UTF-8? The default encoding that every YAML processor, inclusing Ansible, must support is UTF-8. So You Ain’t Gonna Need It.
    Comments can be placed anywhere, so don’t worry.
  • Document directives: these are instructions to the YAML processor and aren’t part of the data structure. The only directive I’ve occasionally seen in the wild is %YAML 1.2, to indicate the version of YAML used. That’s the default version for Ansible anyway, so You Ain’t Gonna Need It.
  • Document markers: a parser needs some way to know where directives stop and document content begins. That’s the directives end marker, ---. There is also a document end marker, ..., which tells a parser to stop looking for content and start scanning for directives again. If there are no markers and the first line doesn’t start with % (a directive), then a parser knows that everything is content. In real life you probably won’t ever have multiple documents in the same stream (file), instead you’ll organize your Ansible code in separate .yaml files, with playbooks and roles and tasks etc.
  • Document content: that’s the only really interesting stuff you care about.

YAML knows 3 types of documents:

  • Bare documents: don’t begin with directives or marker lines. Such documents are very “clean” as they contain nothing other than the content. This is the kind of YAML documents I prefer for Ansible.
  • Explicit documents: begin with an explicit directives end maker (---) but have no directives. This is the style that many people use if they just copy/paste examples from Stack Overflow.
  • Directives documents: start with some directives, followed by an explicit directives end marker. You don’t need directives for Ansible.

Configuring yamllint

I use ansible-lint and yamllint in a pre-commit hook to check the syntax of my Ansible files. This is currently my .yamllint.yml:

rules:
  document-start:
    present: false
  truthy:
    allowed-values: ['true', 'false', 'yes', 'no']

document-start makes sure that there is no --- at the start of a file. I also have opinions on truthy: an Ansible playbook is supposed to be readable both by machines and humans, and then it makes sense to allow the more human-readable values yes and no.

Do you also have opinions that make you change the default configuration of your linters?

A small rant about dependencies (and a promise)

Every now and then I run into some awesome open source project on GitHub, that is written in some cool programming language, and it assumes that the development tools for that language are already installed. My assumption is that they have a specific target audience in mind: an already existing developer community around that specific language. People who already have those tools installed.

The annoying thing is when someone like me, who doesn’t really need to know if a thing is written in Python or Ruby or JavaScript or whatever, tries to follow instructions like these:

$ pip install foo
Command 'pip' not found
$ gem install bar
Command 'gem' not found
$ yarn install baz
Command 'yarn' not found
$ ./configure && make && sudo make install
Command 'make' not found

By now, I already know that I first need to do sudo apt install python3-pip (or the equivalent installation commands for RubyGems, Yarn, build-essential,…). I also understand that, within the context of a specific developer community, this is so obvious that it is often assumed. That being said, I am making a promise:

For every open source project that I will henceforth publish online (on Github or any other code sharing platforms), I promise to do the following things:
(1) Test the installation on at least one clean installed operating system – which will be documented.
(2) Include full installation steps in the documentation, including all frameworks, development tools, etc. that would otherwise be assumed.
(3) Where possible and useful, provide an installation script.

The operating system I’m currently targeting, is Ubuntu, which means I’ll include apt commands. I’m counting on Continuous Integration to help me test on other operating systems that I don’t personally use.

VRT plukt foto’s van Twitter zonder toestemming

Begin september was ik bij een familielid op bezoek in het AZ Nikolaas. Dat weekend waren de Vredefeesten bezig in Sint-Niklaas, waarbij er tientallen warmeluchtballons opstijgen van op de Grote Markt. Een spectaculair schouwspel, waar jaarlijks tienduizenden kijklustigen op afkomen.
Van op de vijfde verdieping van AZ Nikolaas had ik een mooi uitzicht over de stad en de voorbij vliegende ballons. Ik heb de panoramafunctie van mijn Nexus 4 gebruikt en de foto op Twitter geplaatst:


Op de foto zie je een vleugel van het gebouw van AZ Nikolaas, en ik kreeg ook een bezorgde reactie van @mariegoos.
Een tijdje later werd mijn foto ook integraal geretweet door de officiele twitteraccount van @stadsintniklaas. Fijn.

De volgende dag kreeg ik van een kennis bericht dat mijn foto gebruikt werd op de VRT website deredactie.be. Ik ben even gaan zoeken (met Google Image Search) en effectief, de foto staat bij 2 artikels:

Ik ben daar eigenlijk niet zo gelukkig mee. OK, mijn naam staat er wel bij, maar moet dat nu echt, VRT? Is dit het gevolg van de opgelegde besparingen? 92.000 mensen kwamen naar de Vredefeesten, zaten daar echt geen professionele fotografen bij? Die mensen moeten ook het beleg op hun boterham verdienen! Ik ben maar een amateur die een beetje met zijn smartphone zat te prutsen, en ik vind het zelf niet eens een mooie foto.

Ik heb mijn licht eens opgestoken bij bevriende fotografen (dankjewel Monica en Evy) en ik heb de SOFAM-tarieven geraadpleegd. Blijkbaar kan ik 110.30 euro vragen per gebruik van een foto, + 200% schadevergoeding wegens geen toestemming gevraagd of gegeven, + 200% schadevergoeding wegens schending van de integriteit (want ze hebben een stuk weggeknipt, waardoor de context van het AZ Nikolaas verloren ging).
Dat komt dus in totaal op 1103 euro.

En NEEN, het is niet omdat iets op Twitter, Facebook, Instagram of soortgelijken staat, dat je het zomaar mag gebruiken. Volgens de regeltjes van Twitter mag je een tweet maar overnemen als het een embedded tweet is, zoals mijn tweet hierboven. Dus de integrale tweet, inclusief de context. Niet een stukje van de tweet, zoals een (deel van een) foto.

Ik heb een onkostennota verstuurd naar de VRT. Het bedrag dat ze me gaan betalen (if any), ga ik integraal doorstorten naar het Fonds Pascal Decroos voor Onderzoeksjournalistiek.

EDIT: deze blogpost is nog geen half uur gepubliceerd en ik zie in Google Analytics dat er al een referral is van contactbeheer.vrt.be. Ze hebben het dus gezien.

Koekiemonster

Blijkbaar is het de laatste maanden een hype op websites om te laten weten dat er cookies gebruikt worden. Seriously, val mij daar niet mee lastig! Ik kan zelf ook wel in de HTML source kijken. Ik ga er sowieso dat de meeste websites wel een of andere tracking cookie gebruiken. Ik krijg er de seskes van als ik een website bezoek en ik krijg zo’n popup. Vooral op smartphone is het al een even grote ziekte als reclamebanners. Ik kijk nu naar jullie, krantensites! Als ik zo’n cookies spam te zien krijg, dan heb ik plots goesting om mijn browsertab te sluiten.

Wat is het volgende, dat men laat weten dat er JavaScript gebruikt wordt? CSS? Dat men DIVs gebruikt voor layout, in plaats van TABLEs?

U bent gewaarschuwd: bij het schrijven van deze blogpost werden er 2 koekjes gegeten.

Wat betekent dataretentie voor een geek zoals ik?

Vandaag staat er op de website van Het Nieuwsblad een artikel met als titel ‘Staatsveiligheid ziet wie u mailt, wanneer en met welk toestel‘. Dat is uiteraard een beetje sensatie met als bedoeling het klikvee aan te trekken. Waar het eigenlijk om gaat, is het omzetten van de Europese dataretentie richtlijn 06/24/EG naar nationale wetgeving. En ja, de StaatsSicherheit is één van de vele mogelijke ontvangers van telefoon- en emaillogs. Naast de politie, die daarvoor een onderzoeksrechter moet aanspreken. Maar bon, mij gaat het nu even niet om wie die gegevens kan inkijken, of hoe lang ze bijgehouden moeten worden.

Wat mij wel interesseert: is de voorgestelde wetgeving ook op mij van toepassing? Hoezo, zou je denken, ik ben toch geen internetprovider. Dat niet, maar ik maak ook geen gebruik van een Telenet- of Belgacom-mailbox. Ik heb mijn eigen mailserver, die in een datacenter ergens in Duitsland staat en daar rechtstreeks aan het internet hangt. Ik heb een aantal verschillende domeinnamen, waaronder een Zweedse, en die zijn geregistreerd via een Franse registrar. Ik ben niet de enige gebruiker van die mailserver, mijn echtgenote en mijn schoonouders gebruiken die ook. In feite doe ik zo ongeveer hetzelfde als een klein hostingbedrijf, maar dan als privépersoon. En het is nu net de bedoeling van de voorgestelde wet dat kleine hostingbedrijven ook in het vizier komen.

En wat wanneer ik telnet op poort 25? Dan heb ik als afzender geen mailserver gebruikt, dus geen logging. En ja ik spreek vloeiend SMTP. HELO daar!
Hoe zit het eigenlijk met muggles die buitenlandse mailservers gebruiken zoals Gmail? Want wie gebruikt nu nog providermail, zeg eens eerlijk.

Ga ik nu mijn root wachtwoord moeten afgeven?

Ik heb al aan een aantal mensen gevraagd of ik nu ook verplicht ga worden om maillogs een jaar lang bij te houden, maar de enige antwoorden die ik ondertussen wel al gekregen heb, draaien rond de pot. Wordt vervolgd.

Das Leben der Anderen
Das Leben der Anderen (2006) was trouwens nog eens op tv. Gat in uw cultuur als je die nog niet gezien hebt.

Waar vind ik een Telenet service center in mijn buurt?

Maandagavond, ik kom thuis. Vrouw zegt, schààààt, ik kan nie aan mijnen iemeel. Efkes checken, inderdaad al mijn quasi permanent openstaande ssh-sessies zijn dichtgesmeten. Pingelepong, nada.

Kabelmodem gecheckt: zo donker al iets. Dansje gedaan met de stroomkabels, met een dode kip gewuifd: nada.

Dus, er zit nie anders op dan een telefoontje naar de 015 2*number of the beast. Beetje semi-random op nummerkes gedrukt, modemtestje dat zegt dat er iets loos is met m’n modem, efkes een geblondeerde trezebees moeten aanhoren die “zet a doar” zingt, af en toe onderbroken door een Engelstalige stem (doh? Vlaams bedrijf?) die me verwijst naar de website.

Slechts 2′ later (helemaal niet slecht) heb ik een medewerker aan de lijn. Ik hoor dat het nen geïmporteerde Hollander is met Limburgs accent, dus ik gok dat ik bij IPG zit. Wat ik hem vraag en hij mij ook bevestigd terwijl we wachten wanneer hij mij het kabeldansje nog eens laat uitvoeren. Bon, die gast moet ook maar z’n troubleshootingprocedure uitvoeren, daar is niks mis mee.

Zijn diagnose: b0rken voeding. Ik deel zijn mening. Hij gaat me een nieuwe voeding opsturen met Taxipost. Ik vraag nog uitdrukkelijk of ik zelf niet ergens iets kan afhalen, maar nee: er is niets bij mij in de buurt. Twijfelachtig, mor allà.

Woensdagavond, briefke in de bus van Taxipost. Of ik mijn pakje kan komen ophalen in Wetteren. Wetteren??? Fscking Wetteren? Ik weet da gat met moeite liggen (geen gps), laat staan dat ik er naartoe ga rijden. Het is op dat moment al te laat om naar Taxipost of Telenet te bellen.

Donderdag geef ik mijn madam opdracht om naar Taxipost te bellen. Aangezien wij alletwee werkende mensen zijn, en aangezien Taxipost blijkbaar altijd rond 11u in de voormiddag probeert te leveren, ga ik nooit een nieuwe voeding zien. SWMBO is zo slim van te vragen, jullie zijn Taxipost, kan je dat niet in een postkantoor in de buurt leveren? De frank valt van da madammeke van Taxipost: ha ja dat kan ook. Vroegste leveringstermijn bij het postkantoor: volgende week dinsdag…

Oh… my… fscking… $DEITY!

Dus, ik bel gisterenavond naar Telenet. Weer semi-random toetsen indrukken, weer bleitmuziek, en uiteindelijk: Sylvia. Ze klinkt Limburgs, dus waarschijnlijk ook IPG. Pas op, geen slecht woord over Limburgers of IPG’ers. Uiteindelijk heeft zij mij nog het best van al geholpen.

Ik doe mijn verhaal en ik vraag haar hoe “wij” (let op de meervoudsvorm!) dit probleem kunnen oplossen. Ik vraag met aandrang naar een Telenet service centrum in de buurt. Zij tokkelt wat op haar toppenbord, en uiteindelijk vindt ze iets in de Stationsstraat. Ik vraag, is dat soms Bluesky, ondertussen verhuisd naar de Mercatorstraat? Ja zegt ze, maar van een verhuis weet ze niet (was ook maar vorige week). Maar als ik daar om een nieuwe voeding wil gaan, dan moet zij toch wel een nieuw papierke opmaken. (Ja doe dat dan he sèg, zo erg is da toch nie?)

Verstade da nu? Eerst zou ik drie kwartier (enkele rit) moeten bollen naar Wetteren, en als ik doorvraag, dan kan ik mijn gerief op ocharme 5′ te voet van mijn deur gaan halen, bij mijn vaste pc-boer????

Aaaaaaaaaaaaaaa!!! bonk bonk bonk

Ambtelijke taal

OM*G!!! Dit soort zinnen hou je toch niet voor mogelijk! Dit is één zin van 7 regels lang:

Wij bezorgen u, als bijlage, een voor eensluidend verklaard afschrift van de gemeenteraadsbeslissing(en) van 16 februari 2007 waarbij u werd aangeduid als vertegenwoordiger van de stad Sint-Niklaas in de algemene vergadering van één of meerdere verenigingen, vennootschappen of samenwerkingsverbanden waarvan de stad Sint-Niklaas lid is en/of waarvoor zij een vertegenwoordiger mag aanduiden, en/of werd voorgedragen als kandidaat of aangeduid als lid van een bestuurs- of toezichtsorgaan van één of meerdere van deze verenigingen, vennootschappen of samenwerkingsverbanden.

Wij bezorgen u, als bijlage, een voor eensluidend verklaard afschrift van de gemeenteraadsbeslissing(en) van 16 februari 2007 waarbij u werd aangeduid als vertegenwoordiger van de stad Sint-Niklaas in de algemene vergadering van één of meerdere verenigingen, vennootschappen of samenwerkingsverbanden waarvan de stad Sint-Niklaas lid is en/of waarvoor zij een vertegenwoordiger mag aanduiden, en/of werd voorgedragen als kandidaat of aangeduid als lid van een bestuurs- of toezichtsorgaan van één of meerdere van deze verenigingen, vennootschappen of samenwerkingsverbanden.

Kort samengevat: ik zit nu namens de stad Sint-Niklaas in de algemene vergadering van CEVI vzw.