1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
import shutil
import logging
import argparse
import os
from uuid import uuid4
import glob
logger = logging.getLogger(__name__)
COMPONENTS = (
"cinder",
"nova",
"neutron",
"glance",
"keystone"
)
def init():
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", '-v', action='store_true', help='verbose mode')
parser.add_argument("--debug", '-d', action='store_true', help='debug mode')
parser.add_argument("--templates", '-t', help='set template directory', default="templates/")
parser.add_argument("--out-dir", '-o', help='if set, copy the files in this directory', default=None)
parser.add_argument("wrapper_url", help='Wrapper URL to use', nargs="*",
default=["http://127.0.0.1:8080/policy_checker"])
args = parser.parse_args()
logging_format = "%(levelname)s: %(message)s"
if args.verbose:
logging.basicConfig(level=logging.INFO, format=logging_format)
if args.debug:
logging.basicConfig(level=logging.DEBUG, format=logging_format)
return args
def update_templates(templates_dir, wrapper_url):
tmp_dir = os.path.join("/tmp", str(uuid4()))
wrapper_url = wrapper_url[0].strip('"').strip("'")
os.mkdir(tmp_dir)
for comp in COMPONENTS:
input_file = os.path.join(templates_dir, comp + ".policy.json")
output_file = os.path.join(tmp_dir, comp + ".policy.json")
output_fd = open(output_file, "w")
for line in open(input_file):
output_fd.write(line.replace("{{wrapper}}", wrapper_url))
return tmp_dir
def remove_tmp_files(tmp_dir):
for _filename in glob.glob(os.path.join(tmp_dir, "*")):
logger.debug("{} {}".format(_filename, os.path.isfile(_filename)))
if os.path.isfile(_filename):
logger.debug("Trying to delete {}".format(_filename))
os.remove(_filename)
logger.debug("Delete done")
os.removedirs(tmp_dir)
def main(templates_dir, wrapper_url, out_dir=None):
logger.info("Moving configuration files")
tmp_dir = update_templates(templates_dir, wrapper_url)
if out_dir:
logger.info("Moving to {}".format(out_dir))
try:
os.mkdir(out_dir)
except FileExistsError:
logger.warning("Output directory exists, writing on it!")
for comp in COMPONENTS:
logger.info("Moving {}".format(comp))
shutil.copy(os.path.join(tmp_dir, comp + ".policy.json"),
os.path.join(out_dir, comp + ".policy.json"))
else:
logger.info("Moving to /etc")
for comp in COMPONENTS:
logger.info("Moving {}".format(comp))
shutil.copy(os.path.join(tmp_dir, comp + ".policy.json"),
os.path.join("etc", comp, "policy.json"))
remove_tmp_files(tmp_dir)
if __name__ == "__main__":
args = init()
main(args.templates, args.wrapper_url, args.out_dir)
|