blob: 5e88028cb912b9f476ed556f5d8970642c070098 [file]
"""Generates collectd and fluentd config from template."""
import argparse
import logging
import os
import socket
import subprocess
import jinja2
_DEFAULT_PROJECT_ID = 'google.com:fragglerock'
_DEFAULT_ZONE_NAME = 'us-central1-c'
_UNINITIALIZED = 'uninitialized'
def _GetHostName():
"""Returns local machine's host name."""
return socket.gethostname().split('.')[0]
def _GetFqdn():
"""Returns local machine's FQDN."""
return socket.getfqdn()
def _GetIpAddress():
"""Returns IP address of the given interface."""
output = subprocess.check_output(['hostname', '-i'])
return output.strip()
def ParseCmdOptions():
"""Parses command inputs."""
parser = argparse.ArgumentParser(
description='Generates collectd and fluentd config.')
parser.add_argument('--hostname', help='Host name')
parser.add_argument('--fqdn', help='Host FQDN')
parser.add_argument('--ip', help='IPv4 address')
parser.add_argument(
'--project_id', help='Project ID, e.g. google.com:fragglerock')
parser.add_argument(
'--zone_name', help='Instance zone name, e.g. asia-east1-a')
parser.add_argument(
'--template_dir', help='Directory containing the templates.')
parser.add_argument(
'--debug',
action='store_true',
default=False,
help='Print extra debug information.')
args = parser.parse_args()
if args.debug:
logging.basicConfig(level=logging.DEBUG)
else:
logging.basicConfig(level=logging.INFO)
if not args.hostname or args.hostname == _UNINITIALIZED:
args.hostname = _GetHostName()
if not args.fqdn or args.fqdn == _UNINITIALIZED:
args.fqdn = _GetFqdn()
if not args.ip or args.ip == _UNINITIALIZED:
args.ip = _GetIpAddress()
if not args.project_id or args.project_id == _UNINITIALIZED:
args.project_id = _DEFAULT_PROJECT_ID
if not args.zone_name or args.zone_name == _UNINITIALIZED:
args.zone_name = _DEFAULT_ZONE_NAME
if not args.template_dir or not os.path.isdir(args.template_dir):
args.template_dir = os.path.dirname(__file__)
return args
def _GenerateCollectdConfig(flags):
"""Outputs collectd.conf.
Args:
flags: argparse.Namespace instance containing config information.
"""
template_path = os.path.join(flags.template_dir, 'collectd.conf.template')
output_path = os.path.join(flags.template_dir, 'collectd.conf')
with open(template_path) as fn:
tm = jinja2.Template(fn.read())
# Values demand double-quotes
conf = tm.render(
hostname='\"' + flags.hostname + '\"',
fqdn='\"' + flags.fqdn + '\"',
project_name='\"' + flags.project_id + '\"',
zone_name='\"' + flags.zone_name + '\"')
with open(output_path, 'w') as output:
output.write(conf)
def _GenerateFluentdConfig(flags):
"""Outputs google-fluentd.conf.
Args:
flags: argparse.Namespace instance containing config information.
"""
template_path = os.path.join(flags.template_dir,
'google-fluentd.conf.template')
output_path = os.path.join(flags.template_dir,
'google-fluentd.conf')
with open(template_path) as fn:
tm = jinja2.Template(fn.read())
# Values demand double-quotes
conf = tm.render(
hostname=flags.hostname,
fqdn=flags.fqdn,
project_id=flags.project_id,
zone_name=flags.zone_name)
with open(output_path, 'w') as output:
output.write(conf)
def main():
"""Generates collectd and fluentd config from template."""
flags = ParseCmdOptions()
logging.debug('hostname: %s', flags.hostname)
logging.debug('fqdn: %s', flags.fqdn)
logging.debug('project: %s', flags.project_id)
logging.debug('zone: %s', flags.zone_name)
_GenerateCollectdConfig(flags)
_GenerateFluentdConfig(flags)
if __name__ == '__main__':
main()