diff options
Diffstat (limited to 'hot/software-config/elements/heat-config-ansible/install.d/hook-ansible.py')
-rwxr-xr-x | hot/software-config/elements/heat-config-ansible/install.d/hook-ansible.py | 133 |
1 files changed, 0 insertions, 133 deletions
diff --git a/hot/software-config/elements/heat-config-ansible/install.d/hook-ansible.py b/hot/software-config/elements/heat-config-ansible/install.d/hook-ansible.py deleted file mode 100755 index b07d182..0000000 --- a/hot/software-config/elements/heat-config-ansible/install.d/hook-ansible.py +++ /dev/null @@ -1,133 +0,0 @@ -#!/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 json -import logging -import os -import subprocess -import sys -import warnings - -WORKING_DIR = os.environ.get('HEAT_ANSIBLE_WORKING', - '/var/lib/heat-config/heat-config-ansible') -OUTPUTS_DIR = os.environ.get('HEAT_ANSIBLE_OUTPUTS', - '/var/run/heat-config/heat-config-ansible') -ANSIBLE_CMD = os.environ.get('HEAT_ANSIBLE_CMD', 'ansible-playbook') -ANSIBLE_INVENTORY = os.environ.get('HEAT_ANSIBLE_INVENTORY', 'localhost,') - - -def prepare_dir(path): - if not os.path.isdir(path): - os.makedirs(path, 0o700) - - -def main(argv=sys.argv): - warnings.warn('This hook is deprecated, please use hooks from heat-agents ' - 'repository instead.', DeprecationWarning) - - 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') - - prepare_dir(OUTPUTS_DIR) - prepare_dir(WORKING_DIR) - os.chdir(WORKING_DIR) - - c = json.load(sys.stdin) - - variables = {} - for input in c['inputs']: - variables[input['name']] = input.get('value', '') - - tags = c['options'].get('tags') - modulepath = c['options'].get('modulepath') - - fn = os.path.join(WORKING_DIR, '%s_playbook.yaml' % c['id']) - vars_filename = os.path.join(WORKING_DIR, '%s_variables.json' % c['id']) - heat_outputs_path = os.path.join(OUTPUTS_DIR, c['id']) - variables['heat_outputs_path'] = heat_outputs_path - - config_text = c.get('config', '') - if not config_text: - log.warn("No 'config' input found, nothing to do.") - return - # Write 'variables' to file - with os.fdopen(os.open( - vars_filename, os.O_CREAT | os.O_WRONLY, 0o600), 'w') as var_file: - json.dump(variables, var_file) - # Write the executable, 'config', to file - with os.fdopen(os.open(fn, os.O_CREAT | os.O_WRONLY, 0o600), 'w') as f: - f.write(c.get('config', '').encode('utf-8')) - - cmd = [ - ANSIBLE_CMD, - '-i', - ANSIBLE_INVENTORY, - fn, - '--extra-vars', - '@%s' % vars_filename - ] - if tags: - cmd.insert(3, '--tags') - cmd.insert(4, tags) - if modulepath: - cmd.insert(3, '--module-path') - cmd.insert(4, modulepath) - - log.debug('Running %s' % (' '.join(cmd),)) - try: - subproc = subprocess.Popen(cmd, stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - except OSError: - log.warn("ansible not installed yet") - return - stdout, stderr = subproc.communicate() - - log.info('Return code %s' % subproc.returncode) - if stdout: - log.info(stdout) - if stderr: - log.info(stderr) - - # TODO(stevebaker): Test if ansible returns any non-zero - # return codes in success. - if subproc.returncode: - log.error("Error running %s. [%s]\n" % (fn, subproc.returncode)) - else: - log.info('Completed %s' % fn) - - response = {} - - for output in c.get('outputs') or []: - output_name = output['name'] - try: - with open('%s.%s' % (heat_outputs_path, output_name)) as out: - response[output_name] = out.read() - except IOError: - pass - - response.update({ - 'deploy_stdout': stdout, - 'deploy_stderr': stderr, - 'deploy_status_code': subproc.returncode, - }) - - json.dump(response, sys.stdout) - -if __name__ == '__main__': - sys.exit(main(sys.argv)) |