generate_config.py 3.3 KB
Newer Older
R
Rongfeng Fu 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
# coding: utf-8
# OceanBase Deploy.
# Copyright (C) 2021 OceanBase
#
# This file is part of OceanBase Deploy.
#
# OceanBase Deploy is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OceanBase Deploy is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OceanBase Deploy.  If not, see <https://www.gnu.org/licenses/>.


from __future__ import absolute_import, division, print_function

R
Rongfeng Fu 已提交
23
from tool import ConfigUtil
R
Rongfeng Fu 已提交
24

R
Rongfeng Fu 已提交
25 26

def generate_config(plugin_context, auto_depend=False,  generate_config_mini=False, return_generate_keys=False, only_generate_password=False, *args, **kwargs):
R
Rongfeng Fu 已提交
27
    if return_generate_keys:
R
Rongfeng Fu 已提交
28 29 30 31
        generate_keys = ['system_password']
        if not only_generate_password:
            generate_keys += ['memory_size', 'log_dir', 'logging_file_max_history']
        return plugin_context.return_true(generate_keys=generate_keys)
R
Rongfeng Fu 已提交
32 33

    cluster_config = plugin_context.cluster_config
R
Rongfeng Fu 已提交
34 35 36 37
    generate_random_password(cluster_config)
    if only_generate_password:
        return plugin_context.return_true()

R
Rongfeng Fu 已提交
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
    stdio = plugin_context.stdio
    depend_comps = [['obagent'], ['oceanbase', 'oceanbase-ce'], ['obproxy', 'obproxy-ce']]
    generate_configs = {'global': {}}
    plugin_context.set_variable('generate_configs', generate_configs)
    stdio.start_loading('Generate ocp express configuration')
    min_memory_size = '752M'

    if auto_depend:
        for comps in depend_comps:
            for comp in comps:
                if cluster_config.add_depend_component(comp):
                    break
    global_config = cluster_config.get_global_conf()
    if generate_config_mini:
        if 'memory_size' not in global_config:
            cluster_config.update_global_conf('memory_size', min_memory_size)

    auto_set_memory = False
    if 'memory_size' not in global_config:
        for server in cluster_config.servers:
            server_config = cluster_config.get_server_conf(server)
            if 'memory_size' not in server_config:
                auto_set_memory = True
    if auto_set_memory:
        observer_num = 0
        for comp in ['oceanbase', 'oceanbase-ce']:
            if comp in cluster_config.depends:
                observer_num = len(cluster_config.get_depend_servers(comp))
        if not observer_num:
            stdio.warn('The component oceanbase/oceanbase-ce is not in the depends, the memory size cannot be calculated, and a fixed value of {} is used'.format(min_memory_size))
            cluster_config.update_global_conf('memory_size', min_memory_size)
        else:
            cluster_config.update_global_conf('memory_size', '%dM' % (512 + (observer_num + 3) * 60))

    stdio.stop_loading('succeed')
R
Rongfeng Fu 已提交
73 74 75 76 77 78 79
    plugin_context.return_true()


def generate_random_password(cluster_config):
    global_config = cluster_config.get_original_global_conf()
    if 'system_password' not in global_config:
        cluster_config.update_global_conf('system_password', ConfigUtil.get_random_pwd_by_total_length())