X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=layers%2Fpingpong%2Freactive%2Fpingpong.py;h=b5a5db965a3c7c010a9cb087582e87d450a1ed56;hb=24a06f011a425ebf9c3f2051238c7c5e73541477;hp=e88bd4326a2c182385d4cee78c0d2bd95ba203ee;hpb=32e2fa55e105d5b87e9d57012b35f205e0036d59;p=osm%2Fdevops.git diff --git a/layers/pingpong/reactive/pingpong.py b/layers/pingpong/reactive/pingpong.py index e88bd432..b5a5db96 100644 --- a/layers/pingpong/reactive/pingpong.py +++ b/layers/pingpong/reactive/pingpong.py @@ -12,7 +12,11 @@ from charms.reactive import ( when, ) import charms.sshproxy -import json +from subprocess import ( + Popen, + CalledProcessError, + PIPE, +) cfg = config() @@ -48,14 +52,34 @@ def get_port(): @when('pingpong.configured') @when('actions.start') def start(): - err = '' try: - cmd = "service {} start".format(cfg['mode']) + # Bring up the eth1 interface. + # The selinux label on the file needs to be set correctly + cmd = "sudo timeout 5 /sbin/restorecon -v /etc/sysconfig/network-scripts/ifcfg-eth1" + result, err = charms.sshproxy._run(cmd) + except Exception as e: + err = "{}".format(e) + action_fail('command failed: {}, errors: {}'.format(err, e.output)) + remove_flag('actions.start') + return + + try: + cmd = "sudo timeout 30 /sbin/ifup eth1" + result, err = charms.sshproxy._run(cmd) + except Exception as e: + action_fail('command failed: {}, errors: {}'.format(e, e.output)) + remove_flag('actions.start') + return + + try: + cmd = "sudo timeout 30 /usr/bin/systemctl start {}". \ + format(cfg['mode']) result, err = charms.sshproxy._run(cmd) - except: - action_fail('command failed:' + err) + except Exception as e: + action_fail('command failed: {}, errors: {}'.format(e, e.output)) else: - action_set({'outout': result}) + action_set({'stdout': result, + 'errors': err}) finally: remove_flag('actions.start') @@ -63,15 +87,15 @@ def start(): @when('pingpong.configured') @when('actions.stop') def stop(): - err = '' try: # Enter the command to stop your service(s) - cmd = "service {} stop".format(cfg['mode']) + cmd = "sudo timeout 30 /usr/bin/systemctl stop {}".format(cfg['mode']) result, err = charms.sshproxy._run(cmd) - except: - action_fail('command failed:' + err) + except Exception as e: + action_fail('command failed: {}, errors: {}'.format(e, e.output)) else: - action_set({'outout': result}) + action_set({'stdout': result, + 'errors': err}) finally: remove_flag('actions.stop') @@ -79,15 +103,15 @@ def stop(): @when('pingpong.configured') @when('actions.restart') def restart(): - err = '' try: # Enter the command to restart your service(s) - cmd = "service {} restart".format(cfg['mode']) + cmd = "sudo timeout 30 /usr/bin/systemctl restart {}".format(cfg['mode']) result, err = charms.sshproxy._run(cmd) - except: - action_fail('command failed:' + err) + except Exception as e: + action_fail('command failed: {}, errors: {}'.format(e, e.output)) else: - action_set({'outout': result}) + action_set({'stdout': result, + 'errors': err}) finally: remove_flag('actions.restart') @@ -95,13 +119,13 @@ def restart(): @when('pingpong.configured') @when('actions.set-server') def set_server(): - err = '' try: # Get the target service info target_ip = action_get('server-ip') target_port = action_get('server-port') - data = json.dumps({'ip': target_ip, 'port': target_port}) + data = '{{"ip" : "{}", "port" : {} }}'. \ + format(target_ip, target_port) cmd = format_curl( 'POST', @@ -110,11 +134,11 @@ def set_server(): ) result, err = charms.sshproxy._run(cmd) - except Exception as err: - print("error: {0}".format(err)) - action_fail('command failed:' + err) + except Exception as e: + action_fail('command failed: {}, errors: {}'.format(e, e.output)) else: - action_set({'outout': result}) + action_set({'stdout': result, + 'errors': err}) finally: remove_flag('actions.set-server') @@ -122,17 +146,18 @@ def set_server(): @when('pingpong.configured') @when('actions.set-rate') def set_rate(): - err = '' try: if is_ping(): rate = action_get('rate') - cmd = format_curl('POST', '/rate', '{"rate": {}}'.format(rate)) + cmd = format_curl('POST', '/rate', '{{"rate" : {}}}'.format(rate)) result, err = charms.sshproxy._run(cmd) - except: - action_fail('command failed:' + err) + except Exception as e: + err = "{}".format(e) + action_fail('command failed: {}, errors: {}'.format(err, e.output)) else: - action_set({'outout': result}) + action_set({'stdout': result, + 'errors': err}) finally: remove_flag('actions.set-rate') @@ -140,16 +165,16 @@ def set_rate(): @when('pingpong.configured') @when('actions.get-rate') def get_rate(): - err = '' try: if is_ping(): cmd = format_curl('GET', '/rate') result, err = charms.sshproxy._run(cmd) - except: - action_fail('command failed:' + err) + except Exception as e: + action_fail('command failed: {}, errors: {}'.format(e, e.output)) else: - action_set({'outout': result}) + action_set({'stdout': result, + 'errors': err}) finally: remove_flag('actions.get-rate') @@ -157,15 +182,15 @@ def get_rate(): @when('pingpong.configured') @when('actions.get-state') def get_state(): - err = '' try: cmd = format_curl('GET', '/state') result, err = charms.sshproxy._run(cmd) - except: - action_fail('command failed:' + err) + except Exception as e: + action_fail('command failed: {}, errors: {}'.format(e, e.output)) else: - action_set({'outout': result}) + action_set({'stdout': result, + 'errors': err}) finally: remove_flag('actions.get-state') @@ -173,49 +198,49 @@ def get_state(): @when('pingpong.configured') @when('actions.get-stats') def get_stats(): - err = '' try: cmd = format_curl('GET', '/stats') result, err = charms.sshproxy._run(cmd) - except: - action_fail('command failed:' + err) + except Exception as e: + action_fail('command failed: {}, errors: {}'.format(e, e.output)) else: - action_set({'outout': result}) + action_set({'stdout': result, + 'errors': err}) finally: remove_flag('actions.get-stats') @when('pingpong.configured') -@when('actions.start-ping') -def start_ping(): - err = '' +@when('actions.start-traffic') +def start_traffic(): try: - cmd = format_curl('POST', '/adminstatus/state', '{"enable":true}') + cmd = format_curl('POST', '/adminstatus/state', '{"enable" : true}') result, err = charms.sshproxy._run(cmd) - except: - action_fail('command failed:' + err) + except Exception as e: + action_fail('command failed: {}, errors: {}'.format(e, e.output)) else: - action_set({'outout': result}) + action_set({'stdout': result, + 'errors': err}) finally: - remove_flag('actions.start-ping') + remove_flag('actions.start-traffic') @when('pingpong.configured') -@when('actions.stop-ping') -def stop_ping(): - err = '' +@when('actions.stop-traffic') +def stop_traffic(): try: - cmd = format_curl('POST', '/adminstatus/state', '{"enable":false}') + cmd = format_curl('POST', '/adminstatus/state', '{"enable" : false}') result, err = charms.sshproxy._run(cmd) - except: - action_fail('command failed:' + err) + except Exception as e: + action_fail('command failed: {}, errors: {}'.format(e, e.output)) else: - action_set({'outout': result}) + action_set({'stdout': result, + 'errors': err}) finally: - remove_flag('actions.stop-ping') + remove_flag('actions.stop-traffic') def format_curl(method, path, data=None): @@ -227,19 +252,19 @@ def format_curl(method, path, data=None): return None # Get our service info - host = cfg['ssh-hostname'] + host = '127.0.0.1' port = get_port() mode = cfg['mode'] cmd = ['curl', # '-D', '/dev/stdout', - '-H', '"Accept: application/vnd.yang.data+xml"', - '-H', '"Content-Type: application/vnd.yang.data+json"', + '-H', 'Accept: application/vnd.yang.data+xml', + '-H', 'Content-Type: application/vnd.yang.data+json', '-X', method] if method == "POST" and data: cmd.append('-d') - cmd.append("'{}'".format(data)) + cmd.append('{}'.format(data)) cmd.append( 'http://{}:{}/api/v1/{}{}'.format(host, port, mode, path)