StarlingX open source release updates

Signed-off-by: Dean Troyer <dtroyer@gmail.com>
This commit is contained in:
Dean Troyer
2018-05-30 16:17:12 -07:00
parent 1341a878b6
commit 17c909ec83
524 changed files with 107907 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
#
# Copyright (c) 2014 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#

View 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)

View 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)

View 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()

View 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)

View 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)

View 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)

View 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)