<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://agora.nasqueron.org/index.php?action=history&amp;feed=atom&amp;title=Operations_grimoire%2FOperations_repository%2FFAQ</id>
	<title>Operations grimoire/Operations repository/FAQ - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://agora.nasqueron.org/index.php?action=history&amp;feed=atom&amp;title=Operations_grimoire%2FOperations_repository%2FFAQ"/>
	<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/Operations_repository/FAQ&amp;action=history"/>
	<updated>2026-05-19T02:36:41Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.0-alpha</generator>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/Operations_repository/FAQ&amp;diff=2238&amp;oldid=prev</id>
		<title>Dereckson at 19:30, 11 February 2026</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/Operations_repository/FAQ&amp;diff=2238&amp;oldid=prev"/>
		<updated>2026-02-11T19:30:41Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 19:30, 11 February 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l176&quot;&gt;Line 176:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 176:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;However, you can start contributing with basic YAML knowledge and learn as you go!&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;However, you can start contributing with basic YAML knowledge and learn as you go!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Operations grimoire]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:FAQ]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Dereckson</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/Operations_repository/FAQ&amp;diff=2237&amp;oldid=prev</id>
		<title>Dereckson: Created page with &quot;== General Questions ==  === What is the rOPS repository? ===  rOPS (&#039;&#039;&#039;r&#039;&#039;&#039;epository &#039;&#039;&#039;OPS&#039;&#039;&#039;) is the Nasqueron operations repository. It contains the configuration of our infrastructure servers and follows the principle of &#039;&#039;Infrastructure as Code&#039;&#039; to offer documentation, reproducibility, transparency and to allow external contributions.  The repository is available at https://devcentral.nasqueron.org/diffusion/OPS/  === What does this repository contain? ===  The re...&quot;</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/Operations_repository/FAQ&amp;diff=2237&amp;oldid=prev"/>
		<updated>2026-02-11T19:30:28Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;== General Questions ==  === What is the rOPS repository? ===  rOPS (&amp;#039;&amp;#039;&amp;#039;r&amp;#039;&amp;#039;&amp;#039;epository &amp;#039;&amp;#039;&amp;#039;OPS&amp;#039;&amp;#039;&amp;#039;) is the Nasqueron operations repository. It contains the configuration of our infrastructure servers and follows the principle of &amp;#039;&amp;#039;Infrastructure as Code&amp;#039;&amp;#039; to offer documentation, reproducibility, transparency and to allow external contributions.  The repository is available at https://devcentral.nasqueron.org/diffusion/OPS/  === What does this repository contain? ===  The re...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== General Questions ==&lt;br /&gt;
&lt;br /&gt;
=== What is the rOPS repository? ===&lt;br /&gt;
&lt;br /&gt;
rOPS (&amp;#039;&amp;#039;&amp;#039;r&amp;#039;&amp;#039;&amp;#039;epository &amp;#039;&amp;#039;&amp;#039;OPS&amp;#039;&amp;#039;&amp;#039;) is the Nasqueron operations repository. It contains the configuration of our infrastructure servers and follows the principle of &amp;#039;&amp;#039;Infrastructure as Code&amp;#039;&amp;#039; to offer documentation, reproducibility, transparency and to allow external contributions.&lt;br /&gt;
&lt;br /&gt;
The repository is available at https://devcentral.nasqueron.org/diffusion/OPS/&lt;br /&gt;
&lt;br /&gt;
=== What does this repository contain? ===&lt;br /&gt;
&lt;br /&gt;
The repository contains:&lt;br /&gt;
* Server configuration&lt;br /&gt;
* Deployment information for our applications and services&lt;br /&gt;
&lt;br /&gt;
Combined with NetBox, it constitutes an exhaustive inventory and source of truth for our infrastructure.&lt;br /&gt;
&lt;br /&gt;
=== What technology does Nasqueron use for infrastructure management? ===&lt;br /&gt;
&lt;br /&gt;
We mainly rely on [https://docs.saltproject.io/en/latest/contents.html Salt] (SaltStack) for deployment and automation. The repository also includes utilities for humans and Terraform provisioning.&lt;br /&gt;
&lt;br /&gt;
=== What is the minimum Salt version required? ===&lt;br /&gt;
&lt;br /&gt;
The minimum Salt version is &amp;#039;&amp;#039;&amp;#039;3006&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== What servers are in scope for this repository? ===&lt;br /&gt;
&lt;br /&gt;
Both Nasqueron servers and side projects we manage are in scope. For example, the [http://www.eglide.org/ Eglide] service is configured through &amp;lt;code&amp;gt;roles/core&amp;lt;/code&amp;gt; (common to every server) and &amp;lt;code&amp;gt;roles/shellserver&amp;lt;/code&amp;gt; (specific).&lt;br /&gt;
&lt;br /&gt;
== Repository Structure ==&lt;br /&gt;
&lt;br /&gt;
=== How is the repository organized? ===&lt;br /&gt;
&lt;br /&gt;
The repository is organized into seven main areas:&lt;br /&gt;
&lt;br /&gt;
; A. Services : Configuration organized in roles and units&lt;br /&gt;
; B. Structured data : Pillar data for configuration&lt;br /&gt;
; C. SaltStack modules : Python modules for complex logic&lt;br /&gt;
; D. UNIX resources assignments : UIDs, GIDs, and port assignments&lt;br /&gt;
; E. Tests : Unit and integration tests&lt;br /&gt;
; F. Resources : Templates and resources for automated tasks&lt;br /&gt;
; G. Utilities : Scripts for operations team members&lt;br /&gt;
&lt;br /&gt;
=== What are roles and units? ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Roles&amp;#039;&amp;#039;&amp;#039; are full high-level services (e.g., mailserver, paas-docker). They represent the goal a server accomplishes.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Units&amp;#039;&amp;#039;&amp;#039; are components needed to achieve the service&amp;#039;s goals (e.g., a userland software collection, a nginx server).&lt;br /&gt;
&lt;br /&gt;
Directory structure follows &amp;lt;code&amp;gt;roles/&amp;amp;lt;role&amp;amp;gt;/&amp;amp;lt;unit&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== What are states and formulas? ===&lt;br /&gt;
&lt;br /&gt;
States (also called formulas) are the configuration files in the &amp;lt;code&amp;gt;roles/&amp;lt;/code&amp;gt; directory. They are generally written in YAML with Jinja2 templating.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;top.sls&amp;lt;/code&amp;gt; file defines which states are loaded by server, while the &amp;lt;code&amp;gt;services.sls&amp;lt;/code&amp;gt; describes service configurations that aren&amp;#039;t server-specific.&lt;br /&gt;
&lt;br /&gt;
=== What is pillar? ===&lt;br /&gt;
&lt;br /&gt;
Pillar is structured data stored in the &amp;lt;code&amp;gt;pillar/&amp;lt;/code&amp;gt; directory. This data is structured cleanly and queried from states, directly or through functions. Each pillar .sls file is written in YAML.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;top.sls&amp;lt;/code&amp;gt; file defines which pillar files are loaded by server, while the &amp;lt;code&amp;gt;tower.sls&amp;lt;/code&amp;gt; file acts similarly and allows more flexibility.&lt;br /&gt;
&lt;br /&gt;
=== What is the map.jinja file for? ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;map.jinja&amp;lt;/code&amp;gt; file provides &amp;quot;Omni-OS&amp;quot; configuration. Since we deploy onto several Linux distributions (Debian, Rocky) and FreeBSD, we need to provide a way to map packages and directories across different operating systems.&lt;br /&gt;
&lt;br /&gt;
=== Where are configuration files stored? ===&lt;br /&gt;
&lt;br /&gt;
If configuration files for a unit should be stored, a subfolder &amp;lt;code&amp;gt;files/&amp;lt;/code&amp;gt; is created at unit level within the role/unit structure.&lt;br /&gt;
&lt;br /&gt;
=== What are SaltStack modules? ===&lt;br /&gt;
&lt;br /&gt;
While states offer powerful templating capabilities, they can become too complex when evolving from declarations to full programs. Salt modules express more complex logic in Python. The Python functions can be called directly from states.&lt;br /&gt;
&lt;br /&gt;
Modules are stored in:&lt;br /&gt;
* &amp;lt;code&amp;gt;_modules/&amp;lt;/code&amp;gt; for execution modules&lt;br /&gt;
* &amp;lt;code&amp;gt;_states/&amp;lt;/code&amp;gt; for states modules&lt;br /&gt;
&lt;br /&gt;
=== What is the hotfixes directory for? ===&lt;br /&gt;
&lt;br /&gt;
If anything escapes the role and unit logic organization, like CVE hotfixes, the &amp;lt;code&amp;gt;hotfixes/&amp;lt;/code&amp;gt; directory is used.&lt;br /&gt;
&lt;br /&gt;
=== Where are UIDs, GIDs, and ports documented? ===&lt;br /&gt;
&lt;br /&gt;
This repository is the source of truth for service accounts, groups and ports:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;UIDs&amp;#039;&amp;#039;&amp;#039; document unique usernames and the UIDs for system accounts&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GIDs&amp;#039;&amp;#039;&amp;#039; document the same information for groups&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;PORTS&amp;#039;&amp;#039;&amp;#039; contain the list of reserved application ports&lt;br /&gt;
&lt;br /&gt;
When a service needs any of those resources, they are assigned in those files.&lt;br /&gt;
&lt;br /&gt;
=== How do I test my changes? ===&lt;br /&gt;
&lt;br /&gt;
Unit and integration tests are stored in &amp;lt;code&amp;gt;_tests/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can test the correctness of several repository aspects:&lt;br /&gt;
* Salt configuration files in &amp;lt;code&amp;gt;_tests/config/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Salt execution modules in &amp;lt;code&amp;gt;_tests/modules/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Salt pillar in &amp;lt;code&amp;gt;_tests/pillar/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Scripts deployed within this repository in &amp;lt;code&amp;gt;_tests/scripts/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you add a new directory, you should add a corresponding entry in &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== What are resources and utilities? ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Resources&amp;#039;&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;_resources/&amp;lt;/code&amp;gt;) are used by automated tasks to generate repository files, such as templates for new services.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Utilities&amp;#039;&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;utils/&amp;lt;/code&amp;gt;) are scripts and other utilities to be run by Nasqueron Operations SIG members.&lt;br /&gt;
&lt;br /&gt;
== Contributing ==&lt;br /&gt;
&lt;br /&gt;
=== How can I contribute? ===&lt;br /&gt;
&lt;br /&gt;
Contributions are welcome, especially if you wish to:&lt;br /&gt;
# Improve our infrastructure&lt;br /&gt;
# Install or configure something on a Nasqueron server&lt;br /&gt;
# Install or configure something on a project we manage (like Eglide)&lt;br /&gt;
# Automate deployment of one of your Nasqueron projects&lt;br /&gt;
&lt;br /&gt;
Follow the [https://agora.nasqueron.org/How%20to%20contribute%20code contributor guide] to send a commit for review. This procedure is open to everyone.&lt;br /&gt;
&lt;br /&gt;
=== Where can I report issues? ===&lt;br /&gt;
&lt;br /&gt;
Issues can be reported on the [https://devcentral.nasqueron.org/tag/servers/ #Servers component] on DevCentral, the Nasqueron Phabricator instance.&lt;br /&gt;
&lt;br /&gt;
=== Where can I find more documentation? ===&lt;br /&gt;
&lt;br /&gt;
Documentation about the repository and tips for IDEs are available on Agora:&lt;br /&gt;
https://agora.nasqueron.org/Operations_grimoire/Operations_repository&lt;br /&gt;
&lt;br /&gt;
=== Where can I get help? ===&lt;br /&gt;
&lt;br /&gt;
Support for contributors is provided on our IRC channel: &amp;#039;&amp;#039;&amp;#039;#nasqueron-ops&amp;#039;&amp;#039;&amp;#039; on [https://libera.chat/ Libera].&lt;br /&gt;
&lt;br /&gt;
== Terminology ==&lt;br /&gt;
&lt;br /&gt;
=== What terminology does Nasqueron use? ===&lt;br /&gt;
&lt;br /&gt;
The repository uses inclusive terminology:&lt;br /&gt;
&lt;br /&gt;
; Salt primary server : A server that issues commands to other servers or itself&lt;br /&gt;
; Node : A server, baremetal or VM configured by Salt&lt;br /&gt;
&lt;br /&gt;
Nasqueron follows the inclusive language conventions to ensure that our community is welcoming to everyone.&lt;br /&gt;
&lt;br /&gt;
=== Why doesn&amp;#039;t the repository use master/slave terminology? ===&lt;br /&gt;
&lt;br /&gt;
Nasqueron follows inclusive language conventions. Instead of &amp;quot;master,&amp;quot; we use &amp;quot;Salt primary server&amp;quot; to describe the server that issues commands.&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
&lt;br /&gt;
=== What is the license for this repository? ===&lt;br /&gt;
&lt;br /&gt;
A lot of configuration as code is trivial, and so ineligible for copyright per [https://en.wikipedia.org/wiki/Threshold_of_originality threshold of originality].&lt;br /&gt;
&lt;br /&gt;
When this is not the case, the code is licensed under [https://opensource.org/licenses/BSD-2-Clause BSD-2-Clause] if not otherwise specified.&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
=== I&amp;#039;m new to the repository. Where should I start? ===&lt;br /&gt;
&lt;br /&gt;
# Read this FAQ and the main [https://devcentral.nasqueron.org/diffusion/OPS/ README]&lt;br /&gt;
# Check the [https://agora.nasqueron.org/Operations_grimoire/Operations_repository Operations grimoire] for detailed documentation&lt;br /&gt;
# Join our IRC channel &amp;#039;&amp;#039;&amp;#039;#nasqueron-ops&amp;#039;&amp;#039;&amp;#039; on [https://libera.chat/ Libera] for support&lt;br /&gt;
# Browse the &amp;lt;code&amp;gt;roles/&amp;lt;/code&amp;gt; directory to see how services are structured&lt;br /&gt;
# Look at existing commits on DevCentral to understand the contribution workflow&lt;br /&gt;
&lt;br /&gt;
=== What background knowledge do I need? ===&lt;br /&gt;
&lt;br /&gt;
Helpful knowledge includes:&lt;br /&gt;
* YAML syntax&lt;br /&gt;
* [https://docs.saltproject.io/en/latest/contents.html SaltStack] basics&lt;br /&gt;
* Jinja2 templating&lt;br /&gt;
* Python (for writing modules)&lt;br /&gt;
* UNIX / Linux system administration&lt;br /&gt;
&lt;br /&gt;
However, you can start contributing with basic YAML knowledge and learn as you go!&lt;/div&gt;</summary>
		<author><name>Dereckson</name></author>
	</entry>
</feed>