StarlingX open source release updates
Signed-off-by: Dean Troyer <dtroyer@gmail.com>
This commit is contained in:
5
service-mgmt-tools/sm-tools/sm_tools/__init__.py
Normal file
5
service-mgmt-tools/sm-tools/sm_tools/__init__.py
Normal file
@@ -0,0 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2014 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
88
service-mgmt-tools/sm-tools/sm_tools/sm_action.py
Normal file
88
service-mgmt-tools/sm-tools/sm_tools/sm_action.py
Normal file
@@ -0,0 +1,88 @@
|
||||
#
|
||||
# Copyright (c) 2016 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import sqlite3
|
||||
|
||||
from sm_api_msg_utils import restart_service as restart_service
|
||||
from sm_api_msg_utils import restart_service_safe as restart_service_safe
|
||||
from sm_api_msg_utils import database_running_name as database_name
|
||||
|
||||
|
||||
def main():
|
||||
filename = os.path.basename(sys.argv[0])
|
||||
if "sm-manage" == filename:
|
||||
action = "manage"
|
||||
elif "sm-unmanage" == filename:
|
||||
action = "unmanage"
|
||||
elif "sm-restart-safe" == filename:
|
||||
action = "restart-safe"
|
||||
else:
|
||||
action = "restart"
|
||||
|
||||
try:
|
||||
parser = argparse.ArgumentParser(description='SM Action ')
|
||||
subparsers = parser.add_subparsers(help='types')
|
||||
|
||||
# Service
|
||||
service_parser = subparsers.add_parser('service', help='service action')
|
||||
service_parser.set_defaults(which='service')
|
||||
service_parser.add_argument('service', help='service name')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.which == 'service':
|
||||
database = sqlite3.connect(database_name)
|
||||
|
||||
cursor = database.cursor()
|
||||
|
||||
cursor.execute("SELECT * FROM SERVICES WHERE NAME = '%s';"
|
||||
% args.service)
|
||||
row = cursor.fetchone()
|
||||
if row is None:
|
||||
print "Given service (%s) does not exist." % args.service
|
||||
sys.exit()
|
||||
|
||||
database.close()
|
||||
|
||||
SM_VAR_RUN_SERVICES_DIR = '/var/run/sm/services'
|
||||
unmanage_filepath = SM_VAR_RUN_SERVICES_DIR + '/'
|
||||
unmanage_filename = "%s.unmanaged" % args.service
|
||||
|
||||
if 'manage' == action:
|
||||
if os.path.exists(SM_VAR_RUN_SERVICES_DIR):
|
||||
if os.path.isfile(unmanage_filepath + unmanage_filename):
|
||||
os.remove(unmanage_filepath + unmanage_filename)
|
||||
|
||||
print "Service (%s) is now being managed." % args.service
|
||||
|
||||
elif 'unmanage' == action:
|
||||
if not os.path.exists(SM_VAR_RUN_SERVICES_DIR):
|
||||
os.makedirs(SM_VAR_RUN_SERVICES_DIR)
|
||||
|
||||
if not os.path.isfile(unmanage_filepath + unmanage_filename):
|
||||
open(unmanage_filepath + unmanage_filename, 'w').close()
|
||||
|
||||
print "Service (%s) is no longer being managed." % args.service
|
||||
|
||||
elif 'restart-safe' == action:
|
||||
restart_service_safe(args.service)
|
||||
print "Service (%s) is restarting." % args.service
|
||||
|
||||
else:
|
||||
restart_service(args.service)
|
||||
|
||||
print "Service (%s) is restarting." % args.service
|
||||
|
||||
sys.exit(0)
|
||||
|
||||
except KeyboardInterrupt:
|
||||
sys.exit()
|
||||
|
||||
except Exception as e:
|
||||
print e
|
||||
sys.exit(-1)
|
||||
68
service-mgmt-tools/sm-tools/sm_tools/sm_api_msg_utils.py
Normal file
68
service-mgmt-tools/sm-tools/sm_tools/sm_api_msg_utils.py
Normal file
@@ -0,0 +1,68 @@
|
||||
#
|
||||
# Copyright (c) 2016 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
import time
|
||||
import socket
|
||||
|
||||
database_name = "/var/lib/sm/sm.db"
|
||||
database_running_name = "/var/run/sm/sm.db"
|
||||
|
||||
SM_API_SERVER_ADDR = "/tmp/.sm_server_api"
|
||||
|
||||
SM_API_MSG_VERSION = "1"
|
||||
SM_API_MSG_REVISION = "1"
|
||||
|
||||
SM_API_MSG_TYPE_RESTART_SERVICE = "RESTART_SERVICE"
|
||||
SM_API_MSG_SKIP_DEP_CHECK = "skip-dep"
|
||||
|
||||
SM_API_MSG_TYPE_RELOAD_DATA = "RELOAD_DATA"
|
||||
|
||||
SM_API_MSG_TYPE_SDI_SET_STATE = "SERVICE_DOMAIN_INTERFACE_SET_STATE"
|
||||
|
||||
# offsets
|
||||
SM_API_MSG_VERSION_FIELD = 0
|
||||
SM_API_MSG_REVISION_FIELD = 1
|
||||
SM_API_MSG_SEQNO_FIELD = 2
|
||||
SM_API_MSG_TYPE_FIELD = 3
|
||||
SM_API_MSG_ORIGIN_FIELD = 4
|
||||
SM_API_MSG_SERVICE_NAME_FIELD = 5
|
||||
SM_API_MSG_PARAM = 6
|
||||
|
||||
|
||||
def _send_msg_to_sm(sm_api_msg):
|
||||
s = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
|
||||
try:
|
||||
s.setblocking(True)
|
||||
s.sendto(sm_api_msg, SM_API_SERVER_ADDR)
|
||||
time.sleep(1)
|
||||
|
||||
except socket.error, e:
|
||||
print "sm-api socket error: %s on %s" % (e, sm_api_msg)
|
||||
|
||||
|
||||
def restart_service(service_name):
|
||||
"""
|
||||
Message SM to restart a service
|
||||
"""
|
||||
sm_api_msg = ("%s,%s,%i,%s,%s,%s"
|
||||
% (SM_API_MSG_VERSION, SM_API_MSG_REVISION, 1,
|
||||
SM_API_MSG_TYPE_RESTART_SERVICE, "sm-action",
|
||||
service_name))
|
||||
|
||||
_send_msg_to_sm(sm_api_msg)
|
||||
|
||||
|
||||
def restart_service_safe(service_name):
|
||||
"""
|
||||
Message SM to restart a service w/o checking dependency
|
||||
"""
|
||||
sm_api_msg = ("%s,%s,%i,%s,%s,%s,%s"
|
||||
% (SM_API_MSG_VERSION, SM_API_MSG_REVISION, 1,
|
||||
SM_API_MSG_TYPE_RESTART_SERVICE, "sm-action",
|
||||
service_name, SM_API_MSG_SKIP_DEP_CHECK))
|
||||
|
||||
_send_msg_to_sm(sm_api_msg)
|
||||
|
||||
223
service-mgmt-tools/sm-tools/sm_tools/sm_configure.py
Normal file
223
service-mgmt-tools/sm-tools/sm_tools/sm_configure.py
Normal file
@@ -0,0 +1,223 @@
|
||||
#
|
||||
# Copyright (c) 2014-2015 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
import sys
|
||||
import argparse
|
||||
import sqlite3
|
||||
from netaddr import IPNetwork
|
||||
from sm_api_msg_utils import database_name as database_name
|
||||
|
||||
cpe_duplex = "duplex"
|
||||
cpe_duplex_direct = "duplex-direct"
|
||||
mgmt_if = 'management-interface'
|
||||
infra_if = 'infrastructure-interface'
|
||||
tor_connect = 'tor'
|
||||
dc_connect = 'dc'
|
||||
database_name = "/var/lib/sm/sm.db"
|
||||
|
||||
|
||||
def main():
|
||||
try:
|
||||
parser = argparse.ArgumentParser(description='SM Configuration')
|
||||
subparsers = parser.add_subparsers(help='types')
|
||||
|
||||
if_parser = subparsers.add_parser('interface',
|
||||
help='Interface Configuration')
|
||||
if_parser.set_defaults(which='interface')
|
||||
if_parser.add_argument('service_domain', help='service domain name')
|
||||
if_parser.add_argument('service_domain_interface',
|
||||
help='service domain interface name')
|
||||
if_parser.add_argument('network_multicast', help='network multicast')
|
||||
if_parser.add_argument('network_address', help='network address')
|
||||
if_parser.add_argument('network_port', help='network port')
|
||||
if_parser.add_argument('network_heartbeat_port',
|
||||
help='network heartbeat port')
|
||||
if_parser.add_argument('network_peer_address',
|
||||
help='network peer address')
|
||||
if_parser.add_argument('network_peer_port', help='network peer port')
|
||||
if_parser.add_argument('network_peer_heartbeat_port',
|
||||
help='network peer heartbeat port')
|
||||
|
||||
si_parser = subparsers.add_parser('service_instance',
|
||||
help='Service Instance '
|
||||
'Configuration')
|
||||
si_parser.set_defaults(which='service_instance')
|
||||
si_parser.add_argument('service', help='service name')
|
||||
si_parser.add_argument('instance', help='instance name')
|
||||
si_parser.add_argument('parameters', help='instance parameters')
|
||||
|
||||
sys_parser = subparsers.add_parser('system',
|
||||
help='system Configuration')
|
||||
sys_parser.set_defaults(which='system')
|
||||
sys_parser.add_argument(
|
||||
"--cpe_mode", choices=[cpe_duplex, cpe_duplex_direct],
|
||||
required=True,
|
||||
help='cpe mode, available selections: %s, %s' % (
|
||||
cpe_duplex, cpe_duplex_direct)
|
||||
)
|
||||
|
||||
sg_parser = subparsers.add_parser('service_group',
|
||||
help='Service Group '
|
||||
'Configuration')
|
||||
sg_parser.set_defaults(which='service_group')
|
||||
sg_parser.add_argument('provisioned', help='provisioned')
|
||||
sg_parser.add_argument('service_domain', help='service domain name')
|
||||
sg_parser.add_argument('service_group', help='service group name')
|
||||
sg_parser.add_argument('redundancy', help='redundancy mode')
|
||||
sg_parser.add_argument('active', help='number of active unit')
|
||||
sg_parser.add_argument('standby', help='number of standby unit')
|
||||
sg_parser.add_argument('aggregate', help='service group aggregate')
|
||||
sg_parser.add_argument('active_only', help='active only if active')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.which == "system":
|
||||
if cpe_duplex == args.cpe_mode:
|
||||
configure_cpe_duplex()
|
||||
elif cpe_duplex_direct == args.cpe_mode:
|
||||
configure_cpe_dc()
|
||||
else:
|
||||
database = sqlite3.connect(database_name)
|
||||
_dispatch_config_action(args, database)
|
||||
database.close()
|
||||
|
||||
sys.exit(0)
|
||||
|
||||
except KeyboardInterrupt:
|
||||
sys.exit()
|
||||
|
||||
except Exception as e:
|
||||
print e
|
||||
sys.exit(-1)
|
||||
|
||||
|
||||
def _dispatch_config_action(args, database):
|
||||
if args.which == 'interface':
|
||||
|
||||
cursor = database.cursor()
|
||||
|
||||
cursor.execute("SELECT INTERFACE_NAME FROM "
|
||||
"SERVICE_DOMAIN_INTERFACES WHERE "
|
||||
"SERVICE_DOMAIN = '%s' and "
|
||||
"SERVICE_DOMAIN_INTERFACE = '%s';"
|
||||
% (args.service_domain,
|
||||
args.service_domain_interface))
|
||||
|
||||
data = cursor.fetchone()
|
||||
|
||||
if IPNetwork(args.network_address).version == 6:
|
||||
network_type = "ipv6-udp"
|
||||
else:
|
||||
network_type = "ipv4-udp"
|
||||
|
||||
if data is not None:
|
||||
cursor.execute("UPDATE SERVICE_DOMAIN_INTERFACES SET "
|
||||
"NETWORK_TYPE = '%s', "
|
||||
"NETWORK_MULTICAST = '%s', "
|
||||
"NETWORK_ADDRESS = '%s', "
|
||||
"NETWORK_PORT = '%s', "
|
||||
"NETWORK_HEARTBEAT_PORT = '%s', "
|
||||
"NETWORK_PEER_ADDRESS = '%s', "
|
||||
"NETWORK_PEER_PORT = '%s', "
|
||||
"NETWORK_PEER_HEARTBEAT_PORT = '%s' "
|
||||
"WHERE SERVICE_DOMAIN = '%s' and "
|
||||
"SERVICE_DOMAIN_INTERFACE = '%s';"
|
||||
% (network_type,
|
||||
args.network_multicast,
|
||||
args.network_address,
|
||||
args.network_port,
|
||||
args.network_heartbeat_port,
|
||||
args.network_peer_address,
|
||||
args.network_peer_port,
|
||||
args.network_peer_heartbeat_port,
|
||||
args.service_domain,
|
||||
args.service_domain_interface))
|
||||
database.commit()
|
||||
|
||||
if args.which == 'service_instance':
|
||||
|
||||
cursor = database.cursor()
|
||||
|
||||
cursor.execute("SELECT SERVICE_NAME FROM SERVICE_INSTANCES "
|
||||
"WHERE SERVICE_NAME = '%s';" % args.service)
|
||||
|
||||
data = cursor.fetchone()
|
||||
|
||||
if data is None:
|
||||
cursor.execute("INSERT INTO SERVICE_INSTANCES "
|
||||
"VALUES( NULL, '%s', '%s', '%s' );"
|
||||
% (args.service, args.instance,
|
||||
args.parameters))
|
||||
else:
|
||||
cursor.execute("UPDATE SERVICE_INSTANCES SET "
|
||||
"INSTANCE_NAME = '%s', "
|
||||
"INSTANCE_PARAMETERS = '%s' "
|
||||
"WHERE SERVICE_NAME = '%s';"
|
||||
% (args.instance, args.parameters,
|
||||
args.service))
|
||||
|
||||
database.commit()
|
||||
|
||||
if args.which == 'service_group':
|
||||
|
||||
cursor = database.cursor()
|
||||
|
||||
cursor.execute("SELECT SERVICE_GROUP_NAME FROM SERVICE_DOMAIN_MEMBERS "
|
||||
"WHERE NAME = '%s' and "
|
||||
"SERVICE_GROUP_NAME = '%s';"
|
||||
% (args.service_domain,
|
||||
args.service_group))
|
||||
|
||||
data = cursor.fetchone()
|
||||
|
||||
if data is None:
|
||||
cursor.execute("INSERT INTO SERVICE_DOMAIN_MEMBERS "
|
||||
"VALUES( NULL, '%s', '%s', '%s', '%s',"
|
||||
"'%s', '%s', '%s', '%s');"
|
||||
% (args.provisioned,
|
||||
args.service_domain,
|
||||
args.service_group,
|
||||
args.redundancy,
|
||||
args.active,
|
||||
args.standby,
|
||||
args.aggregate,
|
||||
args.active_only))
|
||||
else:
|
||||
cursor.execute("UPDATE SERVICE_DOMAIN_MEMBERS SET "
|
||||
"REDUNDANCY_MODEL = '%s', "
|
||||
"N_ACTIVE = '%s', "
|
||||
"M_STANDBY = '%s', "
|
||||
"SERVICE_GROUP_AGGREGATE = '%s' "
|
||||
"WHERE SERVICE_GROUP_NAME = '%s';"
|
||||
% (args.redundancy,
|
||||
args.active,
|
||||
args.standby,
|
||||
args.aggregate,
|
||||
args.service_group
|
||||
))
|
||||
|
||||
database.commit()
|
||||
|
||||
|
||||
def configure_cpe_duplex():
|
||||
configure_if_connect_type(mgmt_if, tor_connect)
|
||||
configure_if_connect_type(infra_if, tor_connect)
|
||||
|
||||
|
||||
def configure_cpe_dc():
|
||||
configure_if_connect_type(mgmt_if, dc_connect)
|
||||
configure_if_connect_type(infra_if, dc_connect)
|
||||
|
||||
|
||||
def configure_if_connect_type(if_name, connect_type):
|
||||
database = sqlite3.connect(database_name)
|
||||
|
||||
cursor = database.cursor()
|
||||
sql = "UPDATE SERVICE_DOMAIN_INTERFACES SET INTERFACE_CONNECT_TYPE='%s' " \
|
||||
"WHERE SERVICE_DOMAIN_INTERFACE = '%s'" % (connect_type, if_name)
|
||||
|
||||
cursor.execute(sql)
|
||||
database.commit()
|
||||
database.close()
|
||||
193
service-mgmt-tools/sm-tools/sm_tools/sm_dump.py
Executable file
193
service-mgmt-tools/sm-tools/sm_tools/sm_dump.py
Executable file
@@ -0,0 +1,193 @@
|
||||
#
|
||||
# Copyright (c) 2014-2015 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import sqlite3
|
||||
import psutil
|
||||
import ntpath
|
||||
import os.path
|
||||
|
||||
database_name = "/var/run/sm/sm.db"
|
||||
|
||||
|
||||
def get_pid(pid_file):
|
||||
if os.path.isfile(pid_file):
|
||||
with open(pid_file, "r") as f:
|
||||
pid = f.readline().strip('\n ')
|
||||
try:
|
||||
pid = int(pid)
|
||||
except:
|
||||
pid = -1
|
||||
return pid
|
||||
return -1
|
||||
|
||||
|
||||
def get_process_name(pid):
|
||||
if pid < 0:
|
||||
return ''
|
||||
|
||||
try:
|
||||
p = psutil.Process(pid)
|
||||
name = p.name()
|
||||
if name == 'python':
|
||||
cmd_line = p.cmdline()
|
||||
if len(cmd_line) > 1:
|
||||
name = ntpath.basename(cmd_line[1])
|
||||
|
||||
return name
|
||||
except:
|
||||
# most likely it is a leftover pid
|
||||
return ''
|
||||
|
||||
|
||||
def main():
|
||||
try:
|
||||
parser = argparse.ArgumentParser(description='SM Dump')
|
||||
parser.add_argument("--verbose", help="increase dump output",
|
||||
action="store_true")
|
||||
parser.add_argument("--pid", help="print pid",
|
||||
action="store_true")
|
||||
parser.add_argument("--pn", help="print process name",
|
||||
action="store_true")
|
||||
parser.add_argument("--pid_file", help="print pid file name",
|
||||
action="store_true")
|
||||
parser.add_argument("--impact", help="severity of service failure",
|
||||
action="store_true")
|
||||
args = parser.parse_args()
|
||||
|
||||
if not os.path.exists(database_name):
|
||||
print "%s not available." % database_name
|
||||
sys.exit(0)
|
||||
|
||||
database = sqlite3.connect(database_name)
|
||||
|
||||
cursor = database.cursor()
|
||||
|
||||
if args.verbose:
|
||||
# Service-Groups Dump
|
||||
print "\n-Service_Groups%s" % ('-' * 92)
|
||||
|
||||
cursor.execute("SELECT name, desired_state, state, status, "
|
||||
"condition from service_groups WHERE "
|
||||
"PROVISIONED = 'yes';")
|
||||
|
||||
data = cursor.fetchall()
|
||||
|
||||
if data is not None:
|
||||
for row in data:
|
||||
print "%-32s %-20s %-20s %-10s %-20s" % (row[0], row[1],
|
||||
row[2], row[3],
|
||||
row[4])
|
||||
|
||||
print "%s" % ('-' * 107)
|
||||
|
||||
# Services Dump
|
||||
len = 98
|
||||
if args.impact:
|
||||
len += 10
|
||||
if args.pid:
|
||||
len += 9
|
||||
if args.pn:
|
||||
len += 22
|
||||
if args.pid_file:
|
||||
len += 28
|
||||
|
||||
print "\n-Services%s" % ('-' * len)
|
||||
|
||||
cursor.execute("SELECT s.name, s.desired_state, s.state, "
|
||||
"s.status, s.condition, s.pid_file, "
|
||||
"g.SERVICE_FAILURE_IMPACT "
|
||||
"from services s, service_group_members g "
|
||||
"WHERE s.PROVISIONED = 'yes' and "
|
||||
"s.name = g.service_name;")
|
||||
|
||||
data = cursor.fetchall()
|
||||
|
||||
if data is not None:
|
||||
for row in data:
|
||||
pid_file = row[5]
|
||||
pid = get_pid(pid_file)
|
||||
pn = get_process_name(pid)
|
||||
msg = "%-32s %-20s %-20s " % (row[0], row[1],row[2])
|
||||
if args.impact:
|
||||
msg += "%-10s" % (row[6])
|
||||
if args.pid:
|
||||
msg += "%-7s" % (pid if pid > 0 else '')
|
||||
if args.pn:
|
||||
msg += "%-20s" % (pn)
|
||||
if args.pid_file:
|
||||
msg += "%-25s" % (pid_file)
|
||||
msg += "%-10s %20s" % (row[3], row[4])
|
||||
print msg
|
||||
|
||||
print "%s" % ('-' * len)
|
||||
|
||||
else:
|
||||
# Service-Groups Dump
|
||||
print "\n-Service_Groups%s" % ('-' * 72)
|
||||
|
||||
cursor.execute("SELECT name, desired_state, state, status "
|
||||
"from service_groups WHERE PROVISIONED = 'yes';")
|
||||
|
||||
data = cursor.fetchall()
|
||||
|
||||
if data is not None:
|
||||
for row in data:
|
||||
print "%-32s %-20s %-20s %-10s" % (row[0], row[1], row[2],
|
||||
row[3])
|
||||
|
||||
print "%s" % ('-' * 87)
|
||||
|
||||
len = 78
|
||||
if args.impact:
|
||||
len += 10
|
||||
if args.pid:
|
||||
len += 9
|
||||
if args.pn:
|
||||
len += 22
|
||||
if args.pid_file:
|
||||
len += 28
|
||||
|
||||
# Services Dump
|
||||
print "\n-Services%s" % ('-' * len)
|
||||
|
||||
cursor.execute("SELECT s.name, s.desired_state, s.state, s.status, "
|
||||
"s.pid_file, g.SERVICE_FAILURE_IMPACT "
|
||||
"from services s, service_group_members g "
|
||||
"where s.provisioned = 'yes' and "
|
||||
"s.name = g.service_name;")
|
||||
|
||||
data = cursor.fetchall()
|
||||
|
||||
if data is not None:
|
||||
for row in data:
|
||||
pid_file = row[4]
|
||||
pid = get_pid(pid_file)
|
||||
pn = get_process_name(pid)
|
||||
msg = "%-32s %-20s %-20s " % (row[0], row[1],row[2])
|
||||
if args.impact:
|
||||
msg += "%-10s" % (row[5])
|
||||
if args.pid:
|
||||
msg += "%-7s" % (pid if pid > 0 else '')
|
||||
if args.pn:
|
||||
msg += "%-20s" % (pn)
|
||||
if args.pid_file:
|
||||
msg += "%-25s" % (pid_file)
|
||||
msg += "%-10s " % (row[3])
|
||||
print msg
|
||||
|
||||
print "%s" % ('-' * len)
|
||||
|
||||
database.close()
|
||||
|
||||
except KeyboardInterrupt:
|
||||
sys.exit()
|
||||
|
||||
except Exception as e:
|
||||
print e
|
||||
sys.exit(-1)
|
||||
|
||||
59
service-mgmt-tools/sm-tools/sm_tools/sm_patch.py
Normal file
59
service-mgmt-tools/sm-tools/sm_tools/sm_patch.py
Normal file
@@ -0,0 +1,59 @@
|
||||
#
|
||||
# Copyright (c) 2014 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import sqlite3
|
||||
|
||||
database_patches_dir = "/var/lib/sm/patches/"
|
||||
database_master_name = "/var/lib/sm/sm.db"
|
||||
database_running_name = "/var/run/sm/sm.db"
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
try:
|
||||
parser = argparse.ArgumentParser(description='SM Patch')
|
||||
subparsers = parser.add_subparsers(help='types')
|
||||
db_parser = subparsers.add_parser('database', help='Database')
|
||||
db_parser.set_defaults(which='database')
|
||||
db_parser.add_argument('which_database', help='master or running')
|
||||
db_parser.add_argument('patch_name', help='patch name')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.which == 'database':
|
||||
if args.which_database == 'master':
|
||||
if not os.path.exists(database_master_name):
|
||||
print "%s not available." % database_master_name
|
||||
sys.exit()
|
||||
|
||||
database = sqlite3.connect(database_master_name)
|
||||
else:
|
||||
if not os.path.exists(database_running_name):
|
||||
print "%s not available." % database_running_name
|
||||
sys.exit()
|
||||
|
||||
database = sqlite3.connect(database_running_name)
|
||||
|
||||
cursor = database.cursor()
|
||||
|
||||
with open(database_patches_dir + args.patch_name) as patch_file:
|
||||
for line in patch_file:
|
||||
if not line.startswith('#'):
|
||||
cursor.execute(line)
|
||||
|
||||
database.commit()
|
||||
database.close()
|
||||
|
||||
sys.exit(0)
|
||||
|
||||
except KeyboardInterrupt:
|
||||
sys.exit()
|
||||
|
||||
except Exception as e:
|
||||
print e
|
||||
sys.exit(-1)
|
||||
160
service-mgmt-tools/sm-tools/sm_tools/sm_provision.py
Executable file
160
service-mgmt-tools/sm-tools/sm_tools/sm_provision.py
Executable file
@@ -0,0 +1,160 @@
|
||||
#
|
||||
# Copyright (c) 2015 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import sqlite3
|
||||
|
||||
database_name = "/var/lib/sm/sm.db"
|
||||
|
||||
|
||||
def main():
|
||||
file_name = os.path.basename(sys.argv[0])
|
||||
if "sm-provision" == file_name:
|
||||
provision_str = "yes"
|
||||
else:
|
||||
provision_str = "no"
|
||||
|
||||
try:
|
||||
parser = argparse.ArgumentParser(description='SM Provision ')
|
||||
subparsers = parser.add_subparsers(help='types')
|
||||
|
||||
# Domain
|
||||
sd = subparsers.add_parser('service-domain',
|
||||
help='Provision Service Domain')
|
||||
sd.set_defaults(which='service_domain')
|
||||
sd.add_argument('service_domain', help='service domain name')
|
||||
|
||||
# Domain Member
|
||||
sd_member_parser = subparsers.add_parser('service-domain-member',
|
||||
help='Provision Service '
|
||||
'Domain Member')
|
||||
sd_member_parser.set_defaults(which='service_domain_member')
|
||||
sd_member_parser.add_argument('service_domain',
|
||||
help='service domain name')
|
||||
sd_member_parser.add_argument('service_group',
|
||||
help='service group name')
|
||||
|
||||
# Domain Interface
|
||||
sd_member_parser = subparsers.add_parser('service-domain-interface',
|
||||
help='Provision Service '
|
||||
'Domain Interface')
|
||||
sd_member_parser.set_defaults(which='service_domain_interface')
|
||||
sd_member_parser.add_argument('service_domain',
|
||||
help='service domain name')
|
||||
sd_member_parser.add_argument('service_domain_interface',
|
||||
help='service domain interface name')
|
||||
|
||||
# Service-Group
|
||||
sg = subparsers.add_parser('service-group',
|
||||
help='Provision Service Group')
|
||||
sg.set_defaults(which='service_group')
|
||||
sg.add_argument('service_group', help='service group name')
|
||||
|
||||
# Service-Group-Member
|
||||
sg_member_parser = subparsers.add_parser('service-group-member',
|
||||
help='Provision Service Group '
|
||||
'Member')
|
||||
sg_member_parser.set_defaults(which='service_group_member')
|
||||
sg_member_parser.add_argument('service_group',
|
||||
help='service group name')
|
||||
sg_member_parser.add_argument('service_group_member',
|
||||
help='service group member name')
|
||||
|
||||
# Service
|
||||
service_parser = subparsers.add_parser('service',
|
||||
help='Provision Service')
|
||||
service_parser.set_defaults(which='service')
|
||||
service_parser.add_argument('service', help='service name')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.which == 'service_domain':
|
||||
database = sqlite3.connect(database_name)
|
||||
|
||||
cursor = database.cursor()
|
||||
|
||||
cursor.execute("UPDATE SERVICE_DOMAINS SET "
|
||||
"PROVISIONED = '%s' WHERE NAME = '%s';"
|
||||
% (provision_str, args.service_domain))
|
||||
|
||||
database.commit()
|
||||
database.close()
|
||||
|
||||
elif args.which == 'service_domain_member':
|
||||
database = sqlite3.connect(database_name)
|
||||
|
||||
cursor = database.cursor()
|
||||
|
||||
cursor.execute("UPDATE SERVICE_DOMAIN_MEMBERS SET "
|
||||
"PROVISIONED = '%s' WHERE NAME = '%s' and "
|
||||
"SERVICE_GROUP_NAME = '%s';"
|
||||
% (provision_str, args.service_domain,
|
||||
args.service_group))
|
||||
|
||||
database.commit()
|
||||
database.close()
|
||||
|
||||
elif args.which == 'service_domain_interface':
|
||||
database = sqlite3.connect(database_name)
|
||||
|
||||
cursor = database.cursor()
|
||||
|
||||
cursor.execute("UPDATE SERVICE_DOMAIN_INTERFACES SET "
|
||||
"PROVISIONED = '%s' WHERE SERVICE_DOMAIN = '%s' and "
|
||||
"SERVICE_DOMAIN_INTERFACE = '%s';"
|
||||
% (provision_str, args.service_domain,
|
||||
args.service_domain_interface))
|
||||
|
||||
database.commit()
|
||||
database.close()
|
||||
|
||||
elif args.which == 'service_group':
|
||||
database = sqlite3.connect(database_name)
|
||||
|
||||
cursor = database.cursor()
|
||||
|
||||
cursor.execute("UPDATE SERVICE_GROUPS SET "
|
||||
"PROVISIONED = '%s' WHERE NAME = '%s';"
|
||||
% (provision_str, args.service_group))
|
||||
|
||||
database.commit()
|
||||
database.close()
|
||||
|
||||
elif args.which == 'service_group_member':
|
||||
database = sqlite3.connect(database_name)
|
||||
|
||||
cursor = database.cursor()
|
||||
|
||||
cursor.execute("UPDATE SERVICE_GROUP_MEMBERS SET "
|
||||
"PROVISIONED = '%s' WHERE NAME = '%s' and "
|
||||
"SERVICE_NAME = '%s';"
|
||||
% (provision_str, args.service_group,
|
||||
args.service_group_member))
|
||||
|
||||
database.commit()
|
||||
database.close()
|
||||
|
||||
elif args.which == 'service':
|
||||
database = sqlite3.connect(database_name)
|
||||
|
||||
cursor = database.cursor()
|
||||
|
||||
cursor.execute("UPDATE SERVICES SET "
|
||||
"PROVISIONED = '%s' WHERE NAME = '%s';"
|
||||
% (provision_str, args.service))
|
||||
|
||||
database.commit()
|
||||
database.close()
|
||||
|
||||
sys.exit(0)
|
||||
|
||||
except KeyboardInterrupt:
|
||||
sys.exit()
|
||||
|
||||
except Exception as e:
|
||||
print e
|
||||
sys.exit(-1)
|
||||
61
service-mgmt-tools/sm-tools/sm_tools/sm_query.py
Normal file
61
service-mgmt-tools/sm-tools/sm_tools/sm_query.py
Normal file
@@ -0,0 +1,61 @@
|
||||
#
|
||||
# Copyright (c) 2014 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import sqlite3
|
||||
|
||||
database_name = "/var/run/sm/sm.db"
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
if not os.path.exists(database_name):
|
||||
print "%s not available." % database_name
|
||||
sys.exit(0)
|
||||
|
||||
try:
|
||||
parser = argparse.ArgumentParser(description='SM Query')
|
||||
subparsers = parser.add_subparsers(help='types')
|
||||
|
||||
s_parser = subparsers.add_parser('service', help='Query Service')
|
||||
s_parser.set_defaults(which='service')
|
||||
s_parser.add_argument('service_name', help='service name')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.which == 'service':
|
||||
database = sqlite3.connect(database_name)
|
||||
|
||||
cursor = database.cursor()
|
||||
|
||||
cursor.execute("SELECT NAME, DESIRED_STATE, STATE, STATUS FROM "
|
||||
"SERVICES WHERE NAME = '%s';"
|
||||
% args.service_name)
|
||||
|
||||
row = cursor.fetchone()
|
||||
|
||||
if row is None:
|
||||
print "%s is disabled." % args.service_name
|
||||
|
||||
else:
|
||||
service_name = row[0]
|
||||
state = row[2]
|
||||
status = row[3]
|
||||
|
||||
if status == 'none':
|
||||
print "%s is %s" % (service_name, state)
|
||||
else:
|
||||
print "%s is %s-%s" % (service_name, state, status)
|
||||
|
||||
database.close()
|
||||
|
||||
except KeyboardInterrupt:
|
||||
sys.exit()
|
||||
|
||||
except Exception as e:
|
||||
print e
|
||||
sys.exit(-1)
|
||||
Reference in New Issue
Block a user