This repository contains Ansible playbooks and configuration files to manage and automate Raspberry Pi tasks. It also includes a Makefile for easier command execution and integration with Semaphore for a web-based UI.
- git clone the pi-manager-X repository, corresponding to the github repository containing your inventory and host_vars file.
- create a .env file in the root of this repository (used by your Makefile) and set the REPO_PATH variable accordingly (for ex : ../pi-manager-X)
- create the .vault_passwrd file containing your ansible vault password
Ensure the following tools are installed by using the Makefile "dependencies" command.
YOU WILL NEVER NEED TO MODIFY THIS REPOSITORY. All the modification must to be done by the pyronear team. If you want to install a new raspberry pi, you only need to modify the files in your pi-manager-X repository.
To add a new Raspberry Pi to this repository, follow these steps:
- Fill the database with metadata: Create the .env file :
cd init_script/
cp .env.ex .envStore you admin login and admin password in the init_script/.env file (you can use the .env.ex as a template)
To fill the API database you will need to set up some environment variables. In order to create the organization you will need :
API_URL=url.com
organization_name=org_nameAnd to create a user you will need to add :
api_pwd=passwrd
api_login=name
role=user. You will also need to file the cameras.csv file in order to create cameras in the database and to find their id. YOU WILL NEED THOSE ids in order to create the credentials.json file (check the Create Host Variables section)
name,angle_of_view,elevation,lat,lon,is_trustable
After that you can launch the following command to create a venv and install the dependencies :
python -m venv venv
source venv/bin/active
pip install -r requirements.txtNow, if you need it, you can create an organisation with :
python create_orga.pyIf you need it, you can create a user with :
python create_user.pyIf you need it, you can create cameras with :
python create_cameras.py- Update the Ansible Inventory:
Add the hostname and the ip adress of the new Raspberry Pi to the
inventory/inventoryfile, in your pi-manager-X respository. By default the linux user name will be "pi"
tour_mateo: # TEST rpi
ansible_host: 192.168.1.23And add the station to the group engine_servers :
engine_servers:
hosts:
### NOUVELLE STATION
tour_mateo:-
Create Host Variables: Create a new directory under
inventory/host_vars/named after the hostname, and within it, add the following:- A
vars.ymlfile for non-sensitive variables. Container the credentials.json file (the token will be generated by ansible) - A
vault.ymlfile containing sensitive data. Store the Linux user password (encrypted).
- A
The vars file should container the following variable :
#Engine
config_json: |
{
"169.254.40.1": {
"azimuths": [
90,
180,
270
],
"brand": "reolink",
"id": 1,
"name": "mateo-camera-01",
"poses": [
1,
2,
3
],
"token": "",
"type": "ptz"
},
"169.254.40.2": {
"azimuth": 17,
"brand": "reolink",
"id": 2,
"name": "mateo-camera-02",
"poses": [],
"token": "",
"type": "static"
}
}The vault file should contains the following variables :
ansible_password: "passwrd" # this is the password of the user used by ansible to connect to the server
##### ENGINE
CAM_USER: "cam_user"
CAM_PWD: "passwrd"
open_vpn_password: "habile"If the Raspberry Pi connects to a WiFi network, add the WiFi credentials to the vault.yml file (by default, engines )
You will have to encrypt the vault.yml file with your vault_passwrd, use:
EDITOR=nano ansible-vault encrypt inventory/host_vars/<hostname>/vault.ymlif you want to modify it afterwards, use :
EDITOR=nano ansible-vault edit inventory/host_vars/<hostname>/vaultAfter that you can launch the ansible commands you need (check the following section)
The following commands are available in the Makefile:
-
Ping all hosts: Ping all hosts defined in the Ansible inventory.
make ping
-
Check watchdog on local Raspberry Pi: Run a playbook to check the watchdog service on the local Raspberry Pi.
make check-watchdog
-
Check engine service: Run a playbook to check the engine service on specific servers.
make check-engine
-
Install test engine: Deploy the engine on the test servers. You will need to fill the init_script/.env file
make install-test-engine
-
Install prod engine: Deploy the engine on the test servers. You will need to fill the init_script/.env file
make install-engine-fr
-
Start Semaphore: Spin up Semaphore using Docker, a web-based UI for Ansible playbook execution.
make semaphore-up
-
Stop Semaphore: Stop the Semaphore Docker containers.
make semaphore-stop
Semaphore is a UI tool to manage and run Ansible playbooks:
- Start Semaphore using
make semaphore-up. - Access the UI at
http://localhost:3000(default credentials:admin / changeme). - Manage playbooks, tasks, and inventory directly from the web interface.
This repository follows a typical Ansible directory structure:
- playbooks/: Contains playbooks that perform specific tasks (e.g., engine deployment, watchdog checks).
- roles/: Custom roles (if needed) to be reused across playbooks.
- host_vars/: Directory containing per-host variables and vault files (sensitive information).
- files/: Contains files (e.g., OpenVPN client configurations) that need to be deployed on the hosts.
Ensure all sensitive data is encrypted using Ansible Vault before pushing it to the repository.