#!/usr/bin/env python
#
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
#    not use this file except in compliance with the License. You may obtain
#    a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.

import glob
import json
import logging
import os
import subprocess
import sys

import requests

MANIFESTS_DIR = os.environ.get('HEAT_KUBELET_MANIFESTS',
                               '/var/lib/heat-config/heat-config-kubelet'
                               '/kubelet-manifests')
CONF_FILE = os.environ.get('HEAT_SHELL_CONFIG',
                           '/var/run/heat-config/heat-config')


def main(argv=sys.argv):
    log = logging.getLogger('heat-config')
    handler = logging.StreamHandler(sys.stderr)
    handler.setFormatter(
        logging.Formatter(
            '[%(asctime)s] (%(name)s) [%(levelname)s] %(message)s'))
    log.addHandler(handler)
    log.setLevel('DEBUG')

    if not os.path.exists(CONF_FILE):
        log.error('No config file %s' % CONF_FILE)
        return 1

    if not os.path.isdir(MANIFESTS_DIR):
        os.makedirs(MANIFESTS_DIR, 0o700)

    for f in glob.glob('%s/*.json'):
        os.remove(f)

    try:
        configs = json.load(open(CONF_FILE))
    except ValueError:
        pass
    else:
        for c in configs:
            try:
                write_manifest(c)
            except Exception as e:
                log.exception(e)


def write_manifest(c):
    group = c.get('group')
    if group != 'kubelet':
        return

    fn = os.path.join(MANIFESTS_DIR, '%s.json' % c['id'])
    with os.fdopen(os.open(fn, os.O_CREAT | os.O_WRONLY, 0o600), 'w') as f:
        json.dump(c['config'], f, indent=2)

if __name__ == '__main__':
    sys.exit(main(sys.argv))
