Compare commits

..

6 Commits

6 changed files with 86 additions and 54 deletions

View File

@ -2,22 +2,26 @@ zones:
- name: internet - name: internet
settings: settings:
configuration: configuration:
host:
network: 192.168.1.0/24 network: 192.168.1.0/24
host_start: 192.168.1.10 start: 192.168.1.10
host_stop: 192.168.1.100 stop: 192.168.1.100
dns: [192.168.1.2] dns: [192.168.1.2]
vlan_id: 192
gateway: 192.168.1.254 gateway: 192.168.1.254
clusters: clusters:
- name: cluster.cadoles.com - name: hapy.ac-test.fr
zone: internet zone: internet
zones: [internet]
settings: settings:
configuration: configuration:
network:
virtual_ip: 192.168.1.1 virtual_ip: 192.168.1.1
opennebula:
one_user: eoleone
one_password: eole
nodes: nodes:
- name: node1.cadoles.com - name: node1.cadoles.com
zones: [internet]
servermodels: servermodels:
- name: unbound - name: unbound
@ -67,7 +71,7 @@ organizations:
zones: [internet] zones: [internet]
servers: servers:
- name: dns.cadoles.com - name: dns.cadoles.com
cluster: cluster.cadoles.com cluster: hapy.ac-test.fr
zones: [internet] zones: [internet]
servermodel: unbound_etab1 servermodel: unbound_etab1
settings: settings:

View File

@ -34,31 +34,35 @@ cucchiaiata-cli v1.user.role.create --user_login gnunux \
cucchiaiata-cli v1.infra.zone.create --zone_name internet cucchiaiata-cli v1.infra.zone.create --zone_name internet
# zone configuration # zone configuration
S=$(get_id "cucchiaiata-cli v1.setting.session.zone.start --zone_name internet") S=$(get_id "cucchiaiata-cli v1.setting.session.zone.start --zone_name internet")
cucchiaiata-cli v1.setting.session.configure --session_id "$S" --configuration.network "192.168.1.0/24" \ cucchiaiata-cli v1.setting.session.configure --session_id "$S" --configuration.host.network "192.168.1.0/24" \
--configuration.host_start "192.168.1.10" \ --configuration.host.start "192.168.1.10" \
--configuration.host_stop "192.168.1.100" \ --configuration.host.stop "192.168.1.100" \
--configuration.dns 192.168.1.2 \ --configuration.dns 192.168.1.2 \
--configuration.vlan_id 192 \
--configuration.gateway 192.168.1.254 --configuration.gateway 192.168.1.254
cucchiaiata-cli v1.setting.session.validate --session_id $S cucchiaiata-cli v1.setting.session.validate --session_id $S
cucchiaiata-cli v1.setting.session.stop --session_id "$S" --save cucchiaiata-cli v1.setting.session.stop --session_id "$S" --save
# Create the cluster cluster.cadoles.com # Create the cluster hapy.ac-test.fr
# +---------------------------+ # +---------------------------+
# | cluster.cadoles.com | +~~~~~~~~~~+ # | hapy.ac-test.fr | +~~~~~~~~~~+
# | +--------------------+ |-------! ZONE ! # | +--------------------+ |-------! ZONE !
# | | node1.cadoles.com |---|-------! internet ! # | | node1.cadoles.com |---|-------! internet !
# | +--------------------+ | +~~~~~~~~~~+ # | +--------------------+ | +~~~~~~~~~~+
# +---------------------------+ # +---------------------------+
cucchiaiata-cli v1.infra.cluster.create --cluster_name cluster.cadoles.com \ cucchiaiata-cli v1.infra.cluster.create --cluster_name hapy.ac-test.fr \
--zone_name internet --zone_name internet \
cucchiaiata-cli v1.infra.cluster.node.create --node_name node1.cadoles.com \
--cluster_name cluster.cadoles.com \
--zones_name internet --zones_name internet
cucchiaiata-cli v1.infra.cluster.node.create --node_name node1.cadoles.com \
--cluster_name hapy.ac-test.fr
# configuration # configuration
S=$(get_id "cucchiaiata-cli v1.setting.session.cluster.start --cluster_name cluster.cadoles.com") S=$(get_id "cucchiaiata-cli v1.setting.session.cluster.start --cluster_name hapy.ac-test.fr")
cucchiaiata-cli v1.setting.session.configure --session_id "$S" --configuration.network.virtual_ip "192.168.1.1" cucchiaiata-cli v1.setting.session.configure --session_id "$S" --configuration.virtual_ip "192.168.1.1"
# FIXME endpoint == https://<cluster_name>/RPC2
cucchiaiata-cli v1.setting.session.configure --session_id "$S" --configuration.opennebula.one_user "eoleone"
cucchiaiata-cli v1.setting.session.configure --session_id "$S" --configuration.opennebula.one_password "eole"
cucchiaiata-cli v1.setting.session.validate --session_id $S cucchiaiata-cli v1.setting.session.validate --session_id $S
cucchiaiata-cli v1.setting.session.stop --session_id "$S" --save cucchiaiata-cli v1.setting.session.stop --session_id "$S" --save
@ -128,7 +132,7 @@ cucchiaiata-cli v1.setting.session.stop --session_id "$S" --save
# '-> dns.cadoles.com (server) # '-> dns.cadoles.com (server)
cucchiaiata-cli v1.infra.server.create --server_name dns.cadoles.com \ cucchiaiata-cli v1.infra.server.create --server_name dns.cadoles.com \
--site_name etab1 \ --site_name etab1 \
--cluster_name cluster.cadoles.com \ --cluster_name hapy.ac-test.fr \
--zones_name internet \ --zones_name internet \
--servermodel_name unbound_etab1 --servermodel_name unbound_etab1
# configuration # configuration
@ -147,11 +151,8 @@ cucchiaiata-cli v1.setting.session.stop --session_id "$S" --save
#======================================================================================================= #=======================================================================================================
# Generate configuration # Generate configuration
cucchiaiata-cli v1.setting.config.configuration.server.deploy --server_name dns.cadoles.com cucchiaiata-cli v1.infra.cluster.deploy --cluster_name hapy.ac-test.fr
cucchiaiata-cli v1.setting.template.generate --server_name dns.cadoles.com cucchiaiata-cli v1.infra.zone.deploy --zone_name internet
cucchiaiata-cli v1.infra.server.deploy --server_name dns.cadoles.com
# Generate cluster's configurtion
#cucchiaiata-cli v1.provider.configure -c cluster.cadoles.com
#cucchiaiata-cli v1.provider.deploy --server dns.cadoles.com
echo "fin" echo "fin"

View File

@ -4,7 +4,7 @@
from sys import exit, argv from sys import exit, argv
from json import dumps from json import dumps
from traceback import print_exc from traceback import print_exc
from cucchiaiata import Parser, config, Configuration from cucchiaiata import Parser, config, Configuration, JsonError
from cucchiaiata.i18n import _ from cucchiaiata.i18n import _
@ -15,9 +15,15 @@ def main():
else: else:
parser = Parser() parser = Parser()
print(dumps(parser.get(), print(dumps(parser.get(),
indent=config.indent)) indent=config.indent),
)
except KeyboardInterrupt: except KeyboardInterrupt:
pass pass
except JsonError as err:
print(dumps(err.message,
indent=config.indent),
)
exit(1)
except Exception as err: except Exception as err:
if config.debug: if config.debug:
print_exc() print_exc()

View File

@ -5,8 +5,9 @@ from sys import exit, argv
from yaml import load, SafeLoader, YAMLError from yaml import load, SafeLoader, YAMLError
from time import sleep from time import sleep
from os.path import isfile from os.path import isfile
from json import dumps
from cucchiaiata import Configuration from cucchiaiata import Configuration, JsonError, config
from cucchiaiata.common import Common from cucchiaiata.common import Common
from cucchiaiata.i18n import _ from cucchiaiata.i18n import _
@ -33,6 +34,9 @@ class Import(Common):
'zone', 'zone',
zone, zone,
) )
self.send('v1.infra.zone.deploy',
zone_name=zone['name'],
)
def parse_clusters(self) -> None: def parse_clusters(self) -> None:
for cluster in self.config.get('clusters', []): for cluster in self.config.get('clusters', []):
@ -40,13 +44,16 @@ class Import(Common):
'cluster', 'cluster',
cluster, cluster,
zone_name=cluster['zone'], zone_name=cluster['zone'],
zones_name=cluster['zones'],
) )
for node in cluster.get('nodes', []): for node in cluster.get('nodes', []):
self.configuration('infra', self.configuration('infra',
'cluster.node', 'cluster.node',
node, node,
cluster_name=cluster['name'], cluster_name=cluster['name'],
zones_name=node['zones'], )
self.send('v1.infra.cluster.deploy',
cluster_name=cluster['name'],
) )
def parse_servermodels(self) -> None: def parse_servermodels(self) -> None:
@ -75,10 +82,7 @@ class Import(Common):
zones_name=server['zones'], zones_name=server['zones'],
servermodel_name=server['servermodel'], servermodel_name=server['servermodel'],
) )
self.send('v1.setting.config.configuration.server.deploy', self.send('v1.infra.server.deploy',
server_name=server['name'],
)
self.send('v1.setting.template.generate',
server_name=server['name'], server_name=server['name'],
) )
@ -96,9 +100,12 @@ class Import(Common):
if 'settings' in dico: if 'settings' in dico:
#FIXME #FIXME
sleep(1) sleep(1)
try:
self.apply_settings(element, self.apply_settings(element,
dico, dico,
) )
except JsonError as err:
raise Exception(f'unable to configure {element} "{dico["name"]}": {err.message["reason"]}')
def apply_settings(self, def apply_settings(self,
element: str, element: str,
@ -135,10 +142,10 @@ class Import(Common):
value = [value] value = [value]
tiramisu.option(key).value.set(value) tiramisu.option(key).value.set(value)
except ValueError as err: except ValueError as err:
print(_(f'error when setting "{domain}" "{dico["name"]}": "{key}" with value "{value}": {err}')) print(_(f'error when setting "{element}" "{dico["name"]}": "{key}" with value "{value}": {err}'))
exit(1) exit(1)
except Exception as err: except Exception as err:
print(_(f'unexpected error when setting "{domain}" "{dico["name"]}": "{key}" with value "{value}": {err}')) print(_(f'unexpected error when setting "{element}" "{dico["name"]}": "{key}" with value "{value}": {err}'))
exit(1) exit(1)
self.send_configuration(tiramisu, self.send_configuration(tiramisu,
session_id, session_id,
@ -212,7 +219,14 @@ if __name__ == "__main__":
print(_(f'usage: {argv[0]} filename.yaml')) print(_(f'usage: {argv[0]} filename.yaml'))
exit(1) exit(1)
imp = Import(argv[1]) imp = Import(argv[1])
try:
imp.parse_zones() imp.parse_zones()
imp.parse_clusters() imp.parse_clusters()
imp.parse_servermodels() imp.parse_servermodels()
imp.parse_organizations() imp.parse_organizations()
except JsonError as err:
print(err.message['reason'])
exit(1)
except Exception as err:
print(err)
exit(1)

View File

@ -1,6 +1,7 @@
from .parser import Parser from .parser import Parser
from .configuration import Configuration from .configuration import Configuration
from .config import config from .config import config
from .common import JsonError
__all__ = ('Parser', 'config') __all__ = ('Parser', 'config', 'Configuration', 'JsonError')
__version__ = "0.0.1" __version__ = "0.0.1"

View File

@ -3,9 +3,11 @@ from requests import get, post
from json import dumps from json import dumps
from typing import Dict from typing import Dict
from .config import config
from tiramisu_api import Config from tiramisu_api import Config
from .config import config
from .i18n import _
if config.allow_insecure_https: if config.allow_insecure_https:
import warnings import warnings
@ -13,6 +15,10 @@ if config.allow_insecure_https:
warnings.simplefilter('ignore', InsecureRequestWarning) warnings.simplefilter('ignore', InsecureRequestWarning)
class JsonError(Exception):
pass
class Common: class Common:
def __init__(self): def __init__(self):
self.cucchiaiata_config = config self.cucchiaiata_config = config
@ -78,12 +84,11 @@ class Common:
self.send('v1.setting.session.validate', self.send('v1.setting.session.validate',
session_id=session_id, session_id=session_id,
) )
except Exception as err: except JsonError as err:
self.send('v1.setting.session.stop', self.send('v1.setting.session.stop',
session_id=session_id, session_id=session_id,
) )
print(_(f'error when validate setting to "{name}" "{dico["name"]}": {err}')) raise err from err
exit(1)
def send_data(uri: str, def send_data(uri: str,
@ -97,11 +102,12 @@ def send_data(uri: str,
ret = post(final_url, ret = post(final_url,
data=dumps(payload), data=dumps(payload),
verify=config.allow_insecure_https) verify=config.allow_insecure_https)
if ret.status_code != 200: try:
raise Exception(ret.text)
response = ret.json() response = ret.json()
if 'error' in response: except:
if 'reason' in response['error']['kwargs']: raise Exception(ret.text)
raise Exception("{}".format(response['error']['kwargs']['reason'])) if response['type'] == 'error':
raise Exception('erreur inconnue') err = JsonError()
err.message = response['response']
raise err
return response['response'] return response['response']