From 5606082ca3603ed1f46144aa423a6d384d76a19c Mon Sep 17 00:00:00 2001 From: ibuler Date: Tue, 25 Oct 2022 12:57:34 +0800 Subject: [PATCH 1/4] =?UTF-8?q?pref:=20=E6=B7=BB=E5=8A=A0=20applet=20?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/const/host.py | 30 ++++++-- apps/assets/const/types.py | 5 +- .../migrations/0108_auto_20221019_1706.py | 2 +- apps/terminal/api/__init__.py | 9 +-- apps/terminal/api/applet/__init__.py | 2 + apps/terminal/api/applet/applet.py | 71 +++++++++++++++++++ apps/terminal/api/applet/host.py | 16 +++++ apps/terminal/api/component/__init__.py | 4 ++ apps/terminal/api/{ => component}/endpoint.py | 8 +-- apps/terminal/api/{ => component}/status.py | 6 +- apps/terminal/api/{ => component}/storage.py | 4 +- apps/terminal/api/{ => component}/terminal.py | 6 +- apps/terminal/api/session/__init__.py | 4 ++ apps/terminal/api/{ => session}/command.py | 4 +- apps/terminal/api/{ => session}/session.py | 17 ++--- apps/terminal/api/{ => session}/sharing.py | 3 +- apps/terminal/api/{ => session}/task.py | 6 +- ...021_1433.py => 0054_auto_20221024_1452.py} | 57 ++++++++------- apps/terminal/models/applet/__init__.py | 2 +- apps/terminal/models/applet/applet.py | 58 +++++++++++++-- .../models/applet/{provider.py => host.py} | 23 +++--- apps/terminal/serializers/__init__.py | 1 + apps/terminal/serializers/applet.py | 65 +++++++++++++++++ apps/terminal/urls/api_urls.py | 5 ++ 24 files changed, 322 insertions(+), 86 deletions(-) create mode 100644 apps/terminal/api/applet/__init__.py create mode 100644 apps/terminal/api/applet/applet.py create mode 100644 apps/terminal/api/applet/host.py create mode 100644 apps/terminal/api/component/__init__.py rename apps/terminal/api/{ => component}/endpoint.py (97%) rename apps/terminal/api/{ => component}/status.py (93%) rename apps/terminal/api/{ => component}/storage.py (97%) rename apps/terminal/api/{ => component}/terminal.py (97%) create mode 100644 apps/terminal/api/session/__init__.py rename apps/terminal/api/{ => session}/command.py (98%) rename apps/terminal/api/{ => session}/session.py (96%) rename apps/terminal/api/{ => session}/sharing.py (97%) rename apps/terminal/api/{ => session}/task.py (96%) rename apps/terminal/migrations/{0054_auto_20221021_1433.py => 0054_auto_20221024_1452.py} (80%) rename apps/terminal/models/applet/{provider.py => host.py} (57%) create mode 100644 apps/terminal/serializers/applet.py diff --git a/apps/assets/const/host.py b/apps/assets/const/host.py index 6236379a5..371ab3688 100644 --- a/apps/assets/const/host.py +++ b/apps/assets/const/host.py @@ -67,6 +67,7 @@ class HostTypes(BaseType): return { cls.LINUX: [ {'name': 'Linux'}, + {'name': 'Gateway'} ], cls.UNIX: [ {'name': 'Unix'}, @@ -75,16 +76,31 @@ class HostTypes(BaseType): {'name': 'AIX', 'automation': { 'push_account_method': 'push_account_aix', 'change_secret_method': 'push_secret_aix' - }}, + }} ], cls.WINDOWS: [ {'name': 'Windows'}, - {'name': 'Windows-TLS', 'protocols_setting': { - 'rdp': {'security': 'tls'}, - }}, - {'name': 'Windows-RDP', 'protocols_setting': { - 'rdp': {'security': 'rdp'}, - }} + { + 'name': 'Windows-TLS', + 'protocols_setting': { + 'rdp': {'security': 'tls'}, + } + }, + { + 'name': 'Windows-RDP', + 'protocols_setting': { + 'rdp': {'security': 'rdp'}, + } + }, + { + 'name': 'RemoteAppHost', + '_protocols': ['rdp', 'ssh'], + 'protocols_setting': { + 'ssh': { + 'required': True + } + } + } ], cls.OTHER_HOST: [] } diff --git a/apps/assets/const/types.py b/apps/assets/const/types.py index 620527bfd..b77872ad0 100644 --- a/apps/assets/const/types.py +++ b/apps/assets/const/types.py @@ -224,7 +224,10 @@ class AllTypes(ChoicesMixin): if _protocols: protocols_data = [p for p in protocols_data if p['name'] in _protocols] for p in protocols_data: - p['setting'] = {**_protocols_setting.get(p['name'], {}), **p.get('setting', {})} + setting = _protocols_setting.get(p['name'], {}) + p['required'] = setting.pop('required', False) + p['default'] = setting.pop('default', False) + p['setting'] = {**setting, **p.get('setting', {})} platform_data = { **default_platform_data, **d, diff --git a/apps/assets/migrations/0108_auto_20221019_1706.py b/apps/assets/migrations/0108_auto_20221019_1706.py index f59a5b7a9..57279fffc 100644 --- a/apps/assets/migrations/0108_auto_20221019_1706.py +++ b/apps/assets/migrations/0108_auto_20221019_1706.py @@ -55,7 +55,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='changesecretautomation', name='secret_strategy', - field=models.CharField(choices=[('specific', 'Specific'), ('random_one', 'All assets use the same random password'), ('random_all', 'All assets use different random password')], default='random_one', max_length=16, verbose_name='Secret strategy'), + field=models.CharField(choices=[('specific', 'Specific'), ('random_one', 'All assets use the same random password'), ('random_all', 'All assets use different random password')], default='specific', max_length=16, verbose_name='Secret strategy'), ), migrations.AddField( model_name='changesecretautomation', diff --git a/apps/terminal/api/__init__.py b/apps/terminal/api/__init__.py index 16021a5ed..24c30fd5e 100644 --- a/apps/terminal/api/__init__.py +++ b/apps/terminal/api/__init__.py @@ -1,10 +1,5 @@ # -*- coding: utf-8 -*- # -from .terminal import * from .session import * -from .command import * -from .task import * -from .storage import * -from .status import * -from .sharing import * -from .endpoint import * +from .component import * +from .applet import * diff --git a/apps/terminal/api/applet/__init__.py b/apps/terminal/api/applet/__init__.py new file mode 100644 index 000000000..b2a4cac34 --- /dev/null +++ b/apps/terminal/api/applet/__init__.py @@ -0,0 +1,2 @@ +from .applet import * +from .host import * diff --git a/apps/terminal/api/applet/applet.py b/apps/terminal/api/applet/applet.py new file mode 100644 index 000000000..5d683fa7b --- /dev/null +++ b/apps/terminal/api/applet/applet.py @@ -0,0 +1,71 @@ +import os.path +import shutil +import zipfile + +import yaml +from django.core.files.storage import default_storage +from rest_framework import viewsets +from rest_framework.decorators import action +from rest_framework.response import Response + +from terminal import serializers, models +from terminal.serializers import AppletUploadSerializer + + +class AppletViewSet(viewsets.ModelViewSet): + queryset = models.Applet.objects.all() + serializer_class = serializers.AppletSerializer + rbac_perms = { + 'upload': 'terminal.add_applet', + } + + @action(detail=False, methods=['post'], serializer_class=AppletUploadSerializer) + def upload(self, request, *args, **kwargs): + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + + file = serializer.validated_data['file'] + save_to = 'applets/{}'.format(file.name + '.tmp.zip') + if default_storage.exists(save_to): + default_storage.delete(save_to) + rel_path = default_storage.save(save_to, file) + + path = default_storage.path(rel_path) + extract_to = default_storage.path('applets/{}.tmp'.format(file.name)) + if os.path.exists(extract_to): + shutil.rmtree(extract_to) + + update = request.query_params.get('update') + with zipfile.ZipFile(path) as zp: + if zp.testzip() is not None: + return Response({'msg': 'Invalid Zip file'}, status=400) + zp.extractall(extract_to) + + tmp_dir = os.path.join(extract_to, file.name.replace('.zip', '')) + files = ['manifest.yml', 'icon.png', 'i18n.yml'] + for name in files: + path = os.path.join(tmp_dir, name) + if not os.path.exists(path): + return Response({'error': 'Missing file: {}'.format(path)}, status=400) + + with open(os.path.join(tmp_dir, 'manifest.yml')) as f: + manifest = yaml.safe_load(f) + + name = manifest.get('name', '') + instance = models.Applet.objects.filter(name=name).first() + if instance and not update: + return Response({'error': 'Applet already exists: {}'.format(name)}, status=400) + + serializer = serializers.AppletSerializer(data=manifest, instance=instance) + serializer.is_valid(raise_exception=True) + save_to = default_storage.path('applets/{}'.format(name)) + if os.path.exists(save_to): + shutil.rmtree(save_to) + shutil.move(tmp_dir, save_to) + serializer.save() + return Response(serializer.data, status=201) + + +class AppletPublicationViewSet(viewsets.ModelViewSet): + queryset = models.AppletPublication.objects.all() + serializer_class = serializers.AppletPublicationSerializer diff --git a/apps/terminal/api/applet/host.py b/apps/terminal/api/applet/host.py new file mode 100644 index 000000000..c3c301e30 --- /dev/null +++ b/apps/terminal/api/applet/host.py @@ -0,0 +1,16 @@ +from rest_framework import viewsets + +from terminal import serializers, models + +__all__ = ['AppletHostViewSet', 'AppletHostDeploymentViewSet'] + + +class AppletHostViewSet(viewsets.ModelViewSet): + queryset = models.AppletHost.objects.all() + serializer_class = serializers.AppletHostSerializer + + +class AppletHostDeploymentViewSet(viewsets.ModelViewSet): + queryset = models.AppletHostDeployment.objects.all() + serializer_class = serializers.AppletHostDeploymentSerializer + diff --git a/apps/terminal/api/component/__init__.py b/apps/terminal/api/component/__init__.py new file mode 100644 index 000000000..afefe0c18 --- /dev/null +++ b/apps/terminal/api/component/__init__.py @@ -0,0 +1,4 @@ +from .terminal import * +from .storage import * +from .status import * +from .endpoint import * diff --git a/apps/terminal/api/endpoint.py b/apps/terminal/api/component/endpoint.py similarity index 97% rename from apps/terminal/api/endpoint.py rename to apps/terminal/api/component/endpoint.py index f864c6d13..364cd803e 100644 --- a/apps/terminal/api/endpoint.py +++ b/apps/terminal/api/component/endpoint.py @@ -2,15 +2,15 @@ from rest_framework.decorators import action from rest_framework.response import Response from rest_framework import status from rest_framework.request import Request + from common.drf.api import JMSBulkModelViewSet +from common.permissions import IsValidUserOrConnectionToken from django.utils.translation import ugettext_lazy as _ from django.shortcuts import get_object_or_404 from assets.models import Asset from orgs.utils import tmp_to_root_org -from terminal.models import Session -from ..models import Endpoint, EndpointRule -from .. import serializers -from common.permissions import IsValidUserOrConnectionToken +from terminal.models import Session, Endpoint, EndpointRule +from terminal import serializers __all__ = ['EndpointViewSet', 'EndpointRuleViewSet'] diff --git a/apps/terminal/api/status.py b/apps/terminal/api/component/status.py similarity index 93% rename from apps/terminal/api/status.py rename to apps/terminal/api/component/status.py index 3ec00436b..5e27926ea 100644 --- a/apps/terminal/api/status.py +++ b/apps/terminal/api/component/status.py @@ -9,9 +9,9 @@ from rest_framework import viewsets, generics from rest_framework.views import Response from rest_framework import status -from ..models import Terminal, Status, Session -from .. import serializers -from ..utils import TypedComponentsStatusMetricsUtil +from terminal.models import Terminal, Status, Session +from terminal import serializers +from terminal.utils import TypedComponentsStatusMetricsUtil logger = logging.getLogger(__file__) diff --git a/apps/terminal/api/storage.py b/apps/terminal/api/component/storage.py similarity index 97% rename from apps/terminal/api/storage.py rename to apps/terminal/api/component/storage.py index d9694c337..d46b6f91f 100644 --- a/apps/terminal/api/storage.py +++ b/apps/terminal/api/component/storage.py @@ -11,8 +11,8 @@ from django_filters import utils from terminal import const from common.const.http import GET from terminal.filters import CommandStorageFilter, CommandFilter, CommandFilterForStorageTree -from ..models import CommandStorage, ReplayStorage -from ..serializers import CommandStorageSerializer, ReplayStorageSerializer +from terminal.models import CommandStorage, ReplayStorage +from terminal.serializers import CommandStorageSerializer, ReplayStorageSerializer __all__ = [ 'CommandStorageViewSet', 'CommandStorageTestConnectiveApi', diff --git a/apps/terminal/api/terminal.py b/apps/terminal/api/component/terminal.py similarity index 97% rename from apps/terminal/api/terminal.py rename to apps/terminal/api/component/terminal.py index 209492baa..a58181bf4 100644 --- a/apps/terminal/api/terminal.py +++ b/apps/terminal/api/component/terminal.py @@ -14,9 +14,9 @@ from common.exceptions import JMSException from common.drf.api import JMSBulkModelViewSet from common.utils import get_object_or_none, get_request_ip from common.permissions import WithBootstrapToken -from ..models import Terminal -from .. import serializers -from .. import exceptions +from terminal.models import Terminal +from terminal import serializers +from terminal import exceptions __all__ = [ 'TerminalViewSet', 'TerminalConfig', diff --git a/apps/terminal/api/session/__init__.py b/apps/terminal/api/session/__init__.py new file mode 100644 index 000000000..a046d4b3d --- /dev/null +++ b/apps/terminal/api/session/__init__.py @@ -0,0 +1,4 @@ +from .session import * +from .sharing import * +from .command import * +from .task import * diff --git a/apps/terminal/api/command.py b/apps/terminal/api/session/command.py similarity index 98% rename from apps/terminal/api/command.py rename to apps/terminal/api/session/command.py index 5b60a114a..fec0848a5 100644 --- a/apps/terminal/api/command.py +++ b/apps/terminal/api/session/command.py @@ -13,11 +13,11 @@ from common.drf.api import JMSBulkModelViewSet from common.utils import get_logger from terminal.backends.command.serializers import InsecureCommandAlertSerializer from terminal.exceptions import StorageInvalid -from ..backends import ( +from terminal.backends import ( get_command_storage, get_multi_command_storage, SessionCommandSerializer, ) -from ..notifications import CommandAlertMessage +from terminal.notifications import CommandAlertMessage logger = get_logger(__name__) __all__ = ['CommandViewSet', 'InsecureCommandAlertAPI'] diff --git a/apps/terminal/api/session.py b/apps/terminal/api/session/session.py similarity index 96% rename from apps/terminal/api/session.py rename to apps/terminal/api/session/session.py index 25477166c..fe742024d 100644 --- a/apps/terminal/api/session.py +++ b/apps/terminal/api/session/session.py @@ -24,15 +24,16 @@ from common.drf.renders import PassthroughRenderer from orgs.mixins.api import OrgBulkModelViewSet from orgs.utils import tmp_to_root_org, tmp_to_org from users.models import User -from .. import utils -from ..utils import find_session_replay_local, download_session_replay -from ..models import Session -from .. import serializers -from terminal.utils import is_session_approver +from terminal.utils import ( + find_session_replay_local, download_session_replay, + is_session_approver, get_session_replay_url +) +from terminal.models import Session +from terminal import serializers __all__ = [ - 'SessionViewSet', 'SessionReplayViewSet', 'SessionJoinValidateAPI', - 'MySessionAPIView', + 'SessionViewSet', 'SessionReplayViewSet', + 'SessionJoinValidateAPI', 'MySessionAPIView', ] logger = get_logger(__name__) @@ -93,7 +94,7 @@ class SessionViewSet(OrgBulkModelViewSet): url_name='replay-download') def download(self, request, *args, **kwargs): session = self.get_object() - local_path, url = utils.get_session_replay_url(session) + local_path, url = get_session_replay_url(session) if local_path is None: return Response({"error": url}, status=404) file = self.prepare_offline_file(session, local_path) diff --git a/apps/terminal/api/sharing.py b/apps/terminal/api/session/sharing.py similarity index 97% rename from apps/terminal/api/sharing.py rename to apps/terminal/api/session/sharing.py index 1a9545e54..a3d324205 100644 --- a/apps/terminal/api/sharing.py +++ b/apps/terminal/api/session/sharing.py @@ -5,9 +5,8 @@ from django.conf import settings from django.utils.translation import ugettext_lazy as _ from common.const.http import PATCH -from common.permissions import IsValidUser from orgs.mixins.api import OrgModelViewSet -from .. import serializers, models +from terminal import serializers, models __all__ = ['SessionSharingViewSet', 'SessionJoinRecordsViewSet'] diff --git a/apps/terminal/api/task.py b/apps/terminal/api/session/task.py similarity index 96% rename from apps/terminal/api/task.py rename to apps/terminal/api/session/task.py index c7e1a2681..80fee6097 100644 --- a/apps/terminal/api/task.py +++ b/apps/terminal/api/session/task.py @@ -7,10 +7,10 @@ from rest_framework import status from rest_framework.permissions import IsAuthenticated from common.utils import get_object_or_none -from ..models import Session, Task -from .. import serializers -from terminal.utils import is_session_approver from orgs.utils import tmp_to_root_org +from terminal.models import Session, Task +from terminal import serializers +from terminal.utils import is_session_approver __all__ = ['TaskViewSet', 'KillSessionAPI', 'KillSessionForTicketAPI'] logger = logging.getLogger(__file__) diff --git a/apps/terminal/migrations/0054_auto_20221021_1433.py b/apps/terminal/migrations/0054_auto_20221024_1452.py similarity index 80% rename from apps/terminal/migrations/0054_auto_20221021_1433.py rename to apps/terminal/migrations/0054_auto_20221024_1452.py index 830ef897c..3ee883a8b 100644 --- a/apps/terminal/migrations/0054_auto_20221021_1433.py +++ b/apps/terminal/migrations/0054_auto_20221024_1452.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.14 on 2022-10-21 06:33 +# Generated by Django 3.2.14 on 2022-10-24 06:52 from django.db import migrations, models import django.db.models.deletion @@ -8,6 +8,7 @@ import uuid class Migration(migrations.Migration): dependencies = [ + ('assets', '0110_auto_20221021_1506'), ('terminal', '0053_auto_20220830_1244'), ] @@ -22,10 +23,13 @@ class Migration(migrations.Migration): ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), ('name', models.CharField(max_length=128, unique=True, verbose_name='Name')), ('version', models.CharField(max_length=16, verbose_name='Version')), - ('type', models.CharField(choices=[('app', 'App'), ('web', 'Web')], max_length=16, verbose_name='Type')), - ('icon', models.ImageField(upload_to='applet/icon', verbose_name='Icon')), ('author', models.CharField(max_length=128, verbose_name='Author')), + ('type', models.CharField(choices=[('general', 'General'), ('web', 'Web')], default='general', max_length=16, verbose_name='Type')), + ('path', models.FilePathField(verbose_name='Path')), + ('vcs_type', models.CharField(max_length=16, null=True, verbose_name='VCS type')), + ('vcs_url', models.CharField(max_length=256, null=True, verbose_name='URL')), ('protocols', models.JSONField(default=list, verbose_name='Protocol')), + ('tags', models.JSONField(default=list, verbose_name='Tags')), ('comment', models.TextField(blank=True, default='', verbose_name='Comment')), ], options={ @@ -33,14 +37,13 @@ class Migration(migrations.Migration): }, ), migrations.CreateModel( - name='AppletProvider', + name='AppletHost', fields=[ ('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')), ('updated_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Updated by')), ('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')), ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), - ('name', models.CharField(max_length=128, unique=True, verbose_name='Name')), ('comment', models.TextField(blank=True, default='', verbose_name='Comment')), ('account_automation', models.BooleanField(default=False, verbose_name='Account automation')), ('date_synced', models.DateTimeField(blank=True, null=True, verbose_name='Date synced')), @@ -50,22 +53,6 @@ class Migration(migrations.Migration): 'abstract': False, }, ), - migrations.CreateModel( - name='ProviderDeployment', - fields=[ - ('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')), - ('updated_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Updated by')), - ('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')), - ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), - ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), - ('status', models.CharField(max_length=16, verbose_name='Status')), - ('comment', models.TextField(blank=True, default='', verbose_name='Comment')), - ('provider', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='terminal.appletprovider', verbose_name='Provider')), - ], - options={ - 'abstract': False, - }, - ), migrations.CreateModel( name='AppletPublication', fields=[ @@ -77,20 +64,36 @@ class Migration(migrations.Migration): ('status', models.CharField(max_length=16, verbose_name='Status')), ('comment', models.TextField(blank=True, default='', verbose_name='Comment')), ('applet', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='terminal.applet', verbose_name='Applet')), - ('provider', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='terminal.appletprovider', verbose_name='Provider')), + ('host', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='terminal.applethost', verbose_name='Host')), ], options={ - 'unique_together': {('applet', 'provider')}, + 'unique_together': {('applet', 'host')}, + }, + ), + migrations.CreateModel( + name='AppletHostDeployment', + fields=[ + ('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')), + ('updated_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Updated by')), + ('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')), + ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('status', models.CharField(max_length=16, verbose_name='Status')), + ('comment', models.TextField(blank=True, default='', verbose_name='Comment')), + ('host', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='terminal.applethost', verbose_name='Hosting')), + ], + options={ + 'abstract': False, }, ), migrations.AddField( - model_name='appletprovider', + model_name='applethost', name='applets', field=models.ManyToManyField(through='terminal.AppletPublication', to='terminal.Applet', verbose_name='Applet'), ), migrations.AddField( - model_name='appletprovider', - name='asset', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='assets.asset', verbose_name='Asset'), + model_name='applethost', + name='host', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='assets.host', verbose_name='Host'), ), ] diff --git a/apps/terminal/models/applet/__init__.py b/apps/terminal/models/applet/__init__.py index daef278e0..b2a4cac34 100644 --- a/apps/terminal/models/applet/__init__.py +++ b/apps/terminal/models/applet/__init__.py @@ -1,2 +1,2 @@ from .applet import * -from .provider import * +from .host import * diff --git a/apps/terminal/models/applet/applet.py b/apps/terminal/models/applet/applet.py index 4fc16819f..510d8da35 100644 --- a/apps/terminal/models/applet/applet.py +++ b/apps/terminal/models/applet/applet.py @@ -1,3 +1,7 @@ +import yaml +import os.path +from rest_framework.exceptions import ValidationError + from django.db import models from django.utils.translation import gettext_lazy as _ @@ -9,25 +13,69 @@ __all__ = ['Applet', 'AppletPublication'] class Applet(JMSBaseModel): class Type(models.TextChoices): - app = 'app', _('App') + general = 'general', _('General') web = 'web', _('Web') + + class VCSType(models.TextChoices): + manual = 'manual', _('Manual') + git = 'git', _('Git') + archive = 'archive', _('Remote gzip') + name = models.CharField(max_length=128, verbose_name=_('Name'), unique=True) version = models.CharField(max_length=16, verbose_name=_('Version')) - type = models.CharField(max_length=16, choices=Type.choices, verbose_name=_('Type')) - icon = models.ImageField(upload_to='applet/icon', verbose_name=_('Icon')) author = models.CharField(max_length=128, verbose_name=_('Author')) + path = models.FilePathField(verbose_name=_('Path')) + type = models.CharField(max_length=16, verbose_name=_('Type'), default='general', choices=Type.choices) + vcs_type = models.CharField(max_length=16, verbose_name=_('VCS type'), null=True) + vcs_url = models.CharField(max_length=256, verbose_name=_('URL'), null=True) protocols = models.JSONField(default=list, verbose_name=_('Protocol')) + tags = models.JSONField(default=list, verbose_name=_('Tags')) comment = models.TextField(default='', blank=True, verbose_name=_('Comment')) def __str__(self): return self.name + @property + def manifest(self): + path = os.path.join(self.path, 'manifest.yml') + if not os.path.exists(path): + return None + with open(path, 'r') as f: + return yaml.safe_load(f) + + @property + def icon(self): + path = os.path.join(self.path, 'icon.png') + if not os.path.exists(path): + return None + with open(path, 'rb') as f: + return f.read() + + @classmethod + def validate_manifest(cls, manifest): + fields = ['name', 'display_name', 'version', 'author', 'type', 'tags', 'protocols'] + for field in fields: + if field not in manifest: + raise ValidationError(f'Missing field {field}') + if manifest['type'] not in [i[0] for i in cls.Type.choices]: + raise ValidationError('Invalid type') + if not isinstance(manifest['protocols'], list): + raise ValidationError('Invalid protocols') + + @classmethod + def create_by_manifest(cls, manifest): + obj = cls() + for k, v in manifest.items(): + setattr(obj, k, v) + obj.save() + return obj + class AppletPublication(JMSBaseModel): applet = models.ForeignKey('Applet', on_delete=models.PROTECT, verbose_name=_('Applet')) - provider = models.ForeignKey('AppletProvider', on_delete=models.PROTECT, verbose_name=_('Provider')) + host = models.ForeignKey('AppletHost', on_delete=models.PROTECT, verbose_name=_('Host')) status = models.CharField(max_length=16, verbose_name=_('Status')) comment = models.TextField(default='', blank=True, verbose_name=_('Comment')) class Meta: - unique_together = ('applet', 'provider') + unique_together = ('applet', 'host') diff --git a/apps/terminal/models/applet/provider.py b/apps/terminal/models/applet/host.py similarity index 57% rename from apps/terminal/models/applet/provider.py rename to apps/terminal/models/applet/host.py index dac90850d..89b0bd576 100644 --- a/apps/terminal/models/applet/provider.py +++ b/apps/terminal/models/applet/host.py @@ -1,31 +1,34 @@ from django.db import models from django.utils.translation import gettext_lazy as _ -from celery import current_app - from common.db.models import JMSBaseModel -__all__ = ['AppletProvider', 'ProviderDeployment'] +__all__ = ['AppletHost', 'AppletHostDeployment'] -class AppletProvider(JMSBaseModel): - name = models.CharField(max_length=128, verbose_name=_('Name'), unique=True) - asset = models.ForeignKey('assets.Asset', on_delete=models.PROTECT, verbose_name=_('Asset')) +class AppletHost(JMSBaseModel): + host = models.ForeignKey('assets.Host', on_delete=models.PROTECT, verbose_name=_('Host')) comment = models.TextField(default='', blank=True, verbose_name=_('Comment')) account_automation = models.BooleanField(default=False, verbose_name=_('Account automation')) date_synced = models.DateTimeField(null=True, blank=True, verbose_name=_('Date synced')) status = models.CharField(max_length=16, verbose_name=_('Status')) applets = models.ManyToManyField( 'Applet', verbose_name=_('Applet'), - through='AppletPublication', through_fields=('provider', 'applet'), + through='AppletPublication', through_fields=('host', 'applet'), ) + def __str__(self): + return self.host.name -class ProviderDeployment(JMSBaseModel): - provider = models.ForeignKey('AppletProvider', on_delete=models.CASCADE, verbose_name=_('Provider')) + +class AppletHostDeployment(JMSBaseModel): + host = models.ForeignKey('AppletHost', on_delete=models.CASCADE, verbose_name=_('Hosting')) status = models.CharField(max_length=16, verbose_name=_('Status')) comment = models.TextField(default='', blank=True, verbose_name=_('Comment')) - def install(self): + def __str__(self): + return self.host + + def start(self): pass diff --git a/apps/terminal/serializers/__init__.py b/apps/terminal/serializers/__init__.py index e1312ebae..c14d4fba3 100644 --- a/apps/terminal/serializers/__init__.py +++ b/apps/terminal/serializers/__init__.py @@ -5,3 +5,4 @@ from .session import * from .storage import * from .sharing import * from .endpoint import * +from .applet import * diff --git a/apps/terminal/serializers/applet.py b/apps/terminal/serializers/applet.py new file mode 100644 index 000000000..3f3919776 --- /dev/null +++ b/apps/terminal/serializers/applet.py @@ -0,0 +1,65 @@ +from rest_framework import serializers + +from common.drf.fields import ObjectRelatedField +from assets.models import Host +from ..models import Applet, AppletPublication, AppletHost, AppletHostDeployment + + +__all__ = [ + 'AppletSerializer', 'AppletPublicationSerializer', + 'AppletHostSerializer', 'AppletHostDeploymentSerializer', + 'AppletUploadSerializer' +] + + +class AppletSerializer(serializers.ModelSerializer): + class Meta: + model = Applet + fields_mini = ['id', 'name'] + read_only_fields = [ + 'date_created', 'date_updated' + ] + fields = fields_mini + [ + 'version', 'author', 'type', 'protocols', 'comment' + ] + read_only_fields + + +class AppletUploadSerializer(serializers.Serializer): + file = serializers.FileField() + + +class AppletPublicationSerializer(serializers.ModelSerializer): + applet = ObjectRelatedField(queryset=Applet.objects.all()) + host = ObjectRelatedField(queryset=AppletHost.objects.all()) + + class Meta: + model = AppletPublication + fields_mini = ['id', 'applet', 'host'] + read_only_fields = ['date_created', 'date_updated'] + fields = fields_mini + [ + 'status', 'comment', + ] + read_only_fields + + +class AppletHostSerializer(serializers.ModelSerializer): + host = ObjectRelatedField(queryset=Host.objects.all()) + + class Meta: + model = AppletHost + fields_mini = ['id', 'host'] + read_only_fields = ['date_created', 'date_updated'] + fields = fields_mini + [ + 'comment', 'account_automation', 'date_synced', 'status', + ] + read_only_fields + + +class AppletHostDeploymentSerializer(serializers.ModelSerializer): + host = ObjectRelatedField(queryset=AppletHost.objects.all()) + + class Meta: + model = AppletHostDeployment + fields_mini = ['id', 'host'] + read_only_fields = ['date_created', 'date_updated'] + fields = fields_mini + [ + 'status', 'comment', + ] + read_only_fields diff --git a/apps/terminal/urls/api_urls.py b/apps/terminal/urls/api_urls.py index 3f0445350..8bed4f604 100644 --- a/apps/terminal/urls/api_urls.py +++ b/apps/terminal/urls/api_urls.py @@ -24,6 +24,11 @@ router.register(r'session-sharings', api.SessionSharingViewSet, 'session-sharing router.register(r'session-join-records', api.SessionJoinRecordsViewSet, 'session-sharing-record') router.register(r'endpoints', api.EndpointViewSet, 'endpoint') router.register(r'endpoint-rules', api.EndpointRuleViewSet, 'endpoint-rule') +router.register(r'applets', api.AppletViewSet, 'applet') +router.register(r'applet-hosts', api.AppletHostViewSet, 'applet-host') +router.register(r'applet-publication', api.AppletPublicationViewSet, 'applet-publication') +router.register(r'applet-host-deployment', api.AppletHostDeploymentViewSet, 'applet-host-deployment') + urlpatterns = [ path('my-sessions/', api.MySessionAPIView.as_view(), name='my-session'), From 4dd4c29e12311d663347f2b41c9a768c0a092ea8 Mon Sep 17 00:00:00 2001 From: feng <1304903146@qq.com> Date: Tue, 25 Oct 2022 18:43:34 +0800 Subject: [PATCH 2/4] perf: gather facts --- .../gather_facts/database/mysql/main.yml | 14 +- .../database/postgresql/facts.json | 4574 ----------------- .../gather_facts/database/postgresql/main.yml | 22 +- .../gather_facts/database/sqlserver/main.yml | 10 - .../database/sqlserver/manifest.yml | 8 - .../roles/change_password/tasks/main.yml | 27 - .../automations/gather_facts/manager.py | 9 +- apps/assets/models/automations/base.py | 7 +- .../models/automations/change_secret.py | 8 - .../assets/models/automations/gather_facts.py | 9 +- apps/assets/tasks/automation.py | 7 +- apps/ops/mixin.py | 2 - 12 files changed, 28 insertions(+), 4669 deletions(-) delete mode 100644 apps/assets/automations/gather_facts/database/postgresql/facts.json delete mode 100644 apps/assets/automations/gather_facts/database/sqlserver/main.yml delete mode 100644 apps/assets/automations/gather_facts/database/sqlserver/manifest.yml delete mode 100644 apps/assets/automations/gather_facts/database/sqlserver/roles/change_password/tasks/main.yml diff --git a/apps/assets/automations/gather_facts/database/mysql/main.yml b/apps/assets/automations/gather_facts/database/mysql/main.yml index e7ba00880..c4e90835e 100644 --- a/apps/assets/automations/gather_facts/database/mysql/main.yml +++ b/apps/assets/automations/gather_facts/database/mysql/main.yml @@ -2,27 +2,21 @@ gather_facts: no vars: ansible_python_interpreter: /usr/local/bin/python - jms_account: - username: root - secret: redhat - jms_asset: - address: 127.0.0.1 - port: 3306 tasks: - - name: Gather facts info + - name: Get info community.mysql.mysql_info: login_user: "{{ jms_account.username }}" login_password: "{{ jms_account.secret }}" login_host: "{{ jms_asset.address }}" login_port: "{{ jms_asset.port }}" + filter: version register: db_info - - name: Get info + - name: Define Mysql info by set_fact set_fact: info: version: "{{ db_info.version.full }}" - debug: - var: db_info - + var: info diff --git a/apps/assets/automations/gather_facts/database/postgresql/facts.json b/apps/assets/automations/gather_facts/database/postgresql/facts.json deleted file mode 100644 index ca08cb03c..000000000 --- a/apps/assets/automations/gather_facts/database/postgresql/facts.json +++ /dev/null @@ -1,4574 +0,0 @@ -{ - "db_info": { - "changed": false, - "databases": { - "exampledb": { - "access_priv": "", - "collate": "en_US.utf8", - "ctype": "en_US.utf8", - "encoding": "UTF8", - "extensions": { - "plpgsql": { - "description": "PL/pgSQL procedural language", - "extversion": { - "major": 1, - "minor": 0, - "raw": "1.0" - }, - "nspname": "pg_catalog" - } - }, - "languages": { - "c": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "internal": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "plpgsql": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "sql": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - } - }, - "namespaces": { - "information_schema": { - "nspacl": "{********=UC/********,=U/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "pg_catalog": { - "nspacl": "{********=UC/********,=U/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "pg_toast": { - "nspacl": "", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "public": { - "nspacl": "{********=UC/********,=UC/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - } - }, - "owner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", - "publications": {}, - "size": "8758051", - "subscriptions": {} - }, - "exampledb1": { - "access_priv": "", - "collate": "en_US.utf8", - "ctype": "en_US.utf8", - "encoding": "UTF8", - "extensions": { - "plpgsql": { - "description": "PL/pgSQL procedural language", - "extversion": { - "major": 1, - "minor": 0, - "raw": "1.0" - }, - "nspname": "pg_catalog" - } - }, - "languages": { - "c": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "internal": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "plpgsql": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "sql": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - } - }, - "namespaces": { - "information_schema": { - "nspacl": "{********=UC/********,=U/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "pg_catalog": { - "nspacl": "{********=UC/********,=U/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "pg_toast": { - "nspacl": "", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "public": { - "nspacl": "{********=UC/********,=UC/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - } - }, - "owner": "web1", - "publications": {}, - "size": "8758051", - "subscriptions": {} - }, - "postgre": { - "access_priv": "", - "collate": "en_US.utf8", - "ctype": "en_US.utf8", - "encoding": "UTF8", - "extensions": { - "plpgsql": { - "description": "PL/pgSQL procedural language", - "extversion": { - "major": 1, - "minor": 0, - "raw": "1.0" - }, - "nspname": "pg_catalog" - } - }, - "languages": { - "c": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "internal": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "plpgsql": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "sql": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - } - }, - "namespaces": { - "information_schema": { - "nspacl": "{********=UC/********,=U/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "pg_catalog": { - "nspacl": "{********=UC/********,=U/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "pg_toast": { - "nspacl": "", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "public": { - "nspacl": "{********=UC/********,=UC/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - } - }, - "owner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", - "publications": {}, - "size": "8758051", - "subscriptions": {} - }, - "postgres": { - "access_priv": "", - "collate": "en_US.utf8", - "ctype": "en_US.utf8", - "encoding": "UTF8", - "extensions": { - "plpgsql": { - "description": "PL/pgSQL procedural language", - "extversion": { - "major": 1, - "minor": 0, - "raw": "1.0" - }, - "nspname": "pg_catalog" - } - }, - "languages": { - "c": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "internal": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "plpgsql": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "sql": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - } - }, - "namespaces": { - "information_schema": { - "nspacl": "{********=UC/********,=U/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "pg_catalog": { - "nspacl": "{********=UC/********,=U/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "pg_toast": { - "nspacl": "", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "public": { - "nspacl": "{********=UC/********,=UC/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - } - }, - "owner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", - "publications": {}, - "size": "8758051", - "subscriptions": {} - }, - "template1": { - "access_priv": "=c/********\n********=CTc/********", - "collate": "en_US.utf8", - "ctype": "en_US.utf8", - "encoding": "UTF8", - "extensions": { - "plpgsql": { - "description": "PL/pgSQL procedural language", - "extversion": { - "major": 1, - "minor": 0, - "raw": "1.0" - }, - "nspname": "pg_catalog" - } - }, - "languages": { - "c": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "internal": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "plpgsql": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "sql": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - } - }, - "namespaces": { - "information_schema": { - "nspacl": "{********=UC/********,=U/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "pg_catalog": { - "nspacl": "{********=UC/********,=U/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "pg_toast": { - "nspacl": "", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "public": { - "nspacl": "{********=UC/********,=UC/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - } - }, - "owner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", - "publications": {}, - "size": "8758051", - "subscriptions": {} - }, - "testdb": { - "access_priv": "=Tc/test\ntest=CTc/test", - "collate": "en_US.utf8", - "ctype": "en_US.utf8", - "encoding": "UTF8", - "extensions": { - "plpgsql": { - "description": "PL/pgSQL procedural language", - "extversion": { - "major": 1, - "minor": 0, - "raw": "1.0" - }, - "nspname": "pg_catalog" - } - }, - "languages": { - "c": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "internal": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "plpgsql": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "sql": { - "lanacl": "", - "lanowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - } - }, - "namespaces": { - "information_schema": { - "nspacl": "{********=UC/********,=U/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "pg_catalog": { - "nspacl": "{********=UC/********,=U/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "pg_toast": { - "nspacl": "", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "public": { - "nspacl": "{********=UC/********,=UC/********}", - "nspowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - } - }, - "owner": "test", - "publications": {}, - "size": "8758051", - "subscriptions": {} - } - }, - "failed": false, - "in_recovery": false, - "pending_restart_settings": [], - "repl_slots": {}, - "replications": {}, - "roles": { - "postgre": { - "canlogin": true, - "member_of": [], - "superuser": true, - "valid_until": "" - }, - "test": { - "canlogin": true, - "member_of": [], - "superuser": false, - "valid_until": "" - }, - "web1": { - "canlogin": true, - "member_of": [], - "superuser": false, - "valid_until": "" - } - }, - "settings": { - "DateStyle": { - "boot_val": "ISO, MDY", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "ISO, MDY", - "setting": "ISO, MDY", - "sourcefile": "/var/lib/********sql/data/********sql.conf", - "unit": "", - "vartype": "string" - }, - "IntervalStyle": { - "boot_val": "********s", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "********s", - "setting": "********s", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "TimeZone": { - "boot_val": "GMT", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "Etc/UTC", - "setting": "Etc/UTC", - "sourcefile": "/var/lib/********sql/data/********sql.conf", - "unit": "", - "vartype": "string" - }, - "allow_in_place_tablespaces": { - "boot_val": "off", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "allow_system_table_mods": { - "boot_val": "off", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "application_name": { - "boot_val": "", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "archive_cleanup_command": { - "boot_val": "", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "archive_command": { - "boot_val": "", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "(disabled)", - "setting": "(disabled)", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "archive_mode": { - "boot_val": "off", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "archive_timeout": { - "boot_val": "0", - "context": "sighup", - "max_val": "1073741823", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "s", - "vartype": "integer" - }, - "array_nulls": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "authentication_timeout": { - "boot_val": "60", - "context": "sighup", - "max_val": "600", - "min_val": "1", - "pending_restart": false, - "pretty_val": "1min", - "setting": "60", - "sourcefile": "", - "unit": "s", - "vartype": "integer" - }, - "autovacuum": { - "boot_val": "on", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "autovacuum_analyze_scale_factor": { - "boot_val": "0.1", - "context": "sighup", - "max_val": "100", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0.1", - "setting": "0.1", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "autovacuum_analyze_threshold": { - "boot_val": "50", - "context": "sighup", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "50", - "setting": "50", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "autovacuum_freeze_max_age": { - "boot_val": "200000000", - "context": "postmaster", - "max_val": "2000000000", - "min_val": "100000", - "pending_restart": false, - "pretty_val": "200000000", - "setting": "200000000", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "autovacuum_max_workers": { - "boot_val": "3", - "context": "postmaster", - "max_val": "262143", - "min_val": "1", - "pending_restart": false, - "pretty_val": "3", - "setting": "3", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "autovacuum_multixact_freeze_max_age": { - "boot_val": "400000000", - "context": "postmaster", - "max_val": "2000000000", - "min_val": "10000", - "pending_restart": false, - "pretty_val": "400000000", - "setting": "400000000", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "autovacuum_naptime": { - "boot_val": "60", - "context": "sighup", - "max_val": "2147483", - "min_val": "1", - "pending_restart": false, - "pretty_val": "1min", - "setting": "60", - "sourcefile": "", - "unit": "s", - "vartype": "integer" - }, - "autovacuum_vacuum_cost_delay": { - "boot_val": "2", - "context": "sighup", - "max_val": "100", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "2ms", - "setting": "2", - "sourcefile": "", - "unit": "ms", - "vartype": "real" - }, - "autovacuum_vacuum_cost_limit": { - "boot_val": "-1", - "context": "sighup", - "max_val": "10000", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "-1", - "setting": "-1", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "autovacuum_vacuum_insert_scale_factor": { - "boot_val": "0.2", - "context": "sighup", - "max_val": "100", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0.2", - "setting": "0.2", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "autovacuum_vacuum_insert_threshold": { - "boot_val": "1000", - "context": "sighup", - "max_val": "2147483647", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "1000", - "setting": "1000", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "autovacuum_vacuum_scale_factor": { - "boot_val": "0.2", - "context": "sighup", - "max_val": "100", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0.2", - "setting": "0.2", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "autovacuum_vacuum_threshold": { - "boot_val": "50", - "context": "sighup", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "50", - "setting": "50", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "autovacuum_work_mem": { - "boot_val": "-1", - "context": "sighup", - "max_val": "2147483647", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "-1", - "setting": "-1", - "sourcefile": "", - "unit": "kB", - "val_in_bytes": 0, - "vartype": "integer" - }, - "backend_flush_after": { - "boot_val": "0", - "context": "user", - "max_val": "256", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "8kB", - "val_in_bytes": 0, - "vartype": "integer" - }, - "backslash_quote": { - "boot_val": "safe_encoding", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "safe_encoding", - "setting": "safe_encoding", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "backtrace_functions": { - "boot_val": "", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "bgwriter_delay": { - "boot_val": "200", - "context": "sighup", - "max_val": "10000", - "min_val": "10", - "pending_restart": false, - "pretty_val": "200ms", - "setting": "200", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "bgwriter_flush_after": { - "boot_val": "64", - "context": "sighup", - "max_val": "256", - "min_val": "0", - "pending_restart": false, - "pretty_val": "512kB", - "setting": "64", - "sourcefile": "", - "unit": "8kB", - "val_in_bytes": 524288, - "vartype": "integer" - }, - "bgwriter_lru_maxpages": { - "boot_val": "100", - "context": "sighup", - "max_val": "1073741823", - "min_val": "0", - "pending_restart": false, - "pretty_val": "100", - "setting": "100", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "bgwriter_lru_multiplier": { - "boot_val": "2", - "context": "sighup", - "max_val": "10", - "min_val": "0", - "pending_restart": false, - "pretty_val": "2", - "setting": "2", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "block_size": { - "boot_val": "8192", - "context": "internal", - "max_val": "8192", - "min_val": "8192", - "pending_restart": false, - "pretty_val": "8192", - "setting": "8192", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "bonjour": { - "boot_val": "off", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "bonjour_name": { - "boot_val": "", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "bytea_output": { - "boot_val": "hex", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "hex", - "setting": "hex", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "check_function_bodies": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "checkpoint_completion_target": { - "boot_val": "0.9", - "context": "sighup", - "max_val": "1", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0.9", - "setting": "0.9", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "checkpoint_flush_after": { - "boot_val": "32", - "context": "sighup", - "max_val": "256", - "min_val": "0", - "pending_restart": false, - "pretty_val": "256kB", - "setting": "32", - "sourcefile": "", - "unit": "8kB", - "val_in_bytes": 262144, - "vartype": "integer" - }, - "checkpoint_timeout": { - "boot_val": "300", - "context": "sighup", - "max_val": "86400", - "min_val": "30", - "pending_restart": false, - "pretty_val": "5min", - "setting": "300", - "sourcefile": "", - "unit": "s", - "vartype": "integer" - }, - "checkpoint_warning": { - "boot_val": "30", - "context": "sighup", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "30s", - "setting": "30", - "sourcefile": "", - "unit": "s", - "vartype": "integer" - }, - "client_connection_check_interval": { - "boot_val": "0", - "context": "user", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "client_encoding": { - "boot_val": "SQL_ASCII", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "UTF8", - "setting": "UTF8", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "client_min_messages": { - "boot_val": "notice", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "notice", - "setting": "notice", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "cluster_name": { - "boot_val": "", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "commit_delay": { - "boot_val": "0", - "context": "superuser", - "max_val": "100000", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "commit_siblings": { - "boot_val": "5", - "context": "user", - "max_val": "1000", - "min_val": "0", - "pending_restart": false, - "pretty_val": "5", - "setting": "5", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "compute_query_id": { - "boot_val": "auto", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "auto", - "setting": "auto", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "config_file": { - "boot_val": "", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "/var/lib/********sql/data/********sql.conf", - "setting": "/var/lib/********sql/data/********sql.conf", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "constraint_exclusion": { - "boot_val": "partition", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "partition", - "setting": "partition", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "cpu_index_tuple_cost": { - "boot_val": "0.005", - "context": "user", - "max_val": "1.79769e+308", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0.005", - "setting": "0.005", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "cpu_operator_cost": { - "boot_val": "0.0025", - "context": "user", - "max_val": "1.79769e+308", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0.0025", - "setting": "0.0025", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "cpu_tuple_cost": { - "boot_val": "0.01", - "context": "user", - "max_val": "1.79769e+308", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0.01", - "setting": "0.01", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "cursor_tuple_fraction": { - "boot_val": "0.1", - "context": "user", - "max_val": "1", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0.1", - "setting": "0.1", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "data_checksums": { - "boot_val": "off", - "context": "internal", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "data_directory": { - "boot_val": "", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "/var/lib/********sql/data", - "setting": "/var/lib/********sql/data", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "data_directory_mode": { - "boot_val": "448", - "context": "internal", - "max_val": "511", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0700", - "setting": "0700", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "data_sync_retry": { - "boot_val": "off", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "db_user_namespace": { - "boot_val": "off", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "deadlock_timeout": { - "boot_val": "1000", - "context": "superuser", - "max_val": "2147483647", - "min_val": "1", - "pending_restart": false, - "pretty_val": "1s", - "setting": "1000", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "debug_assertions": { - "boot_val": "off", - "context": "internal", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "debug_discard_caches": { - "boot_val": "0", - "context": "superuser", - "max_val": "0", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "debug_pretty_print": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "debug_print_parse": { - "boot_val": "off", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "debug_print_plan": { - "boot_val": "off", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "debug_print_rewritten": { - "boot_val": "off", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "default_statistics_target": { - "boot_val": "100", - "context": "user", - "max_val": "10000", - "min_val": "1", - "pending_restart": false, - "pretty_val": "100", - "setting": "100", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "default_table_access_method": { - "boot_val": "heap", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "heap", - "setting": "heap", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "default_tablespace": { - "boot_val": "", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "default_text_search_config": { - "boot_val": "pg_catalog.simple", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "pg_catalog.english", - "setting": "pg_catalog.english", - "sourcefile": "/var/lib/********sql/data/********sql.conf", - "unit": "", - "vartype": "string" - }, - "default_toast_compression": { - "boot_val": "pglz", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "pglz", - "setting": "pglz", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "default_transaction_deferrable": { - "boot_val": "off", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "default_transaction_isolation": { - "boot_val": "read committed", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "read committed", - "setting": "read committed", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "default_transaction_read_only": { - "boot_val": "off", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "dynamic_library_path": { - "boot_val": "$libdir", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "$libdir", - "setting": "$libdir", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "dynamic_shared_memory_type": { - "boot_val": "posix", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "posix", - "setting": "posix", - "sourcefile": "/var/lib/********sql/data/********sql.conf", - "unit": "", - "vartype": "enum" - }, - "effective_cache_size": { - "boot_val": "524288", - "context": "user", - "max_val": "2147483647", - "min_val": "1", - "pending_restart": false, - "pretty_val": "4GB", - "setting": "524288", - "sourcefile": "", - "unit": "8kB", - "val_in_bytes": 4294967296, - "vartype": "integer" - }, - "effective_io_concurrency": { - "boot_val": "1", - "context": "user", - "max_val": "1000", - "min_val": "0", - "pending_restart": false, - "pretty_val": "1", - "setting": "1", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "enable_async_append": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_bitmapscan": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_gathermerge": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_hashagg": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_hashjoin": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_incremental_sort": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_indexonlyscan": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_indexscan": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_material": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_memoize": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_mergejoin": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_nestloop": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_parallel_append": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_parallel_hash": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_partition_pruning": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_partitionwise_aggregate": { - "boot_val": "off", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_partitionwise_join": { - "boot_val": "off", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_seqscan": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_sort": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "enable_tidscan": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "escape_string_warning": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "event_source": { - "boot_val": "PostgreSQL", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "PostgreSQL", - "setting": "PostgreSQL", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "exit_on_error": { - "boot_val": "off", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "extension_destdir": { - "boot_val": "", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "external_pid_file": { - "boot_val": "", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "extra_float_digits": { - "boot_val": "1", - "context": "user", - "max_val": "3", - "min_val": "-15", - "pending_restart": false, - "pretty_val": "1", - "setting": "1", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "force_parallel_mode": { - "boot_val": "off", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "from_collapse_limit": { - "boot_val": "8", - "context": "user", - "max_val": "2147483647", - "min_val": "1", - "pending_restart": false, - "pretty_val": "8", - "setting": "8", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "fsync": { - "boot_val": "on", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "full_page_writes": { - "boot_val": "on", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "geqo": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "geqo_effort": { - "boot_val": "5", - "context": "user", - "max_val": "10", - "min_val": "1", - "pending_restart": false, - "pretty_val": "5", - "setting": "5", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "geqo_generations": { - "boot_val": "0", - "context": "user", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "geqo_pool_size": { - "boot_val": "0", - "context": "user", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "geqo_seed": { - "boot_val": "0", - "context": "user", - "max_val": "1", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "geqo_selection_bias": { - "boot_val": "2", - "context": "user", - "max_val": "2", - "min_val": "1.5", - "pending_restart": false, - "pretty_val": "2", - "setting": "2", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "geqo_threshold": { - "boot_val": "12", - "context": "user", - "max_val": "2147483647", - "min_val": "2", - "pending_restart": false, - "pretty_val": "12", - "setting": "12", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "gin_fuzzy_search_limit": { - "boot_val": "0", - "context": "user", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "gin_pending_list_limit": { - "boot_val": "4096", - "context": "user", - "max_val": "2147483647", - "min_val": "64", - "pending_restart": false, - "pretty_val": "4MB", - "setting": "4096", - "sourcefile": "", - "unit": "kB", - "val_in_bytes": 4194304, - "vartype": "integer" - }, - "hash_mem_multiplier": { - "boot_val": "1", - "context": "user", - "max_val": "1000", - "min_val": "1", - "pending_restart": false, - "pretty_val": "1", - "setting": "1", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "hba_file": { - "boot_val": "", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "/var/lib/********sql/data/pg_hba.conf", - "setting": "/var/lib/********sql/data/pg_hba.conf", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "hot_standby": { - "boot_val": "on", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "hot_standby_feedback": { - "boot_val": "off", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "huge_page_size": { - "boot_val": "0", - "context": "postmaster", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "kB", - "val_in_bytes": 0, - "vartype": "integer" - }, - "huge_pages": { - "boot_val": "try", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "try", - "setting": "try", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "ident_file": { - "boot_val": "", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "/var/lib/********sql/data/pg_ident.conf", - "setting": "/var/lib/********sql/data/pg_ident.conf", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "idle_in_transaction_session_timeout": { - "boot_val": "0", - "context": "user", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "idle_session_timeout": { - "boot_val": "0", - "context": "user", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "ignore_checksum_failure": { - "boot_val": "off", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "ignore_invalid_pages": { - "boot_val": "off", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "ignore_system_indexes": { - "boot_val": "off", - "context": "backend", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "in_hot_standby": { - "boot_val": "off", - "context": "internal", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "integer_datetimes": { - "boot_val": "on", - "context": "internal", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "jit": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "jit_above_cost": { - "boot_val": "100000", - "context": "user", - "max_val": "1.79769e+308", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "100000", - "setting": "100000", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "jit_debugging_support": { - "boot_val": "off", - "context": "superuser-backend", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "jit_dump_bitcode": { - "boot_val": "off", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "jit_expressions": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "jit_inline_above_cost": { - "boot_val": "500000", - "context": "user", - "max_val": "1.79769e+308", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "500000", - "setting": "500000", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "jit_optimize_above_cost": { - "boot_val": "500000", - "context": "user", - "max_val": "1.79769e+308", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "500000", - "setting": "500000", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "jit_profiling_support": { - "boot_val": "off", - "context": "superuser-backend", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "jit_provider": { - "boot_val": "llvmjit", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "llvmjit", - "setting": "llvmjit", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "jit_tuple_deforming": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "join_collapse_limit": { - "boot_val": "8", - "context": "user", - "max_val": "2147483647", - "min_val": "1", - "pending_restart": false, - "pretty_val": "8", - "setting": "8", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "krb_caseins_users": { - "boot_val": "off", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "krb_server_keyfile": { - "boot_val": "FILE:/etc/********sql-common/krb5.keytab", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "FILE:/etc/********sql-common/krb5.keytab", - "setting": "FILE:/etc/********sql-common/krb5.keytab", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "lc_collate": { - "boot_val": "C", - "context": "internal", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "en_US.utf8", - "setting": "en_US.utf8", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "lc_ctype": { - "boot_val": "C", - "context": "internal", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "en_US.utf8", - "setting": "en_US.utf8", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "lc_messages": { - "boot_val": "", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "en_US.utf8", - "setting": "en_US.utf8", - "sourcefile": "/var/lib/********sql/data/********sql.conf", - "unit": "", - "vartype": "string" - }, - "lc_monetary": { - "boot_val": "C", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "en_US.utf8", - "setting": "en_US.utf8", - "sourcefile": "/var/lib/********sql/data/********sql.conf", - "unit": "", - "vartype": "string" - }, - "lc_numeric": { - "boot_val": "C", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "en_US.utf8", - "setting": "en_US.utf8", - "sourcefile": "/var/lib/********sql/data/********sql.conf", - "unit": "", - "vartype": "string" - }, - "lc_time": { - "boot_val": "C", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "en_US.utf8", - "setting": "en_US.utf8", - "sourcefile": "/var/lib/********sql/data/********sql.conf", - "unit": "", - "vartype": "string" - }, - "listen_addresses": { - "boot_val": "localhost", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "*", - "setting": "*", - "sourcefile": "/var/lib/********sql/data/********sql.conf", - "unit": "", - "vartype": "string" - }, - "lo_compat_privileges": { - "boot_val": "off", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "local_preload_libraries": { - "boot_val": "", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "lock_timeout": { - "boot_val": "0", - "context": "user", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "log_autovacuum_min_duration": { - "boot_val": "-1", - "context": "sighup", - "max_val": "2147483647", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "-1", - "setting": "-1", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "log_checkpoints": { - "boot_val": "off", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "log_connections": { - "boot_val": "off", - "context": "superuser-backend", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "log_destination": { - "boot_val": "stderr", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "stderr", - "setting": "stderr", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "log_directory": { - "boot_val": "log", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "log", - "setting": "log", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "log_disconnections": { - "boot_val": "off", - "context": "superuser-backend", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "log_duration": { - "boot_val": "off", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "log_error_verbosity": { - "boot_val": "default", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "default", - "setting": "default", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "log_executor_stats": { - "boot_val": "off", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "log_file_mode": { - "boot_val": "384", - "context": "sighup", - "max_val": "511", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0600", - "setting": "0600", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "log_filename": { - "boot_val": "********sql-%Y-%m-%d_%H%M%S.log", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "********sql-%Y-%m-%d_%H%M%S.log", - "setting": "********sql-%Y-%m-%d_%H%M%S.log", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "log_hostname": { - "boot_val": "off", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "log_line_prefix": { - "boot_val": "%m [%p] ", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "%m [%p] ", - "setting": "%m [%p] ", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "log_lock_waits": { - "boot_val": "off", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "log_min_duration_sample": { - "boot_val": "-1", - "context": "superuser", - "max_val": "2147483647", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "-1", - "setting": "-1", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "log_min_duration_statement": { - "boot_val": "-1", - "context": "superuser", - "max_val": "2147483647", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "-1", - "setting": "-1", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "log_min_error_statement": { - "boot_val": "error", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "error", - "setting": "error", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "log_min_messages": { - "boot_val": "warning", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "warning", - "setting": "warning", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "log_parameter_max_length": { - "boot_val": "-1", - "context": "superuser", - "max_val": "1073741823", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "-1", - "setting": "-1", - "sourcefile": "", - "unit": "B", - "vartype": "integer" - }, - "log_parameter_max_length_on_error": { - "boot_val": "0", - "context": "user", - "max_val": "1073741823", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "B", - "vartype": "integer" - }, - "log_parser_stats": { - "boot_val": "off", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "log_planner_stats": { - "boot_val": "off", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "log_recovery_conflict_waits": { - "boot_val": "off", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "log_replication_commands": { - "boot_val": "off", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "log_rotation_age": { - "boot_val": "1440", - "context": "sighup", - "max_val": "35791394", - "min_val": "0", - "pending_restart": false, - "pretty_val": "1d", - "setting": "1440", - "sourcefile": "", - "unit": "min", - "vartype": "integer" - }, - "log_rotation_size": { - "boot_val": "10240", - "context": "sighup", - "max_val": "2097151", - "min_val": "0", - "pending_restart": false, - "pretty_val": "10MB", - "setting": "10240", - "sourcefile": "", - "unit": "kB", - "val_in_bytes": 10485760, - "vartype": "integer" - }, - "log_statement": { - "boot_val": "none", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "none", - "setting": "none", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "log_statement_sample_rate": { - "boot_val": "1", - "context": "superuser", - "max_val": "1", - "min_val": "0", - "pending_restart": false, - "pretty_val": "1", - "setting": "1", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "log_statement_stats": { - "boot_val": "off", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "log_temp_files": { - "boot_val": "-1", - "context": "superuser", - "max_val": "2147483647", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "-1", - "setting": "-1", - "sourcefile": "", - "unit": "kB", - "val_in_bytes": 0, - "vartype": "integer" - }, - "log_timezone": { - "boot_val": "GMT", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "Etc/UTC", - "setting": "Etc/UTC", - "sourcefile": "/var/lib/********sql/data/********sql.conf", - "unit": "", - "vartype": "string" - }, - "log_transaction_sample_rate": { - "boot_val": "0", - "context": "superuser", - "max_val": "1", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "log_truncate_on_rotation": { - "boot_val": "off", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "logging_collector": { - "boot_val": "off", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "logical_decoding_work_mem": { - "boot_val": "65536", - "context": "user", - "max_val": "2147483647", - "min_val": "64", - "pending_restart": false, - "pretty_val": "64MB", - "setting": "65536", - "sourcefile": "", - "unit": "kB", - "val_in_bytes": 67108864, - "vartype": "integer" - }, - "maintenance_io_concurrency": { - "boot_val": "10", - "context": "user", - "max_val": "1000", - "min_val": "0", - "pending_restart": false, - "pretty_val": "10", - "setting": "10", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "maintenance_work_mem": { - "boot_val": "65536", - "context": "user", - "max_val": "2147483647", - "min_val": "1024", - "pending_restart": false, - "pretty_val": "64MB", - "setting": "65536", - "sourcefile": "", - "unit": "kB", - "val_in_bytes": 67108864, - "vartype": "integer" - }, - "max_connections": { - "boot_val": "100", - "context": "postmaster", - "max_val": "262143", - "min_val": "1", - "pending_restart": false, - "pretty_val": "100", - "setting": "100", - "sourcefile": "/var/lib/********sql/data/********sql.conf", - "unit": "", - "vartype": "integer" - }, - "max_files_per_process": { - "boot_val": "1000", - "context": "postmaster", - "max_val": "2147483647", - "min_val": "64", - "pending_restart": false, - "pretty_val": "1000", - "setting": "1000", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "max_function_args": { - "boot_val": "100", - "context": "internal", - "max_val": "100", - "min_val": "100", - "pending_restart": false, - "pretty_val": "100", - "setting": "100", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "max_identifier_length": { - "boot_val": "63", - "context": "internal", - "max_val": "63", - "min_val": "63", - "pending_restart": false, - "pretty_val": "63", - "setting": "63", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "max_index_keys": { - "boot_val": "32", - "context": "internal", - "max_val": "32", - "min_val": "32", - "pending_restart": false, - "pretty_val": "32", - "setting": "32", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "max_locks_per_transaction": { - "boot_val": "64", - "context": "postmaster", - "max_val": "2147483647", - "min_val": "10", - "pending_restart": false, - "pretty_val": "64", - "setting": "64", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "max_logical_replication_workers": { - "boot_val": "4", - "context": "postmaster", - "max_val": "262143", - "min_val": "0", - "pending_restart": false, - "pretty_val": "4", - "setting": "4", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "max_parallel_maintenance_workers": { - "boot_val": "2", - "context": "user", - "max_val": "1024", - "min_val": "0", - "pending_restart": false, - "pretty_val": "2", - "setting": "2", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "max_parallel_workers": { - "boot_val": "8", - "context": "user", - "max_val": "1024", - "min_val": "0", - "pending_restart": false, - "pretty_val": "8", - "setting": "8", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "max_parallel_workers_per_gather": { - "boot_val": "2", - "context": "user", - "max_val": "1024", - "min_val": "0", - "pending_restart": false, - "pretty_val": "2", - "setting": "2", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "max_pred_locks_per_page": { - "boot_val": "2", - "context": "sighup", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "2", - "setting": "2", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "max_pred_locks_per_relation": { - "boot_val": "-2", - "context": "sighup", - "max_val": "2147483647", - "min_val": "-2147483648", - "pending_restart": false, - "pretty_val": "-2", - "setting": "-2", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "max_pred_locks_per_transaction": { - "boot_val": "64", - "context": "postmaster", - "max_val": "2147483647", - "min_val": "10", - "pending_restart": false, - "pretty_val": "64", - "setting": "64", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "max_prepared_transactions": { - "boot_val": "0", - "context": "postmaster", - "max_val": "262143", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "max_replication_slots": { - "boot_val": "10", - "context": "postmaster", - "max_val": "262143", - "min_val": "0", - "pending_restart": false, - "pretty_val": "10", - "setting": "10", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "max_slot_wal_keep_size": { - "boot_val": "-1", - "context": "sighup", - "max_val": "2147483647", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "-1", - "setting": "-1", - "sourcefile": "", - "unit": "MB", - "val_in_bytes": 0, - "vartype": "integer" - }, - "max_stack_depth": { - "boot_val": "100", - "context": "superuser", - "max_val": "2147483647", - "min_val": "100", - "pending_restart": false, - "pretty_val": "2MB", - "setting": "2048", - "sourcefile": "", - "unit": "kB", - "val_in_bytes": 2097152, - "vartype": "integer" - }, - "max_standby_archive_delay": { - "boot_val": "30000", - "context": "sighup", - "max_val": "2147483647", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "30s", - "setting": "30000", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "max_standby_streaming_delay": { - "boot_val": "30000", - "context": "sighup", - "max_val": "2147483647", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "30s", - "setting": "30000", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "max_sync_workers_per_subscription": { - "boot_val": "2", - "context": "sighup", - "max_val": "262143", - "min_val": "0", - "pending_restart": false, - "pretty_val": "2", - "setting": "2", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "max_wal_senders": { - "boot_val": "10", - "context": "postmaster", - "max_val": "262143", - "min_val": "0", - "pending_restart": false, - "pretty_val": "10", - "setting": "10", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "max_wal_size": { - "boot_val": "1024", - "context": "sighup", - "max_val": "2147483647", - "min_val": "2", - "pending_restart": false, - "pretty_val": "1GB", - "setting": "1024", - "sourcefile": "/var/lib/********sql/data/********sql.conf", - "unit": "MB", - "val_in_bytes": 1073741824, - "vartype": "integer" - }, - "max_worker_processes": { - "boot_val": "8", - "context": "postmaster", - "max_val": "262143", - "min_val": "0", - "pending_restart": false, - "pretty_val": "8", - "setting": "8", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "min_dynamic_shared_memory": { - "boot_val": "0", - "context": "postmaster", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "MB", - "val_in_bytes": 0, - "vartype": "integer" - }, - "min_parallel_index_scan_size": { - "boot_val": "64", - "context": "user", - "max_val": "715827882", - "min_val": "0", - "pending_restart": false, - "pretty_val": "512kB", - "setting": "64", - "sourcefile": "", - "unit": "8kB", - "val_in_bytes": 524288, - "vartype": "integer" - }, - "min_parallel_table_scan_size": { - "boot_val": "1024", - "context": "user", - "max_val": "715827882", - "min_val": "0", - "pending_restart": false, - "pretty_val": "8MB", - "setting": "1024", - "sourcefile": "", - "unit": "8kB", - "val_in_bytes": 8388608, - "vartype": "integer" - }, - "min_wal_size": { - "boot_val": "80", - "context": "sighup", - "max_val": "2147483647", - "min_val": "2", - "pending_restart": false, - "pretty_val": "80MB", - "setting": "80", - "sourcefile": "/var/lib/********sql/data/********sql.conf", - "unit": "MB", - "val_in_bytes": 83886080, - "vartype": "integer" - }, - "old_snapshot_threshold": { - "boot_val": "-1", - "context": "postmaster", - "max_val": "86400", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "-1", - "setting": "-1", - "sourcefile": "", - "unit": "min", - "vartype": "integer" - }, - "parallel_leader_participation": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "parallel_setup_cost": { - "boot_val": "1000", - "context": "user", - "max_val": "1.79769e+308", - "min_val": "0", - "pending_restart": false, - "pretty_val": "1000", - "setting": "1000", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "parallel_tuple_cost": { - "boot_val": "0.1", - "context": "user", - "max_val": "1.79769e+308", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0.1", - "setting": "0.1", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "password_encryption": { - "boot_val": "scram-sha-256", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "scram-sha-256", - "setting": "scram-sha-256", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "plan_cache_mode": { - "boot_val": "auto", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "auto", - "setting": "auto", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "port": { - "boot_val": "5432", - "context": "postmaster", - "max_val": "65535", - "min_val": "1", - "pending_restart": false, - "pretty_val": "5432", - "setting": "5432", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "post_auth_delay": { - "boot_val": "0", - "context": "backend", - "max_val": "2147", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "s", - "vartype": "integer" - }, - "pre_auth_delay": { - "boot_val": "0", - "context": "sighup", - "max_val": "60", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "s", - "vartype": "integer" - }, - "primary_conninfo": { - "boot_val": "", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "primary_slot_name": { - "boot_val": "", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "promote_trigger_file": { - "boot_val": "", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "quote_all_identifiers": { - "boot_val": "off", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "random_page_cost": { - "boot_val": "4", - "context": "user", - "max_val": "1.79769e+308", - "min_val": "0", - "pending_restart": false, - "pretty_val": "4", - "setting": "4", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "recovery_end_command": { - "boot_val": "", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "recovery_init_sync_method": { - "boot_val": "fsync", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "fsync", - "setting": "fsync", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "recovery_min_apply_delay": { - "boot_val": "0", - "context": "sighup", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "recovery_target": { - "boot_val": "", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "recovery_target_action": { - "boot_val": "pause", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "pause", - "setting": "pause", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "recovery_target_inclusive": { - "boot_val": "on", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "recovery_target_lsn": { - "boot_val": "", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "recovery_target_name": { - "boot_val": "", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "recovery_target_time": { - "boot_val": "", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "recovery_target_timeline": { - "boot_val": "latest", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "latest", - "setting": "latest", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "recovery_target_xid": { - "boot_val": "", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "remove_temp_files_after_crash": { - "boot_val": "on", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "restart_after_crash": { - "boot_val": "on", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "restore_command": { - "boot_val": "", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "row_security": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "search_path": { - "boot_val": "\"$user\", public", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "\"$user\", public", - "setting": "\"$user\", public", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "segment_size": { - "boot_val": "131072", - "context": "internal", - "max_val": "131072", - "min_val": "131072", - "pending_restart": false, - "pretty_val": "1GB", - "setting": "131072", - "sourcefile": "", - "unit": "8kB", - "val_in_bytes": 1073741824, - "vartype": "integer" - }, - "seq_page_cost": { - "boot_val": "1", - "context": "user", - "max_val": "1.79769e+308", - "min_val": "0", - "pending_restart": false, - "pretty_val": "1", - "setting": "1", - "sourcefile": "", - "unit": "", - "vartype": "real" - }, - "server_encoding": { - "boot_val": "SQL_ASCII", - "context": "internal", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "UTF8", - "setting": "UTF8", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "server_version": { - "boot_val": "14.5 (Debian 14.5-1.pgdg110+1)", - "context": "internal", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "14.5 (Debian 14.5-1.pgdg110+1)", - "setting": "14.5 (Debian 14.5-1.pgdg110+1)", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "server_version_num": { - "boot_val": "140005", - "context": "internal", - "max_val": "140005", - "min_val": "140005", - "pending_restart": false, - "pretty_val": "140005", - "setting": "140005", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "session_preload_libraries": { - "boot_val": "", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "session_replication_role": { - "boot_val": "origin", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "origin", - "setting": "origin", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "shared_buffers": { - "boot_val": "1024", - "context": "postmaster", - "max_val": "1073741823", - "min_val": "16", - "pending_restart": false, - "pretty_val": "128MB", - "setting": "16384", - "sourcefile": "/var/lib/********sql/data/********sql.conf", - "unit": "8kB", - "val_in_bytes": 134217728, - "vartype": "integer" - }, - "shared_memory_type": { - "boot_val": "mmap", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "mmap", - "setting": "mmap", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "shared_preload_libraries": { - "boot_val": "", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "ssl": { - "boot_val": "off", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "ssl_ca_file": { - "boot_val": "", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "ssl_cert_file": { - "boot_val": "server.crt", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "server.crt", - "setting": "server.crt", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "ssl_ciphers": { - "boot_val": "HIGH:MEDIUM:+3DES:!aNULL", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "HIGH:MEDIUM:+3DES:!aNULL", - "setting": "HIGH:MEDIUM:+3DES:!aNULL", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "ssl_crl_dir": { - "boot_val": "", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "ssl_crl_file": { - "boot_val": "", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "ssl_dh_params_file": { - "boot_val": "", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "ssl_ecdh_curve": { - "boot_val": "prime256v1", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "prime256v1", - "setting": "prime256v1", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "ssl_key_file": { - "boot_val": "server.key", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "server.key", - "setting": "server.key", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "ssl_library": { - "boot_val": "OpenSSL", - "context": "internal", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "OpenSSL", - "setting": "OpenSSL", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "ssl_max_protocol_version": { - "boot_val": "", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "ssl_min_protocol_version": { - "boot_val": "TLSv1.2", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "TLSv1.2", - "setting": "TLSv1.2", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "ssl_passphrase_command": { - "boot_val": "", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "ssl_passphrase_command_supports_reload": { - "boot_val": "off", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "ssl_prefer_server_ciphers": { - "boot_val": "on", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "standard_conforming_strings": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "statement_timeout": { - "boot_val": "0", - "context": "user", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "stats_temp_directory": { - "boot_val": "pg_stat_tmp", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "pg_stat_tmp", - "setting": "pg_stat_tmp", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "superuser_reserved_connections": { - "boot_val": "3", - "context": "postmaster", - "max_val": "262143", - "min_val": "0", - "pending_restart": false, - "pretty_val": "3", - "setting": "3", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "synchronize_seqscans": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "synchronous_commit": { - "boot_val": "on", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "synchronous_standby_names": { - "boot_val": "", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "syslog_facility": { - "boot_val": "local0", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "local0", - "setting": "local0", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "syslog_ident": { - "boot_val": "********s", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "********s", - "setting": "********s", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "syslog_sequence_numbers": { - "boot_val": "on", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "syslog_split_messages": { - "boot_val": "on", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "tcp_keepalives_count": { - "boot_val": "0", - "context": "user", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "9", - "setting": "9", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "tcp_keepalives_idle": { - "boot_val": "0", - "context": "user", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "7200", - "setting": "7200", - "sourcefile": "", - "unit": "s", - "vartype": "integer" - }, - "tcp_keepalives_interval": { - "boot_val": "0", - "context": "user", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "75", - "setting": "75", - "sourcefile": "", - "unit": "s", - "vartype": "integer" - }, - "tcp_user_timeout": { - "boot_val": "0", - "context": "user", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "temp_buffers": { - "boot_val": "1024", - "context": "user", - "max_val": "1073741823", - "min_val": "100", - "pending_restart": false, - "pretty_val": "8MB", - "setting": "1024", - "sourcefile": "", - "unit": "8kB", - "val_in_bytes": 8388608, - "vartype": "integer" - }, - "temp_file_limit": { - "boot_val": "-1", - "context": "superuser", - "max_val": "2147483647", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "-1", - "setting": "-1", - "sourcefile": "", - "unit": "kB", - "val_in_bytes": 0, - "vartype": "integer" - }, - "temp_tablespaces": { - "boot_val": "", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "timezone_abbreviations": { - "boot_val": "", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "Default", - "setting": "Default", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "trace_notify": { - "boot_val": "off", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "trace_recovery_messages": { - "boot_val": "log", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "log", - "setting": "log", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "trace_sort": { - "boot_val": "off", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "track_activities": { - "boot_val": "on", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "track_activity_query_size": { - "boot_val": "1024", - "context": "postmaster", - "max_val": "1048576", - "min_val": "100", - "pending_restart": false, - "pretty_val": "1kB", - "setting": "1024", - "sourcefile": "", - "unit": "B", - "vartype": "integer" - }, - "track_commit_timestamp": { - "boot_val": "off", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "track_counts": { - "boot_val": "on", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "track_functions": { - "boot_val": "none", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "none", - "setting": "none", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "track_io_timing": { - "boot_val": "off", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "track_wal_io_timing": { - "boot_val": "off", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "transaction_deferrable": { - "boot_val": "off", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "transaction_isolation": { - "boot_val": "read committed", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "read committed", - "setting": "read committed", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "transaction_read_only": { - "boot_val": "off", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "transform_null_equals": { - "boot_val": "off", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "unix_socket_directories": { - "boot_val": "/var/run/********sql", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "/var/run/********sql", - "setting": "/var/run/********sql", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "unix_socket_group": { - "boot_val": "", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "unix_socket_permissions": { - "boot_val": "511", - "context": "postmaster", - "max_val": "511", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0777", - "setting": "0777", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "update_process_title": { - "boot_val": "on", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "vacuum_cost_delay": { - "boot_val": "0", - "context": "user", - "max_val": "100", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "ms", - "vartype": "real" - }, - "vacuum_cost_limit": { - "boot_val": "200", - "context": "user", - "max_val": "10000", - "min_val": "1", - "pending_restart": false, - "pretty_val": "200", - "setting": "200", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "vacuum_cost_page_dirty": { - "boot_val": "20", - "context": "user", - "max_val": "10000", - "min_val": "0", - "pending_restart": false, - "pretty_val": "20", - "setting": "20", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "vacuum_cost_page_hit": { - "boot_val": "1", - "context": "user", - "max_val": "10000", - "min_val": "0", - "pending_restart": false, - "pretty_val": "1", - "setting": "1", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "vacuum_cost_page_miss": { - "boot_val": "2", - "context": "user", - "max_val": "10000", - "min_val": "0", - "pending_restart": false, - "pretty_val": "2", - "setting": "2", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "vacuum_defer_cleanup_age": { - "boot_val": "0", - "context": "sighup", - "max_val": "1000000", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "vacuum_failsafe_age": { - "boot_val": "1600000000", - "context": "user", - "max_val": "2100000000", - "min_val": "0", - "pending_restart": false, - "pretty_val": "1600000000", - "setting": "1600000000", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "vacuum_freeze_min_age": { - "boot_val": "50000000", - "context": "user", - "max_val": "1000000000", - "min_val": "0", - "pending_restart": false, - "pretty_val": "50000000", - "setting": "50000000", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "vacuum_freeze_table_age": { - "boot_val": "150000000", - "context": "user", - "max_val": "2000000000", - "min_val": "0", - "pending_restart": false, - "pretty_val": "150000000", - "setting": "150000000", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "vacuum_multixact_failsafe_age": { - "boot_val": "1600000000", - "context": "user", - "max_val": "2100000000", - "min_val": "0", - "pending_restart": false, - "pretty_val": "1600000000", - "setting": "1600000000", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "vacuum_multixact_freeze_min_age": { - "boot_val": "5000000", - "context": "user", - "max_val": "1000000000", - "min_val": "0", - "pending_restart": false, - "pretty_val": "5000000", - "setting": "5000000", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "vacuum_multixact_freeze_table_age": { - "boot_val": "150000000", - "context": "user", - "max_val": "2000000000", - "min_val": "0", - "pending_restart": false, - "pretty_val": "150000000", - "setting": "150000000", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "wal_block_size": { - "boot_val": "8192", - "context": "internal", - "max_val": "8192", - "min_val": "8192", - "pending_restart": false, - "pretty_val": "8192", - "setting": "8192", - "sourcefile": "", - "unit": "", - "vartype": "integer" - }, - "wal_buffers": { - "boot_val": "-1", - "context": "postmaster", - "max_val": "262143", - "min_val": "-1", - "pending_restart": false, - "pretty_val": "4MB", - "setting": "512", - "sourcefile": "", - "unit": "8kB", - "val_in_bytes": 4194304, - "vartype": "integer" - }, - "wal_compression": { - "boot_val": "off", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "wal_consistency_checking": { - "boot_val": "", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "", - "setting": "", - "sourcefile": "", - "unit": "", - "vartype": "string" - }, - "wal_init_zero": { - "boot_val": "on", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "wal_keep_size": { - "boot_val": "0", - "context": "sighup", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "0", - "setting": "0", - "sourcefile": "", - "unit": "MB", - "val_in_bytes": 0, - "vartype": "integer" - }, - "wal_level": { - "boot_val": "replica", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "replica", - "setting": "replica", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "wal_log_hints": { - "boot_val": "off", - "context": "postmaster", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "wal_receiver_create_temp_slot": { - "boot_val": "off", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "wal_receiver_status_interval": { - "boot_val": "10", - "context": "sighup", - "max_val": "2147483", - "min_val": "0", - "pending_restart": false, - "pretty_val": "10s", - "setting": "10", - "sourcefile": "", - "unit": "s", - "vartype": "integer" - }, - "wal_receiver_timeout": { - "boot_val": "60000", - "context": "sighup", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "1min", - "setting": "60000", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "wal_recycle": { - "boot_val": "on", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "on", - "setting": "on", - "sourcefile": "", - "unit": "", - "vartype": "bool" - }, - "wal_retrieve_retry_interval": { - "boot_val": "5000", - "context": "sighup", - "max_val": "2147483647", - "min_val": "1", - "pending_restart": false, - "pretty_val": "5s", - "setting": "5000", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "wal_segment_size": { - "boot_val": "16777216", - "context": "internal", - "max_val": "1073741824", - "min_val": "1048576", - "pending_restart": false, - "pretty_val": "16MB", - "setting": "16777216", - "sourcefile": "", - "unit": "B", - "vartype": "integer" - }, - "wal_sender_timeout": { - "boot_val": "60000", - "context": "user", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "1min", - "setting": "60000", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "wal_skip_threshold": { - "boot_val": "2048", - "context": "user", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "2MB", - "setting": "2048", - "sourcefile": "", - "unit": "kB", - "val_in_bytes": 2097152, - "vartype": "integer" - }, - "wal_sync_method": { - "boot_val": "fdatasync", - "context": "sighup", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "fdatasync", - "setting": "fdatasync", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "wal_writer_delay": { - "boot_val": "200", - "context": "sighup", - "max_val": "10000", - "min_val": "1", - "pending_restart": false, - "pretty_val": "200ms", - "setting": "200", - "sourcefile": "", - "unit": "ms", - "vartype": "integer" - }, - "wal_writer_flush_after": { - "boot_val": "128", - "context": "sighup", - "max_val": "2147483647", - "min_val": "0", - "pending_restart": false, - "pretty_val": "1MB", - "setting": "128", - "sourcefile": "", - "unit": "8kB", - "val_in_bytes": 1048576, - "vartype": "integer" - }, - "work_mem": { - "boot_val": "4096", - "context": "user", - "max_val": "2147483647", - "min_val": "64", - "pending_restart": false, - "pretty_val": "4MB", - "setting": "4096", - "sourcefile": "", - "unit": "kB", - "val_in_bytes": 4194304, - "vartype": "integer" - }, - "xmlbinary": { - "boot_val": "base64", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "base64", - "setting": "base64", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "xmloption": { - "boot_val": "content", - "context": "user", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "content", - "setting": "content", - "sourcefile": "", - "unit": "", - "vartype": "enum" - }, - "zero_damaged_pages": { - "boot_val": "off", - "context": "superuser", - "max_val": "", - "min_val": "", - "pending_restart": false, - "pretty_val": "off", - "setting": "off", - "sourcefile": "", - "unit": "", - "vartype": "bool" - } - }, - "tablespaces": { - "pg_default": { - "spcacl": "", - "spcoptions": [], - "spcowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - }, - "pg_global": { - "spcacl": "", - "spcoptions": [], - "spcowner": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" - } - }, - "version": { - "full": "14.5", - "major": 14, - "minor": 5, - "raw": "PostgreSQL 14.5 (Debian 14.5-1.pgdg110+1) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit" - } - } -} - diff --git a/apps/assets/automations/gather_facts/database/postgresql/main.yml b/apps/assets/automations/gather_facts/database/postgresql/main.yml index 6af98366b..55731a4fa 100644 --- a/apps/assets/automations/gather_facts/database/postgresql/main.yml +++ b/apps/assets/automations/gather_facts/database/postgresql/main.yml @@ -2,19 +2,9 @@ gather_facts: no vars: ansible_python_interpreter: /usr/local/bin/python - jms_account: - username: postgre - secret: postgre - jms_asset: - address: 127.0.0.1 - port: 5432 - database: testdb - account: - username: test - secret: jumpserver tasks: - - name: Test PostgreSQL connection + - name: Get info community.postgresql.postgresql_info: login_user: "{{ jms_account.username }}" login_password: "{{ jms_account.secret }}" @@ -23,6 +13,10 @@ login_db: "{{ jms_asset.database }}" register: db_info - - name: Debug it - debug: - var: db_info + - name: Define Postgresql info by set_fact + set_fact: + info: + version: "{{ db_info.server_version.raw }}" + + - debug: + var: info diff --git a/apps/assets/automations/gather_facts/database/sqlserver/main.yml b/apps/assets/automations/gather_facts/database/sqlserver/main.yml deleted file mode 100644 index 8e75f0102..000000000 --- a/apps/assets/automations/gather_facts/database/sqlserver/main.yml +++ /dev/null @@ -1,10 +0,0 @@ -{% for account in accounts %} -- hosts: {{ account.asset.name }} - vars: - account: - username: {{ account.username }} - password: {{ account.password }} - public_key: {{ account.public_key }} - roles: - - change_secret -{% endfor %} diff --git a/apps/assets/automations/gather_facts/database/sqlserver/manifest.yml b/apps/assets/automations/gather_facts/database/sqlserver/manifest.yml deleted file mode 100644 index 3c4c82de4..000000000 --- a/apps/assets/automations/gather_facts/database/sqlserver/manifest.yml +++ /dev/null @@ -1,8 +0,0 @@ -id: gather_facts_sqlserver -name: Change password for SQLServer -version: 1 -category: database -type: - - sqlserver -method: gather_facts - diff --git a/apps/assets/automations/gather_facts/database/sqlserver/roles/change_password/tasks/main.yml b/apps/assets/automations/gather_facts/database/sqlserver/roles/change_password/tasks/main.yml deleted file mode 100644 index cb6480235..000000000 --- a/apps/assets/automations/gather_facts/database/sqlserver/roles/change_password/tasks/main.yml +++ /dev/null @@ -1,27 +0,0 @@ -- name: ping - ansible.builtin.ping: - -#- name: print variables -# debug: -# msg: "Username: {{ account.username }}, Password: {{ account.password }}" - -- name: Change password - user: - name: "{{ account.username }}" - password: "{{ account.password | password_hash('des') }}" - update_password: always - when: account.password - -- name: Change public key - authorized_key: - user: "{{ account.username }}" - key: "{{ account.public_key }}" - state: present - when: account.public_key - -- name: Verify password - ansible.builtin.ping: - vars: - ansible_user: "{{ account.username }}" - ansible_pass: "{{ account.password }}" - ansible_ssh_connection: paramiko diff --git a/apps/assets/automations/gather_facts/manager.py b/apps/assets/automations/gather_facts/manager.py index a2072b138..bbc3f9add 100644 --- a/apps/assets/automations/gather_facts/manager.py +++ b/apps/assets/automations/gather_facts/manager.py @@ -1,4 +1,5 @@ from common.utils import get_logger +from assets.const import AutomationTypes from ..base.manager import BasePlaybookManager logger = get_logger(__name__) @@ -11,7 +12,7 @@ class GatherFactsManager(BasePlaybookManager): @classmethod def method_type(cls): - return 'gather_facts' + return AutomationTypes.gather_facts def host_callback(self, host, asset=None, **kwargs): super().host_callback(host, asset=asset, **kwargs) @@ -19,14 +20,10 @@ class GatherFactsManager(BasePlaybookManager): return host def on_host_success(self, host, result): - info = result.get('Get info', {}).get('res', {}).get('ansible_facts', {}).get('info', {}) + info = result.get('debug', {}).get('res', {}).get('info', {}) asset = self.host_asset_mapper.get(host) if asset and info: asset.info = info asset.save() else: logger.error("Not found info, task name must be 'Get info': {}".format(host)) - - - - diff --git a/apps/assets/models/automations/base.py b/apps/assets/models/automations/base.py index 904b98717..1f9e1ac04 100644 --- a/apps/assets/models/automations/base.py +++ b/apps/assets/models/automations/base.py @@ -9,6 +9,7 @@ from common.db.fields import EncryptJsonDictTextField from orgs.mixins.models import OrgModelMixin from ops.mixin import PeriodTaskModelMixin from assets.models import Node, Asset +from assets.tasks import execute_automation class BaseAutomation(CommonModelMixin, PeriodTaskModelMixin, OrgModelMixin): @@ -38,7 +39,11 @@ class BaseAutomation(CommonModelMixin, PeriodTaskModelMixin, OrgModelMixin): return assets.group_by_platform() def get_register_task(self): - raise NotImplementedError + name = f"automation_{self.type}_strategy_period_{str(self.id)[:8]}" + task = execute_automation.name + args = (str(self.id), Trigger.timing, self._meta.model) + kwargs = {} + return name, task, args, kwargs def get_many_to_many_ids(self, field: str): return [str(i) for i in getattr(self, field).all().values_list('id', flat=True)] diff --git a/apps/assets/models/automations/change_secret.py b/apps/assets/models/automations/change_secret.py index 5624caf1f..ef20e27b0 100644 --- a/apps/assets/models/automations/change_secret.py +++ b/apps/assets/models/automations/change_secret.py @@ -4,7 +4,6 @@ from django.utils.translation import ugettext_lazy as _ from common.db import fields from common.const.choices import Trigger from common.db.models import JMSBaseModel -from assets.tasks import execute_change_secret_automation from assets.const import AutomationTypes, SecretType, SecretStrategy, SSHKeyStrategy from .base import BaseAutomation @@ -35,13 +34,6 @@ class ChangeSecretAutomation(BaseAutomation): class Meta: verbose_name = _("Change secret automation") - def get_register_task(self): - name = "automation_change_secret_strategy_period_{}".format(str(self.id)[:8]) - task = execute_change_secret_automation.name - args = (str(self.id), Trigger.timing) - kwargs = {} - return name, task, args, kwargs - def to_attr_json(self): attr_json = super().to_attr_json() attr_json.update({ diff --git a/apps/assets/models/automations/gather_facts.py b/apps/assets/models/automations/gather_facts.py index 251e63944..1641c9f81 100644 --- a/apps/assets/models/automations/gather_facts.py +++ b/apps/assets/models/automations/gather_facts.py @@ -1,16 +1,15 @@ from django.utils.translation import ugettext_lazy as _ +from assets.const import AutomationTypes from .base import BaseAutomation - __all__ = ['GatherFactsAutomation'] class GatherFactsAutomation(BaseAutomation): - class Meta: - verbose_name = _("Gather asset facts") - def save(self, *args, **kwargs): - self.type = 'gather_facts' + self.type = AutomationTypes.gather_facts super().save(*args, **kwargs) + class Meta: + verbose_name = _("Gather asset facts") diff --git a/apps/assets/tasks/automation.py b/apps/assets/tasks/automation.py index 0859381a8..f3484d3e9 100644 --- a/apps/assets/tasks/automation.py +++ b/apps/assets/tasks/automation.py @@ -7,12 +7,11 @@ logger = get_logger(__file__) @shared_task -def execute_change_secret_automation(pid, trigger): - from assets.models import ChangeSecretAutomation +def execute_automation(pid, trigger, mode): with tmp_to_root_org(): - instance = get_object_or_none(ChangeSecretAutomation, pk=pid) + instance = get_object_or_none(mode, pk=pid) if not instance: - logger.error("No automation plan found: {}".format(pid)) + logger.error("No automation task found: {}".format(pid)) return with tmp_to_org(instance.org): instance.execute(trigger) diff --git a/apps/ops/mixin.py b/apps/ops/mixin.py index 7c0b473ec..74b946ea1 100644 --- a/apps/ops/mixin.py +++ b/apps/ops/mixin.py @@ -1,10 +1,8 @@ # -*- coding: utf-8 -*- # import abc -import uuid from django.utils.translation import ugettext_lazy as _ from django.db import models -from django import forms from rest_framework import serializers from .celery.utils import ( From 11eb505c785b85200ae0f1ca31813160951534ef Mon Sep 17 00:00:00 2001 From: "Jiangjie.Bai" Date: Tue, 25 Oct 2022 19:10:12 +0800 Subject: [PATCH 3/4] =?UTF-8?q?refactor:=20=E4=BF=AE=E6=94=B9=20Connection?= =?UTF-8?q?Token=20=E8=A1=A8=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migrations/0013_auto_20221025_1908.py | 29 +++++++++++++++++++ apps/authentication/models.py | 13 ++++----- 2 files changed, 34 insertions(+), 8 deletions(-) create mode 100644 apps/authentication/migrations/0013_auto_20221025_1908.py diff --git a/apps/authentication/migrations/0013_auto_20221025_1908.py b/apps/authentication/migrations/0013_auto_20221025_1908.py new file mode 100644 index 000000000..17556e60c --- /dev/null +++ b/apps/authentication/migrations/0013_auto_20221025_1908.py @@ -0,0 +1,29 @@ +# Generated by Django 3.2.14 on 2022-10-25 11:08 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0111_alter_changesecretautomation_secret_strategy'), + ('authentication', '0012_auto_20220816_1629'), + ] + + operations = [ + migrations.RemoveField( + model_name='connectiontoken', + name='type', + ), + migrations.AddField( + model_name='connectiontoken', + name='account_display', + field=models.CharField(default='', max_length=128, verbose_name='Account display'), + ), + migrations.AlterField( + model_name='connectiontoken', + name='account', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='connection_tokens', to='assets.account', verbose_name='Account'), + ), + ] diff --git a/apps/authentication/models.py b/apps/authentication/models.py index ea4dbb5ff..642443e02 100644 --- a/apps/authentication/models.py +++ b/apps/authentication/models.py @@ -63,13 +63,6 @@ def date_expired_default(): class ConnectionToken(OrgModelMixin, JMSBaseModel): - class Type(models.TextChoices): - asset = 'asset', _('Asset') - application = 'application', _('Application') - - type = models.CharField( - max_length=16, default=Type.asset, choices=Type.choices, verbose_name=_("Type") - ) secret = models.CharField(max_length=64, default='', verbose_name=_("Secret")) date_expired = models.DateTimeField( default=date_expired_default, verbose_name=_("Date expired") @@ -85,7 +78,11 @@ class ConnectionToken(OrgModelMixin, JMSBaseModel): related_name='connection_tokens', null=True, blank=True ) asset_display = models.CharField(max_length=128, default='', verbose_name=_("Asset display")) - account = models.CharField(max_length=128, default='', verbose_name=_("Account")) + account = models.ForeignKey( + 'assets.Account', on_delete=models.SET_NULL, verbose_name=_('Account'), + related_name='connection_tokens', null=True, blank=True + ) + account_display = models.CharField(max_length=128, default='', verbose_name=_("Account display")) class Meta: ordering = ('-date_expired',) From 82aca6b843fe0ccbf78ec406854755be010401ee Mon Sep 17 00:00:00 2001 From: ibuler Date: Tue, 25 Oct 2022 19:31:13 +0800 Subject: [PATCH 4/4] =?UTF-8?q?pref:=20=E4=BF=AE=E6=94=B9=20applet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/serializers/asset/common.py | 2 + apps/common/utils/lock.py | 30 +++++------ apps/orgs/utils.py | 15 ++++++ apps/terminal/api/applet/applet.py | 31 ++++++++--- apps/terminal/api/applet/host.py | 13 +++++ .../migrations/0054_auto_20221024_1452.py | 2 +- apps/terminal/models/applet/applet.py | 31 +++-------- apps/terminal/serializers/applet.py | 52 +++++++++++++++---- 8 files changed, 118 insertions(+), 58 deletions(-) diff --git a/apps/assets/serializers/asset/common.py b/apps/assets/serializers/asset/common.py index 8690b6c10..b6204e843 100644 --- a/apps/assets/serializers/asset/common.py +++ b/apps/assets/serializers/asset/common.py @@ -107,6 +107,8 @@ class AssetSerializer(OrgResourceSerializerMixin, WritableNestedModelSerializer) return nodes_to_set = [] for full_value in nodes_display: + if not full_value.startswith('/'): + full_value = '/' + instance.org.name + '/' + full_value node = Node.objects.filter(full_value=full_value).first() if node: nodes_to_set.append(node) diff --git a/apps/common/utils/lock.py b/apps/common/utils/lock.py index a14fe1184..773647725 100644 --- a/apps/common/utils/lock.py +++ b/apps/common/utils/lock.py @@ -76,7 +76,6 @@ class DistributedLock(RedisLock): # 要创建一个新的锁对象 with self.__class__(**self.kwargs_copy): return func(*args, **kwds) - return inner @classmethod @@ -105,22 +104,21 @@ class DistributedLock(RedisLock): if self._reentrant: if self.locked_by_current_thread(): self._acquired_reentrant_lock = True - logger.debug(f'Reentry lock ok: lock_id={self.id} owner_id={self.get_owner_id()} lock={self.name} thread={self._thread_id}') + logger.debug(f'Reentry lock ok: lock_id={self.id} owner_id={self.get_owner_id()} lock={self.name}') return True - logger.debug(f'Attempt acquire reentrant-lock: lock_id={self.id} lock={self.name} thread={self._thread_id}') + logger.debug(f'Attempt acquire reentrant-lock: lock_id={self.id} lock={self.name}') acquired = super().acquire(blocking=blocking, timeout=timeout) if acquired: - logger.debug(f'Acquired reentrant-lock ok: lock_id={self.id} lock={self.name} thread={self._thread_id}') + logger.debug(f'Acquired reentrant-lock ok: lock_id={self.id} lock={self.name}') setattr(thread_local, self.name, self.id) else: - logger.debug( - f'Acquired reentrant-lock failed: lock_id={self.id} lock={self.name} thread={self._thread_id}') + logger.debug(f'Acquired reentrant-lock failed: lock_id={self.id} lock={self.name}') return acquired else: - logger.debug(f'Attempt acquire lock: lock_id={self.id} lock={self.name} thread={self._thread_id}') + logger.debug(f'Attempt acquire lock: lock_id={self.id} lock={self.name}') acquired = super().acquire(blocking=blocking, timeout=timeout) - logger.debug(f'Acquired lock: ok={acquired} lock_id={self.id} lock={self.name} thread={self._thread_id}') + logger.debug(f'Acquired lock: ok={acquired} lock_id={self.id} lock={self.name}') return acquired @property @@ -139,17 +137,17 @@ class DistributedLock(RedisLock): def _release_on_reentrant_locked_by_brother(self): if self._acquired_reentrant_lock: self._acquired_reentrant_lock = False - logger.debug(f'Released reentrant-lock: lock_id={self.id} owner_id={self.get_owner_id()} lock={self.name} thread={self._thread_id}') + logger.debug(f'Released reentrant-lock: lock_id={self.id} owner_id={self.get_owner_id()} lock={self.name}') return else: - self._raise_exc_with_log(f'Reentrant-lock is not acquired: lock_id={self.id} owner_id={self.get_owner_id()} lock={self.name} thread={self._thread_id}') + self._raise_exc_with_log(f'Reentrant-lock is not acquired: lock_id={self.id} owner_id={self.get_owner_id()} lock={self.name}') def _release_on_reentrant_locked_by_me(self): - logger.debug(f'Release reentrant-lock locked by me: lock_id={self.id} lock={self.name} thread={self._thread_id}') + logger.debug(f'Release reentrant-lock locked by me: lock_id={self.id} lock={self.name}') id = getattr(thread_local, self.name, None) if id != self.id: - raise PermissionError(f'Reentrant-lock is not locked by me: lock_id={self.id} owner_id={self.get_owner_id()} lock={self.name} thread={self._thread_id}') + raise PermissionError(f'Reentrant-lock is not locked by me: lock_id={self.id} owner_id={self.get_owner_id()} lock={self.name}') try: # 这里要保证先删除 thread_local 的标记, delattr(thread_local, self.name) @@ -171,9 +169,9 @@ class DistributedLock(RedisLock): def _release(self): try: self._release_redis_lock() - logger.debug(f'Released lock: lock_id={self.id} lock={self.name} thread={self._thread_id}') + logger.debug(f'Released lock: lock_id={self.id} lock={self.name}') except NotAcquired as e: - logger.error(f'Release lock failed: lock_id={self.id} lock={self.name} thread={self._thread_id} error: {e}') + logger.error(f'Release lock failed: lock_id={self.id} lock={self.name} error: {e}') self._raise_exc(e) def release(self): @@ -188,12 +186,12 @@ class DistributedLock(RedisLock): _release = self._release_on_reentrant_locked_by_brother else: self._raise_exc_with_log( - f'Reentrant-lock is not acquired: lock_id={self.id} lock={self.name} thread={self._thread_id}') + f'Reentrant-lock is not acquired: lock_id={self.id} lock={self.name}') # 处理是否在事务提交时才释放锁 if self._release_on_transaction_commit: logger.debug( - f'Release lock on transaction commit ... :lock_id={self.id} lock={self.name} thread={self._thread_id}') + f'Release lock on transaction commit ... :lock_id={self.id} lock={self.name}') transaction.on_commit(_release) else: _release() diff --git a/apps/orgs/utils.py b/apps/orgs/utils.py index 29b1f03e9..0ea4085e7 100644 --- a/apps/orgs/utils.py +++ b/apps/orgs/utils.py @@ -88,6 +88,21 @@ def tmp_to_org(org): set_current_org(ori_org) +@contextmanager +def tmp_to_builtin_org(system=0, default=0): + if system: + org_id = Organization.SYSTEM_ID + elif default: + org_id = Organization.DEFAULT_ID + else: + raise ValueError("Must set system or default") + ori_org = get_current_org() + set_current_org(org_id) + yield + if ori_org is not None: + set_current_org(ori_org) + + def get_org_filters(): kwargs = {} diff --git a/apps/terminal/api/applet/applet.py b/apps/terminal/api/applet/applet.py index 5d683fa7b..9ded63dc1 100644 --- a/apps/terminal/api/applet/applet.py +++ b/apps/terminal/api/applet/applet.py @@ -1,12 +1,13 @@ import os.path import shutil import zipfile - import yaml + from django.core.files.storage import default_storage from rest_framework import viewsets from rest_framework.decorators import action from rest_framework.response import Response +from rest_framework.serializers import ValidationError from terminal import serializers, models from terminal.serializers import AppletUploadSerializer @@ -19,9 +20,16 @@ class AppletViewSet(viewsets.ModelViewSet): 'upload': 'terminal.add_applet', } - @action(detail=False, methods=['post'], serializer_class=AppletUploadSerializer) - def upload(self, request, *args, **kwargs): - serializer = self.get_serializer(data=request.data) + def perform_destroy(self, instance): + if not instance.name: + raise ValidationError('Applet is not null') + path = default_storage.path('applets/{}'.format(instance.name)) + if os.path.exists(path): + shutil.rmtree(path) + instance.delete() + + def extract_and_check_file(self, request): + serializer = self.get_serializer(data=self.request.data) serializer.is_valid(raise_exception=True) file = serializer.validated_data['file'] @@ -29,13 +37,11 @@ class AppletViewSet(viewsets.ModelViewSet): if default_storage.exists(save_to): default_storage.delete(save_to) rel_path = default_storage.save(save_to, file) - path = default_storage.path(rel_path) extract_to = default_storage.path('applets/{}.tmp'.format(file.name)) if os.path.exists(extract_to): shutil.rmtree(extract_to) - update = request.query_params.get('update') with zipfile.ZipFile(path) as zp: if zp.testzip() is not None: return Response({'msg': 'Invalid Zip file'}, status=400) @@ -46,12 +52,21 @@ class AppletViewSet(viewsets.ModelViewSet): for name in files: path = os.path.join(tmp_dir, name) if not os.path.exists(path): - return Response({'error': 'Missing file: {}'.format(path)}, status=400) + raise ValidationError({'error': 'Missing file {}'.format(name)}) with open(os.path.join(tmp_dir, 'manifest.yml')) as f: manifest = yaml.safe_load(f) - name = manifest.get('name', '') + if not manifest.get('name', ''): + raise ValidationError({'error': 'Missing name in manifest.yml'}) + return manifest, tmp_dir + + @action(detail=False, methods=['post'], serializer_class=AppletUploadSerializer) + def upload(self, request, *args, **kwargs): + manifest, tmp_dir = self.extract_and_check_file(request) + name = manifest['name'] + update = request.query_params.get('update') + instance = models.Applet.objects.filter(name=name).first() if instance and not update: return Response({'error': 'Applet already exists: {}'.format(name)}, status=400) diff --git a/apps/terminal/api/applet/host.py b/apps/terminal/api/applet/host.py index c3c301e30..09de7dbff 100644 --- a/apps/terminal/api/applet/host.py +++ b/apps/terminal/api/applet/host.py @@ -1,5 +1,9 @@ from rest_framework import viewsets +from rest_framework.decorators import action +from orgs.utils import tmp_to_root_org +from orgs.models import Organization +from assets.models import Host from terminal import serializers, models __all__ = ['AppletHostViewSet', 'AppletHostDeploymentViewSet'] @@ -9,6 +13,15 @@ class AppletHostViewSet(viewsets.ModelViewSet): queryset = models.AppletHost.objects.all() serializer_class = serializers.AppletHostSerializer + @action(methods=['get'], detail=False) + def hosts(self, request): + with tmp_to_root_org(): + kwargs = { + 'platform__name': 'RemoteAppHost', + 'org_id': Organization.SYSTEM_ID + } + return Host.objects.filter(**kwargs) + class AppletHostDeploymentViewSet(viewsets.ModelViewSet): queryset = models.AppletHostDeployment.objects.all() diff --git a/apps/terminal/migrations/0054_auto_20221024_1452.py b/apps/terminal/migrations/0054_auto_20221024_1452.py index 3ee883a8b..687730158 100644 --- a/apps/terminal/migrations/0054_auto_20221024_1452.py +++ b/apps/terminal/migrations/0054_auto_20221024_1452.py @@ -22,10 +22,10 @@ class Migration(migrations.Migration): ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), ('name', models.CharField(max_length=128, unique=True, verbose_name='Name')), + ('display_name', models.CharField(max_length=128, unique=True, verbose_name='Display name')), ('version', models.CharField(max_length=16, verbose_name='Version')), ('author', models.CharField(max_length=128, verbose_name='Author')), ('type', models.CharField(choices=[('general', 'General'), ('web', 'Web')], default='general', max_length=16, verbose_name='Type')), - ('path', models.FilePathField(verbose_name='Path')), ('vcs_type', models.CharField(max_length=16, null=True, verbose_name='VCS type')), ('vcs_url', models.CharField(max_length=256, null=True, verbose_name='URL')), ('protocols', models.JSONField(default=list, verbose_name='Protocol')), diff --git a/apps/terminal/models/applet/applet.py b/apps/terminal/models/applet/applet.py index 510d8da35..3e06a5fe9 100644 --- a/apps/terminal/models/applet/applet.py +++ b/apps/terminal/models/applet/applet.py @@ -1,7 +1,8 @@ import yaml import os.path -from rest_framework.exceptions import ValidationError +from django.conf import settings +from django.core.files.storage import default_storage from django.db import models from django.utils.translation import gettext_lazy as _ @@ -22,9 +23,9 @@ class Applet(JMSBaseModel): archive = 'archive', _('Remote gzip') name = models.CharField(max_length=128, verbose_name=_('Name'), unique=True) + display_name = models.CharField(max_length=128, verbose_name=_('Display name')) version = models.CharField(max_length=16, verbose_name=_('Version')) author = models.CharField(max_length=128, verbose_name=_('Author')) - path = models.FilePathField(verbose_name=_('Path')) type = models.CharField(max_length=16, verbose_name=_('Type'), default='general', choices=Type.choices) vcs_type = models.CharField(max_length=16, verbose_name=_('VCS type'), null=True) vcs_url = models.CharField(max_length=256, verbose_name=_('URL'), null=True) @@ -35,6 +36,10 @@ class Applet(JMSBaseModel): def __str__(self): return self.name + @property + def path(self): + return default_storage.path('applets/{}'.format(self.name)) + @property def manifest(self): path = os.path.join(self.path, 'manifest.yml') @@ -48,27 +53,7 @@ class Applet(JMSBaseModel): path = os.path.join(self.path, 'icon.png') if not os.path.exists(path): return None - with open(path, 'rb') as f: - return f.read() - - @classmethod - def validate_manifest(cls, manifest): - fields = ['name', 'display_name', 'version', 'author', 'type', 'tags', 'protocols'] - for field in fields: - if field not in manifest: - raise ValidationError(f'Missing field {field}') - if manifest['type'] not in [i[0] for i in cls.Type.choices]: - raise ValidationError('Invalid type') - if not isinstance(manifest['protocols'], list): - raise ValidationError('Invalid protocols') - - @classmethod - def create_by_manifest(cls, manifest): - obj = cls() - for k, v in manifest.items(): - setattr(obj, k, v) - obj.save() - return obj + return os.path.join(settings.MEDIA_URL, 'applets', self.name, 'icon.png') class AppletPublication(JMSBaseModel): diff --git a/apps/terminal/serializers/applet.py b/apps/terminal/serializers/applet.py index 3f3919776..25259b402 100644 --- a/apps/terminal/serializers/applet.py +++ b/apps/terminal/serializers/applet.py @@ -1,7 +1,10 @@ from rest_framework import serializers +from django.utils.translation import gettext_lazy as _ -from common.drf.fields import ObjectRelatedField -from assets.models import Host +from common.drf.fields import ObjectRelatedField, LabeledChoiceField +from assets.models import Host, Platform +from assets.serializers import HostSerializer +from orgs.utils import tmp_to_builtin_org from ..models import Applet, AppletPublication, AppletHost, AppletHostDeployment @@ -13,14 +16,18 @@ __all__ = [ class AppletSerializer(serializers.ModelSerializer): + icon = serializers.ReadOnlyField(label=_("Icon")) + type = LabeledChoiceField(choices=Applet.Type.choices, label=_("Type")) + class Meta: model = Applet - fields_mini = ['id', 'name'] + fields_mini = ['id', 'name', 'display_name'] read_only_fields = [ - 'date_created', 'date_updated' + 'icon', 'date_created', 'date_updated' ] fields = fields_mini + [ - 'version', 'author', 'type', 'protocols', 'comment' + 'version', 'author', 'type', 'protocols', + 'tags', 'comment' ] + read_only_fields @@ -42,15 +49,40 @@ class AppletPublicationSerializer(serializers.ModelSerializer): class AppletHostSerializer(serializers.ModelSerializer): - host = ObjectRelatedField(queryset=Host.objects.all()) + host = HostSerializer(allow_null=True, required=False) class Meta: model = AppletHost fields_mini = ['id', 'host'] - read_only_fields = ['date_created', 'date_updated'] - fields = fields_mini + [ - 'comment', 'account_automation', 'date_synced', 'status', - ] + read_only_fields + read_only_fields = ['date_synced', 'status', 'date_created', 'date_updated'] + fields = fields_mini + ['comment', 'account_automation'] + read_only_fields + + def __init__(self, *args, **kwargs): + self.host_data = kwargs.get('data', {}).pop('host', {}) + super().__init__(*args, **kwargs) + + def _create_host(self): + platform = Platform.objects.get(name='RemoteAppHost') + data = { + **self.host_data, + 'platform': platform.id, + 'nodes_display': [ + 'RemoteAppHosts' + ] + } + serializer = HostSerializer(data=data) + try: + serializer.is_valid(raise_exception=True) + except serializers.ValidationError: + raise serializers.ValidationError({'host': serializer.errors}) + host = serializer.save() + return host + + def create(self, validated_data): + with tmp_to_builtin_org(system=1): + host = self._create_host() + instance = super().create({**validated_data, 'host': host}) + return instance class AppletHostDeploymentSerializer(serializers.ModelSerializer):