Миграция с 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.nixto не работает, вероятно, потому, что он не может связать свое существующее состояние с этим новым именем файла, поскольку файл на самом деле является частью состояния 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 ответ

Я выполнил преобразование, выполнив следующие шаги для каждого развертывания:

  1. я переместил файл${deploymentname}.nixк
  2. Я экспортировал все состояние с помощью nixops 1.7:nixops export -d ${deploymentname} > ${deploymentname}/state.json
  3. Я обновил местоположение перемещенного файла с шага 1 в${deploymentname}.jsonфайл (который находится на ключеnixExprs)
  4. Я обновил конфигурацию в${deploymentname}/nixops.nixгде он ссылается на внешние файлы, используя относительные пути.
  5. Я импортировал состояние с помощью nixops 2.0:cd ${deploymentname}/ ; nixops import < ${deploymentname}.json
  6. Я перераспределил:nixops deploy -d ${deploymentname}
Другие вопросы по тегам