1
#!/usr/bin/env tarantool
3
local CONSOLE_SOCKET_PATH = 'unix/:/var/run/tarantool/tarantool.sock'
4
local CFG_FILE_PATH = '/etc/tarantool/config.yml'
6
local yaml = require('yaml')
7
local console = require('console')
8
local errno = require('errno')
10
local function read_config()
11
local f = io.open(CFG_FILE_PATH, "rb")
13
print("Can't open " .. CFG_FILE_PATH ..": ", errno.strerror())
16
local content = f:read("*all")
18
return yaml.decode(content)
21
local function write_config(cfg)
22
local f = io.open(CFG_FILE_PATH, "w+")
24
print("Can't open " .. CFG_FILE_PATH ..": ", errno.strerror())
27
local content = yaml.encode(cfg)
32
local function nop(console, cfg, value)
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'] .. "'"
41
local user_password = "nil"
42
if cfg['TARANTOOL_USER_PASSWORD'] then
43
user_password = "'" .. cfg['TARANTOOL_USER_PASSWORD'] .. "'"
46
local cmd = "set_replication_source('"..value.."', " .. user_name .. "," .. user_password .. ")"
49
local res = console:eval(cmd)
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'] .. "'"
62
local user_password = "nil"
63
if cfg['TARANTOOL_USER_PASSWORD'] then
64
user_password = "'" .. cfg['TARANTOOL_USER_PASSWORD'] .. "'"
67
local cmd = "set_credentials(" .. user_name .. "," .. user_password .. ")"
69
local res = console:eval(cmd)
75
local replication_source = cfg['TARANTOOL_REPLICATION_SOURCE']
77
if replication_source ~= nil then
78
update_replication_source(console, cfg, replication_source)
84
TARANTOOL_SLAB_ALLOC_ARENA=nop,
85
TARANTOOL_SLAB_ALLOC_FACTOR=nop,
86
TARANTOOL_SLAB_ALLOC_MAXIMAL=nop,
87
TARANTOOL_SLAB_ALLOC_MINIMAL=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,
99
console.on_start(function(self)
101
status, reason = pcall(function() require('console').connect(CONSOLE_SOCKET_PATH) end)
107
if arg[1] == nil or arg[2] == nil then
108
self:print("Usage: " .. arg[0] .. " <variable> <value>")
112
if vars[arg[1]] == nil then
113
self:print("Unknown var: " .. arg[1])
117
local cfg = read_config()
120
local func = vars[arg[1]]
121
func(self, cfg, arg[2])
129
console.on_client_disconnect(function(self) self.running = false end)