Skip to content

Commit

Permalink
Merge pull request #166 from seomoz/support_envoy_and_haproxy_configs
Browse files Browse the repository at this point in the history
Support envoy and haproxy configs
  • Loading branch information
Grant1219 authored Feb 27, 2019
2 parents 9d08fb2 + e0c167c commit 88b4cb3
Show file tree
Hide file tree
Showing 7 changed files with 80 additions and 89 deletions.
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.4.25
0.5.0
66 changes: 0 additions & 66 deletions cli/haproxyparser.py

This file was deleted.

6 changes: 3 additions & 3 deletions cli/marathon.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from cli.utils import Utils
from cli.settings import Settings
from cli.marathonvalidator import MarathonValidator
from cli.haproxyparser import HAProxyParser
from cli.proxyparser import ProxyParser
from cli.appconfig import AppConfig
from distutils.version import LooseVersion
requests.packages.urllib3.disable_warnings()
Expand All @@ -28,7 +28,7 @@ def __init__(self):
self.user = None
self.passw = None
self.marathonvalidator = MarathonValidator()
self.haproxyparser = HAProxyParser()
self.proxyparser = ProxyParser()

def getName(self):
return "Marathon"
Expand Down Expand Up @@ -199,7 +199,7 @@ def runDeploymentChecks(self, file_path, environment):
app_tcp_port_list = group_details[app_id][1]
app_affinity = group_details[app_id][2]
valid = self.marathonvalidator.validate(
self.haproxyparser, environment, app_http_prefix, app_tcp_port_list, app_affinity, app_id, message_list) and valid
self.proxyparser, environment, app_http_prefix, app_tcp_port_list, app_affinity, app_id, message_list) and valid

if len(message_list) != 0:
for message in message_list:
Expand Down
18 changes: 9 additions & 9 deletions cli/marathonvalidator.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,22 @@
from __future__ import print_function
import os
import sys
from cli.haproxyparser import HAProxyParser
from cli.proxyparser import ProxyParser


class MarathonValidator:

def validate(self, haproxy_parser_obj, environment, path_begin_value, tcp_port_list, affinity, acl_name, message_list):
haproxy_parser_obj.parseConfig(environment)
def validate(self, proxy_parser_obj, environment, path_begin_value, tcp_port_list, affinity, acl_name, message_list):
proxy_parser_obj.parseConfig(environment)
path_begin_check = self.check_path_begin_value(
haproxy_parser_obj, path_begin_value, affinity, acl_name, message_list)
proxy_parser_obj, path_begin_value, affinity, acl_name, message_list)
tcp_port_check = self.check_tcp_port(
haproxy_parser_obj, tcp_port_list, acl_name, message_list)
proxy_parser_obj, tcp_port_list, acl_name, message_list)

return (path_begin_check and tcp_port_check)

def check_path_begin_value(self, haproxy_parser_obj, path_begin_value, affinity, acl_name, message_list):
path_begin_values = haproxy_parser_obj.get_path_begin_values()
def check_path_begin_value(self, proxy_parser_obj, path_begin_value, affinity, acl_name, message_list):
path_begin_values = proxy_parser_obj.get_path_begin_values()
if path_begin_value in path_begin_values.keys():
if path_begin_values[path_begin_value] != acl_name:
if affinity is False:
Expand All @@ -34,8 +34,8 @@ def check_path_begin_value(self, haproxy_parser_obj, path_begin_value, affinity,

return True

def check_tcp_port(self, haproxy_parser_obj, tcp_port_list, acl_name, message_list):
backend_services_tcp_ports = haproxy_parser_obj.get_backend_tcp_ports()
def check_tcp_port(self, proxy_parser_obj, tcp_port_list, acl_name, message_list):
backend_services_tcp_ports = proxy_parser_obj.get_backend_tcp_ports()
for tcp_port in tcp_port_list:
if tcp_port in backend_services_tcp_ports.keys():
if backend_services_tcp_ports[tcp_port] != acl_name:
Expand Down
57 changes: 57 additions & 0 deletions cli/proxyparser.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#!/usr/bin/env python

from __future__ import print_function
import os
import requests
import subprocess
import sys
import re
from cli.appconfig import AppConfig
from cli.settings import Settings
requests.packages.urllib3.disable_warnings()


class ProxyParser:

path_begin_values = {}
backend_services_tcp_ports = {}

def get_proxy_config(self, environment):
proxy_config = ""
settingObj = Settings()
appObj = AppConfig()
config_dir = settingObj.getConfigDir()
roger_env = appObj.getRogerEnv(config_dir)
host = roger_env['environments'][environment]['host']
proxy_config_path = roger_env['environments'][
environment]['proxy_config_path']
url = "{}{}".format(host, proxy_config_path)
proxy_config = requests.get(url).json()
return proxy_config

def parseConfig(self, environment):
path_begin_values = {}
backend_tcp_ports = {}
config = self.get_proxy_config(environment)

for app in config['Apps']:
if 'HTTP_PREFIX' in app['Env']:
path_begin_values[app['Env']['HTTP_PREFIX']] = app['Id']
if app['TcpPorts'] is not None:
for port in app['TcpPorts'].keys():
backend_tcp_ports[port] = app['Id']

self.set_path_begin_values(path_begin_values)
self.set_backend_tcp_ports(backend_tcp_ports)

def set_path_begin_values(self, path_begin_values_aclnames):
self.path_begin_values = path_begin_values_aclnames

def get_path_begin_values(self):
return self.path_begin_values

def set_backend_tcp_ports(self, backend_services_tcp_ports):
self.backend_services_tcp_ports = backend_services_tcp_ports

def get_backend_tcp_ports(self):
return self.backend_services_tcp_ports
18 changes: 9 additions & 9 deletions cli/roger_ps.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from cli.settings import Settings
from cli.appconfig import AppConfig
from cli.marathon import Marathon
from cli.haproxyparser import HAProxyParser
from cli.proxyparser import ProxyParser
requests.packages.urllib3.disable_warnings()


Expand All @@ -32,7 +32,7 @@ def parse_args(self):
'-v', '--verbose', help="show extended information for each task", action="store_true")
return parser

def get_app_details(self, framework, haproxyparser, environment, args, roger_env):
def get_app_details(self, framework, proxyparser, environment, args, roger_env):
app_details = {}
instances = {}
instance_details = self.get_instance_details(
Expand All @@ -49,9 +49,9 @@ def get_app_details(self, framework, haproxyparser, environment, args, roger_env
tasks_list.append(task_id)
instances[app_id] = tasks_list

haproxyparser.parseConfig(environment)
http_prefixes = haproxyparser.get_path_begin_values()
tcp_ports = haproxyparser.get_backend_tcp_ports()
proxyparser.parseConfig(environment)
http_prefixes = proxyparser.get_path_begin_values()
tcp_ports = proxyparser.get_backend_tcp_ports()

app_ids = {}
for app_id in instances.keys():
Expand Down Expand Up @@ -129,7 +129,7 @@ def get_instance_details(self, framework, roger_env, environment):
instance_details = framework.getInstanceDetails(roger_env, environment)
return instance_details

def main(self, settings, appconfig, framework, haproxyparser, args):
def main(self, settings, appconfig, framework, proxyparser, args):
config_dir = settings.getConfigDir()
roger_env = appconfig.getRogerEnv(config_dir)
environment = roger_env.get('default_environment', '')
Expand All @@ -150,16 +150,16 @@ def main(self, settings, appconfig, framework, haproxyparser, args):
raise ValueError(colored("Environment not found in roger-mesos-tools.config file.", "red"))

app_details = self.get_app_details(
framework, haproxyparser, environment, args, roger_env)
framework, proxyparser, environment, args, roger_env)
self.print_app_details(app_details, args)


if __name__ == '__main__':
settings = Settings()
appconfig = AppConfig()
framework = Marathon()
haproxyparser = HAProxyParser()
proxyparser = ProxyParser()
roger_ps = RogerPS()
roger_ps.parser = roger_ps.parse_args()
roger_ps.args = roger_ps.parser.parse_args()
roger_ps.main(settings, appconfig, framework, haproxyparser, roger_ps.args)
roger_ps.main(settings, appconfig, framework, proxyparser, roger_ps.args)
2 changes: 1 addition & 1 deletion examples/config/roger-mesos-tools.config
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ default_username: some_user_name
environments:
local:
chronos_endpoint: http://localmesos01:4400
haproxy_config_path: :8000/config
proxy_config_path: :8000/api/state
host: http://localmesos01
marathon_endpoint: http://localmesos01:8080
registry: registry.example.com:5000

0 comments on commit 88b4cb3

Please sign in to comment.