Server

from mstrio.server import Cluster, Environment, Project
from mstrio.connection import get_connection
from mstrio.utils.wip import module_wip, WipLevels

module_wip(globals(), level=WipLevels.WARNING)

PROJECT_NAME = '<project_name>'  # Project to connect to

# cluster nodes names
NODE_NAME = '<node_name>'
NODE_NAME_2 = '<node_name_2>'

SERVICE_NAME = '<service_name>'
FILE_NAME = '<file_name>'  # file name with extension 'csv', 'json' or 'pickle'

conn = get_connection(workstationData, project_name=PROJECT_NAME)

# get the cluster for given connection
clstr = Cluster(connection=conn)

# save topologies of services or nodes from this cluster into a dataframe
nodes_topology_df = clstr.nodes_topology()
services_topology_df = clstr.services_topology()

# get list of services grouped by nodes or by services
services_by_nodes = clstr.list_services(group_by='nodes')
services_by_services = clstr.list_services(group_by='services')

# get list of nodes (information about projects within each node is given there)
nodes = clstr.list_nodes(to_dictionary=True)
# remove/add a node from/to a cluster (node with the given name should exist)
clstr.remove_node(node=NODE_NAME)
clstr.add_node(node=NODE_NAME)

# get name of default (primary) node of the cluster and set new default node
clstr.default_node
clstr.set_primary_node(node=NODE_NAME)

# update node settings or reset them to default values
clstr.update_node_settings(
    node=NODE_NAME, load_balance_factor=99, initial_pool_size=511, max_pool_size=1023
)
clstr.reset_node_settings(node=NODE_NAME)

# stop/start service on selected nodes (error will be thrown in case of wrong
# names of service or nodes)
clstr.stop(service=SERVICE_NAME, nodes=[NODE_NAME, NODE_NAME_2])
clstr.start(service=SERVICE_NAME, nodes=[NODE_NAME, NODE_NAME_2])

# list all projects available for the given connection (it is possible via
# class Cluster or Environment)
env = Environment(connection=conn)
projects = env.list_projects()
projects = clstr.list_projects()

# load or unload chosen project (it is possible via class Cluster or
# Project)
project = Project(connection=conn, name=PROJECT_NAME)
project.load()
project.unload()

# via Cluster can we also specify on which node(s) project will be loaded
# or unloaded
clstr.load_project(project=PROJECT_NAME, on_nodes=[NODE_NAME, NODE_NAME_2])
clstr.unload_project(project=PROJECT_NAME, on_nodes=[NODE_NAME, NODE_NAME_2])

# get settings of a server as a dataframe
server_settings_df = env.server_settings.to_dataframe

# save/load settings of a server to/from a file (format can be 'csv', 'json' or
# 'pickle')
env.server_settings.to_csv(name=FILE_NAME)
env.server_settings.import_from(file=FILE_NAME)

# update some settings of a server
env.server_settings.allowUserLoginWithFullName = True
env.server_settings.minCharsPasswordChanges = 1
env.server_settings.update()