Deprecating launch app and ansible support.
[snaps.git] / examples / launch.py
1 #!/usr/bin/python
2 #
3 # Copyright (c) 2017 Cable Television Laboratories, Inc. ("CableLabs")
4 #                    and others.  All rights reserved.
5 #
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at:
9 #
10 #     http://www.apache.org/licenses/LICENSE-2.0
11 #
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17 #
18 # This script is responsible for deploying virtual environments
19 import argparse
20 import logging
21
22 from jinja2 import Environment, FileSystemLoader
23 import os
24 import yaml
25
26 from snaps import file_utils
27 from snaps.openstack.utils import launch_utils
28
29 __author__ = 'spisarski'
30
31 logger = logging.getLogger('snaps_launcher')
32
33 ARG_NOT_SET = "argument not set"
34
35 from warnings import warn
36 warn('This script will be removed in a subsequent release',
37      DeprecationWarning)
38
39
40 def main(arguments):
41     """
42     Will need to set environment variable ANSIBLE_HOST_KEY_CHECKING=False or
43     Create a file located in /etc/ansible/ansible/cfg or ~/.ansible.cfg
44     containing the following content:
45
46     [defaults]
47     host_key_checking = False
48
49     CWD must be this directory where this script is located.
50
51     :return: To the OS
52     """
53     log_level = logging.INFO
54     if arguments.log_level != 'INFO':
55         log_level = logging.DEBUG
56     logging.basicConfig(level=log_level)
57
58     logger.info('Starting to Deploy')
59
60     # Apply env_file/substitution file to template
61     env = Environment(loader=FileSystemLoader(
62         searchpath=os.path.dirname(arguments.tmplt_file)))
63     template = env.get_template(os.path.basename(arguments.tmplt_file))
64
65     env_dict = dict()
66     if arguments.env_file:
67         env_dict = file_utils.read_yaml(arguments.env_file)
68     output = template.render(**env_dict)
69
70     config = yaml.load(output)
71
72     if config:
73         clean = arguments.clean is not ARG_NOT_SET
74         clean_image = arguments.clean_image is not ARG_NOT_SET
75         deploy = arguments.deploy is not ARG_NOT_SET
76         launch_utils.launch_config(
77             config, arguments.tmplt_file, deploy, clean, clean_image)
78     else:
79         logger.error(
80             'Unable to read configuration file - ' + arguments.tmplt_file)
81         exit(1)
82
83     exit(0)
84
85
86 if __name__ == '__main__':
87     # To ensure any files referenced via a relative path will begin from the
88     # directory in which this file resides
89     os.chdir(os.path.dirname(os.path.realpath(__file__)))
90
91     parser = argparse.ArgumentParser()
92     parser.add_argument(
93         '-d', '--deploy', dest='deploy', nargs='?', default=ARG_NOT_SET,
94         help='When used, environment will be deployed and provisioned')
95     parser.add_argument(
96         '-c', '--clean', dest='clean', nargs='?', default=ARG_NOT_SET,
97         help='When used, the environment will be removed')
98     parser.add_argument(
99         '-i', '--clean-image', dest='clean_image', nargs='?',
100         default=ARG_NOT_SET,
101         help='When cleaning, if this is set, the image will be cleaned too')
102     parser.add_argument(
103         '-t', '--tmplt', dest='tmplt_file', required=True,
104         help='The SNAPS deployment template YAML file - REQUIRED')
105     parser.add_argument(
106         '-e', '--env-file', dest='env_file',
107         help='Yaml file containing substitution values to the env file')
108     parser.add_argument(
109         '-l', '--log-level', dest='log_level', default='INFO',
110         help='Logging Level (INFO|DEBUG)')
111     args = parser.parse_args()
112
113     if args.deploy is ARG_NOT_SET and args.clean is ARG_NOT_SET:
114         print(
115             'Must enter either -d for deploy or -c for cleaning up and '
116             'environment')
117         exit(1)
118     if args.deploy is not ARG_NOT_SET and args.clean is not ARG_NOT_SET:
119         print('Cannot enter both options -d/--deploy and -c/--clean')
120         exit(1)
121     main(args)