Миграция с Nixops 1.7 на 2.0 и <deployment>.nix на nixops.nix
Я пытаюсь перейти с версии 1.7 на версию 2.0.0-pre-7220cbd. После установки не могу работать сnixops
команда больше:
$ nixops deploy -d streaming
Traceback (most recent call last):
File "/nix/store/diamr11y34lkmnjwkyw5qnv5xcn1x60h-python3.9-nixops-2.0.0-pre-7220cbd/bin/.nixops-wrapped", line 9, in <module>
sys.exit(main())
File "/nix/store/3ybyi0v3pj8hlchzcchsx3m2myjpbmir-python3-3.9.13-env/lib/python3.9/site-packages/nixops/__main__.py", line 56, in main
args.op(args)
File "/nix/store/3ybyi0v3pj8hlchzcchsx3m2myjpbmir-python3-3.9.13-env/lib/python3.9/site-packages/nixops/script_defs.py", line 710, in op_deploy
with deployment(args, True, "nixops deploy") as depl:
File "/nix/store/gwlgfywzqypv91rxw916v81mpzhckdz5-python3-3.9.13/lib/python3.9/contextlib.py", line 119, in __enter__
return next(self.gen)
File "/nix/store/3ybyi0v3pj8hlchzcchsx3m2myjpbmir-python3-3.9.13-env/lib/python3.9/site-packages/nixops/script_defs.py", line 72, in deployment
with network_state(args, writable, description=activityDescription) as sf:
File "/nix/store/gwlgfywzqypv91rxw916v81mpzhckdz5-python3-3.9.13/lib/python3.9/contextlib.py", line 119, in __enter__
return next(self.gen)
File "/nix/store/3ybyi0v3pj8hlchzcchsx3m2myjpbmir-python3-3.9.13-env/lib/python3.9/site-packages/nixops/script_defs.py", line 102, in network_state
network = eval_network(get_network_file(args))
File "/nix/store/3ybyi0v3pj8hlchzcchsx3m2myjpbmir-python3-3.9.13-env/lib/python3.9/site-packages/nixops/script_defs.py", line 60, in get_network_file
raise ValueError(f"Neither flake.nix nor nixops.nix exists in {network_dir}")
ValueError: Neither flake.nix nor nixops.nix exists in /home/matthias/nixops
Я думаю, что важная часть здесьValueError: Neither flake.nix nor nixops.nix exists in /home/matthias/nixops
. Это верно, у меня никогда не было, но это развертывание определено в/home/matthias/nixops/streaming.nix
.
На данный момент я не хочу переходить на использование флейков, я просто пытаюсь использовать существующий способ работы сnixops_unstable
.
Изменениеstreaming.nix
to не работает, вероятно, потому, что он не может связать свое существующее состояние с этим новым именем файла, поскольку файл на самом деле является частью состояния nixop:
{
"c54b29a1-417e-11eb-9873-0242cc6606ab": {
"configsPath": "/nix/store/46s4g876yjdijfdjwpqqjzj94pyp05lz-nixops-machines",
"name": "streaming",
"nixExprs": "[\"/home/matthias/nixops/streaming.nix\"]",
"resources": {
"styx": {
"configsPath": "/nix/store/46s4g876yjdijfdjwpqqjzj94pyp05lz-nixops-machines",
"creationTime": "1608329862",
"index": "0",
"keys": "XXXXXXXX",
"none.sshPrivateKey": "XXXXXXXX\n",
"none.sshPublicKey": "XXXXXXXX",
"none.sshPublicKeyDeployed": "1",
"publicVpnKey": "XXXXXXXX",
"sshPinged": "1",
"state": "3",
"stateVersion": "20.09",
"targetHost": "styx.p7m.de",
"toplevel": "/nix/store/hjlv7mlp71rij4vn3dhvr6rxickldjaa-nixos-system-styx-22.05.915.9ff91ce2e4c",
"type": "none",
"vmId": "nixops-c54b29a1-417e-11eb-9873-0242cc6606ab-styx"
}
},
"rollbackEnabled": "1"
}
}
Документация по миграции, которую я нашел, очень скудна: https://nixops.readthedocs.io/en/latest/manual/migrating.html . Более или менее я мог найти только то, что мне нужно определитьnetwork.storage.legacy = {}
что не решает мою проблему миграции.
Как мне перейти с<deployment>.nix
кnixops.nix
? Как мне разделить разные развертывания, которые я использую для группировки похожих серверов?
1 ответ
Я выполнил преобразование, выполнив следующие шаги для каждого развертывания:
- я переместил файл
${deploymentname}.nix
к - Я экспортировал все состояние с помощью nixops 1.7:
nixops export -d ${deploymentname} > ${deploymentname}/state.json
- Я обновил местоположение перемещенного файла с шага 1 в
${deploymentname}.json
файл (который находится на ключеnixExprs
) - Я обновил конфигурацию в
${deploymentname}/nixops.nix
где он ссылается на внешние файлы, используя относительные пути. - Я импортировал состояние с помощью nixops 2.0:
cd ${deploymentname}/ ; nixops import < ${deploymentname}.json
- Я перераспределил:
nixops deploy -d ${deploymentname}