From 27f72981a69f125473b3f0b4bb04bd91af4c4f3c Mon Sep 17 00:00:00 2001 From: Aleksey Shirokih Date: Tue, 18 Jun 2019 19:25:14 +0300 Subject: [PATCH 01/17] Move away docker files. Check weather we can build tower --- Dockerfile => contrib/docker/Dockerfile | 2 +- Dockerfile.alpine => contrib/docker/Dockerfile.alpine | 0 entrypoint-alpine.sh => contrib/docker/entrypoint-alpine.sh | 0 entrypoint.sh => contrib/docker/entrypoint.sh | 0 4 files changed, 1 insertion(+), 1 deletion(-) rename Dockerfile => contrib/docker/Dockerfile (98%) rename Dockerfile.alpine => contrib/docker/Dockerfile.alpine (100%) rename entrypoint-alpine.sh => contrib/docker/entrypoint-alpine.sh (100%) rename entrypoint.sh => contrib/docker/entrypoint.sh (100%) diff --git a/Dockerfile b/contrib/docker/Dockerfile similarity index 98% rename from Dockerfile rename to contrib/docker/Dockerfile index 1467545c..efc58585 100644 --- a/Dockerfile +++ b/contrib/docker/Dockerfile @@ -2,7 +2,7 @@ FROM python:2.7 as builder RUN mkdir /mnt/tower WORKDIR /mnt/tower/ -COPY . /mnt/tower/ +COPY ../.. /mnt/tower/ RUN python setup.py sdist --format=zip WORKDIR /opt/tower diff --git a/Dockerfile.alpine b/contrib/docker/Dockerfile.alpine similarity index 100% rename from Dockerfile.alpine rename to contrib/docker/Dockerfile.alpine diff --git a/entrypoint-alpine.sh b/contrib/docker/entrypoint-alpine.sh similarity index 100% rename from entrypoint-alpine.sh rename to contrib/docker/entrypoint-alpine.sh diff --git a/entrypoint.sh b/contrib/docker/entrypoint.sh similarity index 100% rename from entrypoint.sh rename to contrib/docker/entrypoint.sh -- GitLab From 1dece1036f781b62f8a29a731bff8ffb845c881d Mon Sep 17 00:00:00 2001 From: Aleksey Shirokih Date: Fri, 28 Feb 2020 23:11:10 +0300 Subject: [PATCH 02/17] Initial py3 --- requirements.txt | 3 +-- tower/contrib/yaml_ordered_dict.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 6945bdb2..1a0927c4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,10 +10,9 @@ pycparser>=2.10 singledispatch>=3.4.0.0 six>=1.8.0 tornado==4.4.2 -ansible +ansible==2.8.8 setuptools>=11.3 packaging appdirs netaddr -#gittornado jmespath==0.9.3 diff --git a/tower/contrib/yaml_ordered_dict.py b/tower/contrib/yaml_ordered_dict.py index e6c726cd..8c108cd6 100644 --- a/tower/contrib/yaml_ordered_dict.py +++ b/tower/contrib/yaml_ordered_dict.py @@ -33,7 +33,7 @@ class OrderedDictYAMLLoader(yaml.Loader): key = self.construct_object(key_node, deep=deep) try: hash(key) - except TypeError, exc: + except TypeError as exc: raise yaml.constructor.ConstructorError('while constructing a mapping', node.start_mark, 'found unacceptable key (%s)' % exc, key_node.start_mark) -- GitLab From d24dd63f1b4ee3c61d8cef11305fa36ed8480e4a Mon Sep 17 00:00:00 2001 From: Aleksey Shirokih Date: Fri, 28 Feb 2020 23:11:29 +0300 Subject: [PATCH 03/17] Initial py3 --- contrib/docker/Dockerfile | 27 +++++++++---------- tower/api/base.py | 5 ++-- tower/api/deploy.py | 5 +++- tower/api/direct.py | 2 +- tower/api/environment.py | 2 +- tower/api/jsonrpc.py | 1 + tower/api/model.py | 1 + tower/api/service.py | 8 +++--- tower/api/ui.py | 7 ++--- tower/cli/crashinfo.py | 7 +++-- tower/cli/inv.py | 2 +- tower/migrations/001_create_settings.py | 3 ++- tower/migrations/002_create_user.py | 3 ++- tower/migrations/003_create_admin_user.py | 3 ++- tower/migrations/004_create_environment.py | 3 ++- tower/migrations/005_datacenter.py | 3 ++- tower/migrations/006_pool.py | 5 ++-- tower/migrations/007_node.py | 7 ++--- tower/migrations/008_joblog.py | 5 ++-- tower/migrations/009_service.py | 9 ++++--- tower/migrations/010_pulllog.py | 5 ++-- tower/migrations/011_nodetype.py | 3 ++- tower/migrations/012_default_nodetypes.py | 5 ++-- tower/migrations/022_add_local_connection.py | 3 ++- .../migrations/024_change_session_timeout.py | 6 +++-- tower/migrations/029_migrate_to_github.py | 3 ++- tower/migrations/030_move_db_settings.py | 5 ++-- tower/migrations/031_role.py | 5 ++-- tower/migrations/032_add_default_roles.py | 13 ++++----- tower/migrations/033_remove_custom.py | 5 ++-- tower/migrations/034_service_config.py | 11 ++++---- tower/migrations/035_remove_instances.py | 11 ++++---- .../037_config_order_param_settings.py | 3 ++- tower/models/crashinfo.py | 4 ++- tower/models/datacenter.py | 4 ++- tower/models/environment.py | 10 ++++--- tower/models/joblog.py | 3 ++- tower/models/migration.py | 3 ++- tower/models/node.py | 4 ++- tower/models/nodetype.py | 4 ++- tower/models/pool.py | 4 ++- tower/models/pulllog.py | 3 ++- tower/models/role.py | 4 ++- tower/models/service.py | 3 ++- tower/models/settings.py | 3 ++- tower/models/user.py | 9 ++++--- 46 files changed, 149 insertions(+), 95 deletions(-) diff --git a/contrib/docker/Dockerfile b/contrib/docker/Dockerfile index 1b809ff0..09ca36fa 100644 --- a/contrib/docker/Dockerfile +++ b/contrib/docker/Dockerfile @@ -1,44 +1,43 @@ -FROM python:2.7 as builder +FROM debian:buster as builder RUN mkdir /mnt/tower WORKDIR /mnt/tower/ +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + python3-venv \ + python3-setuptools COPY ../.. /mnt/tower/ -RUN python setup.py sdist --format=zip +RUN python3 setup.py sdist --format=zip WORKDIR /opt/tower -RUN apt-get update && apt-get install -y --no-install-recommends \ - build-essential -RUN virtualenv /opt/tower \ - && ./bin/pip install ansible==2.7.11 \ +RUN python3 -m venv /opt/tower \ && ./bin/pip install /mnt/tower/dist/*.zip -FROM debian:latest as app +FROM debian:buster as app ENV ANSIBLE_HOST_KEY_CHECKING=False \ ANSIBLE_SSH_PIPELINING=1 \ ANSIBLE_STDOUT_CALLBACK=debug \ PYTHONUNBUFFERED=1 \ PATH=/opt/tower/bin:${PATH} \ - PYTHONPATH=/opt/tower/lib/python2.7:/usr/lib/python2.7 + PYTHONPATH=/opt/tower/lib/python3.7:/usr/lib/python3.7 COPY --from=builder /opt/tower /opt/tower # install systemv packages RUN apt-get update \ && apt-get install -y --no-install-recommends \ - libpython2.7 \ - libpython2.7-stdlib \ + libpython3.7 \ + libpython3.7-stdlib \ libpython-stdlib \ - python2.7 \ - python-minimal \ + python3 \ ca-certificates \ openssh-client \ openssl \ git \ && rm -rf /var/cache/apk/* \ && rm -rf /var/lib/apt/lists/* \ - # Fix for https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=783738 - && ln -s /usr/lib/python2.7/plat-*/_sysconfigdata_nd.py /usr/lib/python2.7/ \ + && update-alternatives --install /usr/bin/python python /usr/bin/python3.7 3 \ && adduser --system \ --shell /bin/bash \ --no-create-home \ diff --git a/tower/api/base.py b/tower/api/base.py index 79bca7cd..fe529466 100644 --- a/tower/api/base.py +++ b/tower/api/base.py @@ -7,6 +7,7 @@ # ---------------------------------------------------------------------- # Python modules +from builtins import object import base64 # Third-party modules @@ -14,6 +15,7 @@ import tornado.web # Tower modules from tower.models.user import User +from future.utils import with_metaclass class BaseHandler(tornado.web.RequestHandler): @@ -71,8 +73,7 @@ def open_api(method): return method -class API(object): - __metaclass__ = APIBase +class API(with_metaclass(APIBase, object)): name = None def __init__(self, handler): diff --git a/tower/api/deploy.py b/tower/api/deploy.py index 4c030786..70e0ff3d 100644 --- a/tower/api/deploy.py +++ b/tower/api/deploy.py @@ -7,6 +7,9 @@ # ---------------------------------------------------------------------- from __future__ import absolute_import +from builtins import str +from builtins import zip +from builtins import range import datetime # Python modules import logging @@ -232,7 +235,7 @@ class DeployHandler(BaseHandler): except tornado.iostream.StreamClosedError: pass recap = [0, 0, 0, 0] - for v in self.recap.itervalues(): + for v in list(self.recap.values()): recap = [(x + y) for x, y in zip(recap, v)] with db.atomic(): self.job_log.complete_ts = datetime.datetime.now() diff --git a/tower/api/direct.py b/tower/api/direct.py index ee8d44ea..24f47f40 100644 --- a/tower/api/direct.py +++ b/tower/api/direct.py @@ -78,4 +78,4 @@ class DirectRequestHandler(BaseHandler): response += [{}] if is_scalar: response = response[0] - self.write(json.dumps(response)) + self.write(json.dumps(response.decode("utf-8"))) diff --git a/tower/api/environment.py b/tower/api/environment.py index 10d79488..8542c567 100644 --- a/tower/api/environment.py +++ b/tower/api/environment.py @@ -22,5 +22,5 @@ class EnvironmentAPI(ModelAPI): @api def ansible_inventory(self, env_id): e = Environment.get(Environment.id == int(env_id)) - return yaml.safe_dump(e.ansible_inventory, + return yaml.safe_dump(e.ansible_inventory.decode("utf-8"), default_flow_style=False) diff --git a/tower/api/jsonrpc.py b/tower/api/jsonrpc.py index 76134194..ba77c969 100644 --- a/tower/api/jsonrpc.py +++ b/tower/api/jsonrpc.py @@ -8,6 +8,7 @@ # Python modules from __future__ import absolute_import +from builtins import str import json import logging import peewee diff --git a/tower/api/model.py b/tower/api/model.py index 7e62e89d..5559ebe6 100644 --- a/tower/api/model.py +++ b/tower/api/model.py @@ -8,6 +8,7 @@ # Third-party modules from __future__ import absolute_import +from builtins import str import peewee from .base import API, api, APIError diff --git a/tower/api/service.py b/tower/api/service.py index e9d2faf6..41393c3f 100644 --- a/tower/api/service.py +++ b/tower/api/service.py @@ -8,6 +8,8 @@ # Python modules from __future__ import absolute_import +from builtins import str +from builtins import range import os # Third-party modules @@ -55,7 +57,7 @@ class ServiceAPI(API): if "forms" not in cfg or not cfg["forms"]: return r sc = cfg["forms"][service] - for k, v in sc.iteritems(): + for k, v in list(sc.items()): if "description" in k: continue r[k] = v.get("default", None) @@ -78,7 +80,7 @@ class ServiceAPI(API): "autoheight": "true", "template": descr.get("description", "") } - for k, v in descr.iteritems(): + for k, v in list(descr.items()): if "description" in k: continue c = { @@ -156,7 +158,7 @@ class ServiceAPI(API): if ck - (ck - nk) < nk: updated_config = dict(service_config) updated_config.update(current_config) - Service.update(config=json.dumps(updated_config, sort_keys=True)).where( + Service.update(config=json.dumps(updated_config.decode("utf-8"), sort_keys=True)).where( Service.id == srv[0]).execute() def init_services(self, env): diff --git a/tower/api/ui.py b/tower/api/ui.py index 5f1e230d..97e2f0ec 100644 --- a/tower/api/ui.py +++ b/tower/api/ui.py @@ -54,7 +54,7 @@ class UIHandler(tornado.web.RequestHandler): ssize = len(js) js = jsmin.jsmin(js) logger.info("Minifying JS: %s -> %s", ssize, len(js)) - self.hash = hashlib.sha256(js).hexdigest()[:8] + self.hash = hashlib.sha256(js.encode('utf-8')).hexdigest()[:8] cache_path = os.path.join(self.CACHE_ROOT, "%s.js" % self.hash) if not os.path.isfile(cache_path): logger.info("Writing cached JS to %s", cache_path) @@ -72,6 +72,7 @@ class UIHandler(tornado.web.RequestHandler): if fp.startswith("/ui/"): fp = fp[4:] fp = os.path.join(self.root, fp) - with open(fp) as f: - hash = hashlib.sha256(f.read()).hexdigest()[:8] + with open(fp, 'rb') as f: + content = f.read() + hash = hashlib.sha256(content).hexdigest()[:8] return "%s?%s" % (path, hash) diff --git a/tower/cli/crashinfo.py b/tower/cli/crashinfo.py index f0db650a..5ed5c057 100644 --- a/tower/cli/crashinfo.py +++ b/tower/cli/crashinfo.py @@ -7,7 +7,10 @@ # ----------------------------------------------------------------------- from __future__ import print_function -import Queue +from future import standard_library +standard_library.install_aliases() +from builtins import range +import queue import argparse # Python modules import os @@ -60,7 +63,7 @@ def collect_crashinfo(options, args): env = Environment.get(Environment.name == options.env) except Environment.DoesNotExist: die("Invalid environment: '%s'" % options.env) - q = Queue.Queue() + q = queue.Queue() # Start workers workers = [] for i in range(options.jobs): diff --git a/tower/cli/inv.py b/tower/cli/inv.py index 7515a4be..28242718 100644 --- a/tower/cli/inv.py +++ b/tower/cli/inv.py @@ -59,6 +59,6 @@ def ansible_list(options, args): """ try: env = Environment.get(Environment.name == options.env) - print(json.dumps(env.ansible_inventory, sort_keys=True, indent=2)) + print(json.dumps(env.ansible_inventory.decode("utf-8"), sort_keys=True, indent=2)) except Environment.DoesNotExist: die("Invalid environment: '%s'" % options.env) diff --git a/tower/migrations/001_create_settings.py b/tower/migrations/001_create_settings.py index 67310ec1..991d046e 100644 --- a/tower/migrations/001_create_settings.py +++ b/tower/migrations/001_create_settings.py @@ -1,8 +1,9 @@ +from builtins import object from peewee import Model, CharField, TextField class Settings(Model): - class Meta: + class Meta(object): db_table = "settings" key = CharField(primary_key=True) diff --git a/tower/migrations/002_create_user.py b/tower/migrations/002_create_user.py index 1e7441a8..a2a5105f 100644 --- a/tower/migrations/002_create_user.py +++ b/tower/migrations/002_create_user.py @@ -1,8 +1,9 @@ +from builtins import object from peewee import Model, CharField, BooleanField class User(Model): - class Meta: + class Meta(object): db_table = "user" name = CharField(unique=True) diff --git a/tower/migrations/003_create_admin_user.py b/tower/migrations/003_create_admin_user.py index df829a22..79329841 100644 --- a/tower/migrations/003_create_admin_user.py +++ b/tower/migrations/003_create_admin_user.py @@ -1,9 +1,10 @@ +from builtins import object from peewee import Model, CharField, BooleanField def migrate(migrator): class User(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "user" diff --git a/tower/migrations/004_create_environment.py b/tower/migrations/004_create_environment.py index 04093e88..56918099 100644 --- a/tower/migrations/004_create_environment.py +++ b/tower/migrations/004_create_environment.py @@ -1,8 +1,9 @@ +from builtins import object from peewee import Model, CharField, TextField class Environment(Model): - class Meta: + class Meta(object): db_table = "environment" name = CharField(unique=True) diff --git a/tower/migrations/005_datacenter.py b/tower/migrations/005_datacenter.py index 2a6115fe..c129719f 100644 --- a/tower/migrations/005_datacenter.py +++ b/tower/migrations/005_datacenter.py @@ -1,8 +1,9 @@ +from builtins import object from peewee import Model, CharField, TextField class Datacenter(Model): - class Meta: + class Meta(object): db_table = "datacenter" name = CharField(unique=True) diff --git a/tower/migrations/006_pool.py b/tower/migrations/006_pool.py index e825fcc1..d379be6b 100644 --- a/tower/migrations/006_pool.py +++ b/tower/migrations/006_pool.py @@ -1,13 +1,14 @@ +from builtins import object from peewee import Model, CharField, TextField, ForeignKeyField class Environment(Model): - class Meta: + class Meta(object): db_table = "environment" class Pool(Model): - class Meta: + class Meta(object): db_table = "pool" indexes = ( (("environment_id", "name"), True), diff --git a/tower/migrations/007_node.py b/tower/migrations/007_node.py index 7dc2aa5b..02b309dd 100644 --- a/tower/migrations/007_node.py +++ b/tower/migrations/007_node.py @@ -1,18 +1,19 @@ +from builtins import object from peewee import Model, CharField, TextField, ForeignKeyField class Environment(Model): - class Meta: + class Meta(object): db_table = "environment" class Datacenter(Model): - class Meta: + class Meta(object): db_table = "datacenter" class Node(Model): - class Meta: + class Meta(object): db_table = "node" indexes = ( (("environment", "name"), True), diff --git a/tower/migrations/008_joblog.py b/tower/migrations/008_joblog.py index 09ded0ac..4290f888 100644 --- a/tower/migrations/008_joblog.py +++ b/tower/migrations/008_joblog.py @@ -1,14 +1,15 @@ +from builtins import object from peewee import (Model, CharField, TextField, ForeignKeyField, DateTimeField, BooleanField, IntegerField) class Environment(Model): - class Meta: + class Meta(object): db_table = "environment" class JobLog(Model): - class Meta: + class Meta(object): db_table = "joblog" start_ts = DateTimeField() diff --git a/tower/migrations/009_service.py b/tower/migrations/009_service.py index df57f294..c0fc5b4a 100644 --- a/tower/migrations/009_service.py +++ b/tower/migrations/009_service.py @@ -1,23 +1,24 @@ +from builtins import object from peewee import Model, CharField, IntegerField, ForeignKeyField class Environment(Model): - class Meta: + class Meta(object): db_table = "environment" class Pool(Model): - class Meta: + class Meta(object): db_table = "pool" class Node(Model): - class Meta: + class Meta(object): db_table = "node" class Service(Model): - class Meta: + class Meta(object): db_table = "service" environment = ForeignKeyField(Environment, on_delete="RESTRICT") diff --git a/tower/migrations/010_pulllog.py b/tower/migrations/010_pulllog.py index 8a0130e4..cd1770c5 100644 --- a/tower/migrations/010_pulllog.py +++ b/tower/migrations/010_pulllog.py @@ -1,14 +1,15 @@ +from builtins import object from peewee import (Model, CharField, TextField, ForeignKeyField, DateTimeField, BooleanField) class Environment(Model): - class Meta: + class Meta(object): db_table = "environment" class PullLog(Model): - class Meta: + class Meta(object): db_table = "pulllog" start_ts = DateTimeField() diff --git a/tower/migrations/011_nodetype.py b/tower/migrations/011_nodetype.py index b8ca9781..9a129bee 100644 --- a/tower/migrations/011_nodetype.py +++ b/tower/migrations/011_nodetype.py @@ -1,9 +1,10 @@ +from builtins import object from peewee import (Model, CharField, ForeignKeyField, BooleanField) class NodeType(Model): - class Meta: + class Meta(object): db_table = "node_type" name = CharField(max_length=64, unique=True) diff --git a/tower/migrations/012_default_nodetypes.py b/tower/migrations/012_default_nodetypes.py index af52ca72..1622daae 100644 --- a/tower/migrations/012_default_nodetypes.py +++ b/tower/migrations/012_default_nodetypes.py @@ -1,10 +1,11 @@ +from builtins import object from peewee import (Model, CharField, ForeignKeyField, BooleanField) def migrate(migrator): class NodeType(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "node_type" @@ -17,7 +18,7 @@ def migrate(migrator): ansible_connection = CharField(max_length=255, default="smart") class Node(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "node" diff --git a/tower/migrations/022_add_local_connection.py b/tower/migrations/022_add_local_connection.py index 02572b46..9ae21317 100644 --- a/tower/migrations/022_add_local_connection.py +++ b/tower/migrations/022_add_local_connection.py @@ -1,9 +1,10 @@ +from builtins import object from peewee import (Model, CharField, BooleanField) def migrate(migrator): class NodeType(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "node_type" diff --git a/tower/migrations/024_change_session_timeout.py b/tower/migrations/024_change_session_timeout.py index 2c725802..ad3b4b9a 100644 --- a/tower/migrations/024_change_session_timeout.py +++ b/tower/migrations/024_change_session_timeout.py @@ -1,4 +1,6 @@ # Third-party modules +from builtins import str +from builtins import object import yaml from peewee import (Model, CharField, TextField, BooleanField) @@ -6,7 +8,7 @@ from peewee import (Model, CharField, TextField, BooleanField) def migrate(migrator): class Environment(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "environment" @@ -75,5 +77,5 @@ def migrate(migrator): if "session_ttl" in config[None]["login"]: if "d" not in str(config[None]["login"]["session_ttl"]): config[None]["login"]["session_ttl"] = str(config[None]["login"]["session_ttl"]) + "d" - env.service_config = yaml.dump(config) + env.service_config = yaml.dump(config.decode("utf-8")) env.save() diff --git a/tower/migrations/029_migrate_to_github.py b/tower/migrations/029_migrate_to_github.py index 3eb33354..50333a6b 100644 --- a/tower/migrations/029_migrate_to_github.py +++ b/tower/migrations/029_migrate_to_github.py @@ -1,3 +1,4 @@ +from builtins import object import os import shutil @@ -6,7 +7,7 @@ from peewee import (Model, CharField, TextField, BooleanField) def migrate(migrator): class Environment(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "environment" diff --git a/tower/migrations/030_move_db_settings.py b/tower/migrations/030_move_db_settings.py index 04723503..45c58442 100644 --- a/tower/migrations/030_move_db_settings.py +++ b/tower/migrations/030_move_db_settings.py @@ -1,4 +1,5 @@ from __future__ import print_function +from builtins import object import yaml from peewee import (Model, CharField, TextField, BooleanField) @@ -6,7 +7,7 @@ from peewee import (Model, CharField, TextField, BooleanField) def migrate(migrator): class Environment(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "environment" @@ -96,7 +97,7 @@ def migrate(migrator): "mongod_engine": env.mongo_engine or "wiredTiger", "mongod_logging_destination": config[None]["mongod"].get("mongod_logging_destination", "file") } - env.service_config = yaml.dump(config) + env.service_config = yaml.dump(config.decode("utf-8")) env.save() migrator.drop_column( diff --git a/tower/migrations/031_role.py b/tower/migrations/031_role.py index 5a737ad9..b07b79d6 100644 --- a/tower/migrations/031_role.py +++ b/tower/migrations/031_role.py @@ -1,10 +1,11 @@ +from builtins import object from peewee import Model, CharField, TextField, ForeignKeyField, BooleanField import os def migrate(migrator): class Environment(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "environment" @@ -18,7 +19,7 @@ def migrate(migrator): ) class Role(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "role" diff --git a/tower/migrations/032_add_default_roles.py b/tower/migrations/032_add_default_roles.py index d23f3e6a..643e1644 100644 --- a/tower/migrations/032_add_default_roles.py +++ b/tower/migrations/032_add_default_roles.py @@ -1,3 +1,4 @@ +from builtins import object from peewee import CharField, IntegerField, ForeignKeyField from peewee import Model, TextField, BooleanField import yaml @@ -57,7 +58,7 @@ DEFAULT_ROLES = [ def migrate(migrator): class Environment(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "environment" @@ -65,7 +66,7 @@ def migrate(migrator): service_config = TextField(default="") class Role(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "role" @@ -77,7 +78,7 @@ def migrate(migrator): role_name = CharField() class Node(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "node" @@ -85,7 +86,7 @@ def migrate(migrator): environment = ForeignKeyField(Environment, on_delete="RESTRICT") class Pool(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "pool" @@ -93,7 +94,7 @@ def migrate(migrator): name = CharField() class Service(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "service" @@ -156,5 +157,5 @@ def migrate(migrator): config[None]["telegraf"] = { "telegraf_output_plugin": "influx" } - env.service_config = yaml.dump(config) + env.service_config = yaml.dump(config.decode("utf-8")) env.save() diff --git a/tower/migrations/033_remove_custom.py b/tower/migrations/033_remove_custom.py index e275f248..63edb40a 100644 --- a/tower/migrations/033_remove_custom.py +++ b/tower/migrations/033_remove_custom.py @@ -1,4 +1,5 @@ from __future__ import print_function +from builtins import object from peewee import Model, CharField, TextField, BooleanField import yaml import re @@ -13,7 +14,7 @@ def migrate(migrator): ) class Environment(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "environment" @@ -60,7 +61,7 @@ def migrate(migrator): "cert": pub_key, "cert_key": priv_key } - env.service_config = yaml.dump(config) + env.service_config = yaml.dump(config.decode("utf-8")) env.save() migrator.drop_column( diff --git a/tower/migrations/034_service_config.py b/tower/migrations/034_service_config.py index 29e4a115..94c88464 100644 --- a/tower/migrations/034_service_config.py +++ b/tower/migrations/034_service_config.py @@ -1,4 +1,5 @@ from __future__ import print_function +from builtins import object from peewee import Model, CharField, ForeignKeyField, TextField, IntegerField import yaml import json @@ -6,7 +7,7 @@ import json def migrate(migrator): class Environment(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "environment" @@ -14,7 +15,7 @@ def migrate(migrator): service_config = TextField(default="") class Node(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "node" @@ -22,7 +23,7 @@ def migrate(migrator): environment = ForeignKeyField(Environment, on_delete="RESTRICT") class Pool(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "pool" @@ -30,7 +31,7 @@ def migrate(migrator): name = CharField() class Service(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "service" @@ -65,7 +66,7 @@ def migrate(migrator): for pool in config: for srv in config[pool]: cfg = config[pool][srv] - q = Service.update(config=json.dumps(cfg, sort_keys=True)).where( + q = Service.update(config=json.dumps(cfg.decode("utf-8"), sort_keys=True)).where( Service.environment == env.id, Service.service == srv, Service.pool == pool diff --git a/tower/migrations/035_remove_instances.py b/tower/migrations/035_remove_instances.py index e7ffead2..221dfa3b 100644 --- a/tower/migrations/035_remove_instances.py +++ b/tower/migrations/035_remove_instances.py @@ -1,11 +1,12 @@ from __future__ import print_function +from builtins import object from peewee import Model, CharField, ForeignKeyField, TextField, IntegerField, BooleanField import json def migrate(migrator): class Environment(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "environment" @@ -13,7 +14,7 @@ def migrate(migrator): metrics_collector = CharField(default="") class Node(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "node" @@ -21,7 +22,7 @@ def migrate(migrator): environment = ForeignKeyField(Environment, on_delete="RESTRICT") class Pool(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "pool" @@ -29,7 +30,7 @@ def migrate(migrator): name = CharField() class Service(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "service" @@ -245,7 +246,7 @@ def migrate(migrator): if 'logging' in conf: del conf['logging'] conf["loglevel"] = srv.loglevel - srv.config = json.dumps(conf, sort_keys=True) + srv.config = json.dumps(conf.decode("utf-8"), sort_keys=True) srv.save() # noc service should be enabled if any noc services was enabled for n in noc_promote_nodes: diff --git a/tower/migrations/037_config_order_param_settings.py b/tower/migrations/037_config_order_param_settings.py index dbf06ed4..c8cff454 100644 --- a/tower/migrations/037_config_order_param_settings.py +++ b/tower/migrations/037_config_order_param_settings.py @@ -1,9 +1,10 @@ +from builtins import object from peewee import CharField, Model def migrate(migrator): class Environment(Model): - class Meta: + class Meta(object): database = migrator.db db_table = "environment" diff --git a/tower/models/crashinfo.py b/tower/models/crashinfo.py index d7019a51..8a2a6954 100644 --- a/tower/models/crashinfo.py +++ b/tower/models/crashinfo.py @@ -8,6 +8,8 @@ # Python modules from __future__ import absolute_import +from builtins import str +from builtins import object import logging import os @@ -22,7 +24,7 @@ logger = logging.getLogger(__name__) class Crashinfo(Model): - class Meta: + class Meta(object): database = db db_table = "crashinfo" indexes = ( diff --git a/tower/models/datacenter.py b/tower/models/datacenter.py index 62c81282..fa4bc795 100644 --- a/tower/models/datacenter.py +++ b/tower/models/datacenter.py @@ -8,6 +8,8 @@ # Third-party modules from __future__ import absolute_import +from builtins import str +from builtins import object from peewee import Model, CharField, TextField # Tower modules @@ -15,7 +17,7 @@ from .db import db class Datacenter(Model): - class Meta: + class Meta(object): database = db db_table = "datacenter" diff --git a/tower/models/environment.py b/tower/models/environment.py index 87520559..28bb6e0b 100644 --- a/tower/models/environment.py +++ b/tower/models/environment.py @@ -7,9 +7,11 @@ # ---------------------------------------------------------------------- from __future__ import absolute_import +from builtins import str +from builtins import object import errno import logging -from urlparse import urlparse +from urllib.parse import urlparse # Python import os import subprocess @@ -31,7 +33,7 @@ logging.getLogger(__name__) class Environment(Model): - class Meta: + class Meta(object): database = db db_table = "environment" @@ -198,7 +200,7 @@ class Environment(Model): conf = json.loads(n.config) conf["cert"] = certificate[s]["cert"] conf["cert_key"] = certificate[s]["key"] - n.config = json.dumps(conf, sort_keys=True) + n.config = json.dumps(conf.decode("utf-8"), sort_keys=True) n.save() for srv in self.get_service_config(): @@ -295,7 +297,7 @@ class Environment(Model): def name_config(config, service): cfg = copy.deepcopy(config) sv = service.replace("-", "_") - for k in cfg.keys(): + for k in list(cfg.keys()): cfg["_".join([sv, k])] = cfg.pop(k) return cfg diff --git a/tower/models/joblog.py b/tower/models/joblog.py index 746abb57..2176ee0f 100644 --- a/tower/models/joblog.py +++ b/tower/models/joblog.py @@ -8,6 +8,7 @@ # Python modules from __future__ import absolute_import +from builtins import object import os # Third-party modules from peewee import (Model, CharField, TextField, ForeignKeyField, @@ -18,7 +19,7 @@ from .environment import Environment class JobLog(Model): - class Meta: + class Meta(object): database = db db_table = "joblog" diff --git a/tower/models/migration.py b/tower/models/migration.py index fab7af06..0797fe81 100644 --- a/tower/models/migration.py +++ b/tower/models/migration.py @@ -8,6 +8,7 @@ # Python modules from __future__ import absolute_import +from builtins import object import datetime import logging import os @@ -23,7 +24,7 @@ logger = logging.getLogger(__name__) class Migration(Model): - class Meta: + class Meta(object): database = db db_table = "migration" diff --git a/tower/models/node.py b/tower/models/node.py index d55ce8be..68a7b13a 100644 --- a/tower/models/node.py +++ b/tower/models/node.py @@ -8,6 +8,8 @@ # Third-party modules from __future__ import absolute_import +from builtins import str +from builtins import object from peewee import Model, CharField, TextField, ForeignKeyField, BooleanField # Tower modules from .db import db @@ -17,7 +19,7 @@ from .nodetype import NodeType class Node(Model): - class Meta: + class Meta(object): database = db db_table = "node" indexes = ( diff --git a/tower/models/nodetype.py b/tower/models/nodetype.py index 26d88d07..d6049235 100644 --- a/tower/models/nodetype.py +++ b/tower/models/nodetype.py @@ -8,6 +8,8 @@ # Third-party modules from __future__ import absolute_import +from builtins import str +from builtins import object from peewee import Model, CharField, BooleanField # Tower modules @@ -15,7 +17,7 @@ from .db import db class NodeType(Model): - class Meta: + class Meta(object): database = db db_table = "node_type" diff --git a/tower/models/pool.py b/tower/models/pool.py index 71493942..bbf45b0a 100644 --- a/tower/models/pool.py +++ b/tower/models/pool.py @@ -8,6 +8,8 @@ # Third-party modules from __future__ import absolute_import +from builtins import str +from builtins import object from peewee import CharField, TextField, ForeignKeyField from playhouse.signals import Model, post_save @@ -19,7 +21,7 @@ DEFAULT_POOL = "default" class Pool(Model): - class Meta: + class Meta(object): database = db db_table = "pool" indexes = ( diff --git a/tower/models/pulllog.py b/tower/models/pulllog.py index 0d7b60ea..e7a19c8a 100644 --- a/tower/models/pulllog.py +++ b/tower/models/pulllog.py @@ -8,6 +8,7 @@ # Third-party modules from __future__ import absolute_import +from builtins import object from peewee import (Model, CharField, TextField, ForeignKeyField, DateTimeField, BooleanField) @@ -17,7 +18,7 @@ from .environment import Environment class PullLog(Model): - class Meta: + class Meta(object): database = db db_table = "pulllog" diff --git a/tower/models/role.py b/tower/models/role.py index 4c77b922..eeb25e54 100644 --- a/tower/models/role.py +++ b/tower/models/role.py @@ -8,6 +8,8 @@ # Third-party modules from __future__ import absolute_import +from builtins import str +from builtins import object from peewee import CharField, TextField, ForeignKeyField, BooleanField from playhouse.signals import Model, post_save import os @@ -58,7 +60,7 @@ DEFAULT_ROLES = [ class Role(Model): - class Meta: + class Meta(object): database = db db_table = "role" indexes = ( diff --git a/tower/models/service.py b/tower/models/service.py index b422438d..1c9991a3 100644 --- a/tower/models/service.py +++ b/tower/models/service.py @@ -6,6 +6,7 @@ # See LICENSE for details # ---------------------------------------------------------------------- from __future__ import absolute_import +from builtins import object import os import yaml @@ -21,7 +22,7 @@ from .pool import Pool class Service(Model): - class Meta: + class Meta(object): database = db db_table = "service" indexes = ( diff --git a/tower/models/settings.py b/tower/models/settings.py index 20bd3914..45173a78 100644 --- a/tower/models/settings.py +++ b/tower/models/settings.py @@ -8,6 +8,7 @@ # Python modules from __future__ import absolute_import +from builtins import object import base64 import json import os @@ -20,7 +21,7 @@ from .db import db class Settings(Model): - class Meta: + class Meta(object): database = db db_table = "settings" diff --git a/tower/models/user.py b/tower/models/user.py index 52df2572..35986361 100644 --- a/tower/models/user.py +++ b/tower/models/user.py @@ -7,6 +7,7 @@ # ---------------------------------------------------------------------- from __future__ import absolute_import +from builtins import object import bcrypt # Third-party modules from peewee import Model, CharField, BooleanField, DoesNotExist @@ -16,7 +17,7 @@ from .db import db class User(Model): - class Meta: + class Meta(object): database = db db_table = "user" @@ -32,7 +33,7 @@ class User(Model): :param password: :return: """ - if isinstance(password, unicode): + if isinstance(password, str): password = password.encode("utf-8") return bcrypt.hashpw(password, bcrypt.gensalt(10)) @@ -44,9 +45,9 @@ class User(Model): :param hashed: :return: """ - if isinstance(password, unicode): + if isinstance(password, str): password = password.encode("utf-8") - if isinstance(hashed, unicode): + if isinstance(hashed, str): hashed = hashed.encode("utf-8") return bcrypt.hashpw(password, hashed) == hashed -- GitLab From 0053765cf8356a3f14d3f3c76a2db0b6b847ebd7 Mon Sep 17 00:00:00 2001 From: Aleksey Shirokih Date: Fri, 28 Feb 2020 23:12:35 +0300 Subject: [PATCH 04/17] Ignore venv dirs --- .dockerignore | 1 + .gitignore | 1 + 2 files changed, 2 insertions(+) diff --git a/.dockerignore b/.dockerignore index 85f8933b..ad752bf7 100644 --- a/.dockerignore +++ b/.dockerignore @@ -18,3 +18,4 @@ var/ .gitlab-ci.yml .bumpversion.cfg .flake8 +venv*/ diff --git a/.gitignore b/.gitignore index 964c0da9..464cede6 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ config*.db tower/ui/pkg/webix/webix_debug.js .pytest_cache/ .tox +venv* -- GitLab From 97a5caedb40a70eee8b44603013fcdc63a439779 Mon Sep 17 00:00:00 2001 From: Aleksey Shirokih Date: Fri, 28 Feb 2020 23:19:57 +0300 Subject: [PATCH 05/17] Remove crashinfo --- tower/cli/crashinfo.py | 127 ----------------------------------------- 1 file changed, 127 deletions(-) delete mode 100644 tower/cli/crashinfo.py diff --git a/tower/cli/crashinfo.py b/tower/cli/crashinfo.py deleted file mode 100644 index 5ed5c057..00000000 --- a/tower/cli/crashinfo.py +++ /dev/null @@ -1,127 +0,0 @@ -# -*- coding: utf-8 -*- -# ----------------------------------------------------------------------- -# Ansible dynamic inventory -# ----------------------------------------------------------------------- -# Copyright (C) 2015 The NOC Project -# See LICENSE for details -# ----------------------------------------------------------------------- - -from __future__ import print_function -from future import standard_library -standard_library.install_aliases() -from builtins import range -import queue -import argparse -# Python modules -import os -import subprocess -import sys -import threading - -# Tower modules -os.chdir( - os.path.join(os.path.dirname(sys.argv[0]), "..") -) -from tower.models.environment import Environment # noqa -from tower.models.node import Node # noqa -from tower.models.crashinfo import Crashinfo # noqa - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument( - "--env", - action="store", dest="env", - help="Use environment [%default]", - default=os.environ.get("NOC_ENV", "test") - ) - parser.add_argument( - "--jobs", - action="store", - dest="jobs", - type=int, - help="Amount of nodes fetched concurrently", - default=5 - ) - subparsers = parser.add_subparsers(dest="cmd") - collect_parser = subparsers.add_parser("collect") # noqa - # - options = parser.parse_args(sys.argv[1:]) - cmd_options = vars(options) - args = cmd_options.pop("args", ()) - if options.cmd == "collect": - collect_crashinfo(options, args) - - -def die(msg): - print(msg + "\n") - sys.exit(1) - - -def collect_crashinfo(options, args): - try: - env = Environment.get(Environment.name == options.env) - except Environment.DoesNotExist: - die("Invalid environment: '%s'" % options.env) - q = queue.Queue() - # Start workers - workers = [] - for i in range(options.jobs): - w = threading.Thread(target=collect_worker, args=(q,)) - workers += [w] - w.start() - # Spool jobs - for node in Node.select().where(Node.environment == env): - q.put(node) - # Wait for workers - for i in range(options.jobs): - q.put(None) - for w in workers: - w.join() - - -def collect_worker(q): - while True: - node = q.get(block=True) - if not node: - return - cwd = os.path.join( - Crashinfo.CRASHINFO_ROOT, - node.environment.name, - node.name - ) - if not os.path.isdir(cwd): - try: - os.makedirs(cwd) - except OSError as e: - die("Cannot create directory %s" % cwd) - log_dir = os.path.join( - "var", "tower", "log", - "crashinfo", - "collect", - node.environment.name, - ) - if not os.path.isdir(log_dir): - try: - os.makedirs(log_dir) - except OSError as e: - die("Cannot create directory %s %s" % (log_dir, e)) - log_file = "%s/%s.log" % (log_dir, node.name) - lf = open(log_file, "w") - - cmd = [ - "rsync", - "-avz", - "-e ssh", - "--rsync-path=sudo rsync", - "%s@%s:%s/var/cp/crashinfo/new/*.json" % ( - node.login_as, node.address, - node.environment.sys_prefix), - "." - ] - subprocess.check_call( - cmd, cwd=cwd, - stdout=lf, - stderr=lf - ) - lf.close() -- GitLab From 8dae643449a15c14b2688e03ed3d863cb7a1b876 Mon Sep 17 00:00:00 2001 From: Aleksey Shirokih Date: Sat, 29 Feb 2020 00:52:54 +0300 Subject: [PATCH 06/17] Remove .mypy_cache/ --- .dockerignore | 1 + .gitignore | 1 + 2 files changed, 2 insertions(+) diff --git a/.dockerignore b/.dockerignore index ad752bf7..3c62fb78 100644 --- a/.dockerignore +++ b/.dockerignore @@ -19,3 +19,4 @@ var/ .bumpversion.cfg .flake8 venv*/ +.mypy_cache/ diff --git a/.gitignore b/.gitignore index 464cede6..d71b8238 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ tower/ui/pkg/webix/webix_debug.js .pytest_cache/ .tox venv* +.mypy_cache/ -- GitLab From ee1b18124dcc6df610053bca4514b118668f9209 Mon Sep 17 00:00:00 2001 From: Aleksey Shirokih Date: Sat, 29 Feb 2020 00:58:20 +0300 Subject: [PATCH 07/17] Add future module --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 1a0927c4..d94eef7a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,3 +16,4 @@ packaging appdirs netaddr jmespath==0.9.3 +future==0.18.2 -- GitLab From 3ad46c249a3ef4cbab420dceaa45a24f74ddfc43 Mon Sep 17 00:00:00 2001 From: Aleksey Shirokih Date: Sat, 29 Feb 2020 01:01:12 +0300 Subject: [PATCH 08/17] Fix urllib.parse --- tower/models/environment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tower/models/environment.py b/tower/models/environment.py index 28bb6e0b..eb03d6b0 100644 --- a/tower/models/environment.py +++ b/tower/models/environment.py @@ -11,7 +11,7 @@ from builtins import str from builtins import object import errno import logging -from urllib.parse import urlparse +from six.moves.urllib.parse import urlparse # Python import os import subprocess -- GitLab From 02281816f305dc47e44ac30e64191c123842ffc6 Mon Sep 17 00:00:00 2001 From: Aleksey Shirokih Date: Sat, 29 Feb 2020 01:01:26 +0300 Subject: [PATCH 09/17] Fix string --- tower/models/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tower/models/settings.py b/tower/models/settings.py index 45173a78..164b0059 100644 --- a/tower/models/settings.py +++ b/tower/models/settings.py @@ -54,7 +54,7 @@ class Settings(Model): @classmethod def set_item(cls, name, value): - value = json.dumps(value) + value = json.dumps(value.decode("utf-8")) with db.atomic(): r = list(Settings.select().where(Settings.key == name)) if len(r) == 0: -- GitLab From 96e345e0986d9836c55d603037340d10c2f2b9d2 Mon Sep 17 00:00:00 2001 From: Aleksey Shirokih Date: Sat, 29 Feb 2020 01:54:25 +0300 Subject: [PATCH 10/17] Remove crashinfo --- bin/tower-upgrade | 4 -- tower/models/crashinfo.py | 108 -------------------------------------- 2 files changed, 112 deletions(-) delete mode 100644 bin/tower-upgrade delete mode 100644 tower/models/crashinfo.py diff --git a/bin/tower-upgrade b/bin/tower-upgrade deleted file mode 100644 index cf37e4ae..00000000 --- a/bin/tower-upgrade +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -cd `dirname $0`/.. -./bin/pip install https://cdn.getnoc.com/tower/noc-tower-latest.zip diff --git a/tower/models/crashinfo.py b/tower/models/crashinfo.py deleted file mode 100644 index 8a2a6954..00000000 --- a/tower/models/crashinfo.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- -# ---------------------------------------------------------------------- -# Crashinfo model -# ---------------------------------------------------------------------- -# Copyright (C) 2007-2016 The NOC Project -# See LICENSE for details -# ---------------------------------------------------------------------- - -# Python modules -from __future__ import absolute_import -from builtins import str -from builtins import object -import logging -import os - -# Third-party modules -from peewee import Model, CharField, TextField, DateTimeField, IntegerField, ForeignKeyField - -# Tower modules -from .db import db -from .environment import Environment - -logger = logging.getLogger(__name__) - - -class Crashinfo(Model): - class Meta(object): - database = db - db_table = "crashinfo" - indexes = ( - (("environment", "uuid"), True), - ) - - environment = ForeignKeyField( - Environment, - on_delete="RESTRICT" - ) - uuid = CharField() - first_seen = DateTimeField() - last_seen = DateTimeField() - # pipe-separated node names - nodes = CharField() - # Number of last_seen updates - updates = IntegerField(default=1) - status = CharField( - choices=[ - ("N", "New"), - ("r", "Reporting"), - ("R", "Reported"), - ("X", "Rejected"), - ("f", "Fix ready"), - ("F", "Fixed") - ], - default="N" - ) - service = CharField() - branch = CharField() - tip = CharField() - comment = TextField() - priority = CharField( - choices=[ - ("I", "Info"), - ("L", "Low"), - ("M", "Medium"), - ("H", "High"), - ("C", "Critical") - ], - default="I" - ) - - CRASHINFO_ROOT = "var/tower/crashinfo" - - def list_item(self): - return { - "id": str(self.id), - "uuid": self.uuid, - "first_seen": self.first_seen, - "last_seen": self.last_seen, - "updates": self.updates, - "status": self.status, - "service": self.service, - "branch": self.branch, - "tip": self.tip, - "comment": self.comment, - "priority": self.priority - } - - @property - def json_path(self): - return os.path.join( - self.CRASHINFO_ROOT, - self.environment.name, - "%s.json" % self.uuid - ) - - @property - def json(self): - path = self.json_path - if os.path.exists(path): - try: - with open(path) as f: - return f.read() - except Exception as why: - logger.error( - "Unable to load and decode crashinfo %s: %s", - self.uuid, why - ) - return None -- GitLab From 8b06b1377ff4b7ff7e246dca4d1bb7caf41ee9ab Mon Sep 17 00:00:00 2001 From: Aleksey Shirokih Date: Sat, 29 Feb 2020 02:25:15 +0300 Subject: [PATCH 11/17] Remove unused scripts. Remove timeout tests. move alpine image to py3 --- contrib/docker/Dockerfile.alpine | 16 ++++++++-------- setup.py | 2 -- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/contrib/docker/Dockerfile.alpine b/contrib/docker/Dockerfile.alpine index 65c6e635..5a5f1cdd 100644 --- a/contrib/docker/Dockerfile.alpine +++ b/contrib/docker/Dockerfile.alpine @@ -1,25 +1,25 @@ -FROM alpine:3.9 as builder +FROM alpine:3.11 as builder RUN mkdir /mnt/tower WORKDIR /mnt/tower/ RUN apk add --no-cache --update \ - py2-cffi \ - py-virtualenv \ + py3-cffi \ + py3-virtualenv \ gcc \ - python-dev \ + python3-dev \ musl-dev \ libffi-dev \ openssl-dev \ ca-certificates \ make COPY . /mnt/tower/ -RUN python setup.py sdist --format=zip +RUN python3 setup.py sdist --format=zip WORKDIR /opt/tower RUN virtualenv /opt/tower \ - && ./bin/pip install /mnt/tower/dist/*.zip + && ./bin/pip3 install /mnt/tower/dist/*.zip -FROM python:2.7-alpine3.9 +FROM python:3.8-alpine3.11 ENV ANSIBLE_HOST_KEY_CHECKING=False \ ANSIBLE_SSH_PIPELINING=1 \ @@ -27,7 +27,7 @@ ENV ANSIBLE_HOST_KEY_CHECKING=False \ PYTHONUNBUFFERED=1 \ PS1="\$(date +%H:%M:%S) \h \w \\$ " \ PATH=/opt/tower/bin:${PATH} \ - PYTHONPATH=/opt/tower/lib/python2.7/site-packages/:/usr/local/lib/python2.7:/usr/local/lib/python2.7/site-packages + PYTHONPATH=/opt/tower/lib/python3.8/site-packages/:/usr/local/lib/python3.8:/usr/local/lib/python3.8/site-packages COPY --from=builder /opt/tower /opt/tower diff --git a/setup.py b/setup.py index fcd1daf8..01d46050 100644 --- a/setup.py +++ b/setup.py @@ -66,7 +66,6 @@ def main(): "console_scripts": [ "tower-inv = tower.cli.inv:main", "tower-pull = tower.cli.pull:main", - "tower-collect-crashinfo = tower.cli.crashinfo:main", "tower-web = tower.daemons.web:run", "tower-dump = tower.cli.backup:dump", "tower-restore = tower.cli.backup:restore" @@ -76,7 +75,6 @@ def main(): "tower": tower_data }, data_files=["VERSION"], - scripts=["bin/tower-upgrade"], install_requires=requirements, zip_safe=False, classifiers=[ -- GitLab From 932648c6df98fe819cfb4e47530d8cfccf4b684e Mon Sep 17 00:00:00 2001 From: Aleksey Shirokih Date: Sat, 29 Feb 2020 02:25:32 +0300 Subject: [PATCH 12/17] Remove unused scripts. Remove timeout tests. move alpine image to py3 --- .gitlab-ci.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 619579e8..e67cd2b9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -56,7 +56,6 @@ check_docker_buildable_debian: script: - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY - docker build -t ${CI_COMMIT_REF_SLUG}-${CI_JOB_ID} -f contrib/docker/Dockerfile . - #- timeout --preserve-status -s 9 30 docker run ${CI_COMMIT_REF_SLUG}-${CI_JOB_ID} tags: - shell @@ -65,7 +64,6 @@ check_docker_buildable_alpine: script: - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY - docker build -t ${CI_COMMIT_REF_SLUG}-${CI_JOB_ID} -f contrib/docker/Dockerfile.alpine . - #- timeout --preserve-status -s 9 30 docker run ${CI_COMMIT_REF_SLUG}-${CI_JOB_ID} tags: - shell -- GitLab From 59c32e2734cfeaa25387b67f11a189207402ffeb Mon Sep 17 00:00:00 2001 From: Aleksey Shirokih Date: Mon, 9 Mar 2020 18:50:36 +0300 Subject: [PATCH 13/17] Remove useless decode --- tower/cli/inv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tower/cli/inv.py b/tower/cli/inv.py index 28242718..7515a4be 100644 --- a/tower/cli/inv.py +++ b/tower/cli/inv.py @@ -59,6 +59,6 @@ def ansible_list(options, args): """ try: env = Environment.get(Environment.name == options.env) - print(json.dumps(env.ansible_inventory.decode("utf-8"), sort_keys=True, indent=2)) + print(json.dumps(env.ansible_inventory, sort_keys=True, indent=2)) except Environment.DoesNotExist: die("Invalid environment: '%s'" % options.env) -- GitLab From b95339b3e70960d63f05b2e15b381165c7f69594 Mon Sep 17 00:00:00 2001 From: Aleksey Shirokih Date: Mon, 9 Mar 2020 18:51:09 +0300 Subject: [PATCH 14/17] Rename single char var --- tower/models/service.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tower/models/service.py b/tower/models/service.py index 1c9991a3..768aa7b6 100644 --- a/tower/models/service.py +++ b/tower/models/service.py @@ -57,21 +57,21 @@ class Service(Model): return svc def dfs_topsort(graph): # recursive dfs with - L = [] # additional list for order of nodes + node_list = [] # additional list for order of nodes color = {u: "white" for u in graph} found_cycle = [False] for u in graph: if color[u] == "white": - dfs_visit(graph, u, color, L, found_cycle) + dfs_visit(graph, u, color, node_list, found_cycle) if found_cycle[0]: break if found_cycle[0]: # if there is a cycle, - L = [] # then return an empty list + node_list = [] # then return an empty list - return L # L contains the topological sort + return node_list # node_list contains the topological sort - def dfs_visit(graph, u, color, L, found_cycle): + def dfs_visit(graph, u, color, node_list, found_cycle): if found_cycle[0]: return color[u] = "gray" @@ -80,9 +80,9 @@ class Service(Model): found_cycle[0] = True return if color[v] == "white": - dfs_visit(graph, v, color, L, found_cycle) + dfs_visit(graph, v, color, node_list, found_cycle) color[u] = "black" # when we're done with u, - L.append(u) # add u to list (reverse it later!) + node_list.append(u) # add u to list (reverse it later!) deps = defaultdict(list) -- GitLab From 0144de6120217a7d0ec92422f500733adede8427 Mon Sep 17 00:00:00 2001 From: Aleksey Shirokih Date: Sun, 15 Mar 2020 00:30:36 +0300 Subject: [PATCH 15/17] Make required_assets sorted list --- tower/models/environment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tower/models/environment.py b/tower/models/environment.py index eb03d6b0..972e0323 100644 --- a/tower/models/environment.py +++ b/tower/models/environment.py @@ -171,7 +171,7 @@ class Environment(Model): required_assets = [] for s in node_services[node.name]: required_assets += srv_descr[s.service]["required_assets"] - r["_meta"]["hostvars"][node.name]["required_assets"] = list(set(required_assets)) + r["_meta"]["hostvars"][node.name]["required_assets"] = sorted(list(set(required_assets))) need_cert = [] has_cert = False certificate = {} -- GitLab From fd02727da1b42ee5098baa3211c24a1033588e75 Mon Sep 17 00:00:00 2001 From: Aleksey Shirokih Date: Sun, 15 Mar 2020 00:37:02 +0300 Subject: [PATCH 16/17] Add fixtures --- tests/fixtures/inventories/multi_14.json | 3260 +++++++++++++++++++ tests/fixtures/inventories/single.json | 1903 +++++++++++ tests/fixtures/sqlite_dumps/multi_14.sqlite | 730 +++++ tests/fixtures/sqlite_dumps/single.sqlite | 113 + 4 files changed, 6006 insertions(+) create mode 100644 tests/fixtures/inventories/multi_14.json create mode 100644 tests/fixtures/inventories/single.json create mode 100644 tests/fixtures/sqlite_dumps/multi_14.sqlite create mode 100644 tests/fixtures/sqlite_dumps/single.sqlite diff --git a/tests/fixtures/inventories/multi_14.json b/tests/fixtures/inventories/multi_14.json new file mode 100644 index 00000000..03b671e8 --- /dev/null +++ b/tests/fixtures/inventories/multi_14.json @@ -0,0 +1,3260 @@ +{ + "_meta": { + "hostvars": { + "clickhouse01": { + "ansible_connection": "ssh", + "ansible_host": "192.168.3.31", + "ansible_port": 22, + "ansible_python_interpreter": "/usr/bin/python", + "ansible_shell_type": "sh", + "ansible_ssh_pipelining": true, + "ansible_ssh_private_key_file": null, + "ansible_user": "ansible", + "has_svc_consul": true, + "has_svc_consul_template": true, + "has_svc_noc": true, + "has_svc_nsqd": true, + "noc_dc": "kr01", + "node_id": 7, + "required_assets": [] + }, + "clickhouse02": { + "ansible_connection": "ssh", + "ansible_host": "192.168.3.32", + "ansible_port": 22, + "ansible_python_interpreter": "/usr/bin/python", + "ansible_shell_type": "sh", + "ansible_ssh_pipelining": true, + "ansible_ssh_private_key_file": null, + "ansible_user": "ansible", + "has_svc_bi": true, + "has_svc_ch_datasource": true, + "has_svc_chwriter": true, + "has_svc_clickhouse": true, + "has_svc_consul": true, + "has_svc_consul_template": true, + "has_svc_noc": true, + "has_svc_nsqd": true, + "noc_dc": "sdc", + "node_id": 6, + "required_assets": [ + "bi" + ] + }, + "collector": { + "ansible_connection": "ssh", + "ansible_host": "192.168.1.63", + "ansible_port": 22, + "ansible_python_interpreter": "/usr/bin/python", + "ansible_shell_type": "sh", + "ansible_ssh_pipelining": true, + "ansible_ssh_private_key_file": null, + "ansible_user": "ansible", + "has_svc_consul": true, + "has_svc_consul_template": true, + "has_svc_noc": true, + "has_svc_nsqd": true, + "has_svc_postgres": true, + "has_svc_syslogcollector": true, + "has_svc_trapcollector": true, + "noc_dc": "kr01", + "node_id": 1, + "required_assets": [] + }, + "discovery01": { + "ansible_connection": "ssh", + "ansible_host": "192.168.1.66", + "ansible_port": 22, + "ansible_python_interpreter": "/usr/bin/python", + "ansible_shell_type": "sh", + "ansible_ssh_pipelining": true, + "ansible_ssh_private_key_file": null, + "ansible_user": "ansible", + "has_svc_classifier": true, + "has_svc_consul": true, + "has_svc_consul_template": true, + "has_svc_correlator": true, + "has_svc_discovery": true, + "has_svc_escalator": true, + "has_svc_mailsender": true, + "has_svc_noc": true, + "has_svc_nsqd": true, + "has_svc_sae": true, + "has_svc_scheduler": true, + "has_svc_tgsender": true, + "noc_dc": "kr01", + "node_id": 9, + "required_assets": [] + }, + "discovery02": { + "ansible_connection": "ssh", + "ansible_host": "192.168.2.66", + "ansible_port": 22, + "ansible_python_interpreter": "/usr/bin/python", + "ansible_shell_type": "sh", + "ansible_ssh_pipelining": true, + "ansible_ssh_private_key_file": null, + "ansible_user": "ansible", + "has_svc_classifier": true, + "has_svc_consul": true, + "has_svc_consul_template": true, + "has_svc_correlator": true, + "has_svc_discovery": true, + "has_svc_escalator": true, + "has_svc_mailsender": true, + "has_svc_noc": true, + "has_svc_nsqd": true, + "has_svc_sae": true, + "has_svc_scheduler": true, + "has_svc_tgsender": true, + "noc_dc": "sdc", + "node_id": 8, + "required_assets": [] + }, + "influxdb01": { + "ansible_connection": "ssh", + "ansible_host": "192.168.1.61", + "ansible_port": 22, + "ansible_python_interpreter": "/usr/bin/python", + "ansible_shell_type": "sh", + "ansible_ssh_pipelining": true, + "ansible_ssh_private_key_file": null, + "ansible_user": "ansible", + "has_svc_consul": true, + "has_svc_consul_template": true, + "has_svc_noc": true, + "has_svc_nsqd": true, + "noc_dc": "kr01", + "node_id": 5, + "required_assets": [] + }, + "mongodb01": { + "ansible_connection": "ssh", + "ansible_host": "192.168.1.62", + "ansible_port": 22, + "ansible_python_interpreter": "/usr/bin/python", + "ansible_shell_type": "sh", + "ansible_ssh_pipelining": true, + "ansible_ssh_private_key_file": null, + "ansible_user": "ansible", + "has_svc_consul": true, + "has_svc_consul_template": true, + "has_svc_mongod": true, + "has_svc_noc": true, + "has_svc_nsqd": true, + "has_svc_nsqlookupd": true, + "noc_dc": "kr01", + "node_id": 4, + "required_assets": [] + }, + "mongodb02": { + "ansible_connection": "ssh", + "ansible_host": "192.168.1.65", + "ansible_port": 22, + "ansible_python_interpreter": "/usr/bin/python", + "ansible_shell_type": "sh", + "ansible_ssh_pipelining": true, + "ansible_ssh_private_key_file": null, + "ansible_user": "ansible", + "has_svc_consul": true, + "has_svc_consul_template": true, + "has_svc_mongod": true, + "has_svc_noc": true, + "has_svc_nsqd": true, + "has_svc_nsqlookupd": true, + "noc_dc": "kr01", + "node_id": 2, + "required_assets": [] + }, + "mongodb03": { + "ansible_connection": "ssh", + "ansible_host": "192.168.2.65", + "ansible_port": 22, + "ansible_python_interpreter": "/usr/bin/python", + "ansible_shell_type": "sh", + "ansible_ssh_pipelining": true, + "ansible_ssh_private_key_file": null, + "ansible_user": "ansible", + "has_svc_consul": true, + "has_svc_consul_template": true, + "has_svc_mongod": true, + "has_svc_noc": true, + "has_svc_nsqd": true, + "has_svc_nsqlookupd": true, + "noc_dc": "sdc", + "node_id": 3, + "required_assets": [] + }, + "web01": { + "ansible_connection": "ssh", + "ansible_host": "192.168.3.51", + "ansible_port": 22, + "ansible_python_interpreter": "/usr/bin/python", + "ansible_shell_type": "sh", + "ansible_ssh_pipelining": true, + "ansible_ssh_private_key_file": null, + "ansible_user": "ansible", + "has_svc_card": true, + "has_svc_consul": true, + "has_svc_consul_template": true, + "has_svc_grafana": true, + "has_svc_grafanads": true, + "has_svc_login": true, + "has_svc_noc": true, + "has_svc_nsqd": true, + "noc_dc": "kr01", + "node_id": 12, + "required_assets": [ + "card", + "web" + ] + }, + "web02": { + "ansible_connection": "ssh", + "ansible_host": "192.168.3.52", + "ansible_port": 22, + "ansible_python_interpreter": "/usr/bin/python", + "ansible_shell_type": "sh", + "ansible_ssh_pipelining": true, + "ansible_ssh_private_key_file": null, + "ansible_user": "ansible", + "has_svc_card": true, + "has_svc_consul": true, + "has_svc_consul_template": true, + "has_svc_grafana": true, + "has_svc_grafanads": true, + "has_svc_login": true, + "has_svc_noc": true, + "has_svc_nsqd": true, + "noc_dc": "sdc", + "node_id": 13, + "required_assets": [ + "card", + "web" + ] + }, + "wrk01": { + "ansible_connection": "ssh", + "ansible_host": "192.168.1.67", + "ansible_port": 22, + "ansible_python_interpreter": "/usr/bin/python", + "ansible_shell_type": "sh", + "ansible_ssh_pipelining": true, + "ansible_ssh_private_key_file": null, + "ansible_user": "ansible", + "has_svc_activator": true, + "has_svc_consul": true, + "has_svc_consul_template": true, + "has_svc_mrt": true, + "has_svc_noc": true, + "has_svc_nsqd": true, + "has_svc_ping": true, + "has_svc_web": true, + "noc_dc": "kr01", + "node_id": 11, + "required_assets": [ + "mib", + "web" + ] + }, + "wrk02": { + "ansible_connection": "ssh", + "ansible_host": "192.168.2.67", + "ansible_port": 22, + "ansible_python_interpreter": "/usr/bin/python", + "ansible_shell_type": "sh", + "ansible_ssh_pipelining": true, + "ansible_ssh_private_key_file": null, + "ansible_user": "ansible", + "has_svc_activator": true, + "has_svc_consul": true, + "has_svc_consul_template": true, + "has_svc_mrt": true, + "has_svc_noc": true, + "has_svc_nsqd": true, + "has_svc_ping": true, + "has_svc_web": true, + "noc_dc": "sdc", + "node_id": 10, + "required_assets": [ + "mib", + "web" + ] + } + } + }, + "all": { + "vars": { + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "install_method": "git", + "installation_type": "prod", + "noc_all_pools": [ + { + "description": "Default pool for some.ru", + "name": "default" + }, + { + "description": "", + "name": "test" + } + ], + "noc_env": "NOC", + "noc_env_type": "prod", + "noc_installation_name": "noc", + "noc_web_host": "noc", + "playbook_link": "git+https://github.com/nocproject/ansible_deploy@microservices", + "tower_data": "/home/shirokih/projects/tower/venv3/var/tower/data/NOC", + "tower_ssh_keys": "/home/shirokih/projects/tower/venv3/var/tower/ssh/NOC" + } + }, + "cfg-activator-default-wrk01": { + "hosts": [ + "wrk01" + ], + "vars": { + "activator_loglevel": "info", + "activator_power": 4, + "activator_script_threads": 200 + } + }, + "cfg-activator-default-wrk02": { + "hosts": [ + "wrk02" + ], + "vars": { + "activator_loglevel": "info", + "activator_power": 4, + "activator_script_threads": 200 + } + }, + "cfg-bi-clickhouse02": { + "hosts": [ + "clickhouse02" + ], + "vars": { + "bi_language": "ru", + "bi_loglevel": "info", + "bi_power": 2 + } + }, + "cfg-card-web01": { + "hosts": [ + "web01" + ], + "vars": { + "card_language": "ru", + "card_loglevel": "info", + "card_power": 2 + } + }, + "cfg-card-web02": { + "hosts": [ + "web02" + ], + "vars": { + "card_language": "ru", + "card_loglevel": "info", + "card_power": 2 + } + }, + "cfg-ch_datasource-clickhouse02": { + "hosts": [ + "clickhouse02" + ], + "vars": { + "ch_datasource_loglevel": "info", + "ch_datasource_power": 2 + } + }, + "cfg-chwriter-clickhouse02": { + "hosts": [ + "clickhouse02" + ], + "vars": { + "chwriter_loglevel": "info", + "chwriter_power": 2 + } + }, + "cfg-classifier-default-discovery01": { + "hosts": [ + "discovery01" + ], + "vars": { + "classifier_loglevel": "info", + "classifier_lookup_solution": "noc.services.classifier.rulelookup.RuleLookup", + "classifier_power": 32 + } + }, + "cfg-classifier-default-discovery02": { + "hosts": [ + "discovery02" + ], + "vars": { + "classifier_loglevel": "info", + "classifier_lookup_solution": "noc.services.classifier.rulelookup.RuleLookup", + "classifier_power": 32 + } + }, + "cfg-clickhouse-clickhouse02": { + "hosts": [ + "clickhouse02" + ], + "vars": { + "clickhouse_loglevel": "info" + } + }, + "cfg-consul-clickhouse01": { + "hosts": [ + "clickhouse01" + ], + "vars": { + "consul_loglevel": "info", + "consul_power": "agent" + } + }, + "cfg-consul-clickhouse02": { + "hosts": [ + "clickhouse02" + ], + "vars": { + "consul_loglevel": "info", + "consul_power": "agent" + } + }, + "cfg-consul-collector": { + "hosts": [ + "collector" + ], + "vars": { + "consul_loglevel": "info", + "consul_power": "agent" + } + }, + "cfg-consul-discovery01": { + "hosts": [ + "discovery01" + ], + "vars": { + "consul_loglevel": "info", + "consul_power": "agent" + } + }, + "cfg-consul-discovery02": { + "hosts": [ + "discovery02" + ], + "vars": { + "consul_loglevel": "info", + "consul_power": "agent" + } + }, + "cfg-consul-influxdb01": { + "hosts": [ + "influxdb01" + ], + "vars": { + "consul_loglevel": "info", + "consul_power": "agent" + } + }, + "cfg-consul-mongodb01": { + "hosts": [ + "mongodb01" + ], + "vars": { + "consul_loglevel": "info", + "consul_power": "server" + } + }, + "cfg-consul-mongodb02": { + "hosts": [ + "mongodb02" + ], + "vars": { + "consul_loglevel": "info", + "consul_power": "server" + } + }, + "cfg-consul-mongodb03": { + "hosts": [ + "mongodb03" + ], + "vars": { + "consul_loglevel": "info", + "consul_power": "server" + } + }, + "cfg-consul-template-clickhouse01": { + "hosts": [ + "clickhouse01" + ], + "vars": { + "consul_template_loglevel": "info", + "consul_template_use_dedup": 0 + } + }, + "cfg-consul-template-clickhouse02": { + "hosts": [ + "clickhouse02" + ], + "vars": { + "consul_template_loglevel": "info", + "consul_template_use_dedup": 0 + } + }, + "cfg-consul-template-collector": { + "hosts": [ + "collector" + ], + "vars": { + "consul_template_loglevel": "info", + "consul_template_use_dedup": 0 + } + }, + "cfg-consul-template-discovery01": { + "hosts": [ + "discovery01" + ], + "vars": { + "consul_template_loglevel": "info", + "consul_template_use_dedup": 0 + } + }, + "cfg-consul-template-discovery02": { + "hosts": [ + "discovery02" + ], + "vars": { + "consul_template_loglevel": "info", + "consul_template_use_dedup": 0 + } + }, + "cfg-consul-template-influxdb01": { + "hosts": [ + "influxdb01" + ], + "vars": { + "consul_template_loglevel": "info", + "consul_template_use_dedup": 0 + } + }, + "cfg-consul-template-mongodb01": { + "hosts": [ + "mongodb01" + ], + "vars": { + "consul_template_loglevel": "info", + "consul_template_use_dedup": 0 + } + }, + "cfg-consul-template-mongodb02": { + "hosts": [ + "mongodb02" + ], + "vars": { + "consul_template_loglevel": "info", + "consul_template_use_dedup": 0 + } + }, + "cfg-consul-template-mongodb03": { + "hosts": [ + "mongodb03" + ], + "vars": { + "consul_template_loglevel": "info", + "consul_template_use_dedup": 0 + } + }, + "cfg-consul-template-web01": { + "hosts": [ + "web01" + ], + "vars": { + "consul_template_loglevel": "info", + "consul_template_use_dedup": 0 + } + }, + "cfg-consul-template-web02": { + "hosts": [ + "web02" + ], + "vars": { + "consul_template_loglevel": "info", + "consul_template_use_dedup": 0 + } + }, + "cfg-consul-template-wrk01": { + "hosts": [ + "wrk01" + ], + "vars": { + "consul_template_loglevel": "info", + "consul_template_use_dedup": 0 + } + }, + "cfg-consul-template-wrk02": { + "hosts": [ + "wrk02" + ], + "vars": { + "consul_template_loglevel": "info", + "consul_template_use_dedup": 0 + } + }, + "cfg-consul-web01": { + "hosts": [ + "web01" + ], + "vars": { + "consul_loglevel": "info", + "consul_power": "agent" + } + }, + "cfg-consul-web02": { + "hosts": [ + "web02" + ], + "vars": { + "consul_loglevel": "info", + "consul_power": "agent" + } + }, + "cfg-consul-wrk01": { + "hosts": [ + "wrk01" + ], + "vars": { + "consul_loglevel": "info", + "consul_power": "agent" + } + }, + "cfg-consul-wrk02": { + "hosts": [ + "wrk02" + ], + "vars": { + "consul_loglevel": "info", + "consul_power": "agent" + } + }, + "cfg-correlator-default-discovery01": { + "hosts": [ + "discovery01" + ], + "vars": { + "correlator_loglevel": "info", + "correlator_max_threads": 40, + "correlator_power": 1 + } + }, + "cfg-correlator-default-discovery02": { + "hosts": [ + "discovery02" + ], + "vars": { + "correlator_loglevel": "info", + "correlator_max_threads": 40, + "correlator_power": 1 + } + }, + "cfg-discovery-default-discovery01": { + "hosts": [ + "discovery01" + ], + "vars": { + "discovery_backup_power": 8, + "discovery_loglevel": "info", + "discovery_max_threads": 200, + "discovery_power": 8 + } + }, + "cfg-discovery-default-discovery02": { + "hosts": [ + "discovery02" + ], + "vars": { + "discovery_backup_power": 8, + "discovery_loglevel": "info", + "discovery_max_threads": 200, + "discovery_power": 8 + } + }, + "cfg-escalator-discovery01": { + "hosts": [ + "discovery01" + ], + "vars": { + "escalator_loglevel": "info", + "escalator_max_threads": 40, + "escalator_power": 1 + } + }, + "cfg-escalator-discovery02": { + "hosts": [ + "discovery02" + ], + "vars": { + "escalator_loglevel": "info", + "escalator_max_threads": 40, + "escalator_power": 1 + } + }, + "cfg-grafana-web01": { + "hosts": [ + "web01" + ], + "vars": { + "grafana_loglevel": "info" + } + }, + "cfg-grafana-web02": { + "hosts": [ + "web02" + ], + "vars": { + "grafana_loglevel": "info" + } + }, + "cfg-grafanads-web01": { + "hosts": [ + "web01" + ], + "vars": { + "grafanads_loglevel": "info", + "grafanads_power": 2 + } + }, + "cfg-grafanads-web02": { + "hosts": [ + "web02" + ], + "vars": { + "grafanads_loglevel": "info", + "grafanads_power": 2 + } + }, + "cfg-login-web01": { + "hosts": [ + "web01" + ], + "vars": { + "login_language": "ru", + "login_ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", + "login_loglevel": "info", + "login_methods": "local,ldap", + "login_power": 2 + } + }, + "cfg-login-web02": { + "hosts": [ + "web02" + ], + "vars": { + "login_language": "ru", + "login_ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", + "login_loglevel": "info", + "login_methods": "local,ldap", + "login_power": 2 + } + }, + "cfg-mailsender-discovery01": { + "hosts": [ + "discovery01" + ], + "vars": { + "mailsender_from_address": "nocproject@some.ru.ru", + "mailsender_loglevel": "info", + "mailsender_power": 2, + "mailsender_smtp_password": "XXX", + "mailsender_smtp_port": 587, + "mailsender_smtp_server": "smtp.some.ru.ru", + "mailsender_smtp_user": "noc", + "mailsender_use_tls": 1 + } + }, + "cfg-mailsender-discovery02": { + "hosts": [ + "discovery02" + ], + "vars": { + "mailsender_from_address": "nocproject@some.ru.ru", + "mailsender_loglevel": "info", + "mailsender_power": 2, + "mailsender_smtp_password": "XXX", + "mailsender_smtp_port": 587, + "mailsender_smtp_server": "smtp.some.ru.ru", + "mailsender_smtp_user": "noc", + "mailsender_use_tls": 1 + } + }, + "cfg-mongod-mongodb01": { + "hosts": [ + "mongodb01" + ], + "vars": { + "mongod_loglevel": "info", + "mongod_mongod_db": "noc", + "mongod_mongod_engine": "wiredTiger", + "mongod_mongod_logging_destination": "file", + "mongod_mongod_password": "noc", + "mongod_mongod_rs": "noc", + "mongod_mongod_user": "noc", + "mongod_power": "server" + } + }, + "cfg-mongod-mongodb02": { + "hosts": [ + "mongodb02" + ], + "vars": { + "mongod_loglevel": "info", + "mongod_mongod_db": "noc", + "mongod_mongod_engine": "wiredTiger", + "mongod_mongod_logging_destination": "file", + "mongod_mongod_password": "noc", + "mongod_mongod_rs": "noc", + "mongod_mongod_user": "noc", + "mongod_power": "server" + } + }, + "cfg-mongod-mongodb03": { + "hosts": [ + "mongodb03" + ], + "vars": { + "mongod_loglevel": "info", + "mongod_mongod_db": "noc", + "mongod_mongod_engine": "wiredTiger", + "mongod_mongod_logging_destination": "file", + "mongod_mongod_password": "noc", + "mongod_mongod_rs": "noc", + "mongod_mongod_user": "noc", + "mongod_power": "server" + } + }, + "cfg-mrt-wrk01": { + "hosts": [ + "wrk01" + ], + "vars": { + "mrt_loglevel": "info", + "mrt_max_concurrency": 100, + "mrt_power": 2 + } + }, + "cfg-mrt-wrk02": { + "hosts": [ + "wrk02" + ], + "vars": { + "mrt_loglevel": "info", + "mrt_max_concurrency": 100, + "mrt_power": 2 + } + }, + "cfg-noc-clickhouse01": { + "hosts": [ + "clickhouse01" + ], + "vars": { + "noc_group": "noc", + "noc_loglevel": "info", + "noc_repo": "https://github.com/nocproject/noc.git", + "noc_root": "/opt/noc", + "noc_user": "noc", + "noc_version": "microservices" + } + }, + "cfg-noc-clickhouse02": { + "hosts": [ + "clickhouse02" + ], + "vars": { + "noc_group": "noc", + "noc_loglevel": "info", + "noc_repo": "https://github.com/nocproject/noc.git", + "noc_root": "/opt/noc", + "noc_user": "noc", + "noc_version": "microservices" + } + }, + "cfg-noc-collector": { + "hosts": [ + "collector" + ], + "vars": { + "noc_group": "noc", + "noc_loglevel": "info", + "noc_repo": "https://github.com/nocproject/noc.git", + "noc_root": "/opt/noc", + "noc_user": "noc", + "noc_version": "microservices" + } + }, + "cfg-noc-discovery01": { + "hosts": [ + "discovery01" + ], + "vars": { + "noc_group": "noc", + "noc_loglevel": "info", + "noc_repo": "https://github.com/nocproject/noc.git", + "noc_root": "/opt/noc", + "noc_user": "noc", + "noc_version": "microservices" + } + }, + "cfg-noc-discovery02": { + "hosts": [ + "discovery02" + ], + "vars": { + "noc_group": "noc", + "noc_loglevel": "info", + "noc_repo": "https://github.com/nocproject/noc.git", + "noc_root": "/opt/noc", + "noc_user": "noc", + "noc_version": "microservices" + } + }, + "cfg-noc-influxdb01": { + "hosts": [ + "influxdb01" + ], + "vars": { + "noc_group": "noc", + "noc_loglevel": "info", + "noc_repo": "https://github.com/nocproject/noc.git", + "noc_root": "/opt/noc", + "noc_user": "noc", + "noc_version": "microservices" + } + }, + "cfg-noc-mongodb01": { + "hosts": [ + "mongodb01" + ], + "vars": { + "noc_group": "noc", + "noc_loglevel": "info", + "noc_repo": "https://github.com/nocproject/noc.git", + "noc_root": "/opt/noc", + "noc_user": "noc", + "noc_version": "microservices" + } + }, + "cfg-noc-mongodb02": { + "hosts": [ + "mongodb02" + ], + "vars": { + "noc_group": "noc", + "noc_loglevel": "info", + "noc_repo": "https://github.com/nocproject/noc.git", + "noc_root": "/opt/noc", + "noc_user": "noc", + "noc_version": "microservices" + } + }, + "cfg-noc-mongodb03": { + "hosts": [ + "mongodb03" + ], + "vars": { + "noc_group": "noc", + "noc_loglevel": "info", + "noc_repo": "https://github.com/nocproject/noc.git", + "noc_root": "/opt/noc", + "noc_user": "noc", + "noc_version": "microservices" + } + }, + "cfg-noc-web01": { + "hosts": [ + "web01" + ], + "vars": { + "noc_group": "noc", + "noc_loglevel": "info", + "noc_repo": "https://github.com/nocproject/noc.git", + "noc_root": "/opt/noc", + "noc_user": "noc", + "noc_version": "microservices" + } + }, + "cfg-noc-web02": { + "hosts": [ + "web02" + ], + "vars": { + "noc_group": "noc", + "noc_loglevel": "info", + "noc_repo": "https://github.com/nocproject/noc.git", + "noc_root": "/opt/noc", + "noc_user": "noc", + "noc_version": "microservices" + } + }, + "cfg-noc-wrk01": { + "hosts": [ + "wrk01" + ], + "vars": { + "noc_group": "noc", + "noc_loglevel": "info", + "noc_repo": "https://github.com/nocproject/noc.git", + "noc_root": "/opt/noc", + "noc_user": "noc", + "noc_version": "microservices" + } + }, + "cfg-noc-wrk02": { + "hosts": [ + "wrk02" + ], + "vars": { + "noc_group": "noc", + "noc_loglevel": "info", + "noc_repo": "https://github.com/nocproject/noc.git", + "noc_root": "/opt/noc", + "noc_user": "noc", + "noc_version": "microservices" + } + }, + "cfg-nsqd-clickhouse01": { + "hosts": [ + "clickhouse01" + ], + "vars": { + "nsqd_loglevel": "info", + "nsqd_max_messages_in_memory": 50000, + "nsqd_max_msg_size": 1048576 + } + }, + "cfg-nsqd-clickhouse02": { + "hosts": [ + "clickhouse02" + ], + "vars": { + "nsqd_loglevel": "info", + "nsqd_max_messages_in_memory": 50000, + "nsqd_max_msg_size": 1048576 + } + }, + "cfg-nsqd-collector": { + "hosts": [ + "collector" + ], + "vars": { + "nsqd_loglevel": "info", + "nsqd_max_messages_in_memory": 50000, + "nsqd_max_msg_size": 1048576 + } + }, + "cfg-nsqd-discovery01": { + "hosts": [ + "discovery01" + ], + "vars": { + "nsqd_loglevel": "info", + "nsqd_max_messages_in_memory": 50000, + "nsqd_max_msg_size": 1048576 + } + }, + "cfg-nsqd-discovery02": { + "hosts": [ + "discovery02" + ], + "vars": { + "nsqd_loglevel": "info", + "nsqd_max_messages_in_memory": 50000, + "nsqd_max_msg_size": 1048576 + } + }, + "cfg-nsqd-influxdb01": { + "hosts": [ + "influxdb01" + ], + "vars": { + "nsqd_loglevel": "info", + "nsqd_max_messages_in_memory": 50000, + "nsqd_max_msg_size": 1048576 + } + }, + "cfg-nsqd-mongodb01": { + "hosts": [ + "mongodb01" + ], + "vars": { + "nsqd_loglevel": "info", + "nsqd_max_messages_in_memory": 50000, + "nsqd_max_msg_size": 1048576 + } + }, + "cfg-nsqd-mongodb02": { + "hosts": [ + "mongodb02" + ], + "vars": { + "nsqd_loglevel": "info", + "nsqd_max_messages_in_memory": 50000, + "nsqd_max_msg_size": 1048576 + } + }, + "cfg-nsqd-mongodb03": { + "hosts": [ + "mongodb03" + ], + "vars": { + "nsqd_loglevel": "info", + "nsqd_max_messages_in_memory": 50000, + "nsqd_max_msg_size": 1048576 + } + }, + "cfg-nsqd-web01": { + "hosts": [ + "web01" + ], + "vars": { + "nsqd_loglevel": "info", + "nsqd_max_messages_in_memory": 50000, + "nsqd_max_msg_size": 1048576 + } + }, + "cfg-nsqd-web02": { + "hosts": [ + "web02" + ], + "vars": { + "nsqd_loglevel": "info", + "nsqd_max_messages_in_memory": 50000, + "nsqd_max_msg_size": 1048576 + } + }, + "cfg-nsqd-wrk01": { + "hosts": [ + "wrk01" + ], + "vars": { + "nsqd_loglevel": "info", + "nsqd_max_messages_in_memory": 50000, + "nsqd_max_msg_size": 1048576 + } + }, + "cfg-nsqd-wrk02": { + "hosts": [ + "wrk02" + ], + "vars": { + "nsqd_loglevel": "info", + "nsqd_max_messages_in_memory": 50000, + "nsqd_max_msg_size": 1048576 + } + }, + "cfg-nsqlookupd-mongodb01": { + "hosts": [ + "mongodb01" + ], + "vars": { + "nsqlookupd_loglevel": "info" + } + }, + "cfg-nsqlookupd-mongodb02": { + "hosts": [ + "mongodb02" + ], + "vars": { + "nsqlookupd_loglevel": "info" + } + }, + "cfg-nsqlookupd-mongodb03": { + "hosts": [ + "mongodb03" + ], + "vars": { + "nsqlookupd_loglevel": "info" + } + }, + "cfg-ping-default-wrk01": { + "hosts": [ + "wrk01" + ], + "vars": { + "ping_backup_power": 2, + "ping_loglevel": "info", + "ping_power": 2 + } + }, + "cfg-ping-default-wrk02": { + "hosts": [ + "wrk02" + ], + "vars": { + "ping_backup_power": 2, + "ping_loglevel": "info", + "ping_power": 2 + } + }, + "cfg-postgres-collector": { + "hosts": [ + "collector" + ], + "vars": { + "postgres_loglevel": "info", + "postgres_postgres_db": "noc", + "postgres_postgres_password": "noc", + "postgres_postgres_user": "noc", + "postgres_power": "master", + "postgres_replicator_password": "noc", + "postgres_superuser_password": "noc" + } + }, + "cfg-sae-discovery01": { + "hosts": [ + "discovery01" + ], + "vars": { + "sae_db_threads": 16, + "sae_loglevel": "info", + "sae_power": 2 + } + }, + "cfg-sae-discovery02": { + "hosts": [ + "discovery02" + ], + "vars": { + "sae_db_threads": 16, + "sae_loglevel": "info", + "sae_power": 2 + } + }, + "cfg-scheduler-discovery01": { + "hosts": [ + "discovery01" + ], + "vars": { + "scheduler_loglevel": "info", + "scheduler_max_threads": 40, + "scheduler_power": 1 + } + }, + "cfg-scheduler-discovery02": { + "hosts": [ + "discovery02" + ], + "vars": { + "scheduler_loglevel": "info", + "scheduler_max_threads": 40, + "scheduler_power": 1 + } + }, + "cfg-syslogcollector-default-collector": { + "hosts": [ + "collector" + ], + "vars": { + "syslogcollector_loglevel": "info", + "syslogcollector_power": 1 + } + }, + "cfg-tgsender-discovery01": { + "hosts": [ + "discovery01" + ], + "vars": { + "tgsender_loglevel": "info", + "tgsender_power": 2, + "tgsender_token": "noc" + } + }, + "cfg-tgsender-discovery02": { + "hosts": [ + "discovery02" + ], + "vars": { + "tgsender_loglevel": "info", + "tgsender_power": 2, + "tgsender_token": "noc" + } + }, + "cfg-trapcollector-default-collector": { + "hosts": [ + "collector" + ], + "vars": { + "trapcollector_loglevel": "info", + "trapcollector_power": 1 + } + }, + "cfg-web-wrk01": { + "hosts": [ + "wrk01" + ], + "vars": { + "web_language": "ru", + "web_loglevel": "info", + "web_power": 2 + } + }, + "cfg-web-wrk02": { + "hosts": [ + "wrk02" + ], + "vars": { + "web_language": "ru", + "web_loglevel": "info", + "web_power": 2 + } + }, + "dc-kr01": { + "hosts": [ + "clickhouse01", + "collector", + "discovery01", + "influxdb01", + "mongodb01", + "mongodb02", + "web01", + "wrk01" + ], + "vars": {} + }, + "dc-sdc": { + "hosts": [ + "clickhouse02", + "discovery02", + "mongodb03", + "web02", + "wrk02" + ], + "vars": {} + }, + "noc-config-clickhouse02": { + "hosts": [ + "clickhouse02" + ], + "vars": { + "noc_services": [ + { + "config": { + "language": "ru", + "loglevel": "info", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "clickhouse" + ], + "level": "global", + "required_assets": [ + "bi" + ], + "supervisord": { + "command": "./services/bi/service.py", + "oom_score_adj": 50, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 2 + } + }, + "name": "bi", + "pool": null + }, + { + "config": { + "loglevel": "info", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "mongod" + ], + "level": "global", + "supervisord": { + "command": "./services/datasource/service.py", + "oom_score_adj": 999, + "priority": 100, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "1MB", + "stopwaitsecs": 3 + } + }, + "name": "ch_datasource", + "pool": null + }, + { + "config": { + "loglevel": "info", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "nsqlookupd", + "nsqd", + "clickhouse" + ], + "level": "global", + "supervisord": { + "command": "./services/chwriter/service.py", + "oom_score_adj": 10, + "priority": 300, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 2 + } + }, + "name": "chwriter", + "pool": null + } + ] + } + }, + "noc-config-collector": { + "hosts": [ + "collector" + ], + "vars": { + "noc_services": [ + { + "config": { + "loglevel": "info", + "power": 1 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "datastream" + ], + "level": "pool", + "supervisord": { + "command": "./services/syslogcollector/service.py", + "oom_score_adj": 50, + "priority": 200, + "process_name": "%(program_name)s", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3, + "user": "root" + } + }, + "name": "syslogcollector", + "pool": "default" + }, + { + "config": { + "loglevel": "info", + "power": 1 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "datastream" + ], + "level": "pool", + "supervisord": { + "command": "./services/trapcollector/service.py", + "oom_score_adj": 50, + "priority": 200, + "process_name": "%(program_name)s", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 2, + "user": "root" + } + }, + "name": "trapcollector", + "pool": "default" + } + ] + } + }, + "noc-config-discovery01": { + "hosts": [ + "discovery01" + ], + "vars": { + "noc_services": [ + { + "config": { + "loglevel": "info", + "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup", + "power": 32 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "mongod" + ], + "level": "pool", + "supervisord": { + "command": "./services/classifier/service.py", + "oom_score_adj": 50, + "priority": 300, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "classifier", + "pool": "default" + }, + { + "config": { + "loglevel": "info", + "max_threads": 40, + "power": 1 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "pool", + "supervisord": { + "command": "./services/correlator/service.py", + "oom_score_adj": 20, + "priority": 150, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 5 + } + }, + "name": "correlator", + "pool": "default" + }, + { + "config": { + "backup_power": 8, + "loglevel": "info", + "max_threads": 200, + "power": 8 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "pool", + "supervisord": { + "command": "./services/discovery/service.py", + "oom_score_adj": 500, + "priority": 100, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "discovery", + "pool": "default" + }, + { + "config": { + "loglevel": "info", + "max_threads": 40, + "power": 1 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/escalator/service.py", + "oom_score_adj": 5, + "priority": 50, + "process_name": "%(program_name)s", + "startretries": 999, + "stdout_logfile_backups": 10, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "escalator", + "pool": null + }, + { + "config": { + "from_address": "nocproject@some.ru.ru", + "loglevel": "info", + "power": 2, + "smtp_password": "XXX", + "smtp_port": 587, + "smtp_server": "smtp.some.ru.ru", + "smtp_user": "noc", + "use_tls": 1 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/mailsender/service.py", + "oom_score_adj": 100, + "priority": 600, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "mailsender", + "pool": null + }, + { + "config": { + "db_threads": 16, + "loglevel": "info", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/sae/service.py", + "oom_score_adj": 300, + "priority": 90, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 1 + } + }, + "name": "sae", + "pool": null + }, + { + "config": { + "loglevel": "info", + "max_threads": 40, + "power": 1 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/scheduler/service.py", + "oom_score_adj": 100, + "priority": 50, + "process_name": "%(program_name)s", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "scheduler", + "pool": null + }, + { + "config": { + "loglevel": "info", + "power": 2, + "token": "noc" + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/tgsender/service.py", + "oom_score_adj": 300, + "priority": 600, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 5, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 2 + } + }, + "name": "tgsender", + "pool": null + } + ] + } + }, + "noc-config-discovery02": { + "hosts": [ + "discovery02" + ], + "vars": { + "noc_services": [ + { + "config": { + "loglevel": "info", + "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup", + "power": 32 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "mongod" + ], + "level": "pool", + "supervisord": { + "command": "./services/classifier/service.py", + "oom_score_adj": 50, + "priority": 300, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "classifier", + "pool": "default" + }, + { + "config": { + "loglevel": "info", + "max_threads": 40, + "power": 1 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "pool", + "supervisord": { + "command": "./services/correlator/service.py", + "oom_score_adj": 20, + "priority": 150, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 5 + } + }, + "name": "correlator", + "pool": "default" + }, + { + "config": { + "backup_power": 8, + "loglevel": "info", + "max_threads": 200, + "power": 8 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "pool", + "supervisord": { + "command": "./services/discovery/service.py", + "oom_score_adj": 500, + "priority": 100, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "discovery", + "pool": "default" + }, + { + "config": { + "loglevel": "info", + "max_threads": 40, + "power": 1 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/escalator/service.py", + "oom_score_adj": 5, + "priority": 50, + "process_name": "%(program_name)s", + "startretries": 999, + "stdout_logfile_backups": 10, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "escalator", + "pool": null + }, + { + "config": { + "from_address": "nocproject@some.ru.ru", + "loglevel": "info", + "power": 2, + "smtp_password": "XXX", + "smtp_port": 587, + "smtp_server": "smtp.some.ru.ru", + "smtp_user": "noc", + "use_tls": 1 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/mailsender/service.py", + "oom_score_adj": 100, + "priority": 600, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "mailsender", + "pool": null + }, + { + "config": { + "db_threads": 16, + "loglevel": "info", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/sae/service.py", + "oom_score_adj": 300, + "priority": 90, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 1 + } + }, + "name": "sae", + "pool": null + }, + { + "config": { + "loglevel": "info", + "max_threads": 40, + "power": 1 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/scheduler/service.py", + "oom_score_adj": 100, + "priority": 50, + "process_name": "%(program_name)s", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "scheduler", + "pool": null + }, + { + "config": { + "loglevel": "info", + "power": 2, + "token": "noc" + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/tgsender/service.py", + "oom_score_adj": 300, + "priority": 600, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 5, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 2 + } + }, + "name": "tgsender", + "pool": null + } + ] + } + }, + "noc-config-web01": { + "hosts": [ + "web01" + ], + "vars": { + "noc_services": [ + { + "config": { + "language": "ru", + "loglevel": "info", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "nginx" + ], + "level": "global", + "required_assets": [ + "card", + "web" + ], + "supervisord": { + "command": "./services/card/service.py", + "oom_score_adj": 100, + "priority": 300, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 1 + } + }, + "name": "card", + "pool": null + }, + { + "config": { + "loglevel": "info", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "grafana", + "nginx" + ], + "level": "global", + "supervisord": { + "command": "./services/grafanads/service.py", + "oom_score_adj": 900, + "priority": 500, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 1, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 1 + } + }, + "name": "grafanads", + "pool": null + }, + { + "config": { + "language": "ru", + "ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", + "loglevel": "info", + "methods": "local,ldap", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/login/service.py", + "oom_score_adj": 10, + "priority": 40, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 5, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "login", + "pool": null + } + ] + } + }, + "noc-config-web02": { + "hosts": [ + "web02" + ], + "vars": { + "noc_services": [ + { + "config": { + "language": "ru", + "loglevel": "info", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "nginx" + ], + "level": "global", + "required_assets": [ + "card", + "web" + ], + "supervisord": { + "command": "./services/card/service.py", + "oom_score_adj": 100, + "priority": 300, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 1 + } + }, + "name": "card", + "pool": null + }, + { + "config": { + "loglevel": "info", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "grafana", + "nginx" + ], + "level": "global", + "supervisord": { + "command": "./services/grafanads/service.py", + "oom_score_adj": 900, + "priority": 500, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 1, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 1 + } + }, + "name": "grafanads", + "pool": null + }, + { + "config": { + "language": "ru", + "ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", + "loglevel": "info", + "methods": "local,ldap", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/login/service.py", + "oom_score_adj": 10, + "priority": 40, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 5, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "login", + "pool": null + } + ] + } + }, + "noc-config-wrk01": { + "hosts": [ + "wrk01" + ], + "vars": { + "noc_services": [ + { + "config": { + "loglevel": "info", + "power": 4, + "script_threads": 200 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "sae", + "discovery" + ], + "level": "pool", + "supervisord": { + "command": "{{ activator_command }}", + "oom_score_adj": 300, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "activator", + "pool": "default" + }, + { + "config": { + "loglevel": "info", + "max_concurrency": 100, + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/mrt/service.py", + "oom_score_adj": 100, + "priority": 110, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "mrt", + "pool": null + }, + { + "config": { + "backup_power": 2, + "loglevel": "info", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "nsqlookupd", + "nsqd", + "datastream" + ], + "level": "pool", + "supervisord": { + "command": "./services/ping/service.py", + "oom_score_adj": 200, + "priority": 90, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 1, + "user": "root" + } + }, + "name": "ping", + "pool": "default" + }, + { + "config": { + "language": "ru", + "loglevel": "info", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "nginx" + ], + "level": "global", + "required_assets": [ + "web", + "mib" + ], + "supervisord": { + "command": "./services/web/service.py", + "oom_score_adj": 300, + "priority": 50, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 2 + } + }, + "name": "web", + "pool": null + } + ] + } + }, + "noc-config-wrk02": { + "hosts": [ + "wrk02" + ], + "vars": { + "noc_services": [ + { + "config": { + "loglevel": "info", + "power": 4, + "script_threads": 200 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "sae", + "discovery" + ], + "level": "pool", + "supervisord": { + "command": "{{ activator_command }}", + "oom_score_adj": 300, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "activator", + "pool": "default" + }, + { + "config": { + "loglevel": "info", + "max_concurrency": 100, + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/mrt/service.py", + "oom_score_adj": 100, + "priority": 110, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "mrt", + "pool": null + }, + { + "config": { + "backup_power": 2, + "loglevel": "info", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "nsqlookupd", + "nsqd", + "datastream" + ], + "level": "pool", + "supervisord": { + "command": "./services/ping/service.py", + "oom_score_adj": 200, + "priority": 90, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 1, + "user": "root" + } + }, + "name": "ping", + "pool": "default" + }, + { + "config": { + "language": "ru", + "loglevel": "info", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "nginx" + ], + "level": "global", + "required_assets": [ + "web", + "mib" + ], + "supervisord": { + "command": "./services/web/service.py", + "oom_score_adj": 300, + "priority": 50, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 2 + } + }, + "name": "web", + "pool": null + } + ] + } + }, + "nodes": { + "hosts": [ + "clickhouse01", + "collector", + "discovery01", + "influxdb01", + "mongodb01", + "mongodb02", + "web01", + "wrk01", + "clickhouse02", + "discovery02", + "mongodb03", + "web02", + "wrk02" + ], + "vars": {} + }, + "svc-activator": { + "children": [ + "cfg-activator-default-wrk02", + "svc-activator-read", + "cfg-activator-default-wrk01" + ], + "vars": { + "activator_loglevel": "info", + "activator_power": 4, + "activator_script_threads": 200 + } + }, + "svc-activator-exec": { + "hosts": [ + "wrk02", + "wrk01" + ] + }, + "svc-activator-read": { + "hosts": [] + }, + "svc-bi": { + "children": [ + "cfg-bi-clickhouse02", + "svc-bi-read" + ], + "vars": { + "bi_language": "ru", + "bi_loglevel": "info", + "bi_power": 2 + } + }, + "svc-bi-exec": { + "hosts": [ + "clickhouse02" + ] + }, + "svc-bi-read": { + "hosts": [] + }, + "svc-card": { + "children": [ + "cfg-card-web01", + "svc-card-read", + "cfg-card-web02" + ], + "vars": { + "card_language": "ru", + "card_loglevel": "info", + "card_power": 2 + } + }, + "svc-card-exec": { + "hosts": [ + "web01", + "web02" + ] + }, + "svc-card-read": { + "hosts": [] + }, + "svc-ch_datasource": { + "children": [ + "cfg-ch_datasource-clickhouse02", + "svc-ch_datasource-read" + ], + "vars": { + "ch_datasource_loglevel": "info", + "ch_datasource_power": 2 + } + }, + "svc-ch_datasource-exec": { + "hosts": [ + "clickhouse02" + ] + }, + "svc-ch_datasource-read": { + "hosts": [] + }, + "svc-chwriter": { + "children": [ + "cfg-chwriter-clickhouse02", + "svc-chwriter-read" + ], + "vars": { + "chwriter_loglevel": "info", + "chwriter_power": 2 + } + }, + "svc-chwriter-exec": { + "hosts": [ + "clickhouse02" + ] + }, + "svc-chwriter-read": { + "hosts": [] + }, + "svc-classifier": { + "children": [ + "cfg-classifier-default-discovery02", + "svc-classifier-read", + "cfg-classifier-default-discovery01" + ], + "vars": { + "classifier_loglevel": "info", + "classifier_lookup_solution": "noc.services.classifier.rulelookup.RuleLookup", + "classifier_power": 32 + } + }, + "svc-classifier-exec": { + "hosts": [ + "discovery02", + "discovery01" + ] + }, + "svc-classifier-read": { + "hosts": [] + }, + "svc-clickhouse": { + "children": [ + "cfg-clickhouse-clickhouse02", + "svc-clickhouse-read" + ], + "vars": { + "clickhouse_loglevel": "info" + } + }, + "svc-clickhouse-exec": { + "hosts": [ + "clickhouse02" + ] + }, + "svc-clickhouse-read": { + "hosts": [ + "clickhouse02", + "collector", + "mongodb02", + "mongodb03", + "mongodb01", + "influxdb01", + "clickhouse01", + "discovery02", + "discovery01", + "wrk02", + "wrk01", + "web01", + "web02" + ] + }, + "svc-consul": { + "children": [ + "cfg-consul-collector", + "svc-consul-read", + "cfg-consul-mongodb02", + "cfg-consul-mongodb03", + "cfg-consul-mongodb01", + "cfg-consul-influxdb01", + "cfg-consul-clickhouse02", + "cfg-consul-clickhouse01", + "cfg-consul-discovery02", + "cfg-consul-discovery01", + "cfg-consul-wrk02", + "cfg-consul-wrk01", + "cfg-consul-web01", + "cfg-consul-web02" + ], + "vars": { + "consul_loglevel": "info", + "consul_power": "agent" + } + }, + "svc-consul-exec": { + "hosts": [ + "collector", + "mongodb02", + "mongodb03", + "mongodb01", + "influxdb01", + "clickhouse02", + "clickhouse01", + "discovery02", + "discovery01", + "wrk02", + "wrk01", + "web01", + "web02" + ] + }, + "svc-consul-read": { + "hosts": [ + "clickhouse02", + "collector", + "mongodb02", + "mongodb03", + "mongodb01", + "influxdb01", + "clickhouse01", + "discovery02", + "discovery01", + "wrk02", + "wrk01", + "web01", + "web02" + ] + }, + "svc-consul-template": { + "children": [ + "cfg-consul-template-collector", + "svc-consul-template-read", + "cfg-consul-template-mongodb02", + "cfg-consul-template-mongodb03", + "cfg-consul-template-mongodb01", + "cfg-consul-template-influxdb01", + "cfg-consul-template-clickhouse02", + "cfg-consul-template-clickhouse01", + "cfg-consul-template-discovery02", + "cfg-consul-template-discovery01", + "cfg-consul-template-wrk02", + "cfg-consul-template-wrk01", + "cfg-consul-template-web01", + "cfg-consul-template-web02" + ], + "vars": { + "consul_template_loglevel": "info", + "consul_template_use_dedup": 0 + } + }, + "svc-consul-template-exec": { + "hosts": [ + "collector", + "mongodb02", + "mongodb03", + "mongodb01", + "influxdb01", + "clickhouse02", + "clickhouse01", + "discovery02", + "discovery01", + "wrk02", + "wrk01", + "web01", + "web02" + ] + }, + "svc-consul-template-read": { + "hosts": [ + "clickhouse02", + "collector", + "mongodb02", + "mongodb03", + "mongodb01", + "influxdb01", + "clickhouse01", + "discovery02", + "discovery01", + "wrk02", + "wrk01", + "web01", + "web02" + ] + }, + "svc-correlator": { + "children": [ + "cfg-correlator-default-discovery02", + "svc-correlator-read", + "cfg-correlator-default-discovery01" + ], + "vars": { + "correlator_loglevel": "info", + "correlator_max_threads": 40, + "correlator_power": 1 + } + }, + "svc-correlator-exec": { + "hosts": [ + "discovery02", + "discovery01" + ] + }, + "svc-correlator-read": { + "hosts": [] + }, + "svc-datastream-read": { + "hosts": [ + "wrk02", + "wrk01", + "collector" + ] + }, + "svc-discovery": { + "children": [ + "cfg-discovery-default-discovery02", + "svc-discovery-read", + "cfg-discovery-default-discovery01" + ], + "vars": { + "discovery_backup_power": 8, + "discovery_loglevel": "info", + "discovery_max_threads": 200, + "discovery_power": 8 + } + }, + "svc-discovery-exec": { + "hosts": [ + "discovery02", + "discovery01" + ] + }, + "svc-discovery-read": { + "hosts": [ + "wrk02", + "wrk01" + ] + }, + "svc-escalator": { + "children": [ + "cfg-escalator-discovery02", + "svc-escalator-read", + "cfg-escalator-discovery01" + ], + "vars": { + "escalator_loglevel": "info", + "escalator_max_threads": 40, + "escalator_power": 1 + } + }, + "svc-escalator-exec": { + "hosts": [ + "discovery02", + "discovery01" + ] + }, + "svc-escalator-read": { + "hosts": [] + }, + "svc-grafana": { + "children": [ + "cfg-grafana-web01", + "svc-grafana-read", + "cfg-grafana-web02" + ], + "vars": { + "grafana_loglevel": "info" + } + }, + "svc-grafana-exec": { + "hosts": [ + "web01", + "web02" + ] + }, + "svc-grafana-read": { + "hosts": [ + "clickhouse02", + "web01", + "web02" + ] + }, + "svc-grafanads": { + "children": [ + "cfg-grafanads-web01", + "svc-grafanads-read", + "cfg-grafanads-web02" + ], + "vars": { + "grafanads_loglevel": "info", + "grafanads_power": 2 + } + }, + "svc-grafanads-exec": { + "hosts": [ + "web01", + "web02" + ] + }, + "svc-grafanads-read": { + "hosts": [] + }, + "svc-login": { + "children": [ + "cfg-login-web01", + "svc-login-read", + "cfg-login-web02" + ], + "vars": { + "login_language": "ru", + "login_ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", + "login_loglevel": "info", + "login_methods": "local,ldap", + "login_power": 2 + } + }, + "svc-login-exec": { + "hosts": [ + "web01", + "web02" + ] + }, + "svc-login-read": { + "hosts": [] + }, + "svc-mailsender": { + "children": [ + "cfg-mailsender-discovery02", + "svc-mailsender-read", + "cfg-mailsender-discovery01" + ], + "vars": { + "mailsender_from_address": "nocproject@some.ru.ru", + "mailsender_loglevel": "info", + "mailsender_power": 2, + "mailsender_smtp_password": "XXX", + "mailsender_smtp_port": 587, + "mailsender_smtp_server": "smtp.some.ru.ru", + "mailsender_smtp_user": "noc", + "mailsender_use_tls": 1 + } + }, + "svc-mailsender-exec": { + "hosts": [ + "discovery02", + "discovery01" + ] + }, + "svc-mailsender-read": { + "hosts": [] + }, + "svc-mongod": { + "children": [ + "cfg-mongod-mongodb02", + "svc-mongod-read", + "cfg-mongod-mongodb03", + "cfg-mongod-mongodb01" + ], + "vars": { + "mongod_loglevel": "info", + "mongod_mongod_db": "noc", + "mongod_mongod_engine": "wiredTiger", + "mongod_mongod_logging_destination": "file", + "mongod_mongod_password": "noc", + "mongod_mongod_rs": "noc", + "mongod_mongod_user": "noc", + "mongod_power": "server" + } + }, + "svc-mongod-exec": { + "hosts": [ + "mongodb02", + "mongodb03", + "mongodb01" + ] + }, + "svc-mongod-read": { + "hosts": [ + "clickhouse02", + "discovery02", + "discovery01", + "collector", + "mongodb02", + "mongodb03", + "mongodb01", + "influxdb01", + "clickhouse01", + "wrk02", + "wrk01", + "web01", + "web02" + ] + }, + "svc-mrt": { + "children": [ + "cfg-mrt-wrk02", + "svc-mrt-read", + "cfg-mrt-wrk01" + ], + "vars": { + "mrt_loglevel": "info", + "mrt_max_concurrency": 100, + "mrt_power": 2 + } + }, + "svc-mrt-exec": { + "hosts": [ + "wrk02", + "wrk01" + ] + }, + "svc-mrt-read": { + "hosts": [] + }, + "svc-nginx-read": { + "hosts": [ + "web01", + "web02", + "collector", + "mongodb02", + "mongodb03", + "mongodb01", + "influxdb01", + "clickhouse02", + "clickhouse01", + "discovery02", + "discovery01", + "wrk02", + "wrk01" + ] + }, + "svc-noc": { + "children": [ + "cfg-noc-collector", + "svc-noc-read", + "cfg-noc-mongodb02", + "cfg-noc-mongodb03", + "cfg-noc-mongodb01", + "cfg-noc-influxdb01", + "cfg-noc-clickhouse02", + "cfg-noc-clickhouse01", + "cfg-noc-discovery02", + "cfg-noc-discovery01", + "cfg-noc-wrk02", + "cfg-noc-wrk01", + "cfg-noc-web01", + "cfg-noc-web02" + ], + "vars": { + "noc_group": "noc", + "noc_loglevel": "info", + "noc_repo": "https://github.com/nocproject/noc.git", + "noc_root": "/opt/noc", + "noc_user": "noc", + "noc_version": "microservices" + } + }, + "svc-noc-exec": { + "hosts": [ + "collector", + "mongodb02", + "mongodb03", + "mongodb01", + "influxdb01", + "clickhouse02", + "clickhouse01", + "discovery02", + "discovery01", + "wrk02", + "wrk01", + "web01", + "web02" + ] + }, + "svc-noc-read": { + "hosts": [ + "wrk02", + "wrk01", + "clickhouse02", + "web01", + "web02", + "discovery02", + "discovery01", + "collector" + ] + }, + "svc-nsqd": { + "children": [ + "cfg-nsqd-collector", + "svc-nsqd-read", + "cfg-nsqd-mongodb02", + "cfg-nsqd-mongodb03", + "cfg-nsqd-mongodb01", + "cfg-nsqd-influxdb01", + "cfg-nsqd-clickhouse02", + "cfg-nsqd-clickhouse01", + "cfg-nsqd-discovery02", + "cfg-nsqd-discovery01", + "cfg-nsqd-wrk02", + "cfg-nsqd-wrk01", + "cfg-nsqd-web01", + "cfg-nsqd-web02" + ], + "vars": { + "nsqd_loglevel": "info", + "nsqd_max_messages_in_memory": 50000, + "nsqd_max_msg_size": 1048576 + } + }, + "svc-nsqd-exec": { + "hosts": [ + "collector", + "mongodb02", + "mongodb03", + "mongodb01", + "influxdb01", + "clickhouse02", + "clickhouse01", + "discovery02", + "discovery01", + "wrk02", + "wrk01", + "web01", + "web02" + ] + }, + "svc-nsqd-read": { + "hosts": [ + "clickhouse02", + "collector", + "mongodb02", + "mongodb03", + "mongodb01", + "influxdb01", + "clickhouse01", + "discovery02", + "discovery01", + "wrk02", + "wrk01", + "web01", + "web02" + ] + }, + "svc-nsqlookupd": { + "children": [ + "cfg-nsqlookupd-mongodb02", + "svc-nsqlookupd-read", + "cfg-nsqlookupd-mongodb03", + "cfg-nsqlookupd-mongodb01" + ], + "vars": { + "nsqlookupd_loglevel": "info" + } + }, + "svc-nsqlookupd-exec": { + "hosts": [ + "mongodb02", + "mongodb03", + "mongodb01" + ] + }, + "svc-nsqlookupd-read": { + "hosts": [ + "clickhouse02", + "collector", + "mongodb02", + "mongodb03", + "mongodb01", + "influxdb01", + "clickhouse01", + "discovery02", + "discovery01", + "wrk02", + "wrk01", + "web01", + "web02" + ] + }, + "svc-ping": { + "children": [ + "cfg-ping-default-wrk02", + "svc-ping-read", + "cfg-ping-default-wrk01" + ], + "vars": { + "ping_backup_power": 2, + "ping_loglevel": "info", + "ping_power": 2 + } + }, + "svc-ping-exec": { + "hosts": [ + "wrk02", + "wrk01" + ] + }, + "svc-ping-read": { + "hosts": [] + }, + "svc-postgres": { + "children": [ + "cfg-postgres-collector", + "svc-postgres-read" + ], + "vars": { + "postgres_loglevel": "info", + "postgres_postgres_db": "noc", + "postgres_postgres_password": "noc", + "postgres_postgres_user": "noc", + "postgres_power": "master", + "postgres_replicator_password": "noc", + "postgres_superuser_password": "noc" + } + }, + "svc-postgres-exec": { + "hosts": [ + "collector" + ] + }, + "svc-postgres-read": { + "hosts": [ + "web01", + "web02", + "collector", + "mongodb02", + "mongodb03", + "mongodb01", + "influxdb01", + "clickhouse02", + "clickhouse01", + "discovery02", + "discovery01", + "wrk02", + "wrk01" + ] + }, + "svc-sae": { + "children": [ + "cfg-sae-discovery02", + "svc-sae-read", + "cfg-sae-discovery01" + ], + "vars": { + "sae_db_threads": 16, + "sae_loglevel": "info", + "sae_power": 2 + } + }, + "svc-sae-exec": { + "hosts": [ + "discovery02", + "discovery01" + ] + }, + "svc-sae-read": { + "hosts": [ + "wrk02", + "wrk01" + ] + }, + "svc-scheduler": { + "children": [ + "cfg-scheduler-discovery02", + "svc-scheduler-read", + "cfg-scheduler-discovery01" + ], + "vars": { + "scheduler_loglevel": "info", + "scheduler_max_threads": 40, + "scheduler_power": 1 + } + }, + "svc-scheduler-exec": { + "hosts": [ + "discovery02", + "discovery01" + ] + }, + "svc-scheduler-read": { + "hosts": [] + }, + "svc-syslogcollector": { + "children": [ + "cfg-syslogcollector-default-collector", + "svc-syslogcollector-read" + ], + "vars": { + "syslogcollector_loglevel": "info", + "syslogcollector_power": 1 + } + }, + "svc-syslogcollector-exec": { + "hosts": [ + "collector" + ] + }, + "svc-syslogcollector-read": { + "hosts": [] + }, + "svc-tgsender": { + "children": [ + "cfg-tgsender-discovery02", + "svc-tgsender-read", + "cfg-tgsender-discovery01" + ], + "vars": { + "tgsender_loglevel": "info", + "tgsender_power": 2, + "tgsender_token": "noc" + } + }, + "svc-tgsender-exec": { + "hosts": [ + "discovery02", + "discovery01" + ] + }, + "svc-tgsender-read": { + "hosts": [] + }, + "svc-trapcollector": { + "children": [ + "cfg-trapcollector-default-collector", + "svc-trapcollector-read" + ], + "vars": { + "trapcollector_loglevel": "info", + "trapcollector_power": 1 + } + }, + "svc-trapcollector-exec": { + "hosts": [ + "collector" + ] + }, + "svc-trapcollector-read": { + "hosts": [] + }, + "svc-web": { + "children": [ + "cfg-web-wrk02", + "svc-web-read", + "cfg-web-wrk01" + ], + "vars": { + "web_language": "ru", + "web_loglevel": "info", + "web_power": 2 + } + }, + "svc-web-exec": { + "hosts": [ + "wrk02", + "wrk01" + ] + }, + "svc-web-read": { + "hosts": [] + } +} diff --git a/tests/fixtures/inventories/single.json b/tests/fixtures/inventories/single.json new file mode 100644 index 00000000..a8459942 --- /dev/null +++ b/tests/fixtures/inventories/single.json @@ -0,0 +1,1903 @@ +{ + "_meta": { + "hostvars": { + "some": { + "ansible_connection": "ssh", + "ansible_host": "192.168.1.1", + "ansible_port": 22, + "ansible_python_interpreter": "/usr/bin/python", + "ansible_shell_type": "sh", + "ansible_ssh_pipelining": true, + "ansible_ssh_private_key_file": null, + "ansible_user": "ansible", + "has_svc_activator": true, + "has_svc_bi": true, + "has_svc_card": true, + "has_svc_ch_datasource": true, + "has_svc_chwriter": true, + "has_svc_classifier": true, + "has_svc_clickhouse": true, + "has_svc_consul": true, + "has_svc_consul_template": true, + "has_svc_correlator": true, + "has_svc_datastream": true, + "has_svc_discovery": true, + "has_svc_escalator": true, + "has_svc_goss": true, + "has_svc_grafana": true, + "has_svc_grafanads": true, + "has_svc_login": true, + "has_svc_mailsender": true, + "has_svc_mib": true, + "has_svc_mongod": true, + "has_svc_mrt": true, + "has_svc_nbi": true, + "has_svc_nginx": true, + "has_svc_noc": true, + "has_svc_nsqd": true, + "has_svc_nsqlookupd": true, + "has_svc_ping": true, + "has_svc_postgres": true, + "has_svc_sae": true, + "has_svc_scheduler": true, + "has_svc_selfmon": true, + "has_svc_syslogcollector": true, + "has_svc_trapcollector": true, + "has_svc_web": true, + "noc_dc": "runner", + "node_id": 1, + "required_assets": [ + "bi", + "card", + "mib", + "web" + ] + } + } + }, + "all": { + "vars": { + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "install_method": "git", + "installation_type": "eval", + "noc_all_pools": [ + { + "description": "Default pool for NOC2erwr", + "name": "default2" + } + ], + "noc_env": "NOC", + "noc_env_type": "eval", + "noc_installation_name": "Unconfigured installation", + "noc_web_host": "192.168.1.1", + "playbook_link": "git+https://github.com/nocproject/ansible_deploy@microservices", + "tower_data": "/home/shirokih/projects/tower/venv3/var/tower/data/NOC", + "tower_ssh_keys": "/home/shirokih/projects/tower/venv3/var/tower/ssh/NOC" + } + }, + "cfg-activator-default2-some": { + "hosts": [ + "some" + ], + "vars": { + "activator_loglevel": "info", + "activator_power": 2, + "activator_script_threads": 20, + "activator_tos": 0 + } + }, + "cfg-bi-some": { + "hosts": [ + "some" + ], + "vars": { + "bi_language": "en-us", + "bi_loglevel": "info", + "bi_power": 2, + "bi_query_threads": 10 + } + }, + "cfg-card-some": { + "hosts": [ + "some" + ], + "vars": { + "card_language": "en-us", + "card_loglevel": "info", + "card_power": 2 + } + }, + "cfg-ch_datasource-some": { + "hosts": [ + "some" + ], + "vars": { + "ch_datasource_loglevel": "info", + "ch_datasource_power": 2 + } + }, + "cfg-chwriter-some": { + "hosts": [ + "some" + ], + "vars": { + "chwriter_batch_delay_ms": 1000, + "chwriter_batch_size": 50000, + "chwriter_channel_expire_interval": 300, + "chwriter_loglevel": "info", + "chwriter_power": 1, + "chwriter_records_buffer": 1000000 + } + }, + "cfg-classifier-default2-some": { + "hosts": [ + "some" + ], + "vars": { + "classifier_default_interface_profile": "default", + "classifier_loglevel": "info", + "classifier_lookup_solution": "noc.services.classifier.rulelookup.RuleLookup", + "classifier_power": 2 + } + }, + "cfg-clickhouse-some": { + "hosts": [ + "some" + ], + "vars": { + "clickhouse_db": "noc", + "clickhouse_max_ast_elements": 10000, + "clickhouse_password": "noc", + "clickhouse_query_size": 262144, + "clickhouse_ro_password": "noc", + "clickhouse_user": "noc" + } + }, + "cfg-consul-some": { + "hosts": [ + "some" + ], + "vars": { + "consul_address": "node_ip", + "consul_master_token": null, + "consul_power": "bootstrap", + "consul_replication_token": null + } + }, + "cfg-consul-template-some": { + "hosts": [ + "some" + ], + "vars": { + "consul_template_use_dedup": "False" + } + }, + "cfg-correlator-default2-some": { + "hosts": [ + "some" + ], + "vars": { + "correlator_loglevel": "info", + "correlator_max_threads": 10, + "correlator_power": 1 + } + }, + "cfg-datastream-some": { + "hosts": [ + "some" + ], + "vars": { + "datastream_enable_administrativedomain": false, + "datastream_enable_administrativedomain_wait": false, + "datastream_enable_alarm": false, + "datastream_enable_alarm_wait": false, + "datastream_enable_cfgping": true, + "datastream_enable_cfgping_wait": true, + "datastream_enable_cfgsyslog": true, + "datastream_enable_cfgsyslog_wait": true, + "datastream_enable_cfgtrap": true, + "datastream_enable_cfgtrap_wait": true, + "datastream_enable_dnszone": false, + "datastream_enable_dnszone_wait": false, + "datastream_enable_managedobject": false, + "datastream_enable_managedobject_wait": false, + "datastream_enable_resourcegroup": false, + "datastream_enable_resourcegroup_wait": false, + "datastream_loglevel": "info", + "datastream_mode": "wait", + "datastream_power": 1, + "datastream_whitelist_access": "" + } + }, + "cfg-discovery-default2-some": { + "hosts": [ + "some" + ], + "vars": { + "discovery_backup_power": 1, + "discovery_loglevel": "info", + "discovery_max_threads": 10, + "discovery_power": 2 + } + }, + "cfg-escalator-some": { + "hosts": [ + "some" + ], + "vars": { + "escalator_loglevel": "info", + "escalator_max_threads": 10, + "escalator_power": 1 + } + }, + "cfg-goss-some": { + "hosts": [ + "some" + ], + "vars": { + "goss_validate_fw": true, + "goss_version": "0.3.10" + } + }, + "cfg-grafana-some": { + "hosts": [ + "some" + ], + "vars": { + "grafana_pg_password": "grafana" + } + }, + "cfg-grafanads-some": { + "hosts": [ + "some" + ], + "vars": { + "grafanads_db_threads": 10, + "grafanads_loglevel": "info", + "grafanads_power": 2 + } + }, + "cfg-login-some": { + "hosts": [ + "some" + ], + "vars": { + "login_language": "en-us", + "login_loglevel": "info", + "login_methods": "local", + "login_pam_service": "noc", + "login_power": 2, + "login_radius_secret": null, + "login_radius_server": null, + "login_session_ttl": 7 + } + }, + "cfg-mailsender-some": { + "hosts": [ + "some" + ], + "vars": { + "mailsender_from_address": "noc@example.com", + "mailsender_helo_hostname": "noc", + "mailsender_loglevel": "info", + "mailsender_power": 1, + "mailsender_smtp_password": null, + "mailsender_smtp_port": 25, + "mailsender_smtp_server": null, + "mailsender_smtp_user": null, + "mailsender_use_tls": "False" + } + }, + "cfg-mib-some": { + "hosts": [ + "some" + ], + "vars": { + "mib_loglevel": "info", + "mib_power": 1 + } + }, + "cfg-mongod-some": { + "hosts": [ + "some" + ], + "vars": { + "mongod_db": "noc", + "mongod_engine": "wiredTiger", + "mongod_logging_destination": "file", + "mongod_password": "noc", + "mongod_power": "server", + "mongod_rs": "noc", + "mongod_user": "noc", + "mongod_version": "4.0" + } + }, + "cfg-mrt-some": { + "hosts": [ + "some" + ], + "vars": { + "mrt_loglevel": "info", + "mrt_max_concurrency": 50, + "mrt_power": 2 + } + }, + "cfg-nbi-some": { + "hosts": [ + "some" + ], + "vars": { + "nbi_loglevel": "info", + "nbi_power": 1, + "nbi_whitelist_access": "" + } + }, + "cfg-nginx-some": { + "hosts": [ + "some" + ], + "vars": { + "nginx_cert": "-----BEGIN CERTIFICATE-----\nMIIFETCCAvmgAwIBAgIUS+AzC2toi8lHGTZn6+A+yOJzM7MwDQYJKoZIhvcNAQEL\nBQAwGDEWMBQGA1UEAwwNODQuMjAxLjEyOC4yNDAeFw0yMDAzMDYxOTM1MThaFw0z\nMDAzMDQxOTM1MThaMBgxFjAUBgNVBAMMDTg0LjIwMS4xMjguMjQwggIiMA0GCSqG\nSIb3DQEBAQUAA4ICDwAwggIKAoICAQDMO5wVyD3EXjnP9SV2K835RdSLsFiW3Vlr\nj18/Ze/3DicyEblLhrJpPmla8RIAtCYsRiky8RQdhZMOSNZrZyrghoJnPwSYFwM0\nQn5kbXdKzu+V1REZmnfjTU7GpG7NhfrSSTqrSNi3qPE1eHps033VBiTKO9I6xEC9\ngQ+gext8n7EnO8+lQnLfOBzHmZHp8nsSHH4PNc+MbKrk4LZfgBJnp2tZr3fGTyrv\nrPjxQgQ5KQFyCGjsQ2A67D/KHm7TqaQauBb1GeRafJ8LJVHfNrInC4eLIKES9G9i\nJstJf+BGjEiwnI9f+byit9owA7E1yjhHVoHzEbi0M3rldEDI+mdYYnfZF3b5SMif\nqskCocQYldz43x/Be3PZN9KWBukggwgEikjWLL9hFyKLPwatqK1FKyNE6lQAX4Q+\nVH9oSswQefmTLmoHeGn3OxjW5AGFdMfmsdwlrVjl47WNcgUUacWnxf4Th9HAIcUo\nb4P69KQtmQdaLtwcX3qztDTBBuQohzbPeG/AZ6VIDQ0I7aBQVn7NMddvq45xAJi1\nEjJ0sHb0pHqD4UTh1cz6TDUv6M0H3OYREhx50nUXY3hHMiUBCESykE5KNhLjk1oT\n2fsPEoobpF7no2LGgdEfRebtCvGheDDa5mcFpyNcBWYdfCvhzKxp/dY7Ta13516j\noSWxR80s9QIDAQABo1MwUTAdBgNVHQ4EFgQUxB0/kC8WVQ53xURvDbpBaemEze8w\nHwYDVR0jBBgwFoAUxB0/kC8WVQ53xURvDbpBaemEze8wDwYDVR0TAQH/BAUwAwEB\n/zANBgkqhkiG9w0BAQsFAAOCAgEAK4ukEg5w5fpkhTg3FxjqquAujK1k6q0JAqhJ\nY46Nx0omNfBZcU83MBYZuzJcI+On75xD/PhFd5qRTi76KBbuYspR20fkdMub2B1p\nH6bF7d5SEV9iW0KwyNsm8UF5tojx58lPjgiEBTXwAbo0oqEM0SIowcXDxg8cHSXN\nPb/Ln/St7Tdg56HSPwYdm+fqsdnz8hEPANX0UC94PbchFJk62qBGGhBIZreM6g9e\nRqDL9H9JY0mYqNZ3xklKfwoBA2R+xpYWpXoxIe+J04Rll+1yiaxQfbh5JqOn/24X\nUVvmD2FbglnPzy9jlrdPRg11lXy3hzkm5DxsCYw9ptQ9g4+Gszmj8yP0vBjGI1Tw\nps0oROUMt+B1CLQBZtvX9466TBjATGqJMmfMIxjMNG+TLVBJPYS8mS2b19py6eaU\nf8OzAAvledIJBEEwPUro3HVl9ANUy3x4h98om0VULt5P+FcWFpF6eO9FrGqHVJiM\nsutMcPeiUMJme2PUtR8mEHMHzU/y+DXnNEO3i6KJXEcHcl6G+cbOq+hBJrb9PEJc\nn+UX2JZVZx9QTepIPDRpm2TFLtJFQZDcVEdUIMN8X7Rh8il6mIYJA5GeSvWASrUJ\nI03o/hcURYqb1Ah8RZdPrahUtfhziTeeXYOmqEGNx71o6xdeAAY0FjIYyIKYgPEq\nGpM1HOk=\n-----END CERTIFICATE-----\n", + "nginx_cert_key": "-----BEGIN PRIVATE KEY-----\nMIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDMO5wVyD3EXjnP\n9SV2K835RdSLsFiW3Vlrj18/Ze/3DicyEblLhrJpPmla8RIAtCYsRiky8RQdhZMO\nSNZrZyrghoJnPwSYFwM0Qn5kbXdKzu+V1REZmnfjTU7GpG7NhfrSSTqrSNi3qPE1\neHps033VBiTKO9I6xEC9gQ+gext8n7EnO8+lQnLfOBzHmZHp8nsSHH4PNc+MbKrk\n4LZfgBJnp2tZr3fGTyrvrPjxQgQ5KQFyCGjsQ2A67D/KHm7TqaQauBb1GeRafJ8L\nJVHfNrInC4eLIKES9G9iJstJf+BGjEiwnI9f+byit9owA7E1yjhHVoHzEbi0M3rl\ndEDI+mdYYnfZF3b5SMifqskCocQYldz43x/Be3PZN9KWBukggwgEikjWLL9hFyKL\nPwatqK1FKyNE6lQAX4Q+VH9oSswQefmTLmoHeGn3OxjW5AGFdMfmsdwlrVjl47WN\ncgUUacWnxf4Th9HAIcUob4P69KQtmQdaLtwcX3qztDTBBuQohzbPeG/AZ6VIDQ0I\n7aBQVn7NMddvq45xAJi1EjJ0sHb0pHqD4UTh1cz6TDUv6M0H3OYREhx50nUXY3hH\nMiUBCESykE5KNhLjk1oT2fsPEoobpF7no2LGgdEfRebtCvGheDDa5mcFpyNcBWYd\nfCvhzKxp/dY7Ta13516joSWxR80s9QIDAQABAoICAEpgbxBzsyLfWdiFI5Zsj393\nUddpamnOxLDqLrrM6d4kNlwCnmOF81VmmEG5R2AgO0KmbnyR1UyHB64NEqFcmf3Y\nnobxKUAmKVGP4a27O9VvlUsQpECZw41w6v5mhb+tSlHov0f/qIUCLo3ViWg2gT3i\nFeXccUxbimQ5KzK7gqAZHA/4tT8u+tyV980s/Tmgx/cpjzME2sf+DyJ5P5F597nt\n+6dWwpzi2fUdHi/mZdlXOKKJs4RPaS0sOnLmMGA/CHd+kUXDnyjg9568gZtztN+J\nUFx3jpFzmVi6XhAvVML8dcBz07cVIQB1Si1wOsonEeXQ+FRIIObnVJtZgfpvTtD3\npAHyMxX5kD4k0Sr3e0cUEqH2qO7BPySKKbLGco9w+axgYz5ClvhXV9djUe+lY9YV\n7ulXiRiytLeTvBNN14rqmQStRK2a0Wn6BR31Y4YA871XDBV4R0XzH+GHNhBBcx9l\nPejFsw7hFAohOGHZ/nNzPyqwYHSpaDdHHuUh1tUVW8KEvbWAW4BmD2DiO13vLlME\nXL6jxfLwL6FvHw9zFgSDOn5npAkFxEBWMGHCN7z0QqZgk5MqiyqeuohLjVb8Uxet\nKPhTET9ybuTsx7JMlO3eNAJRFz4T1Ho/BrkqD3HRmZlgGF35sVwQ5fXSxB3qp+f6\n0yuqqU816O1d3nCexushAoIBAQDuOWC/LDuSBYJx35RZjVUuTZ2FS572WDntwsey\nzYvoVmgbNSmfvmgKqKrw7utGsPiz/zsgnJ8NcwYEQwOI+jXKXvRhm0u3UY2+g3dC\nd6uRbfa8gNYk02aCjrADsisdikPXE2WbAe7IWHGQiIA5SnFjBazua4BhZSQ8rtvF\niQuOjrzxiIQNZSPAqYSEiRoiuoXJ5sipDuvFkU60OT4clcQrsZESJy70P8ssC1Nl\ny3hkBAPvnvUbMQ7/sN9zj6rHRAE/2L7rnM8q+wabhaXbYl0L0zreeOolpkJ/j4et\nkHD9nUARYZNP/wPUTvz3HDHKCXvr1qpkPh2CtuZWMkHvgVjNAoIBAQDbeOvMaZZl\nUQYQYqCc3Jq3djxkZ9xvA2It7LM43B2EbNeb8r+n4YZO5qGOO0CapXn6jpwhUo1f\n8/+/87lKWqAb8vfjVB0p2KiE8ufLI884oylNb1dsfzWqWT0NnyXBXiUFTz9KGTtV\nH9aNm81BJQ31NtjFvg0qRu+iMIuRAiQUp0ItfO08bpPlw4Q4vBS4XC4QRzOJpAkC\nlP/RQ1tNYfXnlegoFZfq8dN3YWmV9usVekp0FZXP4Ov6OL9t8smo4lv0Bn3URl1O\nRWFckiU4PHOpcMdpafB9/drWsvOz2NRlC3glrHONQycH/5NTANBXWmdoK5Sq9KXW\nmOF8Hxh+SETJAoIBAGLAOEGnNV53mDZaJyXkN35FQFoEGfYmZoUP7DZLjIaYYvl8\nVS/Z/0kD2DCd6bvZGo+K6ti+9BPgLYtQuENs7SVhrU5U0NNCJE7oMmTENMPJYLGN\nerezRlgyi/ZMQiExsqOSb9kMuQ4l05XFb9nP6SbSMHh46bP1+EqLdaDyCW9j7iD1\npT/kQCjaXIuQRdxFk7Y5S88A122Dqat92yiAUNyH9AohYg5v72nnm/+jk9lp7LPF\nIffOo1gM2uQNlw6ZOydbUvFahGpdusR3Z2SE5utC+bFFUFKhFAnK1sR1DtGjAO7z\nktxjaxP0VlqdPmpw+gSubN22/ga0iNEMbla5OLUCggEBAMvaeGLo3DoFVTWY9ohc\n3BR2bUfxtK0knmf7yMiSo5QiKO6APoaoEsFstTjQToSWGUOifODytcAfejkIH94x\naTAssRVlRqVcycKbgLON8mcwHif/uFtdmTI+K1hgr4f5czeIUUf5QcQii34C7laJ\nHXrb0+NwUPgo5WJn5urs6yiH5w8rT4vnRdaPkVvFTxWjAWI7UGKTi47raOYtwzuQ\nNwFBm17IF9Cxh/MF9zXFILxVV5yVhA6PY4CKfzyX27nTbwetk+i85uPRy8pZMNsY\nQ3Jp/78pGKleRotPss8lIrssOQ/9K2NVsYZbXLMnOV056ny2piNYlEVMwXwxweVi\nKQkCggEBANQgOb+0XvW69rnbPwARJgx0sShA0ZNtGNLfuitVPsLMWiyaf7rLU/d/\nIHL7leBTXNmSXQfx6vWui6QyYzJ6TqMpg8hJ7cx/pvTPB2Kq2sTPva/Ce6Z/lXL4\nDoH1otckIn/eAudf4PZXVUdCbIC9cYrng/gZMRuw9TlNOiamUgdBSI6wAKKbHBTf\n5BkHsjgN4XeCc5z2A3JVPkSZxpQKSYU0iDnUFXFJmZ/yoNKPWBMJggiqEr1g3RC7\ndxaoeMtH6wHSygD+1QW8SqrswlAX+S2jigbEUbv0H/T77CkCgXWqLlRv5f/sKeLv\nDznn3uf1eHP4v4xXULObzPYv4jwGbdQ=\n-----END PRIVATE KEY-----\n", + "nginx_external_cert_management": "False", + "nginx_http_redirect": "True", + "nginx_json_logging": "False", + "nginx_permit_firewall": true, + "nginx_self_signed_cerificate": "True" + } + }, + "cfg-noc-some": { + "hosts": [ + "some" + ], + "vars": { + "noc_consul_token": "noc", + "noc_group": "noc", + "noc_python_interpreter": "python", + "noc_repo": "https://github.com/nocproject/noc.git", + "noc_root": "/opt/noc", + "noc_user": "noc", + "noc_version": "stable" + } + }, + "cfg-nsqd-some": { + "hosts": [ + "some" + ], + "vars": { + "nsqd_max_messages_in_memory": 10000, + "nsqd_max_msg_size": 1048576 + } + }, + "cfg-nsqlookupd-some": { + "hosts": [ + "some" + ], + "vars": {} + }, + "cfg-ping-default2-some": { + "hosts": [ + "some" + ], + "vars": { + "ping_backup_power": 1, + "ping_loglevel": "info", + "ping_power": 4, + "ping_restore_threshold": 0, + "ping_throttle_threshold": 0, + "ping_tos": 0 + } + }, + "cfg-postgres-some": { + "hosts": [ + "some" + ], + "vars": { + "postgres_max_clients": 300, + "postgres_noc_db": "noc", + "postgres_noc_password": "noc", + "postgres_noc_user": "noc", + "postgres_power": "master", + "postgres_replicator_password": "noc", + "postgres_superuser_password": "noc", + "postgres_version": 9.6 + } + }, + "cfg-sae-some": { + "hosts": [ + "some" + ], + "vars": { + "sae_db_threads": 4, + "sae_loglevel": "info", + "sae_power": 2 + } + }, + "cfg-scheduler-some": { + "hosts": [ + "some" + ], + "vars": { + "scheduler_loglevel": "info", + "scheduler_max_threads": 10, + "scheduler_power": 1 + } + }, + "cfg-selfmon-some": { + "hosts": [ + "some" + ], + "vars": { + "selfmon_loglevel": "info", + "selfmon_power": 1 + } + }, + "cfg-syslogcollector-default2-some": { + "hosts": [ + "some" + ], + "vars": { + "syslogcollector_listen_syslog": "0.0.0.0:514", + "syslogcollector_loglevel": "info", + "syslogcollector_permit_firewall": true, + "syslogcollector_power": 1 + } + }, + "cfg-trapcollector-default2-some": { + "hosts": [ + "some" + ], + "vars": { + "trapcollector_listen_traps": "0.0.0.0:162", + "trapcollector_loglevel": "info", + "trapcollector_permit_firewall": true, + "trapcollector_power": 1 + } + }, + "cfg-web-some": { + "hosts": [ + "some" + ], + "vars": { + "web_language": "en-us", + "web_loglevel": "info", + "web_max_threads": 10, + "web_power": 2, + "web_theme": "gray" + } + }, + "dc-runner": { + "hosts": [ + "some" + ], + "vars": {} + }, + "noc-config-some": { + "hosts": [ + "some" + ], + "vars": { + "noc_services": [ + { + "config": { + "loglevel": "info", + "power": 2, + "script_threads": 20, + "tos": 0 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default2.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "sae", + "discovery" + ], + "level": "pool", + "supervisord": { + "command": "{{ activator_command }}", + "oom_score_adj": 300, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "activator", + "pool": "default2" + }, + { + "config": { + "language": "en-us", + "loglevel": "info", + "power": 2, + "query_threads": 10 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "clickhouse" + ], + "level": "global", + "required_assets": [ + "bi" + ], + "supervisord": { + "command": "./services/bi/service.py", + "oom_score_adj": 50, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 2 + } + }, + "name": "bi", + "pool": null + }, + { + "config": { + "language": "en-us", + "loglevel": "info", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "nginx" + ], + "level": "global", + "required_assets": [ + "card", + "web" + ], + "supervisord": { + "command": "./services/card/service.py", + "oom_score_adj": 100, + "priority": 300, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 1 + } + }, + "name": "card", + "pool": null + }, + { + "config": { + "loglevel": "info", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "mongod" + ], + "level": "global", + "supervisord": { + "command": "./services/datasource/service.py", + "oom_score_adj": 999, + "priority": 100, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "1MB", + "stopwaitsecs": 3 + } + }, + "name": "ch_datasource", + "pool": null + }, + { + "config": { + "batch_delay_ms": 1000, + "batch_size": 50000, + "channel_expire_interval": 300, + "loglevel": "info", + "power": 1, + "records_buffer": 1000000 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "nsqlookupd", + "nsqd", + "clickhouse" + ], + "level": "global", + "supervisord": { + "command": "./services/chwriter/service.py", + "oom_score_adj": 10, + "priority": 300, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 2 + } + }, + "name": "chwriter", + "pool": null + }, + { + "config": { + "default_interface_profile": "default", + "loglevel": "info", + "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default2.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "mongod" + ], + "level": "pool", + "supervisord": { + "command": "./services/classifier/service.py", + "oom_score_adj": 50, + "priority": 300, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "classifier", + "pool": "default2" + }, + { + "config": { + "loglevel": "info", + "max_threads": 10, + "power": 1 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default2.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "pool", + "supervisord": { + "command": "./services/correlator/service.py", + "oom_score_adj": 20, + "priority": 150, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 5 + } + }, + "name": "correlator", + "pool": "default2" + }, + { + "config": { + "enable_administrativedomain": false, + "enable_administrativedomain_wait": false, + "enable_alarm": false, + "enable_alarm_wait": false, + "enable_cfgping": true, + "enable_cfgping_wait": true, + "enable_cfgsyslog": true, + "enable_cfgsyslog_wait": true, + "enable_cfgtrap": true, + "enable_cfgtrap_wait": true, + "enable_dnszone": false, + "enable_dnszone_wait": false, + "enable_managedobject": false, + "enable_managedobject_wait": false, + "enable_resourcegroup": false, + "enable_resourcegroup_wait": false, + "loglevel": "info", + "mode": "wait", + "power": 1, + "whitelist_access": "" + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "mongod" + ], + "level": "global", + "supervisord": { + "command": "./services/datastream/service.py", + "oom_score_adj": 999, + "priority": 100, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "1MB", + "stopwaitsecs": 3 + } + }, + "name": "datastream", + "pool": null + }, + { + "config": { + "backup_power": 1, + "loglevel": "info", + "max_threads": 10, + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default2.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "pool", + "supervisord": { + "command": "./services/discovery/service.py", + "oom_score_adj": 500, + "priority": 100, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "discovery", + "pool": "default2" + }, + { + "config": { + "loglevel": "info", + "max_threads": 10, + "power": 1 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/escalator/service.py", + "oom_score_adj": 5, + "priority": 50, + "process_name": "%(program_name)s", + "startretries": 999, + "stdout_logfile_backups": 10, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "escalator", + "pool": null + }, + { + "config": { + "db_threads": 10, + "loglevel": "info", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "grafana", + "nginx" + ], + "level": "global", + "supervisord": { + "command": "./services/grafanads/service.py", + "oom_score_adj": 900, + "priority": 500, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 1, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 1 + } + }, + "name": "grafanads", + "pool": null + }, + { + "config": { + "language": "en-us", + "loglevel": "info", + "methods": "local", + "pam_service": "noc", + "power": 2, + "radius_secret": null, + "radius_server": null, + "session_ttl": 7 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/login/service.py", + "oom_score_adj": 10, + "priority": 40, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 5, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "login", + "pool": null + }, + { + "config": { + "from_address": "noc@example.com", + "helo_hostname": "noc", + "loglevel": "info", + "power": 1, + "smtp_password": null, + "smtp_port": 25, + "smtp_server": null, + "smtp_user": null, + "use_tls": "False" + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/mailsender/service.py", + "oom_score_adj": 100, + "priority": 600, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "mailsender", + "pool": null + }, + { + "config": { + "loglevel": "info", + "power": 1 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/mib/service.py", + "oom_score_adj": 100, + "priority": 110, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "mib", + "pool": null + }, + { + "config": { + "loglevel": "info", + "max_concurrency": 50, + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/mrt/service.py", + "oom_score_adj": 100, + "priority": 110, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "mrt", + "pool": null + }, + { + "config": { + "loglevel": "info", + "power": 1, + "whitelist_access": "" + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/nbi/service.py", + "oom_score_adj": 100, + "priority": 110, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "nbi", + "pool": null + }, + { + "config": { + "backup_power": 1, + "loglevel": "info", + "power": 4, + "restore_threshold": 0, + "throttle_threshold": 0, + "tos": 0 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default2.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "nsqlookupd", + "nsqd", + "datastream" + ], + "level": "pool", + "supervisord": { + "command": "./services/ping/service.py", + "oom_score_adj": 200, + "priority": 90, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 1, + "user": "root" + } + }, + "name": "ping", + "pool": "default2" + }, + { + "config": { + "db_threads": 4, + "loglevel": "info", + "power": 2 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/sae/service.py", + "oom_score_adj": 300, + "priority": 90, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 1 + } + }, + "name": "sae", + "pool": null + }, + { + "config": { + "loglevel": "info", + "max_threads": 10, + "power": 1 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/scheduler/service.py", + "oom_score_adj": 100, + "priority": 50, + "process_name": "%(program_name)s", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3 + } + }, + "name": "scheduler", + "pool": null + }, + { + "config": { + "loglevel": "info", + "power": 1 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc" + ], + "level": "global", + "supervisord": { + "command": "./services/selfmon/service.py", + "oom_score_adj": 100, + "priority": 50, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 1, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 1 + } + }, + "name": "selfmon", + "pool": null + }, + { + "config": { + "listen_syslog": "0.0.0.0:514", + "loglevel": "info", + "permit_firewall": true, + "power": 1 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default2.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "datastream" + ], + "level": "pool", + "supervisord": { + "command": "./services/syslogcollector/service.py", + "oom_score_adj": 50, + "priority": 200, + "process_name": "%(program_name)s", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 3, + "user": "root" + } + }, + "name": "syslogcollector", + "pool": "default2" + }, + { + "config": { + "listen_traps": "0.0.0.0:162", + "loglevel": "info", + "permit_firewall": true, + "power": 1 + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,yaml:///opt/noc/etc/pool-default2.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "datastream" + ], + "level": "pool", + "supervisord": { + "command": "./services/trapcollector/service.py", + "oom_score_adj": 50, + "priority": 200, + "process_name": "%(program_name)s", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 2, + "user": "root" + } + }, + "name": "trapcollector", + "pool": "default2" + }, + { + "config": { + "language": "en-us", + "loglevel": "info", + "max_threads": 10, + "power": 2, + "theme": "gray" + }, + "config_order": "yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC", + "environment": { + "category": "internal", + "depends": [ + "noc", + "nginx" + ], + "level": "global", + "required_assets": [ + "web", + "mib" + ], + "supervisord": { + "command": "./services/web/service.py", + "oom_score_adj": 300, + "priority": 50, + "process_name": "%(program_name)s-%(process_num)02d", + "startretries": 999, + "stdout_logfile_backups": 3, + "stdout_logfile_maxbytes": "10MB", + "stopwaitsecs": 2 + } + }, + "name": "web", + "pool": null + } + ] + } + }, + "nodes": { + "hosts": [ + "some" + ], + "vars": {} + }, + "svc-activator": { + "children": [ + "cfg-activator-default2-some", + "svc-activator-read" + ], + "vars": { + "activator_loglevel": "info", + "activator_power": 2, + "activator_script_threads": 20, + "activator_tos": 0 + } + }, + "svc-activator-exec": { + "hosts": [ + "some" + ] + }, + "svc-activator-read": { + "hosts": [] + }, + "svc-bi": { + "children": [ + "cfg-bi-some", + "svc-bi-read" + ], + "vars": { + "bi_language": "en-us", + "bi_loglevel": "info", + "bi_power": 2, + "bi_query_threads": 10 + } + }, + "svc-bi-exec": { + "hosts": [ + "some" + ] + }, + "svc-bi-read": { + "hosts": [] + }, + "svc-card": { + "children": [ + "cfg-card-some", + "svc-card-read" + ], + "vars": { + "card_language": "en-us", + "card_loglevel": "info", + "card_power": 2 + } + }, + "svc-card-exec": { + "hosts": [ + "some" + ] + }, + "svc-card-read": { + "hosts": [] + }, + "svc-ch_datasource": { + "children": [ + "cfg-ch_datasource-some", + "svc-ch_datasource-read" + ], + "vars": { + "ch_datasource_loglevel": "info", + "ch_datasource_power": 2 + } + }, + "svc-ch_datasource-exec": { + "hosts": [ + "some" + ] + }, + "svc-ch_datasource-read": { + "hosts": [] + }, + "svc-chwriter": { + "children": [ + "cfg-chwriter-some", + "svc-chwriter-read" + ], + "vars": { + "chwriter_batch_delay_ms": 1000, + "chwriter_batch_size": 50000, + "chwriter_channel_expire_interval": 300, + "chwriter_loglevel": "info", + "chwriter_power": 1, + "chwriter_records_buffer": 1000000 + } + }, + "svc-chwriter-exec": { + "hosts": [ + "some" + ] + }, + "svc-chwriter-read": { + "hosts": [] + }, + "svc-classifier": { + "children": [ + "cfg-classifier-default2-some", + "svc-classifier-read" + ], + "vars": { + "classifier_default_interface_profile": "default", + "classifier_loglevel": "info", + "classifier_lookup_solution": "noc.services.classifier.rulelookup.RuleLookup", + "classifier_power": 2 + } + }, + "svc-classifier-exec": { + "hosts": [ + "some" + ] + }, + "svc-classifier-read": { + "hosts": [] + }, + "svc-clickhouse": { + "children": [ + "cfg-clickhouse-some", + "svc-clickhouse-read" + ], + "vars": { + "clickhouse_db": "noc", + "clickhouse_max_ast_elements": 10000, + "clickhouse_password": "noc", + "clickhouse_query_size": 262144, + "clickhouse_ro_password": "noc", + "clickhouse_user": "noc" + } + }, + "svc-clickhouse-exec": { + "hosts": [ + "some" + ] + }, + "svc-clickhouse-read": { + "hosts": [ + "some" + ] + }, + "svc-consul": { + "children": [ + "cfg-consul-some", + "svc-consul-read" + ], + "vars": { + "consul_address": "node_ip", + "consul_master_token": null, + "consul_power": "bootstrap", + "consul_replication_token": null + } + }, + "svc-consul-exec": { + "hosts": [ + "some" + ] + }, + "svc-consul-read": { + "hosts": [ + "some" + ] + }, + "svc-consul-template": { + "children": [ + "cfg-consul-template-some", + "svc-consul-template-read" + ], + "vars": { + "consul_template_use_dedup": "False" + } + }, + "svc-consul-template-exec": { + "hosts": [ + "some" + ] + }, + "svc-consul-template-read": { + "hosts": [ + "some" + ] + }, + "svc-correlator": { + "children": [ + "cfg-correlator-default2-some", + "svc-correlator-read" + ], + "vars": { + "correlator_loglevel": "info", + "correlator_max_threads": 10, + "correlator_power": 1 + } + }, + "svc-correlator-exec": { + "hosts": [ + "some" + ] + }, + "svc-correlator-read": { + "hosts": [] + }, + "svc-datastream": { + "children": [ + "cfg-datastream-some", + "svc-datastream-read" + ], + "vars": { + "datastream_enable_administrativedomain": false, + "datastream_enable_administrativedomain_wait": false, + "datastream_enable_alarm": false, + "datastream_enable_alarm_wait": false, + "datastream_enable_cfgping": true, + "datastream_enable_cfgping_wait": true, + "datastream_enable_cfgsyslog": true, + "datastream_enable_cfgsyslog_wait": true, + "datastream_enable_cfgtrap": true, + "datastream_enable_cfgtrap_wait": true, + "datastream_enable_dnszone": false, + "datastream_enable_dnszone_wait": false, + "datastream_enable_managedobject": false, + "datastream_enable_managedobject_wait": false, + "datastream_enable_resourcegroup": false, + "datastream_enable_resourcegroup_wait": false, + "datastream_loglevel": "info", + "datastream_mode": "wait", + "datastream_power": 1, + "datastream_whitelist_access": "" + } + }, + "svc-datastream-exec": { + "hosts": [ + "some" + ] + }, + "svc-datastream-read": { + "hosts": [ + "some" + ] + }, + "svc-discovery": { + "children": [ + "cfg-discovery-default2-some", + "svc-discovery-read" + ], + "vars": { + "discovery_backup_power": 1, + "discovery_loglevel": "info", + "discovery_max_threads": 10, + "discovery_power": 2 + } + }, + "svc-discovery-exec": { + "hosts": [ + "some" + ] + }, + "svc-discovery-read": { + "hosts": [ + "some" + ] + }, + "svc-escalator": { + "children": [ + "cfg-escalator-some", + "svc-escalator-read" + ], + "vars": { + "escalator_loglevel": "info", + "escalator_max_threads": 10, + "escalator_power": 1 + } + }, + "svc-escalator-exec": { + "hosts": [ + "some" + ] + }, + "svc-escalator-read": { + "hosts": [] + }, + "svc-goss": { + "children": [ + "cfg-goss-some", + "svc-goss-read" + ], + "vars": { + "goss_validate_fw": true, + "goss_version": "0.3.10" + } + }, + "svc-goss-exec": { + "hosts": [ + "some" + ] + }, + "svc-goss-read": { + "hosts": [] + }, + "svc-grafana": { + "children": [ + "cfg-grafana-some", + "svc-grafana-read" + ], + "vars": { + "grafana_pg_password": "grafana" + } + }, + "svc-grafana-exec": { + "hosts": [ + "some" + ] + }, + "svc-grafana-read": { + "hosts": [ + "some" + ] + }, + "svc-grafanads": { + "children": [ + "cfg-grafanads-some", + "svc-grafanads-read" + ], + "vars": { + "grafanads_db_threads": 10, + "grafanads_loglevel": "info", + "grafanads_power": 2 + } + }, + "svc-grafanads-exec": { + "hosts": [ + "some" + ] + }, + "svc-grafanads-read": { + "hosts": [] + }, + "svc-login": { + "children": [ + "cfg-login-some", + "svc-login-read" + ], + "vars": { + "login_language": "en-us", + "login_loglevel": "info", + "login_methods": "local", + "login_pam_service": "noc", + "login_power": 2, + "login_radius_secret": null, + "login_radius_server": null, + "login_session_ttl": 7 + } + }, + "svc-login-exec": { + "hosts": [ + "some" + ] + }, + "svc-login-read": { + "hosts": [] + }, + "svc-mailsender": { + "children": [ + "cfg-mailsender-some", + "svc-mailsender-read" + ], + "vars": { + "mailsender_from_address": "noc@example.com", + "mailsender_helo_hostname": "noc", + "mailsender_loglevel": "info", + "mailsender_power": 1, + "mailsender_smtp_password": null, + "mailsender_smtp_port": 25, + "mailsender_smtp_server": null, + "mailsender_smtp_user": null, + "mailsender_use_tls": "False" + } + }, + "svc-mailsender-exec": { + "hosts": [ + "some" + ] + }, + "svc-mailsender-read": { + "hosts": [] + }, + "svc-mib": { + "children": [ + "cfg-mib-some", + "svc-mib-read" + ], + "vars": { + "mib_loglevel": "info", + "mib_power": 1 + } + }, + "svc-mib-exec": { + "hosts": [ + "some" + ] + }, + "svc-mib-read": { + "hosts": [] + }, + "svc-mongod": { + "children": [ + "cfg-mongod-some", + "svc-mongod-read" + ], + "vars": { + "mongod_db": "noc", + "mongod_engine": "wiredTiger", + "mongod_logging_destination": "file", + "mongod_password": "noc", + "mongod_power": "server", + "mongod_rs": "noc", + "mongod_user": "noc", + "mongod_version": "4.0" + } + }, + "svc-mongod-exec": { + "hosts": [ + "some" + ] + }, + "svc-mongod-read": { + "hosts": [ + "some" + ] + }, + "svc-mrt": { + "children": [ + "cfg-mrt-some", + "svc-mrt-read" + ], + "vars": { + "mrt_loglevel": "info", + "mrt_max_concurrency": 50, + "mrt_power": 2 + } + }, + "svc-mrt-exec": { + "hosts": [ + "some" + ] + }, + "svc-mrt-read": { + "hosts": [] + }, + "svc-nbi": { + "children": [ + "cfg-nbi-some", + "svc-nbi-read" + ], + "vars": { + "nbi_loglevel": "info", + "nbi_power": 1, + "nbi_whitelist_access": "" + } + }, + "svc-nbi-exec": { + "hosts": [ + "some" + ] + }, + "svc-nbi-read": { + "hosts": [] + }, + "svc-nginx": { + "children": [ + "cfg-nginx-some", + "svc-nginx-read" + ], + "vars": { + "nginx_cert": "-----BEGIN CERTIFICATE-----\nMIIFETCCAvmgAwIBAgIUS+AzC2toi8lHGTZn6+A+yOJzM7MwDQYJKoZIhvcNAQEL\nBQAwGDEWMBQGA1UEAwwNODQuMjAxLjEyOC4yNDAeFw0yMDAzMDYxOTM1MThaFw0z\nMDAzMDQxOTM1MThaMBgxFjAUBgNVBAMMDTg0LjIwMS4xMjguMjQwggIiMA0GCSqG\nSIb3DQEBAQUAA4ICDwAwggIKAoICAQDMO5wVyD3EXjnP9SV2K835RdSLsFiW3Vlr\nj18/Ze/3DicyEblLhrJpPmla8RIAtCYsRiky8RQdhZMOSNZrZyrghoJnPwSYFwM0\nQn5kbXdKzu+V1REZmnfjTU7GpG7NhfrSSTqrSNi3qPE1eHps033VBiTKO9I6xEC9\ngQ+gext8n7EnO8+lQnLfOBzHmZHp8nsSHH4PNc+MbKrk4LZfgBJnp2tZr3fGTyrv\nrPjxQgQ5KQFyCGjsQ2A67D/KHm7TqaQauBb1GeRafJ8LJVHfNrInC4eLIKES9G9i\nJstJf+BGjEiwnI9f+byit9owA7E1yjhHVoHzEbi0M3rldEDI+mdYYnfZF3b5SMif\nqskCocQYldz43x/Be3PZN9KWBukggwgEikjWLL9hFyKLPwatqK1FKyNE6lQAX4Q+\nVH9oSswQefmTLmoHeGn3OxjW5AGFdMfmsdwlrVjl47WNcgUUacWnxf4Th9HAIcUo\nb4P69KQtmQdaLtwcX3qztDTBBuQohzbPeG/AZ6VIDQ0I7aBQVn7NMddvq45xAJi1\nEjJ0sHb0pHqD4UTh1cz6TDUv6M0H3OYREhx50nUXY3hHMiUBCESykE5KNhLjk1oT\n2fsPEoobpF7no2LGgdEfRebtCvGheDDa5mcFpyNcBWYdfCvhzKxp/dY7Ta13516j\noSWxR80s9QIDAQABo1MwUTAdBgNVHQ4EFgQUxB0/kC8WVQ53xURvDbpBaemEze8w\nHwYDVR0jBBgwFoAUxB0/kC8WVQ53xURvDbpBaemEze8wDwYDVR0TAQH/BAUwAwEB\n/zANBgkqhkiG9w0BAQsFAAOCAgEAK4ukEg5w5fpkhTg3FxjqquAujK1k6q0JAqhJ\nY46Nx0omNfBZcU83MBYZuzJcI+On75xD/PhFd5qRTi76KBbuYspR20fkdMub2B1p\nH6bF7d5SEV9iW0KwyNsm8UF5tojx58lPjgiEBTXwAbo0oqEM0SIowcXDxg8cHSXN\nPb/Ln/St7Tdg56HSPwYdm+fqsdnz8hEPANX0UC94PbchFJk62qBGGhBIZreM6g9e\nRqDL9H9JY0mYqNZ3xklKfwoBA2R+xpYWpXoxIe+J04Rll+1yiaxQfbh5JqOn/24X\nUVvmD2FbglnPzy9jlrdPRg11lXy3hzkm5DxsCYw9ptQ9g4+Gszmj8yP0vBjGI1Tw\nps0oROUMt+B1CLQBZtvX9466TBjATGqJMmfMIxjMNG+TLVBJPYS8mS2b19py6eaU\nf8OzAAvledIJBEEwPUro3HVl9ANUy3x4h98om0VULt5P+FcWFpF6eO9FrGqHVJiM\nsutMcPeiUMJme2PUtR8mEHMHzU/y+DXnNEO3i6KJXEcHcl6G+cbOq+hBJrb9PEJc\nn+UX2JZVZx9QTepIPDRpm2TFLtJFQZDcVEdUIMN8X7Rh8il6mIYJA5GeSvWASrUJ\nI03o/hcURYqb1Ah8RZdPrahUtfhziTeeXYOmqEGNx71o6xdeAAY0FjIYyIKYgPEq\nGpM1HOk=\n-----END CERTIFICATE-----\n", + "nginx_cert_key": "-----BEGIN PRIVATE KEY-----\nMIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDMO5wVyD3EXjnP\n9SV2K835RdSLsFiW3Vlrj18/Ze/3DicyEblLhrJpPmla8RIAtCYsRiky8RQdhZMO\nSNZrZyrghoJnPwSYFwM0Qn5kbXdKzu+V1REZmnfjTU7GpG7NhfrSSTqrSNi3qPE1\neHps033VBiTKO9I6xEC9gQ+gext8n7EnO8+lQnLfOBzHmZHp8nsSHH4PNc+MbKrk\n4LZfgBJnp2tZr3fGTyrvrPjxQgQ5KQFyCGjsQ2A67D/KHm7TqaQauBb1GeRafJ8L\nJVHfNrInC4eLIKES9G9iJstJf+BGjEiwnI9f+byit9owA7E1yjhHVoHzEbi0M3rl\ndEDI+mdYYnfZF3b5SMifqskCocQYldz43x/Be3PZN9KWBukggwgEikjWLL9hFyKL\nPwatqK1FKyNE6lQAX4Q+VH9oSswQefmTLmoHeGn3OxjW5AGFdMfmsdwlrVjl47WN\ncgUUacWnxf4Th9HAIcUob4P69KQtmQdaLtwcX3qztDTBBuQohzbPeG/AZ6VIDQ0I\n7aBQVn7NMddvq45xAJi1EjJ0sHb0pHqD4UTh1cz6TDUv6M0H3OYREhx50nUXY3hH\nMiUBCESykE5KNhLjk1oT2fsPEoobpF7no2LGgdEfRebtCvGheDDa5mcFpyNcBWYd\nfCvhzKxp/dY7Ta13516joSWxR80s9QIDAQABAoICAEpgbxBzsyLfWdiFI5Zsj393\nUddpamnOxLDqLrrM6d4kNlwCnmOF81VmmEG5R2AgO0KmbnyR1UyHB64NEqFcmf3Y\nnobxKUAmKVGP4a27O9VvlUsQpECZw41w6v5mhb+tSlHov0f/qIUCLo3ViWg2gT3i\nFeXccUxbimQ5KzK7gqAZHA/4tT8u+tyV980s/Tmgx/cpjzME2sf+DyJ5P5F597nt\n+6dWwpzi2fUdHi/mZdlXOKKJs4RPaS0sOnLmMGA/CHd+kUXDnyjg9568gZtztN+J\nUFx3jpFzmVi6XhAvVML8dcBz07cVIQB1Si1wOsonEeXQ+FRIIObnVJtZgfpvTtD3\npAHyMxX5kD4k0Sr3e0cUEqH2qO7BPySKKbLGco9w+axgYz5ClvhXV9djUe+lY9YV\n7ulXiRiytLeTvBNN14rqmQStRK2a0Wn6BR31Y4YA871XDBV4R0XzH+GHNhBBcx9l\nPejFsw7hFAohOGHZ/nNzPyqwYHSpaDdHHuUh1tUVW8KEvbWAW4BmD2DiO13vLlME\nXL6jxfLwL6FvHw9zFgSDOn5npAkFxEBWMGHCN7z0QqZgk5MqiyqeuohLjVb8Uxet\nKPhTET9ybuTsx7JMlO3eNAJRFz4T1Ho/BrkqD3HRmZlgGF35sVwQ5fXSxB3qp+f6\n0yuqqU816O1d3nCexushAoIBAQDuOWC/LDuSBYJx35RZjVUuTZ2FS572WDntwsey\nzYvoVmgbNSmfvmgKqKrw7utGsPiz/zsgnJ8NcwYEQwOI+jXKXvRhm0u3UY2+g3dC\nd6uRbfa8gNYk02aCjrADsisdikPXE2WbAe7IWHGQiIA5SnFjBazua4BhZSQ8rtvF\niQuOjrzxiIQNZSPAqYSEiRoiuoXJ5sipDuvFkU60OT4clcQrsZESJy70P8ssC1Nl\ny3hkBAPvnvUbMQ7/sN9zj6rHRAE/2L7rnM8q+wabhaXbYl0L0zreeOolpkJ/j4et\nkHD9nUARYZNP/wPUTvz3HDHKCXvr1qpkPh2CtuZWMkHvgVjNAoIBAQDbeOvMaZZl\nUQYQYqCc3Jq3djxkZ9xvA2It7LM43B2EbNeb8r+n4YZO5qGOO0CapXn6jpwhUo1f\n8/+/87lKWqAb8vfjVB0p2KiE8ufLI884oylNb1dsfzWqWT0NnyXBXiUFTz9KGTtV\nH9aNm81BJQ31NtjFvg0qRu+iMIuRAiQUp0ItfO08bpPlw4Q4vBS4XC4QRzOJpAkC\nlP/RQ1tNYfXnlegoFZfq8dN3YWmV9usVekp0FZXP4Ov6OL9t8smo4lv0Bn3URl1O\nRWFckiU4PHOpcMdpafB9/drWsvOz2NRlC3glrHONQycH/5NTANBXWmdoK5Sq9KXW\nmOF8Hxh+SETJAoIBAGLAOEGnNV53mDZaJyXkN35FQFoEGfYmZoUP7DZLjIaYYvl8\nVS/Z/0kD2DCd6bvZGo+K6ti+9BPgLYtQuENs7SVhrU5U0NNCJE7oMmTENMPJYLGN\nerezRlgyi/ZMQiExsqOSb9kMuQ4l05XFb9nP6SbSMHh46bP1+EqLdaDyCW9j7iD1\npT/kQCjaXIuQRdxFk7Y5S88A122Dqat92yiAUNyH9AohYg5v72nnm/+jk9lp7LPF\nIffOo1gM2uQNlw6ZOydbUvFahGpdusR3Z2SE5utC+bFFUFKhFAnK1sR1DtGjAO7z\nktxjaxP0VlqdPmpw+gSubN22/ga0iNEMbla5OLUCggEBAMvaeGLo3DoFVTWY9ohc\n3BR2bUfxtK0knmf7yMiSo5QiKO6APoaoEsFstTjQToSWGUOifODytcAfejkIH94x\naTAssRVlRqVcycKbgLON8mcwHif/uFtdmTI+K1hgr4f5czeIUUf5QcQii34C7laJ\nHXrb0+NwUPgo5WJn5urs6yiH5w8rT4vnRdaPkVvFTxWjAWI7UGKTi47raOYtwzuQ\nNwFBm17IF9Cxh/MF9zXFILxVV5yVhA6PY4CKfzyX27nTbwetk+i85uPRy8pZMNsY\nQ3Jp/78pGKleRotPss8lIrssOQ/9K2NVsYZbXLMnOV056ny2piNYlEVMwXwxweVi\nKQkCggEBANQgOb+0XvW69rnbPwARJgx0sShA0ZNtGNLfuitVPsLMWiyaf7rLU/d/\nIHL7leBTXNmSXQfx6vWui6QyYzJ6TqMpg8hJ7cx/pvTPB2Kq2sTPva/Ce6Z/lXL4\nDoH1otckIn/eAudf4PZXVUdCbIC9cYrng/gZMRuw9TlNOiamUgdBSI6wAKKbHBTf\n5BkHsjgN4XeCc5z2A3JVPkSZxpQKSYU0iDnUFXFJmZ/yoNKPWBMJggiqEr1g3RC7\ndxaoeMtH6wHSygD+1QW8SqrswlAX+S2jigbEUbv0H/T77CkCgXWqLlRv5f/sKeLv\nDznn3uf1eHP4v4xXULObzPYv4jwGbdQ=\n-----END PRIVATE KEY-----\n", + "nginx_external_cert_management": "False", + "nginx_http_redirect": "True", + "nginx_json_logging": "False", + "nginx_permit_firewall": true, + "nginx_self_signed_cerificate": "True" + } + }, + "svc-nginx-exec": { + "hosts": [ + "some" + ] + }, + "svc-nginx-read": { + "hosts": [ + "some" + ] + }, + "svc-noc": { + "children": [ + "cfg-noc-some", + "svc-noc-read" + ], + "vars": { + "noc_consul_token": "noc", + "noc_group": "noc", + "noc_python_interpreter": "python", + "noc_repo": "https://github.com/nocproject/noc.git", + "noc_root": "/opt/noc", + "noc_user": "noc", + "noc_version": "stable" + } + }, + "svc-noc-exec": { + "hosts": [ + "some" + ] + }, + "svc-noc-read": { + "hosts": [ + "some" + ] + }, + "svc-nsqd": { + "children": [ + "cfg-nsqd-some", + "svc-nsqd-read" + ], + "vars": { + "nsqd_max_messages_in_memory": 10000, + "nsqd_max_msg_size": 1048576 + } + }, + "svc-nsqd-exec": { + "hosts": [ + "some" + ] + }, + "svc-nsqd-read": { + "hosts": [ + "some" + ] + }, + "svc-nsqlookupd": { + "children": [ + "cfg-nsqlookupd-some", + "svc-nsqlookupd-read" + ], + "vars": {} + }, + "svc-nsqlookupd-exec": { + "hosts": [ + "some" + ] + }, + "svc-nsqlookupd-read": { + "hosts": [ + "some" + ] + }, + "svc-ping": { + "children": [ + "cfg-ping-default2-some", + "svc-ping-read" + ], + "vars": { + "ping_backup_power": 1, + "ping_loglevel": "info", + "ping_power": 4, + "ping_restore_threshold": 0, + "ping_throttle_threshold": 0, + "ping_tos": 0 + } + }, + "svc-ping-exec": { + "hosts": [ + "some" + ] + }, + "svc-ping-read": { + "hosts": [] + }, + "svc-postgres": { + "children": [ + "cfg-postgres-some", + "svc-postgres-read" + ], + "vars": { + "postgres_max_clients": 300, + "postgres_noc_db": "noc", + "postgres_noc_password": "noc", + "postgres_noc_user": "noc", + "postgres_power": "master", + "postgres_replicator_password": "noc", + "postgres_superuser_password": "noc", + "postgres_version": 9.6 + } + }, + "svc-postgres-exec": { + "hosts": [ + "some" + ] + }, + "svc-postgres-read": { + "hosts": [ + "some" + ] + }, + "svc-sae": { + "children": [ + "cfg-sae-some", + "svc-sae-read" + ], + "vars": { + "sae_db_threads": 4, + "sae_loglevel": "info", + "sae_power": 2 + } + }, + "svc-sae-exec": { + "hosts": [ + "some" + ] + }, + "svc-sae-read": { + "hosts": [ + "some" + ] + }, + "svc-scheduler": { + "children": [ + "cfg-scheduler-some", + "svc-scheduler-read" + ], + "vars": { + "scheduler_loglevel": "info", + "scheduler_max_threads": 10, + "scheduler_power": 1 + } + }, + "svc-scheduler-exec": { + "hosts": [ + "some" + ] + }, + "svc-scheduler-read": { + "hosts": [] + }, + "svc-selfmon": { + "children": [ + "cfg-selfmon-some", + "svc-selfmon-read" + ], + "vars": { + "selfmon_loglevel": "info", + "selfmon_power": 1 + } + }, + "svc-selfmon-exec": { + "hosts": [ + "some" + ] + }, + "svc-selfmon-read": { + "hosts": [] + }, + "svc-syslogcollector": { + "children": [ + "cfg-syslogcollector-default2-some", + "svc-syslogcollector-read" + ], + "vars": { + "syslogcollector_listen_syslog": "0.0.0.0:514", + "syslogcollector_loglevel": "info", + "syslogcollector_permit_firewall": true, + "syslogcollector_power": 1 + } + }, + "svc-syslogcollector-exec": { + "hosts": [ + "some" + ] + }, + "svc-syslogcollector-read": { + "hosts": [] + }, + "svc-trapcollector": { + "children": [ + "cfg-trapcollector-default2-some", + "svc-trapcollector-read" + ], + "vars": { + "trapcollector_listen_traps": "0.0.0.0:162", + "trapcollector_loglevel": "info", + "trapcollector_permit_firewall": true, + "trapcollector_power": 1 + } + }, + "svc-trapcollector-exec": { + "hosts": [ + "some" + ] + }, + "svc-trapcollector-read": { + "hosts": [] + }, + "svc-web": { + "children": [ + "cfg-web-some", + "svc-web-read" + ], + "vars": { + "web_language": "en-us", + "web_loglevel": "info", + "web_max_threads": 10, + "web_power": 2, + "web_theme": "gray" + } + }, + "svc-web-exec": { + "hosts": [ + "some" + ] + }, + "svc-web-read": { + "hosts": [] + } +} diff --git a/tests/fixtures/sqlite_dumps/multi_14.sqlite b/tests/fixtures/sqlite_dumps/multi_14.sqlite new file mode 100644 index 00000000..196f960e --- /dev/null +++ b/tests/fixtures/sqlite_dumps/multi_14.sqlite @@ -0,0 +1,730 @@ +PRAGMA foreign_keys=OFF; +BEGIN TRANSACTION; +CREATE TABLE IF NOT EXISTS "migration" ("id" INTEGER NOT NULL PRIMARY KEY, "name" VARCHAR(255) NOT NULL, "ts" DATETIME); +INSERT INTO migration VALUES(1,'001_create_settings','2016-10-18 15:15:54.629538'); +INSERT INTO migration VALUES(2,'002_create_user','2016-10-18 15:15:54.632595'); +INSERT INTO migration VALUES(3,'003_create_admin_user','2016-10-18 15:15:54.635986'); +INSERT INTO migration VALUES(4,'004_create_environment','2016-10-18 15:15:54.638919'); +INSERT INTO migration VALUES(5,'005_datacenter','2016-10-18 15:15:54.642134'); +INSERT INTO migration VALUES(6,'006_pool','2016-10-18 15:15:54.645391'); +INSERT INTO migration VALUES(7,'007_node','2016-10-18 15:15:54.648846'); +INSERT INTO migration VALUES(8,'008_joblog','2016-10-18 15:15:54.652492'); +INSERT INTO migration VALUES(9,'009_service','2016-10-18 15:15:54.656578'); +INSERT INTO migration VALUES(10,'010_pulllog','2016-10-18 15:15:54.660725'); +INSERT INTO migration VALUES(11,'011_nodetype','2016-10-18 15:15:54.664674'); +INSERT INTO migration VALUES(12,'012_default_nodetypes','2016-10-18 15:15:54.678352'); +INSERT INTO migration VALUES(13,'013_cert','2016-10-18 15:15:54.689822'); +INSERT INTO migration VALUES(14,'014_environment_config','2016-10-18 15:15:54.693926'); +INSERT INTO migration VALUES(15,'015_environment_influx','2016-10-18 15:15:54.701545'); +INSERT INTO migration VALUES(16,'016_environment_custom','2016-10-18 15:15:54.711121'); +INSERT INTO migration VALUES(17,'017_datacenter_proxy','2016-10-18 15:15:54.714292'); +INSERT INTO migration VALUES(18,'018_environment_metrics_collector','2016-10-18 15:15:54.718727'); +INSERT INTO migration VALUES(19,'019_add_default_env','2016-10-18 15:15:54.723575'); +INSERT INTO migration VALUES(20,'020_add_is_enabled_swith_for_node','2016-10-18 15:15:54.727663'); +INSERT INTO migration VALUES(21,'021_add_alerta_url','2016-10-18 15:15:54.734485'); +INSERT INTO migration VALUES(22,'022_add_local_connection','2016-12-20 13:34:50.813309'); +INSERT INTO migration VALUES(23,'023_add_n_backup','2017-07-21 13:22:11.295110'); +INSERT INTO migration VALUES(24,'024_change_session_timeout','2017-07-21 13:22:11.357947'); +INSERT INTO migration VALUES(25,'025_config_order_param','2017-08-04 12:05:24.494758'); +INSERT INTO migration VALUES(26,'026_remove_alerta_url','2017-08-12 12:38:39.397101'); +INSERT INTO migration VALUES(27,'027_install_method','2020-03-10 06:39:41.370879'); +INSERT INTO migration VALUES(28,'028_playbook_source','2020-03-10 06:39:41.390762'); +INSERT INTO migration VALUES(29,'029_migrate_to_github','2020-03-10 06:39:41.420725'); +INSERT INTO migration VALUES(30,'030_move_db_settings','2020-03-10 06:39:41.558075'); +INSERT INTO migration VALUES(31,'031_role','2020-03-10 06:39:41.571097'); +INSERT INTO migration VALUES(32,'032_add_default_roles','2020-03-10 06:39:41.744901'); +INSERT INTO migration VALUES(33,'033_remove_custom','2020-03-10 06:39:41.907520'); +INSERT INTO migration VALUES(34,'034_service_config','2020-03-10 06:39:42.061949'); +INSERT INTO migration VALUES(35,'035_remove_instances','2020-03-10 06:39:42.729340'); +INSERT INTO migration VALUES(36,'036_create_uniq_indecies','2020-03-10 06:39:42.743087'); +INSERT INTO migration VALUES(37,'037_config_order_param_settings','2020-03-10 06:39:42.749984'); +CREATE TABLE IF NOT EXISTS "settings" ("key" VARCHAR(255) NOT NULL PRIMARY KEY, "value" TEXT NOT NULL); +INSERT INTO settings VALUES('cookie_secret','"jbYjEWCI4Mu2PRf9g44lctJL4rhaoSlnK7hwMzA/vHUzrog=="'); +INSERT INTO settings VALUES('url','"http://192.168.1.68:8888/"'); +INSERT INTO settings VALUES('installation_name','"noc"'); +INSERT INTO settings VALUES('repo_url','"http://192.168.1.68:8888/hg"'); +CREATE TABLE IF NOT EXISTS "user" ("id" INTEGER NOT NULL PRIMARY KEY, "name" VARCHAR(255) NOT NULL, "is_active" SMALLINT NOT NULL, "full_name" VARCHAR(255), "password" VARCHAR(255) NOT NULL); +INSERT INTO user VALUES(1,'admin',1,'Temporary Admin','$2b$10$9uoQLU.f4PfkL1AIba6HpuKCYBoATasOV.P75EEm06Za05uVED4xm'); +CREATE TABLE IF NOT EXISTS "datacenter" ("id" INTEGER NOT NULL PRIMARY KEY, "name" VARCHAR(255) NOT NULL, "description" TEXT NOT NULL, "proxy" VARCHAR(255)); +INSERT INTO datacenter VALUES(1,'kr01','',''); +INSERT INTO datacenter VALUES(2,'sdc','',''); +INSERT INTO datacenter VALUES(3,'test','',''); +CREATE TABLE IF NOT EXISTS "pool" ("id" INTEGER NOT NULL PRIMARY KEY, "environment_id" INTEGER NOT NULL, "name" VARCHAR(255) NOT NULL, "description" TEXT NOT NULL, FOREIGN KEY ("environment_id") REFERENCES "environment" ("id") ON DELETE RESTRICT); +INSERT INTO pool VALUES(1,1,'default','Default pool for some.ru'); +INSERT INTO pool VALUES(2,2,'default','Default pool for noc-test'); +INSERT INTO pool VALUES(3,1,'test',''); +CREATE TABLE IF NOT EXISTS "joblog" ("id" INTEGER NOT NULL PRIMARY KEY, "start_ts" DATETIME NOT NULL, "complete_ts" DATETIME, "environment_id" INTEGER NOT NULL, "user" VARCHAR(255) NOT NULL, "playbook" VARCHAR(255) NOT NULL, "log" TEXT NOT NULL, "is_complete" SMALLINT NOT NULL, "n_ok" INTEGER NOT NULL, "n_changed" INTEGER NOT NULL, "n_unreachable" INTEGER NOT NULL, "n_failed" INTEGER NOT NULL, FOREIGN KEY ("environment_id") REFERENCES "environment" ("id")); +CREATE TABLE IF NOT EXISTS "node_type" ("id" INTEGER NOT NULL PRIMARY KEY, "name" VARCHAR(64) NOT NULL, "shell_type" VARCHAR(256) NOT NULL, "python_interpreter" VARCHAR(255) NOT NULL, "ssh_extra_args" VARCHAR(255), "ssh_pipelining" SMALLINT NOT NULL, "ansible_connection" VARCHAR(255) NOT NULL); +INSERT INTO node_type VALUES(1,'Linux','sh','/usr/bin/python',NULL,1,'ssh'); +INSERT INTO node_type VALUES(2,'FreeBSD','csh','/usr/local/bin/python2',NULL,1,'ssh'); +INSERT INTO node_type VALUES(3,'Local','sh','/usr/bin/python',NULL,0,'local'); +CREATE TABLE IF NOT EXISTS "node" ("id" INTEGER NOT NULL PRIMARY KEY, "environment_id" INTEGER NOT NULL, "datacenter_id" INTEGER NOT NULL, "name" VARCHAR(255) NOT NULL, "description" TEXT NOT NULL, "address" VARCHAR(255) NOT NULL, "login_as" VARCHAR(255) NOT NULL, "node_type_id" INTEGER REFERENCES "node_type" ("id") NOT NULL, "is_enabled" SMALLINT NOT NULL, FOREIGN KEY ("environment_id") REFERENCES "environment" ("id") ON DELETE RESTRICT, FOREIGN KEY ("datacenter_id") REFERENCES "datacenter" ("id") ON DELETE RESTRICT); +INSERT INTO node VALUES(1,1,1,'collector','','192.168.1.63','ansible',1,1); +INSERT INTO node VALUES(2,1,1,'mongodb02','','192.168.1.65','ansible',1,1); +INSERT INTO node VALUES(3,1,2,'mongodb03','','192.168.2.65','ansible',1,1); +INSERT INTO node VALUES(4,1,1,'mongodb01','','192.168.1.62','ansible',1,1); +INSERT INTO node VALUES(5,1,1,'influxdb01','','192.168.1.61','ansible',1,1); +INSERT INTO node VALUES(6,1,2,'clickhouse02','','192.168.3.32','ansible',1,1); +INSERT INTO node VALUES(7,1,1,'clickhouse01','','192.168.3.31','ansible',1,1); +INSERT INTO node VALUES(8,1,2,'discovery02','','192.168.2.66','ansible',1,1); +INSERT INTO node VALUES(9,1,1,'discovery01','','192.168.1.66','ansible',1,1); +INSERT INTO node VALUES(10,1,2,'wrk02','','192.168.2.67','ansible',1,1); +INSERT INTO node VALUES(11,1,1,'wrk01','','192.168.1.67','ansible',1,1); +INSERT INTO node VALUES(12,1,1,'web01','','192.168.3.51','ansible',1,1); +INSERT INTO node VALUES(13,1,2,'web02','','192.168.3.52','ansible',1,1); +INSERT INTO node VALUES(14,1,3,'test','','192.168.3.200','ansible',1,0); +CREATE TABLE IF NOT EXISTS "pulllog" ("id" INTEGER NOT NULL PRIMARY KEY, "start_ts" DATETIME NOT NULL, "complete_ts" DATETIME, "environment_id" INTEGER NOT NULL, "user" VARCHAR(255) NOT NULL, "repo" VARCHAR(255) NOT NULL, "status" SMALLINT NOT NULL, "log" TEXT NOT NULL, FOREIGN KEY ("environment_id") REFERENCES "environment" ("id")); +CREATE TABLE IF NOT EXISTS "role" ("id" INTEGER NOT NULL PRIMARY KEY, "name" VARCHAR(255) NOT NULL, "description" TEXT NOT NULL, "link" VARCHAR(255) NOT NULL, "environment_id" INTEGER NOT NULL, "is_enabled" INTEGER NOT NULL, "role_name" VARCHAR(255) NOT NULL, FOREIGN KEY ("environment_id") REFERENCES "environment" ("id") ON DELETE RESTRICT); +INSERT INTO role VALUES(1,'Custom','Custom NOC role','git+https://code.getnoc.com/ansible-roles/ansible-role-custom.git',1,0,'custom'); +INSERT INTO role VALUES(2,'Sentry','Provides configuration settings for Sentry','git+https://code.getnoc.com/ansible-roles/ansible-role-sentry.git',1,0,'sentry'); +INSERT INTO role VALUES(3,'Pgbouncer','Helps to handle thousand of devices. From 1k devices','git+https://code.getnoc.com/ansible-roles/ansible-role-pgbouncer.git',1,1,'pgbouncer'); +INSERT INTO role VALUES(4,'Memcached','Caching level. Helps to handle lots of devices. From 20k devices.','git+https://code.getnoc.com/ansible-roles/ansible-role-memcached.git',1,1,'memcached'); +INSERT INTO role VALUES(5,'Alerta notifications','Notifies about deploy to deploy system','git+https://code.getnoc.com/ansible-roles/ansible-role-alerta-notifications.git',1,0,'deploy_notifications'); +INSERT INTO role VALUES(6,'Telegraf','Helps to monitor node''s health','git+https://code.getnoc.com/ansible-roles/ansible-role-telegraf.git',1,1,'telegraf'); +INSERT INTO role VALUES(7,'Nsqadmin','Web interface for NSQd','git+https://code.getnoc.com/ansible-roles/ansible-role-nsqadmin.git',1,1,'nsqadmin'); +INSERT INTO role VALUES(8,'Monitoring','Self-monitroing','git+https://code.getnoc.com/ansible-roles/ansible-role-monitoring.git',1,0,'monitoring'); +INSERT INTO role VALUES(9,'Custom','Custom NOC role','git+https://code.getnoc.com/ansible-roles/ansible-role-custom.git',2,0,'custom'); +INSERT INTO role VALUES(10,'Sentry','Provides configuration settings for Sentry','git+https://code.getnoc.com/ansible-roles/ansible-role-sentry.git',2,0,'sentry'); +INSERT INTO role VALUES(11,'Pgbouncer','Helps to handle thousand of devices. From 1k devices','git+https://code.getnoc.com/ansible-roles/ansible-role-pgbouncer.git',2,1,'pgbouncer'); +INSERT INTO role VALUES(12,'Memcached','Caching level. Helps to handle lots of devices. From 20k devices.','git+https://code.getnoc.com/ansible-roles/ansible-role-memcached.git',2,1,'memcached'); +INSERT INTO role VALUES(13,'Alerta notifications','Notifies about deploy to deploy system','git+https://code.getnoc.com/ansible-roles/ansible-role-alerta-notifications.git',2,0,'deploy_notifications'); +INSERT INTO role VALUES(14,'Telegraf','Helps to monitor node''s health','git+https://code.getnoc.com/ansible-roles/ansible-role-telegraf.git',2,1,'telegraf'); +INSERT INTO role VALUES(15,'Nsqadmin','Web interface for NSQd','git+https://code.getnoc.com/ansible-roles/ansible-role-nsqadmin.git',2,1,'nsqadmin'); +INSERT INTO role VALUES(16,'Monitoring','Self-monitroing','git+https://code.getnoc.com/ansible-roles/ansible-role-monitoring.git',2,0,'monitoring'); +CREATE TABLE IF NOT EXISTS "service" ("id" INTEGER NOT NULL PRIMARY KEY, "environment_id" INTEGER NOT NULL, "service" VARCHAR(255) NOT NULL, "pool_id" INTEGER, "node_id" INTEGER NOT NULL, "config" TEXT NOT NULL, "present" INTEGER NOT NULL, FOREIGN KEY ("environment_id") REFERENCES "environment" ("id") ON DELETE RESTRICT, FOREIGN KEY ("pool_id") REFERENCES "pool" ("id"), FOREIGN KEY ("node_id") REFERENCES "node" ("id")); +INSERT INTO service VALUES(1,1,'discovery',1,1,'{"loglevel": "info", "max_threads": 200}',0); +INSERT INTO service VALUES(2,1,'postgres',NULL,1,'{"loglevel": "info", "postgres_db": "noc", "postgres_password": "noc", "postgres_user": "noc", "power": "master", "replicator_password": "noc", "superuser_password": "noc"}',1); +INSERT INTO service VALUES(4,1,'web',NULL,1,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(5,1,'login',NULL,1,'{"language": "ru", "ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", "loglevel": "info", "methods": "local,ldap"}',0); +INSERT INTO service VALUES(6,1,'grafana',NULL,1,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(7,1,'classifier',1,1,'{"loglevel": "info", "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup"}',0); +INSERT INTO service VALUES(8,1,'scheduler',NULL,1,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(10,1,'ping',1,1,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(12,1,'nsqlookupd',NULL,1,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(13,1,'omap',NULL,1,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(16,1,'trapcollector',1,1,'{"loglevel": "info", "power": 1}',1); +INSERT INTO service VALUES(19,1,'bi',NULL,1,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(20,1,'pgbouncer',NULL,1,'{"loglevel": "info", "max_clients": 15000}',1); +INSERT INTO service VALUES(21,1,'mongod',NULL,1,'{"loglevel": "info", "mongod_db": "noc", "mongod_engine": "wiredTiger", "mongod_logging_destination": "file", "mongod_password": "noc", "mongod_rs": "noc", "mongod_user": "noc"}',0); +INSERT INTO service VALUES(22,1,'card',NULL,1,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(23,1,'mrt',NULL,1,'{"loglevel": "info", "max_concurrency": 100}',0); +INSERT INTO service VALUES(24,1,'syslogcollector',1,1,'{"loglevel": "info", "power": 1}',1); +INSERT INTO service VALUES(25,1,'grafanads',NULL,1,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(26,1,'activator',1,1,'{"loglevel": "info", "script_threads": 200}',0); +INSERT INTO service VALUES(27,1,'mailsender',NULL,1,'{"from_address": "nocproject@some.ru.ru", "loglevel": "info", "smtp_password": "XXX", "smtp_port": 587, "smtp_server": "smtp.some.ru.ru", "smtp_user": "noc", "use_tls": 1}',0); +INSERT INTO service VALUES(29,1,'sae',NULL,1,'{"db_threads": 16, "loglevel": "info"}',0); +INSERT INTO service VALUES(30,1,'nsqd',NULL,1,'{"loglevel": "info", "max_messages_in_memory": 50000, "max_msg_size": 1048576}',1); +INSERT INTO service VALUES(31,1,'scheduler',NULL,2,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(33,1,'login',NULL,2,'{"language": "ru", "ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", "loglevel": "info", "methods": "local,ldap"}',0); +INSERT INTO service VALUES(34,1,'bi',NULL,2,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(35,1,'omap',NULL,2,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(37,1,'mongod',NULL,3,'{"loglevel": "info", "mongod_db": "noc", "mongod_engine": "wiredTiger", "mongod_logging_destination": "file", "mongod_password": "noc", "mongod_rs": "noc", "mongod_user": "noc", "power": "server"}',1); +INSERT INTO service VALUES(40,1,'activator',1,3,'{"loglevel": "info", "script_threads": 200}',0); +INSERT INTO service VALUES(42,1,'postgres',NULL,2,'{"loglevel": "info", "postgres_db": "noc", "postgres_password": "noc", "postgres_user": "noc", "power": "secondary", "replicator_password": "noc", "superuser_password": "noc"}',0); +INSERT INTO service VALUES(43,1,'web',NULL,2,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(44,1,'ping',1,3,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(46,1,'nsqlookupd',NULL,2,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(47,1,'grafana',NULL,3,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(48,1,'classifier',1,3,'{"loglevel": "info", "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup"}',0); +INSERT INTO service VALUES(49,1,'trapcollector',1,3,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(51,1,'pgbouncer',NULL,3,'{"loglevel": "info", "max_clients": 15000}',1); +INSERT INTO service VALUES(53,1,'card',NULL,3,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(54,1,'grafanads',NULL,3,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(55,1,'nsqd',NULL,3,'{"loglevel": "info", "max_messages_in_memory": 50000, "max_msg_size": 1048576}',1); +INSERT INTO service VALUES(56,1,'mrt',NULL,2,'{"loglevel": "info", "max_concurrency": 100}',0); +INSERT INTO service VALUES(57,1,'nsqd',NULL,2,'{"loglevel": "info", "max_messages_in_memory": 50000, "max_msg_size": 1048576}',1); +INSERT INTO service VALUES(58,1,'syslogcollector',1,3,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(59,1,'sae',NULL,2,'{"db_threads": 16, "loglevel": "info"}',0); +INSERT INTO service VALUES(60,1,'discovery',1,2,'{"loglevel": "info", "max_threads": 200}',0); +INSERT INTO service VALUES(61,1,'login',NULL,3,'{"language": "ru", "ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", "loglevel": "info", "methods": "local,ldap"}',0); +INSERT INTO service VALUES(62,1,'scheduler',NULL,3,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(63,1,'mailsender',NULL,2,'{"from_address": "nocproject@some.ru.ru", "loglevel": "info", "smtp_password": "XXX", "smtp_port": 587, "smtp_server": "smtp.some.ru.ru", "smtp_user": "noc", "use_tls": 1}',0); +INSERT INTO service VALUES(66,1,'bi',NULL,3,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(67,1,'omap',NULL,3,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(69,1,'mongod',NULL,2,'{"loglevel": "info", "mongod_db": "noc", "mongod_engine": "wiredTiger", "mongod_logging_destination": "file", "mongod_password": "noc", "mongod_rs": "noc", "mongod_user": "noc", "power": "server"}',1); +INSERT INTO service VALUES(71,1,'activator',1,2,'{"loglevel": "info", "script_threads": 200}',0); +INSERT INTO service VALUES(73,1,'postgres',NULL,3,'{"loglevel": "info", "postgres_db": "noc", "postgres_password": "noc", "postgres_user": "noc", "power": "secondary", "replicator_password": "noc", "superuser_password": "noc"}',0); +INSERT INTO service VALUES(74,1,'web',NULL,3,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(75,1,'ping',1,2,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(76,1,'nsqlookupd',NULL,3,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(78,1,'grafana',NULL,2,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(80,1,'classifier',1,2,'{"loglevel": "info", "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup"}',0); +INSERT INTO service VALUES(81,1,'trapcollector',1,2,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(83,1,'pgbouncer',NULL,2,'{"loglevel": "info", "max_clients": 15000}',1); +INSERT INTO service VALUES(84,1,'card',NULL,2,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(85,1,'grafanads',NULL,2,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(86,1,'mrt',NULL,3,'{"loglevel": "info", "max_concurrency": 100}',0); +INSERT INTO service VALUES(87,1,'sae',NULL,3,'{"db_threads": 16, "loglevel": "info"}',0); +INSERT INTO service VALUES(88,1,'syslogcollector',1,2,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(89,1,'discovery',1,3,'{"loglevel": "info", "max_threads": 200}',0); +INSERT INTO service VALUES(90,1,'mailsender',NULL,3,'{"from_address": "nocproject@some.ru.ru", "loglevel": "info", "smtp_password": "XXX", "smtp_port": 587, "smtp_server": "smtp.some.ru.ru", "smtp_user": "noc", "use_tls": 1}',0); +INSERT INTO service VALUES(91,1,'correlator',1,3,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(92,1,'correlator',1,1,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(93,1,'memcached',NULL,1,'{"loglevel": "info", "max_clients": 15000, "max_memory": 2048}',1); +INSERT INTO service VALUES(95,1,'correlator',1,2,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(97,1,'escalator',NULL,2,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(98,1,'escalator',NULL,3,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(99,1,'escalator',NULL,1,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(100,1,'tgsender',NULL,3,'{"loglevel": "info", "token": "noc"}',0); +INSERT INTO service VALUES(101,1,'tgsender',NULL,2,'{"loglevel": "info", "token": "noc"}',0); +INSERT INTO service VALUES(102,1,'tgsender',NULL,1,'{"loglevel": "info", "token": "noc"}',0); +INSERT INTO service VALUES(106,1,'chwriter',NULL,1,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(107,1,'chwriter',NULL,3,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(108,1,'chwriter',NULL,2,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(109,1,'omap',NULL,4,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(112,1,'sae',NULL,5,'{"db_threads": 16, "loglevel": "info"}',0); +INSERT INTO service VALUES(113,1,'tgsender',NULL,5,'{"loglevel": "info", "token": "noc"}',0); +INSERT INTO service VALUES(114,1,'bi',NULL,4,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(115,1,'syslogcollector',1,4,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(116,1,'discovery',1,5,'{"loglevel": "info", "max_threads": 200}',0); +INSERT INTO service VALUES(117,1,'mongod',NULL,5,'{"loglevel": "info", "mongod_db": "noc", "mongod_engine": "wiredTiger", "mongod_logging_destination": "file", "mongod_password": "noc", "mongod_rs": "noc", "mongod_user": "noc"}',0); +INSERT INTO service VALUES(118,1,'scheduler',NULL,4,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(123,1,'postgres',NULL,4,'{"loglevel": "info", "postgres_db": "noc", "postgres_password": "noc", "postgres_user": "noc", "power": "secondary", "replicator_password": "noc", "superuser_password": "noc"}',0); +INSERT INTO service VALUES(124,1,'nsqd',NULL,5,'{"loglevel": "info", "max_messages_in_memory": 50000, "max_msg_size": 1048576}',1); +INSERT INTO service VALUES(126,1,'grafana',NULL,5,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(128,1,'escalator',NULL,4,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(129,1,'activator',1,5,'{"loglevel": "info", "script_threads": 200}',0); +INSERT INTO service VALUES(132,1,'web',NULL,4,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(134,1,'classifier',1,5,'{"loglevel": "info", "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup"}',0); +INSERT INTO service VALUES(137,1,'nsqlookupd',NULL,4,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(138,1,'chwriter',NULL,5,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(140,1,'consul',NULL,4,'{"loglevel": "info", "power": "server"}',1); +INSERT INTO service VALUES(141,1,'ping',1,5,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(142,1,'trapcollector',1,5,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(143,1,'consul',NULL,2,'{"loglevel": "info", "power": "server"}',1); +INSERT INTO service VALUES(144,1,'classifier',1,4,'{"loglevel": "info", "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup"}',0); +INSERT INTO service VALUES(145,1,'mailsender',NULL,4,'{"from_address": "nocproject@some.ru.ru", "loglevel": "info", "smtp_password": "XXX", "smtp_port": 587, "smtp_server": "smtp.some.ru.ru", "smtp_user": "noc", "use_tls": 1}',0); +INSERT INTO service VALUES(146,1,'pgbouncer',NULL,5,'{"loglevel": "info", "max_clients": 15000}',1); +INSERT INTO service VALUES(147,1,'card',NULL,5,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(148,1,'correlator',1,4,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(149,1,'mrt',NULL,4,'{"loglevel": "info", "max_concurrency": 100}',0); +INSERT INTO service VALUES(150,1,'login',NULL,5,'{"language": "ru", "ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", "loglevel": "info", "methods": "local,ldap"}',0); +INSERT INTO service VALUES(151,1,'trapcollector',1,4,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(152,1,'grafanads',NULL,5,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(153,1,'nsqd',NULL,4,'{"loglevel": "info", "max_messages_in_memory": 50000, "max_msg_size": 1048576}',1); +INSERT INTO service VALUES(154,1,'omap',NULL,5,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(156,1,'syslogcollector',1,5,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(157,1,'sae',NULL,4,'{"db_threads": 16, "loglevel": "info"}',0); +INSERT INTO service VALUES(158,1,'tgsender',NULL,4,'{"loglevel": "info", "token": "noc"}',0); +INSERT INTO service VALUES(159,1,'bi',NULL,5,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(160,1,'discovery',1,4,'{"loglevel": "info", "max_threads": 200}',0); +INSERT INTO service VALUES(161,1,'scheduler',NULL,5,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(162,1,'mongod',NULL,4,'{"loglevel": "info", "mongod_db": "noc", "mongod_engine": "wiredTiger", "mongod_logging_destination": "file", "mongod_password": "noc", "mongod_rs": "noc", "mongod_user": "noc", "power": "server"}',1); +INSERT INTO service VALUES(163,1,'correlator',1,5,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(164,1,'pgbouncer',NULL,4,'{"loglevel": "info", "max_clients": 15000}',1); +INSERT INTO service VALUES(168,1,'postgres',NULL,5,'{"loglevel": "info", "postgres_db": "noc", "postgres_password": "noc", "postgres_user": "noc", "power": "secondary", "replicator_password": "noc", "superuser_password": "noc"}',0); +INSERT INTO service VALUES(169,1,'grafana',NULL,4,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(170,1,'ping',1,4,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(172,1,'activator',1,4,'{"loglevel": "info", "script_threads": 200}',0); +INSERT INTO service VALUES(173,1,'escalator',NULL,5,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(179,1,'nsqlookupd',NULL,5,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(182,1,'consul',NULL,5,'{"loglevel": "info", "power": "agent"}',1); +INSERT INTO service VALUES(183,1,'consul',NULL,3,'{"loglevel": "info", "power": "server"}',1); +INSERT INTO service VALUES(184,1,'chwriter',NULL,4,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(185,1,'mailsender',NULL,5,'{"from_address": "nocproject@some.ru.ru", "loglevel": "info", "smtp_password": "XXX", "smtp_port": 587, "smtp_server": "smtp.some.ru.ru", "smtp_user": "noc", "use_tls": 1}',0); +INSERT INTO service VALUES(186,1,'web',NULL,5,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(187,1,'consul',NULL,1,'{"loglevel": "info", "power": "agent"}',1); +INSERT INTO service VALUES(188,1,'grafanads',NULL,4,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(189,1,'mrt',NULL,5,'{"loglevel": "info", "max_concurrency": 100}',0); +INSERT INTO service VALUES(190,1,'card',NULL,4,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(191,1,'login',NULL,4,'{"language": "ru", "ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", "loglevel": "info", "methods": "local,ldap"}',0); +INSERT INTO service VALUES(192,1,'clickhouse',NULL,1,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(193,1,'clickhouse',NULL,5,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(194,1,'clickhouse',NULL,2,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(195,1,'clickhouse',NULL,4,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(196,1,'clickhouse',NULL,3,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(202,2,'nsqadmin',NULL,6,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(203,2,'activator',2,6,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(204,2,'bi',NULL,6,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(205,2,'sae',NULL,6,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(206,2,'web',NULL,6,'{"language": "ru", "loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(207,2,'grafanads',NULL,6,'{"loglevel": "info", "power": 1}',1); +INSERT INTO service VALUES(208,2,'omap',NULL,6,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(209,2,'correlator',2,6,'{"loglevel": "info", "power": 1}',1); +INSERT INTO service VALUES(210,2,'clickhouse',NULL,6,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(212,2,'mongod',NULL,6,'{"loglevel": "info", "mongod_db": "noc", "mongod_engine": "wiredTiger", "mongod_logging_destination": "file", "mongod_password": "noc", "mongod_rs": "noc", "mongod_user": "noc", "power": "server"}',1); +INSERT INTO service VALUES(214,2,'tgsender',NULL,6,'{"loglevel": "info", "token": "noc"}',0); +INSERT INTO service VALUES(215,2,'trapcollector',2,6,'{"loglevel": "info", "power": 1}',1); +INSERT INTO service VALUES(217,2,'memcached',NULL,6,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(218,2,'ping',2,6,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(219,2,'consul',NULL,6,'{"loglevel": "info", "power": "server"}',1); +INSERT INTO service VALUES(220,2,'scheduler',NULL,6,'{"loglevel": "info", "power": 1}',1); +INSERT INTO service VALUES(221,2,'nsqlookupd',NULL,6,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(225,2,'postgres',NULL,6,'{"loglevel": "info", "postgres_db": "noc", "postgres_password": "noc", "postgres_user": "noc", "power": "master", "replicator_password": "noc", "superuser_password": "noc"}',1); +INSERT INTO service VALUES(226,2,'pgbouncer',NULL,6,'{"loglevel": "info", "max_clients": 3000}',1); +INSERT INTO service VALUES(227,2,'card',NULL,6,'{"language": "ru", "loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(228,2,'chwriter',NULL,6,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(231,2,'mailsender',NULL,6,'{"from_address": "nocproject@some.ru.ru", "loglevel": "info", "power": 2, "smtp_password": "XXX", "smtp_port": 587, "smtp_server": "smtp.some.ru.ru", "smtp_user": "noc", "use_tls": 1}',1); +INSERT INTO service VALUES(232,2,'login',NULL,6,'{"language": "ru", "loglevel": "info", "methods": "local,ldap", "power": 2}',1); +INSERT INTO service VALUES(233,2,'nsqd',NULL,6,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(234,2,'classifier',2,6,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(235,2,'escalator',NULL,6,'{"loglevel": "info", "power": 1}',1); +INSERT INTO service VALUES(236,2,'syslogcollector',2,6,'{"loglevel": "info", "power": 1}',1); +INSERT INTO service VALUES(237,2,'grafana',NULL,6,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(238,2,'mrt',NULL,6,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(239,2,'discovery',2,6,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(241,1,'bi',NULL,6,'{"language": "ru", "loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(242,1,'omap',NULL,6,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(244,1,'scheduler',NULL,6,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(245,1,'noc',NULL,4,'{"group": "noc", "loglevel": "info", "repo": "https://github.com/nocproject/noc.git", "root": "/opt/noc", "user": "noc", "version": "microservices"}',1); +INSERT INTO service VALUES(247,1,'syslogcollector',1,6,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(248,1,'postgres',NULL,6,'{"loglevel": "info", "postgres_db": "noc", "postgres_password": "noc", "postgres_user": "noc", "power": "secondary", "replicator_password": "noc", "superuser_password": "noc"}',0); +INSERT INTO service VALUES(250,1,'escalator',NULL,6,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(251,1,'noc',NULL,2,'{"group": "noc", "loglevel": "info", "repo": "https://github.com/nocproject/noc.git", "root": "/opt/noc", "user": "noc", "version": "microservices"}',1); +INSERT INTO service VALUES(252,1,'classifier',1,6,'{"loglevel": "info", "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup"}',0); +INSERT INTO service VALUES(253,1,'nsqlookupd',NULL,6,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(254,1,'consul',NULL,6,'{"loglevel": "info", "power": "agent"}',1); +INSERT INTO service VALUES(256,1,'ping',1,6,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(257,1,'mrt',NULL,6,'{"loglevel": "info", "max_concurrency": 100}',0); +INSERT INTO service VALUES(258,1,'sae',NULL,6,'{"db_threads": 16, "loglevel": "info"}',0); +INSERT INTO service VALUES(260,1,'discovery',1,6,'{"loglevel": "info", "max_threads": 200}',0); +INSERT INTO service VALUES(261,1,'clickhouse',NULL,6,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(262,1,'mongod',NULL,6,'{"loglevel": "info", "mongod_db": "noc", "mongod_engine": "wiredTiger", "mongod_logging_destination": "file", "mongod_password": "noc", "mongod_rs": "noc", "mongod_user": "noc"}',0); +INSERT INTO service VALUES(263,1,'noc',NULL,6,'{"group": "noc", "loglevel": "info", "repo": "https://github.com/nocproject/noc.git", "root": "/opt/noc", "user": "noc", "version": "microservices"}',1); +INSERT INTO service VALUES(264,1,'noc',NULL,5,'{"group": "noc", "loglevel": "info", "repo": "https://github.com/nocproject/noc.git", "root": "/opt/noc", "user": "noc", "version": "microservices"}',1); +INSERT INTO service VALUES(265,1,'mailsender',NULL,6,'{"from_address": "nocproject@some.ru.ru", "loglevel": "info", "smtp_password": "XXX", "smtp_port": 587, "smtp_server": "smtp.some.ru.ru", "smtp_user": "noc", "use_tls": 1}',0); +INSERT INTO service VALUES(266,1,'noc',NULL,1,'{"group": "noc", "loglevel": "info", "repo": "https://github.com/nocproject/noc.git", "root": "/opt/noc", "user": "noc", "version": "microservices"}',1); +INSERT INTO service VALUES(267,1,'activator',1,6,'{"loglevel": "info", "script_threads": 200}',0); +INSERT INTO service VALUES(268,1,'grafana',NULL,6,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(269,1,'noc',NULL,3,'{"group": "noc", "loglevel": "info", "repo": "https://github.com/nocproject/noc.git", "root": "/opt/noc", "user": "noc", "version": "microservices"}',1); +INSERT INTO service VALUES(272,1,'web',NULL,6,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(273,1,'nsqd',NULL,6,'{"loglevel": "info", "max_messages_in_memory": 50000, "max_msg_size": 1048576}',1); +INSERT INTO service VALUES(276,1,'trapcollector',1,6,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(277,1,'correlator',1,6,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(279,1,'pgbouncer',NULL,6,'{"loglevel": "info", "max_clients": 15000}',1); +INSERT INTO service VALUES(280,1,'card',NULL,6,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(281,1,'chwriter',NULL,6,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(283,1,'login',NULL,6,'{"language": "ru", "ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", "loglevel": "info", "methods": "local,ldap"}',0); +INSERT INTO service VALUES(284,1,'grafanads',NULL,6,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(285,1,'tgsender',NULL,6,'{"loglevel": "info", "token": "noc"}',0); +INSERT INTO service VALUES(286,1,'ch_datasource',NULL,6,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(287,1,'ch_datasource',NULL,4,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(288,1,'ch_datasource',NULL,3,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(289,1,'ch_datasource',NULL,1,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(290,1,'ch_datasource',NULL,5,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(291,1,'ch_datasource',NULL,2,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(292,1,'consul',NULL,11,'{"loglevel": "info", "power": "agent"}',1); +INSERT INTO service VALUES(293,1,'mongod',NULL,9,'{"loglevel": "info", "mongod_db": "noc", "mongod_engine": "wiredTiger", "mongod_logging_destination": "file", "mongod_password": "noc", "mongod_rs": "noc", "mongod_user": "noc"}',0); +INSERT INTO service VALUES(294,1,'clickhouse',NULL,7,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(295,1,'discovery',1,11,'{"loglevel": "info", "max_threads": 200}',0); +INSERT INTO service VALUES(296,1,'noc',NULL,10,'{"group": "noc", "loglevel": "info", "repo": "https://github.com/nocproject/noc.git", "root": "/opt/noc", "user": "noc", "version": "microservices"}',1); +INSERT INTO service VALUES(297,1,'scheduler',NULL,10,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(299,1,'grafana',NULL,11,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(300,1,'omap',NULL,10,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(301,1,'syslogcollector',1,9,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(302,1,'activator',1,9,'{"loglevel": "info", "script_threads": 200}',0); +INSERT INTO service VALUES(304,1,'postgres',NULL,10,'{"loglevel": "info", "postgres_db": "noc", "postgres_password": "noc", "postgres_user": "noc", "power": "secondary", "replicator_password": "noc", "superuser_password": "noc"}',0); +INSERT INTO service VALUES(305,1,'mrt',NULL,10,'{"loglevel": "info", "max_concurrency": 100, "power": 2}',1); +INSERT INTO service VALUES(306,1,'web',NULL,10,'{"language": "ru", "loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(307,1,'ping',1,9,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(309,1,'card',NULL,7,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(310,1,'tgsender',NULL,10,'{"loglevel": "info", "token": "noc"}',0); +INSERT INTO service VALUES(311,1,'trapcollector',1,11,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(314,1,'pgbouncer',NULL,11,'{"loglevel": "info", "max_clients": 15000}',1); +INSERT INTO service VALUES(316,1,'bi',NULL,9,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(317,1,'consul',NULL,10,'{"loglevel": "info", "power": "agent"}',1); +INSERT INTO service VALUES(318,1,'mongod',NULL,8,'{"loglevel": "info", "mongod_db": "noc", "mongod_engine": "wiredTiger", "mongod_logging_destination": "file", "mongod_password": "noc", "mongod_rs": "noc", "mongod_user": "noc"}',0); +INSERT INTO service VALUES(319,1,'correlator',1,10,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(321,1,'discovery',1,10,'{"loglevel": "info", "max_threads": 200}',0); +INSERT INTO service VALUES(322,1,'login',NULL,11,'{"language": "ru", "ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", "loglevel": "info", "methods": "local,ldap"}',0); +INSERT INTO service VALUES(323,1,'noc',NULL,11,'{"group": "noc", "loglevel": "info", "repo": "https://github.com/nocproject/noc.git", "root": "/opt/noc", "user": "noc", "version": "microservices"}',1); +INSERT INTO service VALUES(324,1,'scheduler',NULL,9,'{"loglevel": "info", "max_threads": 40, "power": 1}',1); +INSERT INTO service VALUES(326,1,'correlator',1,11,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(327,1,'nsqlookupd',NULL,11,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(328,1,'grafanads',NULL,7,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(330,1,'omap',NULL,11,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(331,1,'escalator',NULL,7,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(334,1,'postgres',NULL,11,'{"loglevel": "info", "postgres_db": "noc", "postgres_password": "noc", "postgres_user": "noc", "power": "secondary", "replicator_password": "noc", "superuser_password": "noc"}',0); +INSERT INTO service VALUES(335,1,'web',NULL,11,'{"language": "ru", "loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(336,1,'sae',NULL,11,'{"db_threads": 16, "loglevel": "info"}',0); +INSERT INTO service VALUES(339,1,'classifier',1,10,'{"loglevel": "info", "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup"}',0); +INSERT INTO service VALUES(340,1,'mailsender',NULL,7,'{"from_address": "nocproject@some.ru.ru", "loglevel": "info", "smtp_password": "XXX", "smtp_port": 587, "smtp_server": "smtp.some.ru.ru", "smtp_user": "noc", "use_tls": 1}',0); +INSERT INTO service VALUES(341,1,'trapcollector',1,10,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(343,1,'nsqd',NULL,8,'{"loglevel": "info", "max_messages_in_memory": 50000, "max_msg_size": 1048576}',1); +INSERT INTO service VALUES(344,1,'pgbouncer',NULL,10,'{"loglevel": "info", "max_clients": 15000}',1); +INSERT INTO service VALUES(346,1,'consul',NULL,9,'{"loglevel": "info", "power": "agent"}',1); +INSERT INTO service VALUES(347,1,'mongod',NULL,7,'{"loglevel": "info", "mongod_db": "noc", "mongod_engine": "wiredTiger", "mongod_logging_destination": "file", "mongod_password": "noc", "mongod_rs": "noc", "mongod_user": "noc"}',0); +INSERT INTO service VALUES(349,1,'discovery',1,9,'{"backup_power": 8, "loglevel": "info", "max_threads": 200, "power": 8}',1); +INSERT INTO service VALUES(350,1,'login',NULL,10,'{"language": "ru", "ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", "loglevel": "info", "methods": "local,ldap"}',0); +INSERT INTO service VALUES(351,1,'scheduler',NULL,8,'{"loglevel": "info", "max_threads": 40, "power": 1}',1); +INSERT INTO service VALUES(352,1,'syslogcollector',1,10,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(353,1,'nsqlookupd',NULL,10,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(354,1,'ping',1,7,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(355,1,'activator',1,7,'{"loglevel": "info", "script_threads": 200}',0); +INSERT INTO service VALUES(356,1,'grafanads',NULL,11,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(360,1,'ch_datasource',NULL,11,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(361,1,'postgres',NULL,8,'{"loglevel": "info", "postgres_db": "noc", "postgres_password": "noc", "postgres_user": "noc", "power": "secondary", "replicator_password": "noc", "superuser_password": "noc"}',0); +INSERT INTO service VALUES(362,1,'web',NULL,8,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(363,1,'sae',NULL,10,'{"db_threads": 16, "loglevel": "info"}',0); +INSERT INTO service VALUES(364,1,'chwriter',NULL,7,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(366,1,'trapcollector',1,9,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(370,1,'pgbouncer',NULL,9,'{"loglevel": "info", "max_clients": 15000}',1); +INSERT INTO service VALUES(372,1,'bi',NULL,7,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(373,1,'consul',NULL,8,'{"loglevel": "info", "power": "agent"}',1); +INSERT INTO service VALUES(374,1,'scheduler',NULL,7,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(375,1,'discovery',1,8,'{"backup_power": 8, "loglevel": "info", "max_threads": 200, "power": 8}',1); +INSERT INTO service VALUES(376,1,'login',NULL,9,'{"language": "ru", "ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", "loglevel": "info", "methods": "local,ldap"}',0); +INSERT INTO service VALUES(377,1,'nsqlookupd',NULL,9,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(379,1,'nsqd',NULL,10,'{"loglevel": "info", "max_messages_in_memory": 50000, "max_msg_size": 1048576}',1); +INSERT INTO service VALUES(380,1,'consul',NULL,7,'{"loglevel": "info", "power": "agent"}',1); +INSERT INTO service VALUES(381,1,'ch_datasource',NULL,10,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(382,1,'postgres',NULL,9,'{"loglevel": "info", "postgres_db": "noc", "postgres_password": "noc", "postgres_user": "noc", "power": "secondary", "replicator_password": "noc", "superuser_password": "noc"}',0); +INSERT INTO service VALUES(383,1,'web',NULL,9,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(384,1,'sae',NULL,9,'{"db_threads": 16, "loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(385,1,'nsqd',NULL,9,'{"loglevel": "info", "max_messages_in_memory": 50000, "max_msg_size": 1048576}',1); +INSERT INTO service VALUES(386,1,'clickhouse',NULL,11,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(387,1,'syslogcollector',1,8,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(389,1,'trapcollector',1,8,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(390,1,'mrt',NULL,7,'{"loglevel": "info", "max_concurrency": 100}',0); +INSERT INTO service VALUES(392,1,'pgbouncer',NULL,8,'{"loglevel": "info", "max_clients": 15000}',1); +INSERT INTO service VALUES(394,1,'discovery',1,7,'{"loglevel": "info", "max_threads": 200}',0); +INSERT INTO service VALUES(395,1,'tgsender',NULL,7,'{"loglevel": "info", "token": "noc"}',0); +INSERT INTO service VALUES(396,1,'mailsender',NULL,9,'{"from_address": "nocproject@some.ru.ru", "loglevel": "info", "power": 2, "smtp_password": "XXX", "smtp_port": 587, "smtp_server": "smtp.some.ru.ru", "smtp_user": "noc", "use_tls": 1}',1); +INSERT INTO service VALUES(397,1,'syslogcollector',1,11,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(398,1,'login',NULL,8,'{"language": "ru", "ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", "loglevel": "info", "methods": "local,ldap"}',0); +INSERT INTO service VALUES(399,1,'nsqlookupd',NULL,8,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(401,1,'grafana',NULL,7,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(402,1,'classifier',1,7,'{"loglevel": "info", "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup"}',0); +INSERT INTO service VALUES(403,1,'card',NULL,11,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(405,1,'grafanads',NULL,9,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(406,1,'chwriter',NULL,9,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(407,1,'trapcollector',1,7,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(408,1,'ch_datasource',NULL,9,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(409,1,'escalator',NULL,10,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(410,1,'sae',NULL,8,'{"db_threads": 16, "loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(411,1,'clickhouse',NULL,10,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(412,1,'pgbouncer',NULL,7,'{"loglevel": "info", "max_clients": 15000}',1); +INSERT INTO service VALUES(414,1,'login',NULL,7,'{"language": "ru", "ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", "loglevel": "info", "methods": "local,ldap"}',0); +INSERT INTO service VALUES(415,1,'correlator',1,7,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(416,1,'classifier',1,11,'{"loglevel": "info", "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup"}',0); +INSERT INTO service VALUES(418,1,'syslogcollector',1,7,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(419,1,'omap',NULL,7,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(420,1,'mailsender',NULL,8,'{"from_address": "nocproject@some.ru.ru", "loglevel": "info", "power": 2, "smtp_password": "XXX", "smtp_port": 587, "smtp_server": "smtp.some.ru.ru", "smtp_user": "noc", "use_tls": 1}',1); +INSERT INTO service VALUES(423,1,'grafana',NULL,8,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(424,1,'postgres',NULL,7,'{"loglevel": "info", "postgres_db": "noc", "postgres_password": "noc", "postgres_user": "noc", "power": "secondary", "replicator_password": "noc", "superuser_password": "noc"}',0); +INSERT INTO service VALUES(425,1,'noc',NULL,7,'{"group": "noc", "loglevel": "info", "repo": "https://github.com/nocproject/noc.git", "root": "/opt/noc", "user": "noc", "version": "microservices"}',1); +INSERT INTO service VALUES(426,1,'correlator',1,8,'{"loglevel": "info", "max_threads": 40, "power": 1}',1); +INSERT INTO service VALUES(428,1,'card',NULL,10,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(429,1,'activator',1,10,'{"loglevel": "info", "power": 4, "script_threads": 200}',1); +INSERT INTO service VALUES(430,1,'mrt',NULL,9,'{"loglevel": "info", "max_concurrency": 100}',0); +INSERT INTO service VALUES(431,1,'web',NULL,7,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(432,1,'grafanads',NULL,10,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(433,1,'nsqlookupd',NULL,7,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(434,1,'grafanads',NULL,8,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(435,1,'chwriter',NULL,8,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(436,1,'ping',1,10,'{"backup_power": 2, "loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(437,1,'tgsender',NULL,9,'{"loglevel": "info", "power": 2, "token": "noc"}',1); +INSERT INTO service VALUES(438,1,'ch_datasource',NULL,8,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(439,1,'escalator',NULL,11,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(440,1,'clickhouse',NULL,9,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(443,1,'bi',NULL,10,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(444,1,'mongod',NULL,11,'{"loglevel": "info", "mongod_db": "noc", "mongod_engine": "wiredTiger", "mongod_logging_destination": "file", "mongod_password": "noc", "mongod_rs": "noc", "mongod_user": "noc"}',0); +INSERT INTO service VALUES(446,1,'sae',NULL,7,'{"db_threads": 16, "loglevel": "info"}',0); +INSERT INTO service VALUES(447,1,'noc',NULL,8,'{"group": "noc", "loglevel": "info", "repo": "https://github.com/nocproject/noc.git", "root": "/opt/noc", "user": "noc", "version": "microservices"}',1); +INSERT INTO service VALUES(448,1,'mailsender',NULL,11,'{"from_address": "nocproject@some.ru.ru", "loglevel": "info", "smtp_password": "XXX", "smtp_port": 587, "smtp_server": "smtp.some.ru.ru", "smtp_user": "noc", "use_tls": 1}',0); +INSERT INTO service VALUES(450,1,'grafana',NULL,9,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(451,1,'omap',NULL,8,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(454,1,'card',NULL,9,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(455,1,'activator',1,11,'{"loglevel": "info", "power": 4, "script_threads": 200}',1); +INSERT INTO service VALUES(456,1,'mrt',NULL,8,'{"loglevel": "info", "max_concurrency": 100}',0); +INSERT INTO service VALUES(457,1,'chwriter',NULL,11,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(458,1,'ping',1,11,'{"backup_power": 2, "loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(459,1,'classifier',1,9,'{"loglevel": "info", "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup", "power": 32}',1); +INSERT INTO service VALUES(460,1,'tgsender',NULL,8,'{"loglevel": "info", "power": 2, "token": "noc"}',1); +INSERT INTO service VALUES(462,1,'escalator',NULL,8,'{"loglevel": "info", "max_threads": 40, "power": 1}',1); +INSERT INTO service VALUES(463,1,'clickhouse',NULL,8,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(466,1,'nsqd',NULL,7,'{"loglevel": "info", "max_messages_in_memory": 50000, "max_msg_size": 1048576}',1); +INSERT INTO service VALUES(467,1,'bi',NULL,11,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(468,1,'mongod',NULL,10,'{"loglevel": "info", "mongod_db": "noc", "mongod_engine": "wiredTiger", "mongod_logging_destination": "file", "mongod_password": "noc", "mongod_rs": "noc", "mongod_user": "noc"}',0); +INSERT INTO service VALUES(469,1,'ch_datasource',NULL,7,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(470,1,'noc',NULL,9,'{"group": "noc", "loglevel": "info", "repo": "https://github.com/nocproject/noc.git", "root": "/opt/noc", "user": "noc", "version": "microservices"}',1); +INSERT INTO service VALUES(471,1,'scheduler',NULL,11,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(472,1,'mailsender',NULL,10,'{"from_address": "nocproject@some.ru.ru", "loglevel": "info", "smtp_password": "XXX", "smtp_port": 587, "smtp_server": "smtp.some.ru.ru", "smtp_user": "noc", "use_tls": 1}',0); +INSERT INTO service VALUES(473,1,'correlator',1,9,'{"loglevel": "info", "max_threads": 40, "power": 1}',1); +INSERT INTO service VALUES(475,1,'grafana',NULL,10,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(476,1,'omap',NULL,9,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(478,1,'card',NULL,8,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(479,1,'activator',1,8,'{"loglevel": "info", "script_threads": 200}',0); +INSERT INTO service VALUES(481,1,'mrt',NULL,11,'{"loglevel": "info", "max_concurrency": 100, "power": 2}',1); +INSERT INTO service VALUES(482,1,'chwriter',NULL,10,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(483,1,'ping',1,8,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(485,1,'classifier',1,8,'{"loglevel": "info", "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup", "power": 32}',1); +INSERT INTO service VALUES(486,1,'tgsender',NULL,11,'{"loglevel": "info", "token": "noc"}',0); +INSERT INTO service VALUES(488,1,'escalator',NULL,9,'{"loglevel": "info", "max_threads": 40, "power": 1}',1); +INSERT INTO service VALUES(490,1,'nsqd',NULL,11,'{"loglevel": "info", "max_messages_in_memory": 50000, "max_msg_size": 1048576}',1); +INSERT INTO service VALUES(491,1,'bi',NULL,8,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(492,1,'mailsender',NULL,13,'{"from_address": "nocproject@some.ru.ru", "loglevel": "info", "smtp_password": "XXX", "smtp_port": 587, "smtp_server": "smtp.some.ru.ru", "smtp_user": "noc", "use_tls": 1}',0); +INSERT INTO service VALUES(493,1,'trapcollector',1,12,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(494,1,'pgbouncer',NULL,12,'{"loglevel": "info", "max_clients": 15000}',1); +INSERT INTO service VALUES(496,1,'login',NULL,12,'{"language": "ru", "ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", "loglevel": "info", "methods": "local,ldap", "power": 2}',1); +INSERT INTO service VALUES(498,1,'nsqlookupd',NULL,12,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(499,1,'chwriter',NULL,13,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(500,1,'nsqd',NULL,13,'{"loglevel": "info", "max_messages_in_memory": 50000, "max_msg_size": 1048576}',1); +INSERT INTO service VALUES(501,1,'ch_datasource',NULL,13,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(502,1,'sae',NULL,12,'{"db_threads": 16, "loglevel": "info"}',0); +INSERT INTO service VALUES(505,1,'web',NULL,12,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(506,1,'mailsender',NULL,12,'{"from_address": "nocproject@some.ru.ru", "loglevel": "info", "smtp_password": "XXX", "smtp_port": 587, "smtp_server": "smtp.some.ru.ru", "smtp_user": "noc", "use_tls": 1}',0); +INSERT INTO service VALUES(507,1,'syslogcollector',1,13,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(508,1,'grafana',NULL,12,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(510,1,'chwriter',NULL,12,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(511,1,'mrt',NULL,13,'{"loglevel": "info", "max_concurrency": 100}',0); +INSERT INTO service VALUES(512,1,'grafanads',NULL,12,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(513,1,'tgsender',NULL,13,'{"loglevel": "info", "token": "noc"}',0); +INSERT INTO service VALUES(514,1,'ch_datasource',NULL,12,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(515,1,'clickhouse',NULL,13,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(516,1,'noc',NULL,12,'{"group": "noc", "loglevel": "info", "repo": "https://github.com/nocproject/noc.git", "root": "/opt/noc", "user": "noc", "version": "microservices"}',1); +INSERT INTO service VALUES(517,1,'grafana',NULL,13,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(518,1,'omap',NULL,12,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(519,1,'nsqd',NULL,12,'{"loglevel": "info", "max_messages_in_memory": 50000, "max_msg_size": 1048576}',1); +INSERT INTO service VALUES(520,1,'classifier',1,13,'{"loglevel": "info", "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup"}',0); +INSERT INTO service VALUES(521,1,'card',NULL,13,'{"language": "ru", "loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(522,1,'mrt',NULL,12,'{"loglevel": "info", "max_concurrency": 100}',0); +INSERT INTO service VALUES(523,1,'escalator',NULL,12,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(524,1,'tgsender',NULL,12,'{"loglevel": "info", "token": "noc"}',0); +INSERT INTO service VALUES(525,1,'clickhouse',NULL,12,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(526,1,'noc',NULL,13,'{"group": "noc", "loglevel": "info", "repo": "https://github.com/nocproject/noc.git", "root": "/opt/noc", "user": "noc", "version": "microservices"}',1); +INSERT INTO service VALUES(527,1,'omap',NULL,13,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(528,1,'ping',1,12,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(529,1,'nsqadmin',NULL,12,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(530,1,'classifier',1,12,'{"loglevel": "info", "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup"}',0); +INSERT INTO service VALUES(531,1,'card',NULL,12,'{"language": "ru", "loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(532,1,'activator',1,12,'{"loglevel": "info", "script_threads": 200}',0); +INSERT INTO service VALUES(533,1,'escalator',NULL,13,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(534,1,'bi',NULL,12,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(535,1,'mongod',NULL,13,'{"loglevel": "info", "mongod_db": "noc", "mongod_engine": "wiredTiger", "mongod_logging_destination": "file", "mongod_password": "noc", "mongod_rs": "noc", "mongod_user": "noc"}',0); +INSERT INTO service VALUES(538,1,'grafanads',NULL,13,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(540,1,'ping',1,13,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(541,1,'nsqadmin',NULL,13,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(542,1,'activator',1,13,'{"loglevel": "info", "script_threads": 200}',0); +INSERT INTO service VALUES(543,1,'bi',NULL,13,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(544,1,'mongod',NULL,12,'{"loglevel": "info", "mongod_db": "noc", "mongod_engine": "wiredTiger", "mongod_logging_destination": "file", "mongod_password": "noc", "mongod_rs": "noc", "mongod_user": "noc"}',0); +INSERT INTO service VALUES(547,1,'scheduler',NULL,13,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(550,1,'consul',NULL,13,'{"loglevel": "info", "power": "agent"}',1); +INSERT INTO service VALUES(551,1,'correlator',1,12,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(552,1,'discovery',1,13,'{"loglevel": "info", "max_threads": 200}',0); +INSERT INTO service VALUES(553,1,'scheduler',NULL,12,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(554,1,'postgres',NULL,12,'{"loglevel": "info", "postgres_db": "noc", "postgres_password": "noc", "postgres_user": "noc", "power": "secondary", "replicator_password": "noc", "superuser_password": "noc"}',0); +INSERT INTO service VALUES(556,1,'keepalived',NULL,13,'{"clickhouse_virtual_ip": "192.168.3.30", "loglevel": "info", "nginx_virtual_ip": "192.168.3.50", "virtual_ip": "192.168.1.63"}',1); +INSERT INTO service VALUES(557,1,'consul',NULL,12,'{"loglevel": "info", "power": "agent"}',1); +INSERT INTO service VALUES(558,1,'trapcollector',1,13,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(559,1,'pgbouncer',NULL,13,'{"loglevel": "info", "max_clients": 15000}',1); +INSERT INTO service VALUES(562,1,'web',NULL,13,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(563,1,'login',NULL,13,'{"language": "ru", "ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", "loglevel": "info", "methods": "local,ldap", "power": 2}',1); +INSERT INTO service VALUES(564,1,'syslogcollector',1,12,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(565,1,'discovery',1,12,'{"loglevel": "info", "max_threads": 200}',0); +INSERT INTO service VALUES(566,1,'nsqlookupd',NULL,13,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(567,1,'postgres',NULL,13,'{"loglevel": "info", "postgres_db": "noc", "postgres_password": "noc", "postgres_user": "noc", "power": "secondary", "replicator_password": "noc", "superuser_password": "noc"}',0); +INSERT INTO service VALUES(568,1,'keepalived',NULL,12,'{"clickhouse_virtual_ip": "192.168.3.30", "loglevel": "info", "nginx_virtual_ip": "192.168.3.50", "virtual_ip": "192.168.1.63"}',1); +INSERT INTO service VALUES(569,1,'sae',NULL,13,'{"db_threads": 16, "loglevel": "info"}',0); +INSERT INTO service VALUES(571,1,'correlator',1,13,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(573,2,'postgres',NULL,14,'{"loglevel": "info", "postgres_db": "noc", "postgres_password": "noc", "postgres_user": "noc", "power": "master", "replicator_password": "noc", "superuser_password": "noc"}',1); +INSERT INTO service VALUES(574,2,'activator',2,14,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(575,2,'pgbouncer',NULL,14,'{"loglevel": "info", "max_clients": 3000}',1); +INSERT INTO service VALUES(579,2,'mailsender',NULL,14,'{"from_address": "nocproject@some.ru.ru", "loglevel": "info", "power": 2, "smtp_password": "XXX", "smtp_port": 587, "smtp_server": "smtp.some.ru.ru", "smtp_user": "noc", "use_tls": 1}',1); +INSERT INTO service VALUES(580,2,'login',NULL,14,'{"language": "ru", "loglevel": "info", "methods": "local,ldap", "power": 2}',1); +INSERT INTO service VALUES(581,2,'card',NULL,14,'{"language": "ru", "loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(582,2,'classifier',2,14,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(583,2,'chwriter',NULL,14,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(584,2,'escalator',NULL,14,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(585,2,'discovery',2,14,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(586,2,'nsqd',NULL,14,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(588,2,'nsqadmin',NULL,14,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(589,2,'syslogcollector',2,14,'{"loglevel": "info", "power": 1}',1); +INSERT INTO service VALUES(591,2,'grafana',NULL,14,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(592,2,'mrt',NULL,14,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(593,2,'web',NULL,14,'{"language": "ru", "loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(594,2,'omap',NULL,14,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(595,2,'bi',NULL,14,'{"language": "ru", "loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(597,2,'sae',NULL,14,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(598,2,'correlator',2,14,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(599,2,'scheduler',NULL,14,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(600,2,'trapcollector',2,14,'{"loglevel": "info", "power": 1}',1); +INSERT INTO service VALUES(601,2,'clickhouse',NULL,14,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(603,2,'mongod',NULL,14,'{"loglevel": "info", "mongod_db": "noc", "mongod_engine": "wiredTiger", "mongod_logging_destination": "file", "mongod_password": "noc", "mongod_rs": "noc", "mongod_user": "noc", "power": "server"}',1); +INSERT INTO service VALUES(604,2,'ping',2,14,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(605,2,'consul',NULL,14,'{"loglevel": "info", "power": "server"}',1); +INSERT INTO service VALUES(606,2,'tgsender',NULL,14,'{"loglevel": "info", "power": 2, "token": "noc"}',1); +INSERT INTO service VALUES(607,2,'nsqlookupd',NULL,14,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(608,2,'memcached',NULL,14,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(609,2,'grafanads',NULL,14,'{"loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(611,1,'escalator',NULL,14,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(612,1,'clickhouse',NULL,14,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(613,1,'ping',1,14,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(614,1,'card',NULL,14,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(615,1,'activator',1,14,'{"loglevel": "info", "script_threads": 200}',0); +INSERT INTO service VALUES(616,1,'bi',NULL,14,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(618,1,'mongod',NULL,14,'{"loglevel": "info", "mongod_db": "noc", "mongod_engine": "wiredTiger", "mongod_logging_destination": "file", "mongod_password": "noc", "mongod_rs": "noc", "mongod_user": "noc"}',0); +INSERT INTO service VALUES(621,1,'syslogcollector',1,14,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(622,1,'mailsender',NULL,14,'{"from_address": "nocproject@some.ru.ru", "loglevel": "info", "smtp_password": "XXX", "smtp_port": 587, "smtp_server": "smtp.some.ru.ru", "smtp_user": "noc", "use_tls": 1}',0); +INSERT INTO service VALUES(623,1,'grafana',NULL,14,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(626,1,'chwriter',NULL,14,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(628,1,'noc',NULL,14,'{"group": "noc", "loglevel": "info", "repo": "https://github.com/nocproject/noc.git", "root": "/opt/noc", "user": "noc", "version": "microservices"}',1); +INSERT INTO service VALUES(629,1,'omap',NULL,14,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(630,1,'correlator',1,14,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(631,1,'scheduler',NULL,14,'{"loglevel": "info", "max_threads": 40}',0); +INSERT INTO service VALUES(632,1,'postgres',NULL,14,'{"loglevel": "info", "postgres_db": "noc", "postgres_password": "noc", "postgres_user": "noc", "power": "secondary", "replicator_password": "noc", "superuser_password": "noc"}',0); +INSERT INTO service VALUES(634,1,'web',NULL,14,'{"language": "ru", "loglevel": "info"}',0); +INSERT INTO service VALUES(635,1,'mrt',NULL,14,'{"loglevel": "info", "max_concurrency": 100}',0); +INSERT INTO service VALUES(636,1,'consul',NULL,14,'{"loglevel": "info", "power": "agent"}',1); +INSERT INTO service VALUES(637,1,'tgsender',NULL,14,'{"loglevel": "info", "token": "noc"}',0); +INSERT INTO service VALUES(638,1,'discovery',1,14,'{"loglevel": "info", "max_threads": 200}',0); +INSERT INTO service VALUES(640,1,'classifier',1,14,'{"loglevel": "info", "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup"}',0); +INSERT INTO service VALUES(641,1,'trapcollector',1,14,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(645,1,'login',NULL,14,'{"language": "ru", "ldap_server": "192.168.51.1, 192.168.51.2, 192.168.51.3, 192.168.52.1, 192.168.52.2, 192.168.52.3", "loglevel": "info", "methods": "local,ldap"}',0); +INSERT INTO service VALUES(646,1,'nsqd',NULL,14,'{"loglevel": "info", "max_messages_in_memory": 50000, "max_msg_size": 1048576}',0); +INSERT INTO service VALUES(647,1,'nsqlookupd',NULL,14,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(648,1,'sae',NULL,14,'{"db_threads": 16, "loglevel": "info"}',0); +INSERT INTO service VALUES(649,1,'grafanads',NULL,14,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(650,1,'ch_datasource',NULL,14,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(651,1,'consul-template',NULL,9,'{"loglevel": "info", "use_dedup": 0}',1); +INSERT INTO service VALUES(652,1,'consul-template',NULL,8,'{"loglevel": "info", "use_dedup": 0}',1); +INSERT INTO service VALUES(653,1,'consul-template',NULL,3,'{"loglevel": "info", "use_dedup": 0}',1); +INSERT INTO service VALUES(654,1,'consul-template',NULL,7,'{"loglevel": "info", "use_dedup": 0}',1); +INSERT INTO service VALUES(655,1,'consul-template',NULL,2,'{"loglevel": "info", "use_dedup": 0}',1); +INSERT INTO service VALUES(656,1,'consul-template',NULL,10,'{"loglevel": "info", "use_dedup": 0}',1); +INSERT INTO service VALUES(657,1,'consul-template',NULL,5,'{"loglevel": "info", "use_dedup": 0}',1); +INSERT INTO service VALUES(658,1,'consul-template',NULL,13,'{"loglevel": "info", "use_dedup": 0}',1); +INSERT INTO service VALUES(659,1,'consul-template',NULL,11,'{"loglevel": "info", "use_dedup": 0}',1); +INSERT INTO service VALUES(660,1,'consul-template',NULL,4,'{"loglevel": "info", "use_dedup": 0}',1); +INSERT INTO service VALUES(661,1,'consul-template',NULL,12,'{"loglevel": "info", "use_dedup": 0}',1); +INSERT INTO service VALUES(662,1,'consul-template',NULL,6,'{"loglevel": "info", "use_dedup": 0}',1); +INSERT INTO service VALUES(663,1,'consul-template',NULL,14,'{"loglevel": "info", "use_dedup": 0}',1); +INSERT INTO service VALUES(664,1,'consul-template',NULL,1,'{"loglevel": "info", "use_dedup": 0}',1); +INSERT INTO service VALUES(665,1,'trapcollector',3,10,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(666,1,'trapcollector',3,6,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(667,1,'ping',3,14,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(668,1,'activator',3,11,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(669,1,'correlator',3,1,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(670,1,'discovery',3,13,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(671,1,'ping',3,6,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(672,1,'syslogcollector',3,8,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(673,1,'activator',3,3,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(674,1,'classifier',3,12,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(675,1,'correlator',3,9,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(676,1,'discovery',3,5,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(677,1,'trapcollector',3,9,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(678,1,'trapcollector',3,1,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(679,1,'syslogcollector',3,3,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(680,1,'activator',3,12,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(681,1,'classifier',3,11,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(682,1,'discovery',3,12,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(683,1,'ping',3,7,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(684,1,'syslogcollector',3,11,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(685,1,'activator',3,4,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(686,1,'classifier',3,3,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(687,1,'correlator',3,8,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(688,1,'discovery',3,4,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(689,1,'trapcollector',3,8,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(690,1,'classifier',3,8,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(691,1,'ping',3,8,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(692,1,'syslogcollector',3,2,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(693,1,'activator',3,13,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(694,1,'classifier',3,10,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(695,1,'correlator',3,3,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(696,1,'syslogcollector',3,10,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(697,1,'activator',3,5,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(698,1,'correlator',3,11,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(699,1,'discovery',3,7,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(700,1,'trapcollector',3,11,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(701,1,'syslogcollector',3,5,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(702,1,'trapcollector',3,3,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(703,1,'ping',3,9,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(704,1,'syslogcollector',3,13,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(705,1,'activator',3,14,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(706,1,'classifier',3,9,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(707,1,'correlator',3,2,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(708,1,'discovery',3,14,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(709,1,'ping',3,1,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(710,1,'activator',3,6,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(711,1,'classifier',3,1,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(712,1,'correlator',3,10,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(713,1,'discovery',3,6,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(714,1,'classifier',3,4,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(715,1,'syslogcollector',3,4,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(716,1,'correlator',3,5,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(717,1,'trapcollector',3,2,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(718,1,'ping',3,10,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(719,1,'syslogcollector',3,12,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(720,1,'correlator',3,13,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(721,1,'discovery',3,9,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(722,1,'ping',3,2,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(723,1,'activator',3,7,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(724,1,'discovery',3,1,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(725,1,'trapcollector',3,13,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(726,1,'trapcollector',3,5,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(727,1,'syslogcollector',3,7,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(728,1,'activator',3,8,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(729,1,'correlator',3,4,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(730,1,'ping',3,11,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(731,1,'correlator',3,12,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(732,1,'discovery',3,8,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(733,1,'ping',3,3,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(734,1,'classifier',3,7,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(735,1,'trapcollector',3,12,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(736,1,'syslogcollector',3,14,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(737,1,'trapcollector',3,4,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(738,1,'ping',3,12,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(739,1,'syslogcollector',3,6,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(740,1,'activator',3,9,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(741,1,'correlator',3,7,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(742,1,'ping',3,4,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(743,1,'activator',3,1,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(744,1,'classifier',3,14,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(745,1,'discovery',3,11,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(746,1,'classifier',3,6,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(747,1,'discovery',3,3,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(748,1,'classifier',3,2,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(749,1,'trapcollector',3,7,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(750,1,'ping',3,13,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(751,1,'syslogcollector',3,1,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(752,1,'activator',3,10,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(753,1,'correlator',3,6,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(754,1,'ping',3,5,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(755,1,'syslogcollector',3,9,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(756,1,'activator',3,2,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(757,1,'classifier',3,13,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(758,1,'correlator',3,14,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(759,1,'discovery',3,10,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(760,1,'classifier',3,5,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(761,1,'discovery',3,2,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(762,1,'trapcollector',3,14,'{"loglevel": "info"}',0); +INSERT INTO service VALUES(763,1,'telegraf',NULL,1,'{"loglevel": "info", "telegraf_output_plugin": "influx"}',1); +INSERT INTO service VALUES(764,1,'monitoring',NULL,1,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(765,1,'telegraf',NULL,2,'{"loglevel": "info", "telegraf_output_plugin": "influx"}',1); +INSERT INTO service VALUES(766,1,'monitoring',NULL,2,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(767,1,'telegraf',NULL,3,'{"loglevel": "info", "telegraf_output_plugin": "influx"}',1); +INSERT INTO service VALUES(768,1,'monitoring',NULL,3,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(769,1,'telegraf',NULL,4,'{"loglevel": "info", "telegraf_output_plugin": "influx"}',1); +INSERT INTO service VALUES(770,1,'monitoring',NULL,4,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(771,1,'telegraf',NULL,5,'{"loglevel": "info", "telegraf_output_plugin": "influx"}',1); +INSERT INTO service VALUES(772,1,'monitoring',NULL,5,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(773,1,'telegraf',NULL,6,'{"loglevel": "info", "telegraf_output_plugin": "influx"}',1); +INSERT INTO service VALUES(774,1,'monitoring',NULL,6,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(775,1,'telegraf',NULL,7,'{"loglevel": "info", "telegraf_output_plugin": "influx"}',1); +INSERT INTO service VALUES(776,1,'monitoring',NULL,7,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(777,1,'telegraf',NULL,8,'{"loglevel": "info", "telegraf_output_plugin": "influx"}',1); +INSERT INTO service VALUES(778,1,'monitoring',NULL,8,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(779,1,'telegraf',NULL,9,'{"loglevel": "info", "telegraf_output_plugin": "influx"}',1); +INSERT INTO service VALUES(780,1,'monitoring',NULL,9,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(781,1,'telegraf',NULL,10,'{"loglevel": "info", "telegraf_output_plugin": "influx"}',1); +INSERT INTO service VALUES(782,1,'monitoring',NULL,10,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(783,1,'telegraf',NULL,11,'{"loglevel": "info", "telegraf_output_plugin": "influx"}',1); +INSERT INTO service VALUES(784,1,'monitoring',NULL,11,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(785,1,'telegraf',NULL,12,'{"loglevel": "info", "telegraf_output_plugin": "influx"}',1); +INSERT INTO service VALUES(786,1,'monitoring',NULL,12,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(787,1,'telegraf',NULL,13,'{"loglevel": "info", "telegraf_output_plugin": "influx"}',1); +INSERT INTO service VALUES(788,1,'monitoring',NULL,13,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(789,1,'telegraf',NULL,14,'{"loglevel": "info", "telegraf_output_plugin": "influx"}',1); +INSERT INTO service VALUES(790,1,'monitoring',NULL,14,'{"loglevel": "info"}',1); +INSERT INTO service VALUES(791,2,'consul-template',NULL,14,'{}',1); +INSERT INTO service VALUES(792,2,'consul-template',NULL,6,'{}',1); +CREATE TABLE IF NOT EXISTS "environment" ("id" INTEGER NOT NULL PRIMARY KEY, "name" VARCHAR(255) NOT NULL, "description" TEXT NOT NULL, "env_type" VARCHAR(255) NOT NULL, "installation_name" VARCHAR(255) NOT NULL, "web_host" VARCHAR(255) NOT NULL, "is_default" SMALLINT NOT NULL, "config_order" VARCHAR(255) NOT NULL, "install_method" VARCHAR(255) NOT NULL, "playbook_link" VARCHAR(255) NOT NULL); +INSERT INTO environment VALUES(1,'NOC','','prod','noc','noc',0,'yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC','git','git+https://github.com/nocproject/ansible_deploy@microservices'); +INSERT INTO environment VALUES(2,'test','','prod','noc','noc',0,'yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC','git','git+https://github.com/nocproject/ansible_deploy@microservices'); +CREATE UNIQUE INDEX "service_environment_id_service_pool_id_node_id" ON "service" ("environment_id", "service", "pool_id", "node_id"); +CREATE UNIQUE INDEX "datacenter_name" ON "datacenter" ("name"); +CREATE UNIQUE INDEX "environment_name" ON "environment" ("name"); +CREATE UNIQUE INDEX "node_environment_id_datacenter_id_name" ON "node" ("environment_id", "datacenter_id", "name"); +CREATE UNIQUE INDEX "user_name" ON "user" ("name"); +CREATE UNIQUE INDEX "role_environment_id_name" ON "role" ("environment_id", "name"); +COMMIT; diff --git a/tests/fixtures/sqlite_dumps/single.sqlite b/tests/fixtures/sqlite_dumps/single.sqlite new file mode 100644 index 00000000..9975bb6e --- /dev/null +++ b/tests/fixtures/sqlite_dumps/single.sqlite @@ -0,0 +1,113 @@ +PRAGMA foreign_keys=OFF; +BEGIN TRANSACTION; +CREATE TABLE IF NOT EXISTS "migration" ("id" INTEGER NOT NULL PRIMARY KEY, "name" VARCHAR(255) NOT NULL, "ts" DATETIME); +INSERT INTO migration VALUES(1,'001_create_settings','2020-02-29 00:14:10.625992'); +INSERT INTO migration VALUES(2,'002_create_user','2020-02-29 00:14:10.643856'); +INSERT INTO migration VALUES(3,'003_create_admin_user','2020-02-29 00:14:10.661295'); +INSERT INTO migration VALUES(4,'004_create_environment','2020-02-29 00:14:10.689358'); +INSERT INTO migration VALUES(5,'005_datacenter','2020-02-29 00:14:10.707253'); +INSERT INTO migration VALUES(6,'006_pool','2020-02-29 00:14:10.724968'); +INSERT INTO migration VALUES(7,'007_node','2020-02-29 00:14:10.738552'); +INSERT INTO migration VALUES(8,'008_joblog','2020-02-29 00:14:10.753935'); +INSERT INTO migration VALUES(9,'009_service','2020-02-29 00:14:10.772415'); +INSERT INTO migration VALUES(10,'010_pulllog','2020-02-29 00:14:10.787019'); +INSERT INTO migration VALUES(11,'011_nodetype','2020-02-29 00:14:10.799635'); +INSERT INTO migration VALUES(12,'012_default_nodetypes','2020-02-29 00:14:10.828381'); +INSERT INTO migration VALUES(13,'013_cert','2020-02-29 00:14:10.853509'); +INSERT INTO migration VALUES(14,'014_environment_config','2020-02-29 00:14:10.888601'); +INSERT INTO migration VALUES(15,'015_environment_influx','2020-02-29 00:14:10.921870'); +INSERT INTO migration VALUES(16,'016_environment_custom','2020-02-29 00:14:10.985987'); +INSERT INTO migration VALUES(17,'017_datacenter_proxy','2020-02-29 00:14:11.000421'); +INSERT INTO migration VALUES(18,'018_environment_metrics_collector','2020-02-29 00:14:11.014754'); +INSERT INTO migration VALUES(19,'019_add_default_env','2020-02-29 00:14:11.039231'); +INSERT INTO migration VALUES(20,'020_add_is_enabled_swith_for_node','2020-02-29 00:14:11.062360'); +INSERT INTO migration VALUES(21,'021_add_alerta_url','2020-02-29 00:14:11.105187'); +INSERT INTO migration VALUES(22,'022_add_local_connection','2020-02-29 00:14:11.125314'); +INSERT INTO migration VALUES(23,'023_add_n_backup','2020-02-29 00:14:11.169271'); +INSERT INTO migration VALUES(24,'024_change_session_timeout','2020-02-29 00:14:11.212937'); +INSERT INTO migration VALUES(25,'025_config_order_param','2020-02-29 00:14:11.239360'); +INSERT INTO migration VALUES(26,'026_remove_alerta_url','2020-02-29 00:14:11.272415'); +INSERT INTO migration VALUES(27,'027_install_method','2020-02-29 00:14:11.304225'); +INSERT INTO migration VALUES(28,'028_playbook_source','2020-02-29 00:14:11.347086'); +INSERT INTO migration VALUES(29,'029_migrate_to_github','2020-02-29 00:14:11.409807'); +INSERT INTO migration VALUES(30,'030_move_db_settings','2020-02-29 00:14:11.497375'); +INSERT INTO migration VALUES(31,'031_role','2020-02-29 00:14:11.524066'); +INSERT INTO migration VALUES(32,'032_add_default_roles','2020-02-29 00:14:11.541444'); +INSERT INTO migration VALUES(33,'033_remove_custom','2020-02-29 00:14:11.620731'); +INSERT INTO migration VALUES(34,'034_service_config','2020-02-29 00:14:11.678069'); +INSERT INTO migration VALUES(35,'035_remove_instances','2020-02-29 00:14:11.797910'); +INSERT INTO migration VALUES(36,'036_create_uniq_indecies','2020-02-29 00:14:11.817832'); +INSERT INTO migration VALUES(37,'037_config_order_param_settings','2020-02-29 00:14:11.833899'); +CREATE TABLE IF NOT EXISTS "settings" ("key" VARCHAR(255) NOT NULL PRIMARY KEY, "value" TEXT NOT NULL); +INSERT INTO settings VALUES('cookie_secret','"BUkEh6NguPFAERDBx8PPUHIwVVWDHwlG3evl76ndwISuCppkXuVPZgOknwGEV8nQNSyG3IQ26XDdt6+ZG4E2bA=="'); +INSERT INTO settings VALUES('url','"http://0.0.0.0:8888/2"'); +INSERT INTO settings VALUES('group_by','"service"'); +INSERT INTO settings VALUES('installation_name','"Unconfigured installation2"'); +CREATE TABLE IF NOT EXISTS "user" ("id" INTEGER NOT NULL PRIMARY KEY, "name" VARCHAR(255) NOT NULL, "is_active" INTEGER NOT NULL, "full_name" VARCHAR(255), "password" VARCHAR(255) NOT NULL); +INSERT INTO user VALUES(1,'admin',1,'Temporary Admin','$2b$10$9uoQLU.f4PfkL1AIba6HpuKCYBoATasOV.P75EEm06Za05uVED4xm'); +CREATE TABLE IF NOT EXISTS "datacenter" ("id" INTEGER NOT NULL PRIMARY KEY, "name" VARCHAR(255) NOT NULL, "description" TEXT NOT NULL, "proxy" VARCHAR(255)); +INSERT INTO datacenter VALUES(1,'runner','121',''); +CREATE TABLE IF NOT EXISTS "pool" ("id" INTEGER NOT NULL PRIMARY KEY, "environment_id" INTEGER NOT NULL, "name" VARCHAR(255) NOT NULL, "description" TEXT NOT NULL, FOREIGN KEY ("environment_id") REFERENCES "environment" ("id") ON DELETE RESTRICT); +INSERT INTO pool VALUES(1,1,'default2','Default pool for NOC2erwr'); +CREATE TABLE IF NOT EXISTS "joblog" ("id" INTEGER NOT NULL PRIMARY KEY, "start_ts" DATETIME NOT NULL, "complete_ts" DATETIME, "environment_id" INTEGER NOT NULL, "user" VARCHAR(255) NOT NULL, "playbook" VARCHAR(255) NOT NULL, "log" TEXT NOT NULL, "is_complete" INTEGER NOT NULL, "n_ok" INTEGER NOT NULL, "n_changed" INTEGER NOT NULL, "n_unreachable" INTEGER NOT NULL, "n_failed" INTEGER NOT NULL, FOREIGN KEY ("environment_id") REFERENCES "environment" ("id")); +CREATE TABLE IF NOT EXISTS "node_type" ("id" INTEGER NOT NULL PRIMARY KEY, "name" VARCHAR(64) NOT NULL, "shell_type" VARCHAR(256) NOT NULL, "python_interpreter" VARCHAR(255) NOT NULL, "ssh_extra_args" VARCHAR(255), "ssh_pipelining" INTEGER NOT NULL, "ansible_connection" VARCHAR(255) NOT NULL); +INSERT INTO node_type VALUES(1,'Linux','sh','/usr/bin/python',NULL,1,'ssh'); +INSERT INTO node_type VALUES(2,'FreeBSD','csh','/usr/local/bin/python2.7',NULL,1,'ssh'); +INSERT INTO node_type VALUES(3,'Local','sh','/usr/bin/python',NULL,0,'local'); +CREATE TABLE IF NOT EXISTS "node" ("id" INTEGER NOT NULL PRIMARY KEY, "environment_id" INTEGER NOT NULL, "datacenter_id" INTEGER NOT NULL, "name" VARCHAR(255) NOT NULL, "description" TEXT NOT NULL, "address" VARCHAR(255) NOT NULL, "login_as" VARCHAR(255) NOT NULL, "node_type_id" INTEGER REFERENCES "node_type" ("id") NOT NULL, "is_enabled" INTEGER NOT NULL, FOREIGN KEY ("environment_id") REFERENCES "environment" ("id") ON DELETE RESTRICT, FOREIGN KEY ("datacenter_id") REFERENCES "datacenter" ("id") ON DELETE RESTRICT); +INSERT INTO node VALUES(1,1,1,'some','','192.168.1.1','ansible',1,1); +CREATE TABLE IF NOT EXISTS "pulllog" ("id" INTEGER NOT NULL PRIMARY KEY, "start_ts" DATETIME NOT NULL, "complete_ts" DATETIME, "environment_id" INTEGER NOT NULL, "user" VARCHAR(255) NOT NULL, "repo" VARCHAR(255) NOT NULL, "status" INTEGER NOT NULL, "log" TEXT NOT NULL, FOREIGN KEY ("environment_id") REFERENCES "environment" ("id")); +CREATE TABLE IF NOT EXISTS "role" ("id" INTEGER NOT NULL PRIMARY KEY, "name" VARCHAR(255) NOT NULL, "description" TEXT NOT NULL, "link" VARCHAR(255) NOT NULL, "environment_id" INTEGER NOT NULL, "is_enabled" INTEGER NOT NULL, "role_name" VARCHAR(255) NOT NULL, FOREIGN KEY ("environment_id") REFERENCES "environment" ("id") ON DELETE RESTRICT); +INSERT INTO role VALUES(1,'Custom','Custom NOC role','git+https://code.getnoc.com/ansible-roles/ansible-role-custom.git',1,0,'custom'); +INSERT INTO role VALUES(2,'Sentry','Provides configuration settings for Sentry','git+https://code.getnoc.com/ansible-roles/ansible-role-sentry.git',1,0,'sentry'); +INSERT INTO role VALUES(3,'Pgbouncer','Helps to handle thousand of devices. From 1k devices','git+https://code.getnoc.com/ansible-roles/ansible-role-pgbouncer.git',1,0,'pgbouncer'); +INSERT INTO role VALUES(4,'Memcached','Caching level. Helps to handle lots of devices. From 20k devices.','git+https://code.getnoc.com/ansible-roles/ansible-role-memcached.git',1,0,'memcached'); +INSERT INTO role VALUES(5,'Alerta notifications','Notifies about deploy to deploy system','git+https://code.getnoc.com/ansible-roles/ansible-role-alerta-notifications.git',1,0,'deploy_notification'); +INSERT INTO role VALUES(6,'Telegraf','Helps to monitor node''s health','git+https://code.getnoc.com/ansible-roles/ansible-role-telegraf.git',1,0,'telegraf'); +INSERT INTO role VALUES(7,'Nsqadmin','Web interface for NSQd','git+https://code.getnoc.com/ansible-roles/ansible-role-nsqadmin.git',1,0,'nsqadmin'); +CREATE TABLE IF NOT EXISTS "service" ("id" INTEGER NOT NULL PRIMARY KEY, "environment_id" INTEGER NOT NULL, "service" VARCHAR(255) NOT NULL, "pool_id" INTEGER, "node_id" INTEGER NOT NULL, "config" TEXT NOT NULL, "present" INTEGER NOT NULL, FOREIGN KEY ("environment_id") REFERENCES "environment" ("id") ON DELETE RESTRICT, FOREIGN KEY ("pool_id") REFERENCES "pool" ("id"), FOREIGN KEY ("node_id") REFERENCES "node" ("id")); +INSERT INTO service VALUES(1,1,'discovery',1,1,'{"backup_power": 1, "loglevel": "info", "max_threads": 10, "power": 2}',1); +INSERT INTO service VALUES(2,1,'escalator',NULL,1,'{"loglevel": "info", "max_threads": 10, "power": 1}',1); +INSERT INTO service VALUES(3,1,'nginx',NULL,1,'{"cert": "-----BEGIN CERTIFICATE-----\nMIIFETCCAvmgAwIBAgIUS+AzC2toi8lHGTZn6+A+yOJzM7MwDQYJKoZIhvcNAQEL\nBQAwGDEWMBQGA1UEAwwNODQuMjAxLjEyOC4yNDAeFw0yMDAzMDYxOTM1MThaFw0z\nMDAzMDQxOTM1MThaMBgxFjAUBgNVBAMMDTg0LjIwMS4xMjguMjQwggIiMA0GCSqG\nSIb3DQEBAQUAA4ICDwAwggIKAoICAQDMO5wVyD3EXjnP9SV2K835RdSLsFiW3Vlr\nj18/Ze/3DicyEblLhrJpPmla8RIAtCYsRiky8RQdhZMOSNZrZyrghoJnPwSYFwM0\nQn5kbXdKzu+V1REZmnfjTU7GpG7NhfrSSTqrSNi3qPE1eHps033VBiTKO9I6xEC9\ngQ+gext8n7EnO8+lQnLfOBzHmZHp8nsSHH4PNc+MbKrk4LZfgBJnp2tZr3fGTyrv\nrPjxQgQ5KQFyCGjsQ2A67D/KHm7TqaQauBb1GeRafJ8LJVHfNrInC4eLIKES9G9i\nJstJf+BGjEiwnI9f+byit9owA7E1yjhHVoHzEbi0M3rldEDI+mdYYnfZF3b5SMif\nqskCocQYldz43x/Be3PZN9KWBukggwgEikjWLL9hFyKLPwatqK1FKyNE6lQAX4Q+\nVH9oSswQefmTLmoHeGn3OxjW5AGFdMfmsdwlrVjl47WNcgUUacWnxf4Th9HAIcUo\nb4P69KQtmQdaLtwcX3qztDTBBuQohzbPeG/AZ6VIDQ0I7aBQVn7NMddvq45xAJi1\nEjJ0sHb0pHqD4UTh1cz6TDUv6M0H3OYREhx50nUXY3hHMiUBCESykE5KNhLjk1oT\n2fsPEoobpF7no2LGgdEfRebtCvGheDDa5mcFpyNcBWYdfCvhzKxp/dY7Ta13516j\noSWxR80s9QIDAQABo1MwUTAdBgNVHQ4EFgQUxB0/kC8WVQ53xURvDbpBaemEze8w\nHwYDVR0jBBgwFoAUxB0/kC8WVQ53xURvDbpBaemEze8wDwYDVR0TAQH/BAUwAwEB\n/zANBgkqhkiG9w0BAQsFAAOCAgEAK4ukEg5w5fpkhTg3FxjqquAujK1k6q0JAqhJ\nY46Nx0omNfBZcU83MBYZuzJcI+On75xD/PhFd5qRTi76KBbuYspR20fkdMub2B1p\nH6bF7d5SEV9iW0KwyNsm8UF5tojx58lPjgiEBTXwAbo0oqEM0SIowcXDxg8cHSXN\nPb/Ln/St7Tdg56HSPwYdm+fqsdnz8hEPANX0UC94PbchFJk62qBGGhBIZreM6g9e\nRqDL9H9JY0mYqNZ3xklKfwoBA2R+xpYWpXoxIe+J04Rll+1yiaxQfbh5JqOn/24X\nUVvmD2FbglnPzy9jlrdPRg11lXy3hzkm5DxsCYw9ptQ9g4+Gszmj8yP0vBjGI1Tw\nps0oROUMt+B1CLQBZtvX9466TBjATGqJMmfMIxjMNG+TLVBJPYS8mS2b19py6eaU\nf8OzAAvledIJBEEwPUro3HVl9ANUy3x4h98om0VULt5P+FcWFpF6eO9FrGqHVJiM\nsutMcPeiUMJme2PUtR8mEHMHzU/y+DXnNEO3i6KJXEcHcl6G+cbOq+hBJrb9PEJc\nn+UX2JZVZx9QTepIPDRpm2TFLtJFQZDcVEdUIMN8X7Rh8il6mIYJA5GeSvWASrUJ\nI03o/hcURYqb1Ah8RZdPrahUtfhziTeeXYOmqEGNx71o6xdeAAY0FjIYyIKYgPEq\nGpM1HOk=\n-----END CERTIFICATE-----\n", "cert_key": "-----BEGIN PRIVATE KEY-----\nMIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDMO5wVyD3EXjnP\n9SV2K835RdSLsFiW3Vlrj18/Ze/3DicyEblLhrJpPmla8RIAtCYsRiky8RQdhZMO\nSNZrZyrghoJnPwSYFwM0Qn5kbXdKzu+V1REZmnfjTU7GpG7NhfrSSTqrSNi3qPE1\neHps033VBiTKO9I6xEC9gQ+gext8n7EnO8+lQnLfOBzHmZHp8nsSHH4PNc+MbKrk\n4LZfgBJnp2tZr3fGTyrvrPjxQgQ5KQFyCGjsQ2A67D/KHm7TqaQauBb1GeRafJ8L\nJVHfNrInC4eLIKES9G9iJstJf+BGjEiwnI9f+byit9owA7E1yjhHVoHzEbi0M3rl\ndEDI+mdYYnfZF3b5SMifqskCocQYldz43x/Be3PZN9KWBukggwgEikjWLL9hFyKL\nPwatqK1FKyNE6lQAX4Q+VH9oSswQefmTLmoHeGn3OxjW5AGFdMfmsdwlrVjl47WN\ncgUUacWnxf4Th9HAIcUob4P69KQtmQdaLtwcX3qztDTBBuQohzbPeG/AZ6VIDQ0I\n7aBQVn7NMddvq45xAJi1EjJ0sHb0pHqD4UTh1cz6TDUv6M0H3OYREhx50nUXY3hH\nMiUBCESykE5KNhLjk1oT2fsPEoobpF7no2LGgdEfRebtCvGheDDa5mcFpyNcBWYd\nfCvhzKxp/dY7Ta13516joSWxR80s9QIDAQABAoICAEpgbxBzsyLfWdiFI5Zsj393\nUddpamnOxLDqLrrM6d4kNlwCnmOF81VmmEG5R2AgO0KmbnyR1UyHB64NEqFcmf3Y\nnobxKUAmKVGP4a27O9VvlUsQpECZw41w6v5mhb+tSlHov0f/qIUCLo3ViWg2gT3i\nFeXccUxbimQ5KzK7gqAZHA/4tT8u+tyV980s/Tmgx/cpjzME2sf+DyJ5P5F597nt\n+6dWwpzi2fUdHi/mZdlXOKKJs4RPaS0sOnLmMGA/CHd+kUXDnyjg9568gZtztN+J\nUFx3jpFzmVi6XhAvVML8dcBz07cVIQB1Si1wOsonEeXQ+FRIIObnVJtZgfpvTtD3\npAHyMxX5kD4k0Sr3e0cUEqH2qO7BPySKKbLGco9w+axgYz5ClvhXV9djUe+lY9YV\n7ulXiRiytLeTvBNN14rqmQStRK2a0Wn6BR31Y4YA871XDBV4R0XzH+GHNhBBcx9l\nPejFsw7hFAohOGHZ/nNzPyqwYHSpaDdHHuUh1tUVW8KEvbWAW4BmD2DiO13vLlME\nXL6jxfLwL6FvHw9zFgSDOn5npAkFxEBWMGHCN7z0QqZgk5MqiyqeuohLjVb8Uxet\nKPhTET9ybuTsx7JMlO3eNAJRFz4T1Ho/BrkqD3HRmZlgGF35sVwQ5fXSxB3qp+f6\n0yuqqU816O1d3nCexushAoIBAQDuOWC/LDuSBYJx35RZjVUuTZ2FS572WDntwsey\nzYvoVmgbNSmfvmgKqKrw7utGsPiz/zsgnJ8NcwYEQwOI+jXKXvRhm0u3UY2+g3dC\nd6uRbfa8gNYk02aCjrADsisdikPXE2WbAe7IWHGQiIA5SnFjBazua4BhZSQ8rtvF\niQuOjrzxiIQNZSPAqYSEiRoiuoXJ5sipDuvFkU60OT4clcQrsZESJy70P8ssC1Nl\ny3hkBAPvnvUbMQ7/sN9zj6rHRAE/2L7rnM8q+wabhaXbYl0L0zreeOolpkJ/j4et\nkHD9nUARYZNP/wPUTvz3HDHKCXvr1qpkPh2CtuZWMkHvgVjNAoIBAQDbeOvMaZZl\nUQYQYqCc3Jq3djxkZ9xvA2It7LM43B2EbNeb8r+n4YZO5qGOO0CapXn6jpwhUo1f\n8/+/87lKWqAb8vfjVB0p2KiE8ufLI884oylNb1dsfzWqWT0NnyXBXiUFTz9KGTtV\nH9aNm81BJQ31NtjFvg0qRu+iMIuRAiQUp0ItfO08bpPlw4Q4vBS4XC4QRzOJpAkC\nlP/RQ1tNYfXnlegoFZfq8dN3YWmV9usVekp0FZXP4Ov6OL9t8smo4lv0Bn3URl1O\nRWFckiU4PHOpcMdpafB9/drWsvOz2NRlC3glrHONQycH/5NTANBXWmdoK5Sq9KXW\nmOF8Hxh+SETJAoIBAGLAOEGnNV53mDZaJyXkN35FQFoEGfYmZoUP7DZLjIaYYvl8\nVS/Z/0kD2DCd6bvZGo+K6ti+9BPgLYtQuENs7SVhrU5U0NNCJE7oMmTENMPJYLGN\nerezRlgyi/ZMQiExsqOSb9kMuQ4l05XFb9nP6SbSMHh46bP1+EqLdaDyCW9j7iD1\npT/kQCjaXIuQRdxFk7Y5S88A122Dqat92yiAUNyH9AohYg5v72nnm/+jk9lp7LPF\nIffOo1gM2uQNlw6ZOydbUvFahGpdusR3Z2SE5utC+bFFUFKhFAnK1sR1DtGjAO7z\nktxjaxP0VlqdPmpw+gSubN22/ga0iNEMbla5OLUCggEBAMvaeGLo3DoFVTWY9ohc\n3BR2bUfxtK0knmf7yMiSo5QiKO6APoaoEsFstTjQToSWGUOifODytcAfejkIH94x\naTAssRVlRqVcycKbgLON8mcwHif/uFtdmTI+K1hgr4f5czeIUUf5QcQii34C7laJ\nHXrb0+NwUPgo5WJn5urs6yiH5w8rT4vnRdaPkVvFTxWjAWI7UGKTi47raOYtwzuQ\nNwFBm17IF9Cxh/MF9zXFILxVV5yVhA6PY4CKfzyX27nTbwetk+i85uPRy8pZMNsY\nQ3Jp/78pGKleRotPss8lIrssOQ/9K2NVsYZbXLMnOV056ny2piNYlEVMwXwxweVi\nKQkCggEBANQgOb+0XvW69rnbPwARJgx0sShA0ZNtGNLfuitVPsLMWiyaf7rLU/d/\nIHL7leBTXNmSXQfx6vWui6QyYzJ6TqMpg8hJ7cx/pvTPB2Kq2sTPva/Ce6Z/lXL4\nDoH1otckIn/eAudf4PZXVUdCbIC9cYrng/gZMRuw9TlNOiamUgdBSI6wAKKbHBTf\n5BkHsjgN4XeCc5z2A3JVPkSZxpQKSYU0iDnUFXFJmZ/yoNKPWBMJggiqEr1g3RC7\ndxaoeMtH6wHSygD+1QW8SqrswlAX+S2jigbEUbv0H/T77CkCgXWqLlRv5f/sKeLv\nDznn3uf1eHP4v4xXULObzPYv4jwGbdQ=\n-----END PRIVATE KEY-----\n", "external_cert_management": "False", "http_redirect": "True", "json_logging": "False", "permit_firewall": true, "self_signed_cerificate": "True"}',1); +INSERT INTO service VALUES(4,1,'ping',1,1,'{"backup_power": 1, "loglevel": "info", "power": 4, "restore_threshold": 0, "throttle_threshold": 0, "tos": 0}',1); +INSERT INTO service VALUES(5,1,'goss',NULL,1,'{"validate_fw": true, "version": "0.3.10"}',1); +INSERT INTO service VALUES(6,1,'nbi',NULL,1,'{"loglevel": "info", "power": 1, "whitelist_access": ""}',1); +INSERT INTO service VALUES(7,1,'sae',NULL,1,'{"db_threads": 4, "loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(8,1,'mrt',NULL,1,'{"loglevel": "info", "max_concurrency": 50, "power": 2}',1); +INSERT INTO service VALUES(9,1,'mailsender',NULL,1,'{"from_address": "noc@example.com", "helo_hostname": "noc", "loglevel": "info", "power": 1, "smtp_password": null, "smtp_port": 25, "smtp_server": null, "smtp_user": null, "use_tls": "False"}',1); +INSERT INTO service VALUES(10,1,'card',NULL,1,'{"language": "en-us", "loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(11,1,'consul',NULL,1,'{"address": "node_ip", "master_token": null, "power": "bootstrap", "replication_token": null}',1); +INSERT INTO service VALUES(12,1,'trapcollector',1,1,'{"listen_traps": "0.0.0.0:162", "loglevel": "info", "permit_firewall": true, "power": 1}',1); +INSERT INTO service VALUES(13,1,'selfmon',NULL,1,'{"loglevel": "info", "power": 1}',1); +INSERT INTO service VALUES(14,1,'nsqlookupd',NULL,1,'{}',1); +INSERT INTO service VALUES(15,1,'icqsender',NULL,1,'{"loglevel": "info", "power": 1, "token": null}',0); +INSERT INTO service VALUES(16,1,'nsqd',NULL,1,'{"max_messages_in_memory": 10000, "max_msg_size": 1048576}',1); +INSERT INTO service VALUES(17,1,'noc',NULL,1,'{"consul_token": "noc", "group": "noc", "python_interpreter": "python", "repo": "https://github.com/nocproject/noc.git", "root": "/opt/noc", "user": "noc", "version": "stable"}',1); +INSERT INTO service VALUES(18,1,'scheduler',NULL,1,'{"loglevel": "info", "max_threads": 10, "power": 1}',1); +INSERT INTO service VALUES(19,1,'mongod',NULL,1,'{"db": "noc", "engine": "wiredTiger", "logging_destination": "file", "password": "noc", "power": "server", "rs": "noc", "user": "noc", "version": "4.0"}',1); +INSERT INTO service VALUES(20,1,'chwriter',NULL,1,'{"batch_delay_ms": 1000, "batch_size": 50000, "channel_expire_interval": 300, "loglevel": "info", "power": 1, "records_buffer": 1000000}',1); +INSERT INTO service VALUES(21,1,'tgsender',NULL,1,'{"loglevel": "info", "power": 1, "token": null}',0); +INSERT INTO service VALUES(22,1,'correlator',1,1,'{"loglevel": "info", "max_threads": 10, "power": 1}',1); +INSERT INTO service VALUES(23,1,'bi',NULL,1,'{"language": "en-us", "loglevel": "info", "power": 2, "query_threads": 10}',1); +INSERT INTO service VALUES(24,1,'web',NULL,1,'{"language": "en-us", "loglevel": "info", "max_threads": 10, "power": 2, "theme": "gray"}',1); +INSERT INTO service VALUES(25,1,'classifier',1,1,'{"default_interface_profile": "default", "loglevel": "info", "lookup_solution": "noc.services.classifier.rulelookup.RuleLookup", "power": 2}',1); +INSERT INTO service VALUES(26,1,'login',NULL,1,'{"language": "en-us", "loglevel": "info", "methods": "local", "pam_service": "noc", "power": 2, "radius_secret": null, "radius_server": null, "session_ttl": 7}',1); +INSERT INTO service VALUES(27,1,'grafana',NULL,1,'{"pg_password": "grafana"}',1); +INSERT INTO service VALUES(28,1,'datastream',NULL,1,'{"enable_administrativedomain": false, "enable_administrativedomain_wait": false, "enable_alarm": false, "enable_alarm_wait": false, "enable_cfgping": true, "enable_cfgping_wait": true, "enable_cfgsyslog": true, "enable_cfgsyslog_wait": true, "enable_cfgtrap": true, "enable_cfgtrap_wait": true, "enable_dnszone": false, "enable_dnszone_wait": false, "enable_managedobject": false, "enable_managedobject_wait": false, "enable_resourcegroup": false, "enable_resourcegroup_wait": false, "loglevel": "info", "mode": "wait", "power": 1, "whitelist_access": ""}',1); +INSERT INTO service VALUES(29,1,'postgres',NULL,1,'{"max_clients": 300, "noc_db": "noc", "noc_password": "noc", "noc_user": "noc", "power": "master", "replicator_password": "noc", "superuser_password": "noc", "version": 9.6}',1); +INSERT INTO service VALUES(30,1,'clickhouse',NULL,1,'{"db": "noc", "max_ast_elements": 10000, "password": "noc", "query_size": 262144, "ro_password": "noc", "user": "noc"}',1); +INSERT INTO service VALUES(31,1,'syslogcollector',1,1,'{"listen_syslog": "0.0.0.0:514", "loglevel": "info", "permit_firewall": true, "power": 1}',1); +INSERT INTO service VALUES(32,1,'activator',1,1,'{"loglevel": "info", "power": 2, "script_threads": 20, "tos": 0}',1); +INSERT INTO service VALUES(33,1,'mib',NULL,1,'{"loglevel": "info", "power": 1}',1); +INSERT INTO service VALUES(34,1,'consul-template',NULL,1,'{"use_dedup": "False"}',1); +INSERT INTO service VALUES(35,1,'grafanads',NULL,1,'{"db_threads": 10, "loglevel": "info", "power": 2}',1); +INSERT INTO service VALUES(36,1,'ch_datasource',NULL,1,'{"loglevel": "info", "power": 2}',1); +CREATE TABLE IF NOT EXISTS "environment" ("id" INTEGER NOT NULL PRIMARY KEY, "name" VARCHAR(255) NOT NULL, "description" TEXT NOT NULL, "env_type" VARCHAR(255) NOT NULL, "installation_name" VARCHAR(255) NOT NULL, "web_host" VARCHAR(255) NOT NULL, "is_default" INTEGER NOT NULL, "config_order" VARCHAR(255) NOT NULL, "install_method" VARCHAR(255) NOT NULL, "playbook_link" VARCHAR(255) NOT NULL); +INSERT INTO environment VALUES(1,'NOC','','eval','Unconfigured installation','192.168.1.1',0,'yaml:///opt/noc/etc/tower.yml,yaml:///opt/noc/etc/settings.yml,env:///NOC','git','git+https://github.com/nocproject/ansible_deploy@microservices'); +CREATE UNIQUE INDEX "service_environment_id_service_pool_id_node_id" ON "service" ("environment_id", "service", "pool_id", "node_id"); +CREATE UNIQUE INDEX "datacenter_name" ON "datacenter" ("name"); +CREATE UNIQUE INDEX "environment_name" ON "environment" ("name"); +CREATE UNIQUE INDEX "node_environment_id_datacenter_id_name" ON "node" ("environment_id", "datacenter_id", "name"); +CREATE UNIQUE INDEX "user_name" ON "user" ("name"); +CREATE UNIQUE INDEX "role_environment_id_name" ON "role" ("environment_id", "name"); +COMMIT; -- GitLab From b83324eb30fb7f72520529be33a2c3c15dccca08 Mon Sep 17 00:00:00 2001 From: Aleksey Shirokih Date: Sun, 15 Mar 2020 00:59:44 +0300 Subject: [PATCH 17/17] Minor refactor --- tower/models/environment.py | 120 +++++++++++++++++++----------------- 1 file changed, 64 insertions(+), 56 deletions(-) diff --git a/tower/models/environment.py b/tower/models/environment.py index 972e0323..8a1d041d 100644 --- a/tower/models/environment.py +++ b/tower/models/environment.py @@ -176,32 +176,7 @@ class Environment(Model): has_cert = False certificate = {} for s in srv_descr: - if "require_cert" in srv_descr[s] and srv_descr[s]["require_cert"]: - srs = Service.select().where(Service.service == s) - for line in srs: - ln = json.loads(line.config) - if not ln["cert"]: - if line.present: - need_cert.append(line) - else: - has_cert = True - certificate[s] = { - "key": ln["cert_key"], - "cert": ln["cert"] - } - if not has_cert and need_cert: - key, cert = self.generate_certificate() - certificate[s] = { - "key": key, - "cert": cert - } - - for n in need_cert: - conf = json.loads(n.config) - conf["cert"] = certificate[s]["cert"] - conf["cert_key"] = certificate[s]["key"] - n.config = json.dumps(conf.decode("utf-8"), sort_keys=True) - n.save() + self.update_certs(certificate, has_cert, need_cert, s, srv_descr) for srv in self.get_service_config(): # do not work with stale or old services @@ -258,40 +233,73 @@ class Environment(Model): r["svc-%s-read" % dep]["hosts"].append(srv['node']) # Generate tower.yml - if "category" in srv_descr[srv['service']] and srv_descr[srv['service']]["category"] == "internal": - node_noc_config = "noc-config-%s" % srv['node'] - if node_noc_config not in r: - r[node_noc_config] = { - "hosts": [srv['node']], - "vars": { - "noc_services": [] - } + self.generate_tower_inventory(pool_name, r, srv, srv_descr) + + return r + + def generate_tower_inventory(self, pool_name, r, srv, srv_descr): + if "category" in srv_descr[srv['service']] and srv_descr[srv['service']]["category"] == "internal": + node_noc_config = "noc-config-%s" % srv['node'] + if node_noc_config not in r: + r[node_noc_config] = { + "hosts": [srv['node']], + "vars": { + "noc_services": [] } - line = { - "name": srv['service'], - "config": srv['config'], - "pool": pool_name, - "environment": srv_descr[srv['service']]["environment"].copy() } - # append pool configuration file to config string - if srv_descr[srv['service']]["level"] == "pool": - order = self.config_order.split(",") - for conf in order: - if 'yaml://' in conf: - path = urlparse(conf).path - basepath = os.path.dirname(path) - pool_config_path = "yaml://" + str(os.path.join(basepath, 'pool-%s.yml' % srv['pool'])) - order.insert(-1, pool_config_path) - break - pooled_order = ",".join(order) - line["config_order"] = pooled_order + line = { + "name": srv['service'], + "config": srv['config'], + "pool": pool_name, + "environment": srv_descr[srv['service']]["environment"].copy() + } + # append pool configuration file to config string + if srv_descr[srv['service']]["level"] == "pool": + order = self.config_order.split(",") + for conf in order: + if 'yaml://' in conf: + path = urlparse(conf).path + basepath = os.path.dirname(path) + pool_config_path = "yaml://" + str(os.path.join(basepath, 'pool-%s.yml' % srv['pool'])) + order.insert(-1, pool_config_path) + break + pooled_order = ",".join(order) + line["config_order"] = pooled_order + else: + line["config_order"] = self.config_order + if "description" in line["environment"]: + del line["environment"]["description"] + r[node_noc_config]["vars"]["noc_services"].append(line) + + def update_certs(self, certificate, has_cert, need_cert, s, srv_descr): + from .service import Service + + if "require_cert" in srv_descr[s] and srv_descr[s]["require_cert"]: + srs = Service.select().where(Service.service == s) + for line in srs: + ln = json.loads(line.config) + if not ln["cert"]: + if line.present: + need_cert.append(line) else: - line["config_order"] = self.config_order - if "description" in line["environment"]: - del line["environment"]["description"] - r[node_noc_config]["vars"]["noc_services"].append(line) + has_cert = True + certificate[s] = { + "key": ln["cert_key"], + "cert": ln["cert"] + } + if not has_cert and need_cert: + key, cert = self.generate_certificate() + certificate[s] = { + "key": key, + "cert": cert + } - return r + for n in need_cert: + conf = json.loads(n.config) + conf["cert"] = certificate[s]["cert"] + conf["cert_key"] = certificate[s]["key"] + n.config = json.dumps(conf.decode("utf-8"), sort_keys=True) + n.save() @staticmethod def name_config(config, service): -- GitLab