[buildout] parts = promises publish-connection-parameter eggs-directory = {{ buildout['eggs-directory'] }} develop-eggs-directory = {{ buildout['develop-eggs-directory'] }} offline = true [instance-parameter] recipe = slapos.cookbook:slapconfiguration computer = ${slap_connection:computer_id} partition = ${slap_connection:partition_id} url = ${slap_connection:server_url} key = ${slap_connection:key_file} cert = ${slap_connection:cert_file} [directory] recipe = slapos.cookbook:mkdirectory home = ${buildout:directory} etc = ${:home}/etc var = ${:home}/var srv = ${:home}/srv service = ${:etc}/service promise = ${:etc}/promise influxdb-data-dir = ${:srv}/influxdb grafana-dir = ${:srv}/grafana grafana-data-dir = ${:grafana-dir}/data grafana-logs-dir = ${:var}/log grafana-plugins-dir = ${:grafana-dir}/plugins grafana-provisioning-config-dir = ${:grafana-dir}/provisioning-config grafana-provisioning-datasources = ${:grafana-provisioning-config-dir}/datasources grafana-provisioning-dashboards = ${:grafana-provisioning-config-dir}/dashboards telegraf-dir = ${:srv}/telegraf telegraf-extra-config-dir = ${:telegraf-dir}/extra-config # macros [generate-certificate] recipe = plone.recipe.command command = if [ ! -e ${:key-file} ] then {{ openssl_bin }} req -x509 -nodes -days 3650 \ -subj "/C=AA/ST=X/L=X/O=Dis/CN=${:common-name}" \ -newkey rsa:1024 -keyout ${:key-file} \ -out ${:cert-file} fi update-command = ${:command} key-file = ${directory:etc}/${:_buildout_section_name_}.key cert-file = ${directory:etc}/${:_buildout_section_name_}.crt common-name = ${:_buildout_section_name_} [config-file] recipe = slapos.recipe.template:jinja2 template = {{ buildout['parts-directory'] }}/${:_buildout_section_name_}/${:_buildout_section_name_}.cfg.in rendered = ${directory:etc}/${:_buildout_section_name_}.cfg mode = 0644 extensions = jinja2.ext.do [check-port-listening-promise] recipe = slapos.cookbook:check_port_listening path = ${directory:promise}/${:_buildout_section_name_} [influxdb] ipv6 = ${instance-parameter:ipv6-random} host = ${:ipv6} port = 8088 http-port = 8086 url = https://[${:host}]:${:http-port} data-dir = ${directory:influxdb-data-dir} auth-username = ${influxdb-password:username} auth-password = ${influxdb-password:passwd} unix-socket = ${directory:var}/influxdb.socket ssl-cert-file = ${influxdb-certificate:cert-file} ssl-key-file = ${influxdb-certificate:key-file} database = telegraf recipe = slapos.cookbook:wrapper command-line = nice -19 chrt --idle 0 ionice -c3 {{ influxd_bin }} -config ${influxdb-config-file:rendered} wrapper-path = ${directory:service}/influxdb [influxdb-config-file] <= config-file context = section influxdb influxdb [influxdb-password] recipe = slapos.cookbook:generate.password username = influxdb [influxdb-certificate] <= generate-certificate [influxdb-listen-promise] <= check-port-listening-promise hostname= ${influxdb:ipv6} port = ${influxdb:port} [influxdb-password-promise] recipe = slapos.cookbook:wrapper command-line = {{ influx_bin }} -username ${influxdb:auth-username} -password ${influxdb:auth-password} -socket ${influxdb:unix-socket} -execute "CREATE USER ${influxdb:auth-username} WITH PASSWORD '${influxdb:auth-password}' WITH ALL PRIVILEGES" wrapper-path = ${directory:promise}/${:_buildout_section_name_} [grafana] ipv6 = ${instance-parameter:ipv6-random} port = 8080 url = https://[${:ipv6}]:${:port} data-dir = ${directory:grafana-data-dir} logs-dir = ${directory:grafana-logs-dir} plugins-dir = ${directory:grafana-plugins-dir} provisioning-config-dir = ${directory:grafana-provisioning-config-dir} admin-user = ${grafana-password:username} admin-password = ${grafana-password:passwd} secret-key = ${grafana-secret-key:passwd} ssl-key-file = ${grafana-certificate:key-file} ssl-cert-file = ${grafana-certificate:cert-file} recipe = slapos.cookbook:wrapper command-line = {{ grafana_bin }} -config ${grafana-config-file:rendered} -homepath {{ grafana_homepath }} wrapper-path = ${directory:service}/grafana [grafana-certificate] <= generate-certificate [grafana-password] recipe = slapos.cookbook:generate.password username = admin [grafana-secret-key] recipe = slapos.cookbook:generate.password [grafana-config-file] <= config-file context = section grafana grafana [grafana-listen-promise] <= check-port-listening-promise hostname= ${grafana:ipv6} port = ${grafana:port} [telegraf] recipe = slapos.cookbook:wrapper extra-config-dir = ${directory:telegraf-extra-config-dir} # telegraf needs influxdb to be already listening before starting command-line = bash -c '${influxdb-listen-promise:path} && nice -19 chrt --idle 0 ionice -c3 {{ telegraf_bin }} --config ${telegraf-config-file:rendered} --config-directory ${:extra-config-dir}' wrapper-path = ${directory:service}/telegraf [telegraf-config-file] <= config-file context = section influxdb influxdb section telegraf telegraf [promises] recipe = instance-promises = ${influxdb-listen-promise:path} ${influxdb-password-promise:wrapper-path} ${grafana-listen-promise:path} [publish-connection-parameter] recipe = slapos.cookbook:publish influxdb-url = ${influxdb:url} influxdb-database = ${influxdb:database} influxdb-username = ${influxdb:auth-username} influxdb-password = ${influxdb:auth-password} telegraf-extra-config-dir = ${telegraf:extra-config-dir} url = ${grafana:url} grafana-username = ${grafana:admin-user} grafana-password = ${grafana:admin-password}