Миграция проектов VK Object Storage
Миграция связывает существующие проекты VK Object Storage с сущностями VK Private Cloud. Выполняйте миграцию, если выполняются все условия:
- В VK Object Storage уже есть проекты (и связанные с ними бакеты).
- Эти проекты еще не ассоциированы с аккаунтами и проектами IAM.
- Повторное создание проектов и перенос бакетов затруднены или нецелесообразны.
Если проектов в VK Object Storage нет, пропустите шаг миграции.
На mono-узле VK Object Storage выгрузите список проектов:
$ hb hitbox project list -o csv > /tmp/projects.csv
Добавьте в CSV последним полем owner почту владельца проекта (пользователя IAM).
-
Получите учетные данные для подключения к инстансу Breeze в инсталляции VK Private Cloud.
-
На узле с Hitbox выполните миграционный скрипт. Путь и версия зависят от установленного релиза VK Object Storage.
-
Перейдите в каталог Hitbox и выдайте права на выполнение скрипта:
$ sudo -i$ cd /usr/share/hitbox/$ chmod +x ./migrations/<ВЕРСИЯ>/projects2breeze.lua -
Запустите миграцию:
$ ./migrations/<ВЕРСИЯ>/projects2breeze.lua -i /tmp/projects.csv -o /tmp/pid_iam_id.csv -b tarantool_service_user:<ПАРОЛЬ>@<УЗЕЛ_BREEZE>:<ПОРТ> up
-
На деплой-ноде VK Object Storage включите функциональность IAM:
$ switchover etcd set app.feature_flags.iam.enabled true -p /hotbox/hitbox
Скрипты ассоциации выполняйте на узле, где запущен master Hitbox.
-
Ассоциируйте аккаунты VK Object Storage с владельцем в IAM. Скрипт использует файл
/tmp/pid_iam_id.csv:$ tt connect <УЗЕЛ_HITBOX>:<ПОРТ> -f /usr/share/hitbox/migrations/<ВЕРСИЯ>/account_iam_id.lua -
Создайте Lua-скрипт
/tmp/load_keystone.lua:dolocal csv = require('csv')local fio = require('fio')local path = fio.pathjoin('/tmp', 'pid_iam_id.csv')local f, err = fio.open(path, { 'O_RDONLY' })if f ~= nil thenlocal projects = csv.load(f)f:close()for _, proj in ipairs(projects) dolocal pid = proj[1]if pid ~= 'anon' thenbox.atomic(function()local p = T.projects.hash(box.space.projects.index.pid:get({ pid }))if p ~= nil thenlocal project_id = p.idp.attr.keystone_id = proj[3]box.space.projects:update({project_id}, {{ '=', F.projects.attr, p.attr }})endend)endendreturn path, 'loaded'endreturn path, errend -
Выполните скрипт:
$ chown tarantool:tarantool /tmp/pid_iam_id.csv$ tt connect <УЗЕЛ_HITBOX>:<ПОРТ> -f /tmp/load_keystone.lua