summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYaron Yogev <yaronyogev@gmail.com>2017-08-06 18:35:34 +0300
committerYaron Yogev <yaronyogev@gmail.com>2017-08-06 18:37:37 +0300
commit02151ebd22bc9b453d971003bcdf882413b1be2d (patch)
treee562ff2ac176173f4c6e879396594aff2db3c1dc
parent98ccf39560e0f643ddf9a766e33b420b96dffac6 (diff)
some more refactoring, now working
return the factoring removed in latest commit add refactoring of image download code fixed ldap config file text writing Change-Id: I80fadf5c2eaba53fe12271f50dd156604d175030 Signed-off-by: Yaron Yogev <yaronyogev@gmail.com>
-rw-r--r--app/install/calipso-installer.py266
1 files changed, 132 insertions, 134 deletions
diff --git a/app/install/calipso-installer.py b/app/install/calipso-installer.py
index f16e31b..56f381e 100644
--- a/app/install/calipso-installer.py
+++ b/app/install/calipso-installer.py
@@ -17,7 +17,22 @@ import dockerpycreds
import time
import json
+
+C_MONGO_CONFIG = "/local_dir/calipso_mongo_access.conf"
+H_MONGO_CONFIG = "/home/calipso/calipso_mongo_access.conf"
+PYTHONPATH = "/home/scan/calipso_prod/app"
+C_LDAP_CONFIG = "/local_dir/ldap.conf"
+H_LDAP_CONFIG = "/home/calipso/ldap.conf"
+
+
calipso_volume = {'/home/calipso': {'bind': '/local_dir', 'mode': 'rw'}}
+RESTART_POLICY = {"Name": "always"}
+
+# environment variables definitions
+PYTHON_PATH = "PYTHONPATH=" + PYTHONPATH
+MONGO_CONFIG = "MONGO_CONFIG=" + C_MONGO_CONFIG
+LDAP_CONFIG = "LDAP_CONFIG=" + C_LDAP_CONFIG
+LOG_LEVEL = "LOG_LEVEL=DEBUG"
class MongoComm:
@@ -63,7 +78,8 @@ class MongoComm:
def update(self, coll, doc, upsert=False):
collection = self.client.calipso[coll]
- doc_id = collection.update_one({'_id': doc['_id']},{'$set': doc},
+ doc_id = collection.update_one({'_id': doc['_id']},
+ {'$set': doc},
upsert=upsert)
return doc_id
@@ -78,6 +94,7 @@ DockerClient = docker.from_env()
# DockerClient = \
# docker.DockerClient(base_url='tcp://korlev-calipso-testing.cisco.com:2375')
+
def copy_file(filename):
c = MongoComm(args.hostname, args.dbuser, args.dbpassword, args.dbport)
txt = open('db/'+filename+'.json')
@@ -87,11 +104,6 @@ def copy_file(filename):
print("Copied", filename, "mongo doc_ids:\n\n", doc_id, "\n\n")
time.sleep(1)
-C_MONGO_CONFIG = "/local_dir/calipso_mongo_access.conf"
-H_MONGO_CONFIG = "/home/calipso/calipso_mongo_access.conf"
-PYTHONPATH = "/home/scan/calipso_prod/app"
-C_LDAP_CONFIG = "/local_dir/ldap.conf"
-H_LDAP_CONFIG = "/home/calipso/ldap.conf"
def container_started(name: str, print_message=True):
found = DockerClient.containers.list(all=True, filters={"name": name})
@@ -101,26 +113,35 @@ def container_started(name: str, print_message=True):
.format(name))
return bool(found)
+
+def download_image(image_name):
+ image = DockerClient.images.list(all=True, name=image_name)
+
+ if image:
+ print(image, "exists...not downloading...")
+ return
+
+ print("image {} missing, "
+ "hold on while downloading first...\n"
+ .format(image_name))
+ image = DockerClient.images.pull(image_name)
+ print("Downloaded", image, "\n\n")
+
+
# functions to check and start calipso containers:
def start_mongo(dbport):
name = "calipso-mongo"
if container_started(name):
return
print("\nstarting container {}, please wait...\n".format(name))
- image = DockerClient.images.list(all=True,
- name="korenlev/calipso:mongo")
- if image:
- print(image, "exists...not downloading...")
- else:
- print("image korenlev/calipso:mongo missing, "
- "hold on while downloading first...\n")
- image = DockerClient.images.pull("korenlev/calipso:mongo")
- print("Downloaded", image, "\n\n")
- DockerClient.containers.run('korenlev/calipso:mongo',
+ image_name = "korenlev/calipso:mongo"
+ download_image(image_name)
+ mongo_ports = {'27017/tcp': dbport, '28017/tcp': 28017}
+ DockerClient.containers.run(image_name,
detach=True,
name=name,
- ports={'27017/tcp': dbport, '28017/tcp': 28017},
- restart_policy={"Name": "always"})
+ ports=mongo_ports,
+ restart_policy=RESTART_POLICY)
# wait a bit till mongoDB is up before starting to copy the json files
# from 'db' folder:
time.sleep(5)
@@ -158,143 +179,112 @@ def start_mongo(dbport):
# some other docs are filled later by scanning, logging
# and monitoring
+
def start_listen():
name = "calipso-listen"
if container_started(name):
return
print("\nstarting container {}...\n".format(name))
- image = DockerClient.images.list(all=True,
- name="korenlev/calipso:listen")
- if image:
- print(image, "exists...not downloading...")
- else:
- print("image korenlev/calipso:listen missing, "
- "hold on while downloading first...\n")
- image = DockerClient.images.pull("korenlev/calipso:listen")
- print("Downloaded", image, "\n\n")
- listencontainer = DockerClient.containers.run('korenlev/calipso:listen',
- detach=True,
- name=name,
- ports={'22/tcp': 50022},
- restart_policy={"Name": "always"},
- environment=["PYTHONPATH=" + PYTHONPATH,
- "MONGO_CONFIG=" + C_MONGO_CONFIG],
- volumes=calipso_volume)
+ image_name = "korenlev/calipso:listen"
+ download_image(image_name)
+ ports = {'22/tcp': 50022}
+ DockerClient.containers.run(image_name,
+ detach=True,
+ name=name,
+ ports=ports,
+ restart_policy=RESTART_POLICY,
+ environment=[PYTHON_PATH, MONGO_CONFIG],
+ volumes=calipso_volume)
+
def start_ldap():
name = "calipso-ldap"
if container_started(name):
return
print("\nstarting container {}...\n".format(name))
- image = DockerClient.images.list(all=True,
- name="korenlev/calipso:ldap")
- if image:
- print(image, "exists...not downloading...")
- else:
- print("image korenlev/calipso:ldap missing, "
- "hold on while downloading first...\n")
- image = DockerClient.images.pull("korenlev/calipso:ldap")
- print("Downloaded", image, "\n\n")
- ldapcontainer = DockerClient.containers.run('korenlev/calipso:ldap',
- detach=True,
- name=name,
- ports={'389/tcp': 389, '389/udp': 389},
- restart_policy={"Name": "always"},
- volumes=calipso_volume)
+ image_name = "korenlev/calipso:ldap"
+ download_image(image_name)
+ ports = {'389/tcp': 389, '389/udp': 389}
+ DockerClient.containers.run(image_name,
+ detach=True,
+ name=name,
+ ports=ports,
+ restart_policy=RESTART_POLICY,
+ volumes=calipso_volume)
+
def start_api():
name = "calipso-api"
if container_started(name):
return
print("\nstarting container {}...\n".format(name))
- image = DockerClient.images.list(all=True,
- name="korenlev/calipso:api")
- if image:
- print(image, "exists...not downloading...")
- else:
- print("image korenlev/calipso:api missing,"
- " hold on while downloading first...\n")
- image = DockerClient.images.pull("korenlev/calipso:api")
- print("Downloaded", image, "\n\n")
- apicontainer = DockerClient.containers.run('korenlev/calipso:api',
- detach=True,
- name=name,
- ports={'8000/tcp': 8000, '22/tcp': 40022},
- restart_policy={"Name": "always"},
- environment=["PYTHONPATH=" + PYTHONPATH,
- "MONGO_CONFIG=" + C_MONGO_CONFIG,
- "LDAP_CONFIG=" + C_LDAP_CONFIG,
- "LOG_LEVEL=DEBUG"],
- volumes=calipso_volume)
+ image_name = "korenlev/calipso:api"
+ download_image(image_name)
+ api_ports = {'8000/tcp': 8000, '22/tcp': 40022}
+ DockerClient.containers.run(image_name,
+ detach=True,
+ name=name,
+ ports=api_ports,
+ restart_policy=RESTART_POLICY,
+ environment=[PYTHON_PATH, MONGO_CONFIG,
+ LDAP_CONFIG,
+ LOG_LEVEL],
+ volumes=calipso_volume)
+
def start_scan():
name = "calipso-scan"
if container_started(name):
return
print("\nstarting container {}...\n".format(name))
- image = DockerClient.images.list(all=True,
- name="korenlev/calipso:scan")
- if image:
- print(image, "exists...not downloading...")
- else:
- print("image korenlev/calipso:scan missing, "
- "hold on while downloading first...\n")
- image = DockerClient.images.pull("korenlev/calipso:scan")
- print("Downloaded", image, "\n\n")
- scancontainer = DockerClient.containers.run('korenlev/calipso:scan',
- detach=True,
- name=name,
- ports={'22/tcp': 30022},
- restart_policy={"Name": "always"},
- environment=["PYTHONPATH=" + PYTHONPATH,
- "MONGO_CONFIG=" + C_MONGO_CONFIG],
- volumes=calipso_volume)
+ image_name = "korenlev/calipso:scan"
+ download_image(image_name)
+ ports = {'22/tcp': 30022}
+ DockerClient.containers.run(image_name,
+ detach=True,
+ name=name,
+ ports=ports,
+ restart_policy=RESTART_POLICY,
+ environment=[PYTHON_PATH, MONGO_CONFIG],
+ volumes=calipso_volume)
+
def start_sensu():
name = "calipso-sensu"
if container_started(name):
return
print("\nstarting container {}...\n".format(name))
- image = DockerClient.images.list(all=True,
- name="korenlev/calipso:sensu")
- if image:
- print(image, "exists...not downloading...")
- else:
- print("image korenlev/calipso:sensu missing,"
- " hold on while downloading first...\n")
- image = DockerClient.images.pull("korenlev/calipso:sensu")
- print("Downloaded", image, "\n\n")
- sensucontainer = DockerClient.containers.run('korenlev/calipso:sensu',
- detach=True,
- name=name,
- ports={'22/tcp': 20022, '3000/tcp': 3000, '4567/tcp': 4567,
- '5671/tcp': 5671, '15672/tcp': 15672},
- restart_policy={"Name": "always"},
- environment=["PYTHONPATH=" + PYTHONPATH],
- volumes=calipso_volume)
+ image_name = "korenlev/calipso:sensu"
+ download_image(image_name)
+ sensu_ports = {'22/tcp': 20022, '3000/tcp': 3000, '4567/tcp': 4567,
+ '5671/tcp': 5671, '15672/tcp': 15672}
+ DockerClient.containers.run(image_name,
+ detach=True,
+ name=name,
+ ports=sensu_ports,
+ restart_policy=RESTART_POLICY,
+ environment=[PYTHON_PATH],
+ volumes=calipso_volume)
+
def start_ui(host, dbuser, dbpassword, webport, dbport):
name = "calipso-ui"
if container_started(name):
return
print("\nstarting container {}...\n".format(name))
- image = DockerClient.images.list(all=True, name="korenlev/calipso:ui")
- if image:
- print(image, "exists...not downloading...")
- else:
- print("image korenlev/calipso:ui missing, "
- "hold on while downloading first...\n")
- image = DockerClient.images.pull("korenlev/calipso:ui")
- print("Downloaded", image, "\n\n")
- uicontainer = DockerClient.containers.run('korenlev/calipso:ui',
- detach=True,
- name=name,
- ports={'3000/tcp': webport},
- restart_policy={"Name": "always"},
- environment=["ROOT_URL=http://{}:{}".format(host, str(webport)),
- "MONGO_URL=mongodb://{}:{}@{}:{}/calipso".format(
- dbuser, dbpassword, host, str(dbport)),
- "LDAP_CONFIG=" + C_LDAP_CONFIG])
+ image_name = "korenlev/calipso:ui"
+ download_image(image_name)
+ root_url = "ROOT_URL=http://{}:{}".format(host, str(webport))
+ mongo_url = "MONGO_URL=mongodb://{}:{}@{}:{}/calipso"\
+ .format(dbuser, dbpassword, host, str(dbport))
+ ports = {'3000/tcp': webport}
+ DockerClient.containers.run(image_name,
+ detach=True,
+ name=name,
+ ports=ports,
+ restart_policy=RESTART_POLICY,
+ environment=[root_url, mongo_url, LDAP_CONFIG])
+
# check and stop a calipso container by given name
def container_stop(container_name):
@@ -312,6 +302,7 @@ def container_stop(container_name):
print("removing container name", c.name, "...\n")
c.remove()
+
# parser for getting optional command arguments:
parser = argparse.ArgumentParser()
parser.add_argument("--hostname",
@@ -365,20 +356,27 @@ while container != "all" and container not in container_names:
if action == "start":
# building /home/calipso/calipso_mongo_access.conf and
# /home/calipso/ldap.conf files, per the arguments:
- calipso_mongo_access_text =\
- "server " + args.hostname +\
- "\nuser " + args.dbuser +\
- "\npwd " + args.dbpassword +\
- "\nauth_db calipso"
- ldap_text =\
- "user admin" +\
- "\npassword password" +\
- "\nurl ldap://" + args.hostname + ":389" +\
- "\nuser_id_attribute CN" + "\nuser_pass_attribute userpassword" +\
- "\nuser_objectclass inetOrgPerson" +\
- "\nuser_tree_dn OU=Users,DC=openstack,DC=org" + "\nquery_scope one" +\
- "\ntls_req_cert allow" +\
- "\ngroup_member_attribute member"
+ calipso_mongo_access_text = \
+ "server {}\n" \
+ "user {}\n" \
+ "pwd {}\n" \
+ "auth_db calipso" \
+ .format(args.hostname, args.dbuser, args.dbpassword)
+ LDAP_PWD_ATTRIBUTE = "password password"
+ LDAP_USER_PWD_ATTRIBUTE = "password"
+ ldap_text = \
+ "user admin\n" + \
+ "{}\n" + \
+ "url ldap://{}:389\n" + \
+ "user_id_attribute CN\n" + \
+ "user_pass_attribute {}\n" + \
+ "user_objectclass inetOrgPerson\n" + \
+ "user_tree_dn OU=Users,DC=openstack,DC=org\n" + \
+ "query_scope one\n" + \
+ "tls_req_cert allow\n" + \
+ "group_member_attribute member"
+ ldap_text = ldap_text.format(LDAP_PWD_ATTRIBUTE, args.hostname,
+ LDAP_USER_PWD_ATTRIBUTE)
print("creating default", H_MONGO_CONFIG, "file...\n")
calipso_mongo_access_file = open(H_MONGO_CONFIG, "w+")
time.sleep(1)