Changeset - e38a51c033d7
[Not reviewed]
version_5
0 0 2
Dennis Fink - 9 years ago 2015-10-14 21:58:40
dennis.fink@c3l.lu
Added config cli
2 files changed with 101 insertions and 0 deletions:
0 comments (0 inline, 0 general)
ennstatus/cli/__init__.py
Show inline comments
 
new file 100644
 
import pathlib
 

	
 
import click
 

	
 

	
 
@click.group()
 
@click.option('-p', '--path', default='/srv/http/enn.lu',
 
              help='Path where the config files are')
 
@click.pass_context
 
def cli(ctx, path):
 
    ctx.obj = {}
 
    path = pathlib.Path(path)
 
    ctx.obj['path'] = path
 
    ctx.obj['config_file'] = path / 'config.json'
 
    ctx.obj['data_dir'] = path / 'data'
 

	
 

	
 
if __name__ == '__main__':
 
    cli()
ennstatus/cli/commands/config.py
Show inline comments
 
new file 100644
 
import os
 
import json
 
import ipaddress
 

	
 
from pprint import pprint
 

	
 
import click
 

	
 
from ... import create_app
 
from ...utils import check_ip
 

	
 

	
 
@click.group(short_help='Configure ennstatus')
 
def config():
 
    pass
 

	
 

	
 
@config.command('show', short_help='Show current configuration')
 
@click.pass_obj
 
def show(obj):
 

	
 
    try:
 
        os.chdir(str(obj['path']))
 
    except FileNotFoundError:
 
        raise
 

	
 
    app = create_app()
 
    pprint(app.config)
 

	
 

	
 
@config.group(short_help='Configure servers')
 
def server():
 
    pass
 

	
 

	
 
@server.command('add', short_help='Add server')
 
@click.argument('name', prompt=True)
 
@click.option('-i', '--ips', prompt='IPs (comma separated)')
 
@click.password_option()
 
@click.pass_obj
 
def add(obj, name, ips, password):
 

	
 
    config = json.load(obj['config_file'])
 
    name = name.lower()
 
    ips = [ip.strip() for ip in ips.split(',')]
 

	
 
    if name in config['ENNSTATUS_SERVERS']:
 
        try:
 
            click.confirm('Server already exits! Overwrite?', abort=True)
 
        except click.Abort as e:
 
            raise SystemExit from e
 

	
 
    converted_ips = {ipaddress.ip_address(ip) for ip in ips}
 

	
 
    for ip in converted_ips:
 
        if not check_ip(ip):
 
            raise SystemExit('ip {} is not accepted!'.format(str(ip)))
 

	
 
    config['ENNSTATUS_SERVERS'][name] = {
 
        'IPS': ips,
 
        'PASSWORD': password
 
    }
 

	
 
    with open(obj['config_file'], mode='w', encoding='utf-8') as f:
 
        json.dump(config, f, indent=4, sort_keys=True)
 

	
 

	
 
@server.command('delete', short_help='Remove server')
 
@click.argument('name', prompt=True)
 
@click.pass_obj
 
def delete(obj, name):
 

	
 
    config = json.load(obj['config_file'])
 
    name = name.lower()
 

	
 
    try:
 
        del config['ENNSTATUS_SERVERS'][name]
 
    except KeyError:
 
        raise SystemExit('{} does not exists!'.format(name))
 

	
 
    with open(obj['config_file'], mode='w', encoding='utf-8') as f:
 
        json.dump(config, f, indent=4, sort_keys=True)
0 comments (0 inline, 0 general)