better project's description
This commit is contained in:
parent
58d13b618e
commit
a21e39a4d3
3 changed files with 136 additions and 26 deletions
152
README.md
152
README.md
|
@ -2,31 +2,141 @@
|
||||||
|
|
||||||
# Rougail
|
# Rougail
|
||||||
|
|
||||||
Created by:
|
## Description
|
||||||
EOLE (http://eole.orion.education.fr)
|
|
||||||
Copyright (C) 2005-2018
|
|
||||||
|
|
||||||
Forked by:
|
Rougail is a free full-featured configuration manager library written in python3.
|
||||||
Cadoles (http://www.cadoles.com)
|
|
||||||
Copyright (C) 2019-2021
|
|
||||||
|
|
||||||
Silique (https://www.silique.fr)
|
The configuration is describe in YAML ou XML dictionary files.
|
||||||
Copyright (C) 2022
|
|
||||||
|
|
||||||
distribued with GPL-2 or later license
|
Those dictionaries are converted into [Tiramisu](https://framagit.org/tiramisu/tiramisu) objects and can generates configuration files with template written in [Cheetah](https://cheetahtemplate.org/) or [Jinja](https://jinja.palletsprojects.com/).
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
Rougail can be incorporated with other technologies and stacks regardless of whether they’re written in Python or not.
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
## Simple example
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
Create directories:
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
[Documentation (french)](doc/README.md)
|
```bash
|
||||||
|
# mkdir dict tmpl tmp dest
|
||||||
|
```
|
||||||
|
|
||||||
|
### Dictionary
|
||||||
|
|
||||||
|
A dictionary is a services and a variables description file.
|
||||||
|
|
||||||
|
Create the file `dict/dictionary.yml`:
|
||||||
|
|
||||||
|
```yml
|
||||||
|
version: '0.10'
|
||||||
|
|
||||||
|
# describe a first service with a single file
|
||||||
|
services:
|
||||||
|
- service:
|
||||||
|
- name: my_service
|
||||||
|
file:
|
||||||
|
- engine: jinja2
|
||||||
|
text: /etc/filename
|
||||||
|
|
||||||
|
# describe a variable my_first_variable
|
||||||
|
# and a family with a variable my_second_variable
|
||||||
|
variables:
|
||||||
|
- variable:
|
||||||
|
name: my_first_variable
|
||||||
|
value:
|
||||||
|
- text: my_value
|
||||||
|
- family:
|
||||||
|
name: my_family
|
||||||
|
variables:
|
||||||
|
- variable:
|
||||||
|
name: my_second_variable
|
||||||
|
type: number
|
||||||
|
mandatory: true
|
||||||
|
value:
|
||||||
|
- text: 1
|
||||||
|
```
|
||||||
|
|
||||||
|
### Template
|
||||||
|
|
||||||
|
Create a [Jinja](https://jinja.palletsprojects.com/) template `tmpl/filename`:
|
||||||
|
|
||||||
|
```
|
||||||
|
My first value: {{ my_first_variable }}
|
||||||
|
My second value: {{ my_second_variable }}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Generate template
|
||||||
|
|
||||||
|
#### With default value:
|
||||||
|
|
||||||
|
Here is a python3 example file:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from rougail import Rougail, RougailConfig
|
||||||
|
from asyncio import run
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
RougailConfig['dictionaries_dir'] = ['dict']
|
||||||
|
RougailConfig['templates_dir'] = ['tmpl']
|
||||||
|
RougailConfig['tmp_dir'] = 'tmp'
|
||||||
|
RougailConfig['destinations_dir'] = 'dest'
|
||||||
|
rougail = Rougail()
|
||||||
|
await rougail.template()
|
||||||
|
|
||||||
|
|
||||||
|
run(main())
|
||||||
|
```
|
||||||
|
|
||||||
|
The destination file is generated:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# cat dest/etc/filename
|
||||||
|
My first value: my_value
|
||||||
|
My second value: 1
|
||||||
|
```
|
||||||
|
|
||||||
|
#### With modified value
|
||||||
|
|
||||||
|
Remove old generated file:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# rm -f dest/etc/filename
|
||||||
|
```
|
||||||
|
|
||||||
|
Use [Tiramisu](https://framagit.org/tiramisu/tiramisu) API to change values:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from rougail import Rougail, RougailConfig
|
||||||
|
from asyncio import run
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
RougailConfig['dictionaries_dir'] = ['dict']
|
||||||
|
RougailConfig['templates_dir'] = ['tmpl']
|
||||||
|
RougailConfig['tmp_dir'] = 'tmp'
|
||||||
|
RougailConfig['destinations_dir'] = 'dest'
|
||||||
|
rougail = Rougail()
|
||||||
|
config = await rougail.get_config()
|
||||||
|
await config.option('rougail.my_first_variable').value.set('modified_value')
|
||||||
|
await config.option('rougail.my_family.my_second_variable').value.set(2)
|
||||||
|
await rougail.template()
|
||||||
|
|
||||||
|
|
||||||
|
run(main())
|
||||||
|
```
|
||||||
|
|
||||||
|
The destination file is generated with new values:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# cat dest/etc/filename
|
||||||
|
My first value: modified_value
|
||||||
|
My second value: 2
|
||||||
|
```
|
||||||
|
|
||||||
|
# Link
|
||||||
|
|
||||||
|
* [Documentation (french)](doc/README.md)
|
||||||
|
* [Licence ](LICENSE)
|
||||||
|
|
||||||
|
# Related projects
|
||||||
|
|
||||||
|
* [Tiramisu](https://framagit.org/tiramisu/tiramisu)
|
||||||
|
* [Risotto](https://cloud.silique.fr/gitea/risotto/risotto)
|
||||||
|
|
|
@ -137,7 +137,7 @@ En YAML :
|
||||||
- variable:
|
- variable:
|
||||||
name: my_variable
|
name: my_variable
|
||||||
multi: true
|
multi: true
|
||||||
unique: false
|
unique: false
|
||||||
```
|
```
|
||||||
|
|
||||||
## Variable invisible
|
## Variable invisible
|
||||||
|
|
8
logo.svg
8
logo.svg
|
@ -13,8 +13,8 @@
|
||||||
height="386.79742"
|
height="386.79742"
|
||||||
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||||
inkscape:export-filename="/home/gnunux/git/risotto/rougail/logo.png"
|
inkscape:export-filename="/home/gnunux/git/risotto/rougail/logo.png"
|
||||||
inkscape:export-xdpi="216.39999"
|
inkscape:export-xdpi="48"
|
||||||
inkscape:export-ydpi="216.39999"
|
inkscape:export-ydpi="48"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
@ -29,8 +29,8 @@
|
||||||
inkscape:pagecheckerboard="0"
|
inkscape:pagecheckerboard="0"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:zoom="1.2346747"
|
inkscape:zoom="1.2346747"
|
||||||
inkscape:cx="89.497256"
|
inkscape:cx="257.15275"
|
||||||
inkscape:cy="265.65701"
|
inkscape:cy="152.26683"
|
||||||
inkscape:window-width="2048"
|
inkscape:window-width="2048"
|
||||||
inkscape:window-height="1083"
|
inkscape:window-height="1083"
|
||||||
inkscape:window-x="0"
|
inkscape:window-x="0"
|
||||||
|
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
Loading…
Reference in a new issue