solar/example-riaks-template.py
2015-09-03 11:17:28 +02:00

120 lines
2.9 KiB
Python

#!/usr/bin/env python
# WARNING: this might not be most up-to-date script and not all things might
# work here, for most up-to-date version see example-riaks.py
# This is just a demo of the template language of Solar
from solar.interfaces.db import get_db
from solar.core import signals
db = get_db()
db.clear()
signals.Connections.clear()
from solar import template
nodes = template.nodes_from('templates/riak_nodes.yml')
riak_services = nodes.on_each(
'resources/riak_node',
{
'riak_self_name': 'riak{num}',
'riak_hostname': 'riak_server{num}.solar',
'riak_name': 'riak{num}@riak_server{num}.solar',
})
slave_riak_services = riak_services.tail()
riak_services.take(0).connect_list(
slave_riak_services,
{
'riak_name': 'join_to',
}
)
hosts_files = nodes.on_each('resources/hosts_file')
riak_services.connect_list_to_each(
hosts_files,
{
'ip': 'hosts_ips',
'riak_hostname': 'hosts_names',
},
events=False
)
hosts_files.add_deps('run/success', riak_services, 'run')
slave_riak_services.add_reacts('run/success', slave_riak_services, 'join')
slave_riak_services.add_reacts('leave/success', slave_riak_services, 'join')
slave_riak_services.add_react('run/success', riak_services.take(0), 'commit')
haproxy_services = nodes.on_each(
'resources/haproxy_service'
)
haproxy_configs = nodes.on_each(
'resources/haproxy_config'
)
haproxy_service_configs_http = nodes.on_each(
'resources/haproxy_service_config',
{
'listen_port': 8098,
'protocol': 'http',
}
)
haproxy_service_configs_pb = nodes.on_each(
'resources/haproxy_service_config',
{
'listen_port': 8087,
'protocol': 'tcp',
}
)
riak_services.connect_list_to_each(
haproxy_service_configs_http,
{
'riak_hostname': 'servers',
'riak_port_http': 'ports',
}
)
riak_services.connect_list_to_each(
haproxy_service_configs_pb,
{
'riak_hostname': 'servers',
'riak_port_pb': 'ports',
}
)
haproxy_service_configs_http.connect_list(
haproxy_configs,
{
'protocol': 'configs_protocols',
'listen_port': 'listen_ports',
'name': 'configs_names',
'servers': 'configs',
'ports': 'configs_ports',
}
)
haproxy_service_configs_pb.connect_list(
haproxy_configs,
{
'protocol': 'configs_protocols',
'listen_port': 'listen_ports',
'name': 'configs_names',
'servers': 'configs',
'ports': 'configs_ports',
}
)
haproxy_configs.connect_list(
haproxy_services,
{
'listen_ports': 'ports',
}
)
nodes.add_reacts('run/success', haproxy_services, 'install')
haproxy_services.add_deps('install/success', haproxy_configs, 'run')
haproxy_configs.add_reacts('run/success', haproxy_services, 'run')
haproxy_configs.add_reacts('update/success', haproxy_services, 'update')