docker

Форк
0
/
tarantool_set_config.lua 
132 строки · 3.3 Кб
1
#!/usr/bin/env tarantool
2

3
local CONSOLE_SOCKET_PATH = 'unix/:/var/run/tarantool/tarantool.sock'
4
local CFG_FILE_PATH = '/etc/tarantool/config.yml'
5

6
local yaml = require('yaml')
7
local console = require('console')
8
local errno = require('errno')
9

10
local function read_config()
11
    local f = io.open(CFG_FILE_PATH, "rb")
12
    if f == nil then
13
        print("Can't open " .. CFG_FILE_PATH ..": ", errno.strerror())
14
        os.exit(1)
15
    end
16
    local content = f:read("*all")
17
    f:close()
18
    return yaml.decode(content)
19
end
20

21
local function write_config(cfg)
22
    local f = io.open(CFG_FILE_PATH, "w+")
23
    if f == nil then
24
        print("Can't open " .. CFG_FILE_PATH ..": ", errno.strerror())
25
        os.exit(1)
26
    end
27
    local content = yaml.encode(cfg)
28
    f:write(content)
29
    f:close()
30
end
31

32
local function nop(console, cfg, value)
33
end
34

35
local function update_replication_source(console, cfg, value)
36
    local user_name = "nil"
37
    if cfg['TARANTOOL_USER_NAME'] then
38
        user_name = "'" .. cfg['TARANTOOL_USER_NAME'] .. "'"
39
    end
40

41
    local user_password = "nil"
42
    if cfg['TARANTOOL_USER_PASSWORD'] then
43
        user_password = "'" .. cfg['TARANTOOL_USER_PASSWORD'] .. "'"
44
    end
45

46
    local cmd = "set_replication_source('"..value.."', " .. user_name .. "," .. user_password .. ")"
47
    print("cmd: ", cmd)
48

49
    local res = console:eval(cmd)
50

51
    if res ~= nil then
52
        print(res)
53
    end
54
end
55

56
local function update_credentials(console, cfg, value)
57
    local user_name = "nil"
58
    if cfg['TARANTOOL_USER_NAME'] then
59
        user_name = "'" .. cfg['TARANTOOL_USER_NAME'] .. "'"
60
    end
61

62
    local user_password = "nil"
63
    if cfg['TARANTOOL_USER_PASSWORD'] then
64
        user_password = "'" .. cfg['TARANTOOL_USER_PASSWORD'] .. "'"
65
    end
66

67
    local cmd = "set_credentials(" .. user_name .. "," .. user_password .. ")"
68

69
    local res = console:eval(cmd)
70

71
    if res ~= nil then
72
        print(res)
73
    end
74

75
    local replication_source = cfg['TARANTOOL_REPLICATION_SOURCE']
76

77
    if replication_source ~= nil then
78
        update_replication_source(console, cfg, replication_source)
79
    end
80
end
81

82

83
local vars = {
84
    TARANTOOL_SLAB_ALLOC_ARENA=nop,
85
    TARANTOOL_SLAB_ALLOC_FACTOR=nop,
86
    TARANTOOL_SLAB_ALLOC_MAXIMAL=nop,
87
    TARANTOOL_SLAB_ALLOC_MINIMAL=nop,
88
    TARANTOOL_PORT=nop,
89
    TARANTOOL_FORCE_RECOVERY=nop,
90
    TARANTOOL_LOG_FORMAT=nop,
91
    TARANTOOL_LOG_LEVEL=nop,
92
    TARANTOOL_WAL_MODE=nop,
93
    TARANTOOL_USER_NAME=update_credentials,
94
    TARANTOOL_USER_PASSWORD=update_credentials,
95
    TARANTOOL_REPLICATION_SOURCE=update_replication_source,
96
    TARANTOOL_REPLICATION=update_replication_source,
97
}
98

99
console.on_start(function(self)
100
    local status, reason
101
    status, reason = pcall(function() require('console').connect(CONSOLE_SOCKET_PATH) end)
102
    if not status then
103
        self:print(reason)
104
        os.exit(1)
105
    end
106

107
    if arg[1] == nil or arg[2] == nil then
108
        self:print("Usage: " .. arg[0] .. " <variable> <value>")
109
        os.exit(1)
110
    end
111

112
    if vars[arg[1]] == nil then
113
        self:print("Unknown var: " .. arg[1])
114
        os.exit(1)
115
    end
116

117
    local cfg = read_config()
118
    cfg[arg[1]] = arg[2]
119

120
    local func = vars[arg[1]]
121
    func(self, cfg, arg[2])
122

123
    write_config(cfg)
124

125
    self.running = false
126
    os.exit(0)
127
end)
128

129
console.on_client_disconnect(function(self) self.running = false end)
130
console.start()
131

132
os.exit(0)
133

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.