# Developer Guide

**This guide is under heavy development and just drafted, expect frequent changes and check back every now and then**

This guide contains information to develop and roll out the configuration management and system deployment of RHEL-8.<br>
*PSI RHEL-8* heavily relies on the Ansible automation technology for configuration management and automation.

Mandatory information is available at
* https://docs.ansible.com/ansible/latest/index.html
* https://docs.ansible.com/ansible/latest/user_guide/index.html
* https://docs.ansible.com/ansible/latest/user_guide/quickstart.html

## Main code

PSI RHEL-8 configuration management consists of mainly two things

* [RHEL-8 PSI Defaults](https://git.psi.ch/linux/engineering/ansible/inventories/rhel-8-psi-defaults) Ansible Inventory
* [RHEL-8 Ansible Collection](https://git.psi.ch/linux/engineering/ansible/collections/rhel-8)

The supplemental PSI Ansible Roles, which are referrenced from the *RHEL-8 Ansible Collection* are developed in

* [PSI Ansible Roles](https://git.psi.ch/linux/engineering/ansible/roles)

Addition group/section inventories are managed in

* [PSI Ansible Inventories](https://git.psi.ch/linux/engineering/ansible/inventories)

## Adding my code

Depending on where your code changes are happening (see section [Main code](#main-code)) you need to follow the following process:

1. Create a branch for what you are doing eg. *feature/my-new-feature* or *fix/problem-xyz-solved*
2. Do your work and commit and push your branch
3. Create a merge request and fill in a human understandable description
4. Motivate other maintainers to approve your changes and get the code merged

## Using Vagrant to develop Ansible code

[Vagrant](https://vagrantup.com/intro) is a tool for building and managing virtual machine environments in a single workflow. With an easy-to-use workflow and focus on automation, Vagrant lowers development environment setup time, increases production parity, and makes the "works on my machine" excuse a relic of the past.

Documentation

* https://www.vagrantup.com/docs
* https://www.vagrantup.com/intro/getting-started

[PSI Ansible Vagrant](https://git.psi.ch/linux/engineering/ansible/vagrant) is a preconfigured environment allowing an easy and fast development of PSI related Ansible based configuration mangement.

System requirements are either Virtualbox on Linux/Windows or Mac or libvirt on Linux.

## Components and Functions

The following software or solutions are chosen to provide RHEL-8 in compliance with the PSI Linux support policy

| Component | Function | URL |
| --- | --- | --- |
| Red Hat Satellite 6 | system deployment, update and oversight | [satint.psi.ch](satint.psi.ch) |
| Red Hat Ansible | configuration management | [docs.ansible.com](https://docs.ansible.com/ansible/latest/index.html) |
| Red Hat Ansible Tower (AWX) | configuration management center | [rhel-8-awx.psi.ch](https://rhel-8-awx.psi.ch) |
| Koji | RPM package building solution | (tbd..) |

## Tools and Functions

The following tools are chosen for code and collaboration

| Tool | Function | URL |
| --- | --- | --- |
| GitLab | Git code revision system and code collaboration | [git.psi.ch/linux/engineering/home](https://git.psi.ch/linux/engineering/home) |
| Slack | instant messaging, ChatOps | [controls-ha.slack.com/rhel-8-maintainers](https://controls-ha.slack.com/archives/G0163S918CB) |
| Zoom | video conferencing | [psich.zoom.us](https://psich.zoom.us/j/2970303190)