├── .envrc ├── .gitignore ├── README.md ├── default.nix ├── flake.lock ├── flake.nix ├── nixops-pluggable.nix ├── poetry.lock ├── pyproject.toml └── shell.nix /.envrc: -------------------------------------------------------------------------------- 1 | use flake 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | result 2 | .envrc 3 | .direnv/** 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### ⚠️ lukebfox/nixops-plugged is obsolete 2 | 3 | You can now get a modern, plugged-in, nixops, directly in nixpkgs with `nixpkgs.nixopsUnstable` thanks to work from other authors, therefore I am archiving this repo. 4 | 5 | You can still fork it if you have some need not satisfied by upstream but I would recommend to file a ticket in the appropriate place. 6 | 7 | This repo was always a short term solution, and it's day has come. 8 | 9 | # NixOps 2.0 with batteries included. 10 | 11 | Essentially just a wrapper around nixops and some plugins. This flake aims to include any compatible plugins as they become available. 12 | 13 | ## Use from the command line. 14 | Clone this repository and you can run nixops from inside the project root. This flake exports a Nix App, so running `nix run . -- ` is equivalent to running `nixops `. 15 | 16 | ## Use as a flake input. 17 | You can refer to this flake as input for another flake, i.e. inside the development environment for some flake packaging a NixOps network. 18 | ```nix 19 | { 20 | description = "Your awesome flake"; 21 | 22 | inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; 23 | inputs.nixops-plugged.url = "github:lukebfox/nixops-plugged"; 24 | inputs.utils.url = "github:numtide/flake-utils"; 25 | 26 | outputs = { self, nixpkgs, nixops-plugged, utils, ... }: { 27 | nixopsConfigurations.default = { ... }; # your network definition 28 | } // utils.lib.eachDefaultSystem (system: let 29 | pkgs = import nixpkgs { inherit system; }; 30 | in { 31 | devShell = pkgs.mkShell { 32 | nativeBuildInputs = [ nixops-plugged.defaultPackage.${system} ]; 33 | }; 34 | }); 35 | } 36 | ``` 37 | While inside the development shell for your flake you will now have access to a fully(ish) featured `nixops`. 38 | ``` 39 | λ nix develop 40 | λ nixops list-plugins 41 | ``` 42 | If you only care about one plugin, this flake exports packages for this use case, i.e `nixops-plugged.packages.nixops-aws` to get a `nixops` with the `nixops-aws` plugin. 43 | 44 | ##### `withPlugins` 45 | 46 | If you want to mix and match from any supported plugins then use this function 47 | ``` 48 | devShell = pkgs.mkShell { 49 | nativeBuildInputs = [ 50 | (nixops-plugged.lib.withPlugins (ps: [ps.nixops-aws ps.nixops-hetznercloud]) 51 | ]; 52 | }; 53 | ``` 54 | ## Supported plugins (wip) 55 | 56 | | Plugins | Included | 57 | |:---|:---:| 58 | | [AWS][1] | :heavy_check_mark: | 59 | | [DigitalOcean][2] | :heavy_check_mark: | 60 | | [GCE][3] | :heavy_check_mark: | 61 | | [Hetzner Cloud][4] | :heavy_check_mark: | 62 | | [VBox][5] | :heavy_check_mark: | 63 | | [Hetzner Robot][6] | :x: | 64 | | [Proxmox][7] | :x: | 65 | | [Virtd][8] | :x: | 66 | 67 | Adding new plugins goes like this: 68 | ```bash 69 | λ nix develop 70 | λ vim pyproject.toml # add plugin to dependencies 71 | λ vim flake.nix # add plugin to defaultPackage and/or packages 72 | λ poetry lock 73 | ``` 74 | You can run `nix run . -- list-plugins` to verify your changes. 75 | 76 | ## Use from legacy nix. 77 | The legacy commands `nix-build` and `nix-shell` should still work thanks to the compatability shim from [flake-compat](https://github.com/edolstra/flake-compat), although I don't use these so YMMV. 78 | 79 | [1]: https://github.com/NixOS/nixops-aws 80 | [2]: https://github.com/nix-community/nixops-digitalocean 81 | [3]: https://github.com/nix-community/nixops-gce 82 | [4]: https://github.com/lukebfox/nixops-hetznercloud 83 | [5]: https://github.com/nix-community/nixops-vbox 84 | [6]: https://github.com/NixOS/nixops-hetzner 85 | [7]: https://github.com/RaitoBezarius/nixops-proxmox 86 | [8]: https://github.com/nix-community/nixops-libvirtd 87 | -------------------------------------------------------------------------------- /default.nix: -------------------------------------------------------------------------------- 1 | (import ( 2 | let 3 | lock = builtins.fromJSON (builtins.readFile ./flake.lock); 4 | in fetchTarball { 5 | url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; 6 | sha256 = lock.nodes.flake-compat.locked.narHash; } 7 | ) { 8 | src = ./.; 9 | }).defaultNix 10 | -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "flake-compat": { 4 | "flake": false, 5 | "locked": { 6 | "lastModified": 1606424373, 7 | "narHash": "sha256-oq8d4//CJOrVj+EcOaSXvMebvuTkmBJuT5tzlfewUnQ=", 8 | "owner": "edolstra", 9 | "repo": "flake-compat", 10 | "rev": "99f1c2157fba4bfe6211a321fd0ee43199025dbf", 11 | "type": "github" 12 | }, 13 | "original": { 14 | "owner": "edolstra", 15 | "repo": "flake-compat", 16 | "type": "github" 17 | } 18 | }, 19 | "flake-utils": { 20 | "locked": { 21 | "lastModified": 1620759905, 22 | "narHash": "sha256-WiyWawrgmyN0EdmiHyG2V+fqReiVi8bM9cRdMaKQOFg=", 23 | "owner": "numtide", 24 | "repo": "flake-utils", 25 | "rev": "b543720b25df6ffdfcf9227afafc5b8c1fabfae8", 26 | "type": "github" 27 | }, 28 | "original": { 29 | "owner": "numtide", 30 | "repo": "flake-utils", 31 | "type": "github" 32 | } 33 | }, 34 | "flake-utils_2": { 35 | "locked": { 36 | "lastModified": 1610051610, 37 | "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", 38 | "owner": "numtide", 39 | "repo": "flake-utils", 40 | "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", 41 | "type": "github" 42 | }, 43 | "original": { 44 | "owner": "numtide", 45 | "repo": "flake-utils", 46 | "type": "github" 47 | } 48 | }, 49 | "nixpkgs": { 50 | "locked": { 51 | "lastModified": 1621667810, 52 | "narHash": "sha256-Tsnd84XTiAtqKLOjfCflmeh+R7whf+FNW7OKrTJ6ZOI=", 53 | "owner": "nixos", 54 | "repo": "nixpkgs", 55 | "rev": "efee454783c5c14ae78687439077c1d3f0544d97", 56 | "type": "github" 57 | }, 58 | "original": { 59 | "owner": "nixos", 60 | "ref": "nixpkgs-unstable", 61 | "repo": "nixpkgs", 62 | "type": "github" 63 | } 64 | }, 65 | "nixpkgs_2": { 66 | "locked": { 67 | "lastModified": 1610729867, 68 | "narHash": "sha256-bk/SBaBLqZX/PEqal27DMQwAHHl0dcZMp8NNksQr80s=", 69 | "owner": "NixOS", 70 | "repo": "nixpkgs", 71 | "rev": "04af07c659c6723a2259bb6bc00a47ec53330f20", 72 | "type": "github" 73 | }, 74 | "original": { 75 | "owner": "NixOS", 76 | "repo": "nixpkgs", 77 | "type": "github" 78 | } 79 | }, 80 | "poetry2nix": { 81 | "inputs": { 82 | "flake-utils": "flake-utils_2", 83 | "nixpkgs": "nixpkgs_2" 84 | }, 85 | "locked": { 86 | "lastModified": 1621564136, 87 | "narHash": "sha256-cXhv2lcpxz9muSKsJ0+r5q8YUGYIUARsPUFFWfcuiAQ=", 88 | "owner": "nix-community", 89 | "repo": "poetry2nix", 90 | "rev": "a5d82ecb020e6c058c0a515520a4e22133278b92", 91 | "type": "github" 92 | }, 93 | "original": { 94 | "owner": "nix-community", 95 | "repo": "poetry2nix", 96 | "type": "github" 97 | } 98 | }, 99 | "root": { 100 | "inputs": { 101 | "flake-compat": "flake-compat", 102 | "flake-utils": "flake-utils", 103 | "nixpkgs": "nixpkgs", 104 | "poetry2nix": "poetry2nix" 105 | } 106 | } 107 | }, 108 | "root": "root", 109 | "version": 7 110 | } 111 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | description = "NixOps with batteries included."; 3 | 4 | inputs = { 5 | nixpkgs = { url = "github:nixos/nixpkgs/nixpkgs-unstable"; }; 6 | poetry2nix = { url = "github:nix-community/poetry2nix"; }; 7 | flake-utils = { url = "github:numtide/flake-utils"; }; 8 | flake-compat = { url = "github:edolstra/flake-compat"; flake = false; }; 9 | }; 10 | 11 | outputs = { self, nixpkgs, poetry2nix, flake-utils, flake-compat, ... }: 12 | flake-utils.lib.eachDefaultSystem (system: let 13 | pkgs = import nixpkgs { inherit system; overlays = [poetry2nix.overlay]; }; 14 | nixopsPluggable = import ./nixops-pluggable.nix pkgs; 15 | 16 | inherit (nixopsPluggable) overrides nixops; 17 | 18 | in rec { 19 | 20 | defaultApp = { type = "app"; program = "${packages.nixops-plugged}/bin/nixops"; }; 21 | 22 | defaultPackage = packages.nixops-plugged; 23 | 24 | packages = { 25 | # A nixops with all plugins included. 26 | nixops-plugged = nixops.withPlugins (ps: [ 27 | ps.nixops-aws 28 | ps.nixops-gcp 29 | ps.nixops-digitalocean 30 | ps.nixops-hetznercloud 31 | ps.nixopsvbox 32 | ]); 33 | # A nixops with each plugin for users who use a single provider. 34 | # Benefits from a much faster download/install. 35 | nixops-aws = nixops.withPlugins (ps: [ps.nixops-aws]); 36 | nixops-gcp = nixops.withPlugins (ps: [ps.nixops-gcp]); 37 | nixops-digitalocean = nixops.withPlugins (ps: [ps.nixops-digitalocean]); 38 | nixops-hetznercloud = nixops.withPlugins (ps: [ps.nixops-hetznercloud]); 39 | nixopsvbox = nixops.withPlugins (ps: [ps.nixopsvbox]); 40 | }; 41 | 42 | lib.withPlugins = nixops.withPlugins; 43 | 44 | devShell = pkgs.mkShell { 45 | buildInputs = [ 46 | pkgs.poetry 47 | (pkgs.poetry2nix.mkPoetryEnv { 48 | inherit overrides; 49 | projectDir = ./.; 50 | }) 51 | ]; 52 | }; 53 | 54 | 55 | }); 56 | } 57 | -------------------------------------------------------------------------------- /nixops-pluggable.nix: -------------------------------------------------------------------------------- 1 | pkgs: 2 | 3 | let 4 | 5 | inherit (pkgs) lib; 6 | 7 | # Make a python derivation pluginable 8 | # 9 | # This adds a `withPlugins` function that works much like `withPackages` 10 | # except it only links binaries from the explicit derivation /share 11 | # from any plugins 12 | toPluginAble = { drv, finalDrv, final }: drv.overridePythonAttrs(old: { 13 | passthru = old.passthru // { 14 | # Wrap the buildEnv derivation in an outer derivation that omits interpreters & other binaries 15 | withPlugins = pluginFn: 16 | let 17 | plugins = [finalDrv] ++ pluginFn final; 18 | # The complete buildEnv drv 19 | buildEnvDrv = interpreter.buildEnv.override { extraLibs = plugins; }; 20 | # Create a separate environment aggregating the share directory 21 | # This is done because we only want /share for the actual plugins 22 | # and not for e.g. the python interpreter and other dependencies. 23 | manEnv = pkgs.symlinkJoin { 24 | name = "${finalDrv.pname}-plugged-share-${finalDrv.version}"; 25 | preferLocalBuild = true; 26 | allowSubstitutes = false; 27 | paths = plugins; 28 | postBuild = '' 29 | if test -e $out/share; then 30 | mv $out out 31 | mv out/share $out 32 | else 33 | rm -r $out 34 | mkdir $out 35 | fi 36 | ''; 37 | }; 38 | in 39 | pkgs.runCommandNoCC 40 | "${finalDrv.pname}-plugged-${finalDrv.version}" 41 | { inherit (finalDrv) passthru meta; } 42 | '' 43 | mkdir -p $out/bin 44 | 45 | for bindir in ${lib.concatStringsSep " " (map (d: "${lib.getBin d}/bin") plugins)}; do 46 | for bin in $bindir/*; do 47 | ln -s ${buildEnvDrv}/bin/$(basename $bin) $out/bin/ 48 | done 49 | done 50 | 51 | ln -s ${manEnv} $out/share 52 | ''; 53 | }; 54 | }); 55 | 56 | interpreter = (pkgs.poetry2nix.mkPoetryPackages { 57 | inherit overrides; 58 | projectDir = ./.; 59 | }).python; 60 | 61 | overrides = pkgs.poetry2nix.overrides.withDefaults (final: prev: { 62 | nixops = toPluginAble { 63 | inherit final; 64 | finalDrv = final.nixops; 65 | # Attach meta to nixops 66 | drv = prev.nixops.overridePythonAttrs (old: { 67 | format = "pyproject"; 68 | buildInputs = old.buildInputs ++ [ final.poetry ]; 69 | meta = old.meta // { 70 | homepage = https://github.com/NixOS/nixops; 71 | description = "NixOS cloud provisioning and deployment tool"; 72 | maintainers = with lib.maintainers; [ aminechikhaoui eelco rob domenkozar ]; 73 | platforms = lib.platforms.unix; 74 | license = lib.licenses.lgpl3; 75 | }; 76 | patches = [ 77 | (builtins.fetchurl { 78 | name = "patch"; 79 | url = https://github.com/NixOS/nixops/pull/1529/commits/869841940bf4946d5b9e755cf043800640632a71.patch; 80 | sha256 = "sha256:05ciqv838asjzs12yyka05w8njc8w7xx56v38h994rik9976lzc1"; 81 | }) 82 | ]; 83 | }); 84 | }; 85 | 86 | nixopsvbox = prev.nixopsvbox.overridePythonAttrs (old: { 87 | patches = [ 88 | (builtins.fetchurl { 89 | url = https://github.com/nix-community/nixops-vbox/pull/27/commits/8f1eb73698c5be0dce06c66284018aebb7757915.patch; 90 | sha256 = "sha256:118dcnssngm6lp8plfb3ikvprbwldf9q7fqiv1wy3ya78xddfgq6"; 91 | }) 92 | (builtins.fetchurl { 93 | name = "patch"; 94 | url = https://github.com/nix-community/nixops-vbox/pull/28/commits/0ed9887498031fffd1e097934b098c6458f49492.patch; 95 | sha256 = "sha256:1rrxbpb5vr6g4p5nyli7zw1cx7ks0rbcf5ycslfp7fh3sl4ld2dr"; 96 | }) 97 | (builtins.fetchurl { 98 | name = "patch"; 99 | url = https://github.com/Uthar/nixops-vbox/pull/1/commits/3318aa1bb8b10f3e251be63b6ee287352c043e8b.patch; 100 | sha256 = "sha256:0gm4n4ch8y46xdy5aa4cgbzamf6i27b8vpffw9i8bijxda4am1qj"; 101 | }) 102 | ]; 103 | }); 104 | 105 | # These are included in the latest poetry2nix overlay. 106 | 107 | jsonpickle = prev.jsonpickle.overridePythonAttrs (old: { 108 | nativeBuildInputs = old.nativeBuildInputs ++ [final.toml]; 109 | }); 110 | # https://github.com/nix-community/poetry2nix/issues/218 111 | packaging = prev.packaging.overridePythonAttrs({buildInputs ? [], ...}: { 112 | format = "pyproject"; 113 | buildInputs = buildInputs ++ [ final.flit-core ]; 114 | }); 115 | # https://github.com/nix-community/poetry2nix/issues/208 116 | #typeguard = prev.typeguard.overridePythonAttrs (old: { 117 | # postPatch = '' 118 | # substituteInPlace setup.py \ 119 | # --replace 'setup()' 'setup(version="${old.version}")' 120 | # ''; 121 | #}); 122 | 123 | }); 124 | 125 | in { 126 | inherit overrides; 127 | inherit (interpreter.pkgs) nixops; 128 | } 129 | -------------------------------------------------------------------------------- /poetry.lock: -------------------------------------------------------------------------------- 1 | [[package]] 2 | name = "apache-libcloud" 3 | version = "3.4.1" 4 | description = "A standard Python library that abstracts away differences among multiple cloud provider APIs. For more information and documentation, please see https://libcloud.apache.org" 5 | category = "main" 6 | optional = false 7 | python-versions = ">=3.5, <4" 8 | 9 | [package.dependencies] 10 | requests = ">=2.5.0" 11 | 12 | [[package]] 13 | name = "boto" 14 | version = "2.49.0" 15 | description = "Amazon Web Services Library" 16 | category = "main" 17 | optional = false 18 | python-versions = "*" 19 | 20 | [[package]] 21 | name = "boto3" 22 | version = "1.21.46" 23 | description = "The AWS SDK for Python" 24 | category = "main" 25 | optional = false 26 | python-versions = ">= 3.6" 27 | 28 | [package.dependencies] 29 | botocore = ">=1.24.46,<1.25.0" 30 | jmespath = ">=0.7.1,<2.0.0" 31 | s3transfer = ">=0.5.0,<0.6.0" 32 | 33 | [package.extras] 34 | crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] 35 | 36 | [[package]] 37 | name = "botocore" 38 | version = "1.24.46" 39 | description = "Low-level, data-driven core of boto 3." 40 | category = "main" 41 | optional = false 42 | python-versions = ">= 3.6" 43 | 44 | [package.dependencies] 45 | jmespath = ">=0.7.1,<2.0.0" 46 | python-dateutil = ">=2.1,<3.0.0" 47 | urllib3 = ">=1.25.4,<1.27" 48 | 49 | [package.extras] 50 | crt = ["awscrt (==0.13.8)"] 51 | 52 | [[package]] 53 | name = "certifi" 54 | version = "2021.10.8" 55 | description = "Python package for providing Mozilla's CA Bundle." 56 | category = "main" 57 | optional = false 58 | python-versions = "*" 59 | 60 | [[package]] 61 | name = "cffi" 62 | version = "1.15.0" 63 | description = "Foreign Function Interface for Python calling C code." 64 | category = "main" 65 | optional = false 66 | python-versions = "*" 67 | 68 | [package.dependencies] 69 | pycparser = "*" 70 | 71 | [[package]] 72 | name = "chardet" 73 | version = "3.0.4" 74 | description = "Universal encoding detector for Python 2 and 3" 75 | category = "main" 76 | optional = false 77 | python-versions = "*" 78 | 79 | [[package]] 80 | name = "cryptography" 81 | version = "3.4.8" 82 | description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." 83 | category = "main" 84 | optional = false 85 | python-versions = ">=3.6" 86 | 87 | [package.dependencies] 88 | cffi = ">=1.12" 89 | 90 | [package.extras] 91 | docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] 92 | docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] 93 | pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] 94 | sdist = ["setuptools-rust (>=0.11.4)"] 95 | ssh = ["bcrypt (>=3.1.5)"] 96 | test = ["pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] 97 | 98 | [[package]] 99 | name = "future" 100 | version = "0.18.2" 101 | description = "Clean single-source support for Python 3 and 2" 102 | category = "main" 103 | optional = false 104 | python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" 105 | 106 | [[package]] 107 | name = "hcloud" 108 | version = "1.8.1" 109 | description = "Official Hetzner Cloud python library" 110 | category = "main" 111 | optional = false 112 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <3.10" 113 | 114 | [package.dependencies] 115 | future = ">=0.17.1,<0.19" 116 | python-dateutil = ">=2.7.5,<2.9" 117 | requests = ">=2.20,<2.24" 118 | 119 | [package.extras] 120 | docs = ["Sphinx (==1.8.1)", "sphinx-rtd-theme (==0.4.2)"] 121 | 122 | [[package]] 123 | name = "idna" 124 | version = "2.10" 125 | description = "Internationalized Domain Names in Applications (IDNA)" 126 | category = "main" 127 | optional = false 128 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 129 | 130 | [[package]] 131 | name = "jmespath" 132 | version = "1.0.0" 133 | description = "JSON Matching Expressions" 134 | category = "main" 135 | optional = false 136 | python-versions = ">=3.7" 137 | 138 | [[package]] 139 | name = "jsonpickle" 140 | version = "2.1.0" 141 | description = "Python library for serializing any arbitrary object graph into JSON" 142 | category = "main" 143 | optional = false 144 | python-versions = ">=2.7" 145 | 146 | [package.extras] 147 | docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] 148 | testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-black-multipy", "pytest-cov", "ecdsa", "feedparser", "numpy", "pandas", "pymongo", "scikit-learn", "sqlalchemy", "enum34", "jsonlib"] 149 | "testing.libs" = ["demjson", "simplejson", "ujson", "yajl"] 150 | 151 | [[package]] 152 | name = "nixops" 153 | version = "2.0.0" 154 | description = "NixOS cloud provisioning and deployment tool" 155 | category = "main" 156 | optional = false 157 | python-versions = "^3.7" 158 | develop = false 159 | 160 | [package.dependencies] 161 | pluggy = "^0.13.1" 162 | PrettyTable = "^0.7.2" 163 | typeguard = "^2.7.1" 164 | typing-extensions = "^3.7.4" 165 | 166 | [package.source] 167 | type = "git" 168 | url = "https://github.com/NixOS/nixops.git" 169 | reference = "master" 170 | resolved_reference = "7220cbdc8a1cf2db5b3ad75b525faf145a5560a3" 171 | 172 | [[package]] 173 | name = "nixops-aws" 174 | version = "1.0" 175 | description = "NixOps AWS plugin" 176 | category = "main" 177 | optional = false 178 | python-versions = "^3.7" 179 | develop = false 180 | 181 | [package.dependencies] 182 | boto = "^2.49.0" 183 | boto3 = "^1.13.7" 184 | nixops = "rev master" 185 | nixos-modules-contrib = "rev master" 186 | typing-extensions = "^3.7.4" 187 | 188 | [package.source] 189 | type = "git" 190 | url = "https://github.com/NixOS/nixops-aws.git" 191 | reference = "master" 192 | resolved_reference = "bc9de10b77aa74c9b245fd533f829e4307b984e8" 193 | 194 | [[package]] 195 | name = "nixops-digitalocean" 196 | version = "2.0" 197 | description = "NixOps plugin for Digital Ocean" 198 | category = "main" 199 | optional = false 200 | python-versions = "^3.7" 201 | develop = false 202 | 203 | [package.dependencies] 204 | nixops = "branch master" 205 | python-digitalocean = "^1.15.0" 206 | 207 | [package.source] 208 | type = "git" 209 | url = "https://github.com/nix-community/nixops-digitalocean.git" 210 | reference = "master" 211 | resolved_reference = "b527b4bd27a419753e38c8231fd7528b3ea33886" 212 | 213 | [[package]] 214 | name = "nixops-gcp" 215 | version = "1.0" 216 | description = "NixOps backend for Google Cloud Platform" 217 | category = "main" 218 | optional = false 219 | python-versions = "^3.7" 220 | develop = false 221 | 222 | [package.dependencies] 223 | apache-libcloud = "^3.2.0" 224 | cryptography = "^3.1.1" 225 | nixops = "rev master" 226 | nixos-modules-contrib = "rev master" 227 | 228 | [package.source] 229 | type = "git" 230 | url = "https://github.com/nix-community/nixops-gce.git" 231 | reference = "master" 232 | resolved_reference = "712453027486e62e087b9c91e4a8a171eebb6ddd" 233 | 234 | [[package]] 235 | name = "nixops-hetznercloud" 236 | version = "0.1.1" 237 | description = "NixOps Hetzner Cloud plugin" 238 | category = "main" 239 | optional = false 240 | python-versions = "~3.8" 241 | develop = false 242 | 243 | [package.dependencies] 244 | hcloud = "1.8.1" 245 | nixops = "rev master" 246 | typing-extensions = "^3.7.4" 247 | 248 | [package.source] 249 | type = "git" 250 | url = "https://github.com/lukebfox/nixops-hetznercloud.git" 251 | reference = "master" 252 | resolved_reference = "8268979d03acd5d3d22791b1f01f82840cf8ac74" 253 | 254 | [[package]] 255 | name = "nixopsvbox" 256 | version = "1.7" 257 | description = "NixOps backend for VirtualBox" 258 | category = "main" 259 | optional = false 260 | python-versions = "^3.7" 261 | develop = false 262 | 263 | [package.dependencies] 264 | nixops = "rev master" 265 | 266 | [package.source] 267 | type = "git" 268 | url = "https://github.com/nix-community/nixops-vbox.git" 269 | reference = "master" 270 | resolved_reference = "2729672865ebe2aa973c062a3fbddda8c1359da0" 271 | 272 | [[package]] 273 | name = "nixos-modules-contrib" 274 | version = "0.1.0" 275 | description = "NixOS modules that don't quite belong in NixOS." 276 | category = "main" 277 | optional = false 278 | python-versions = "^3.7" 279 | develop = false 280 | 281 | [package.dependencies] 282 | nixops = "rev master" 283 | 284 | [package.source] 285 | type = "git" 286 | url = "https://github.com/nix-community/nixos-modules-contrib.git" 287 | reference = "master" 288 | resolved_reference = "81a1c2ef424dcf596a97b2e46a58ca73a1dd1ff8" 289 | 290 | [[package]] 291 | name = "pluggy" 292 | version = "0.13.1" 293 | description = "plugin and hook calling mechanisms for python" 294 | category = "main" 295 | optional = false 296 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 297 | 298 | [package.extras] 299 | dev = ["pre-commit", "tox"] 300 | 301 | [[package]] 302 | name = "prettytable" 303 | version = "0.7.2" 304 | description = "A simple Python library for easily displaying tabular data in a visually appealing ASCII table format." 305 | category = "main" 306 | optional = false 307 | python-versions = "*" 308 | 309 | [[package]] 310 | name = "pycparser" 311 | version = "2.21" 312 | description = "C parser in Python" 313 | category = "main" 314 | optional = false 315 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 316 | 317 | [[package]] 318 | name = "python-dateutil" 319 | version = "2.8.2" 320 | description = "Extensions to the standard Python datetime module" 321 | category = "main" 322 | optional = false 323 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" 324 | 325 | [package.dependencies] 326 | six = ">=1.5" 327 | 328 | [[package]] 329 | name = "python-digitalocean" 330 | version = "1.17.0" 331 | description = "digitalocean.com API to manage Droplets and Images" 332 | category = "main" 333 | optional = false 334 | python-versions = "*" 335 | 336 | [package.dependencies] 337 | jsonpickle = "*" 338 | requests = "*" 339 | 340 | [[package]] 341 | name = "requests" 342 | version = "2.23.0" 343 | description = "Python HTTP for Humans." 344 | category = "main" 345 | optional = false 346 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 347 | 348 | [package.dependencies] 349 | certifi = ">=2017.4.17" 350 | chardet = ">=3.0.2,<4" 351 | idna = ">=2.5,<3" 352 | urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26" 353 | 354 | [package.extras] 355 | security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"] 356 | socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] 357 | 358 | [[package]] 359 | name = "s3transfer" 360 | version = "0.5.2" 361 | description = "An Amazon S3 Transfer Manager" 362 | category = "main" 363 | optional = false 364 | python-versions = ">= 3.6" 365 | 366 | [package.dependencies] 367 | botocore = ">=1.12.36,<2.0a.0" 368 | 369 | [package.extras] 370 | crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] 371 | 372 | [[package]] 373 | name = "six" 374 | version = "1.16.0" 375 | description = "Python 2 and 3 compatibility utilities" 376 | category = "main" 377 | optional = false 378 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" 379 | 380 | [[package]] 381 | name = "typeguard" 382 | version = "2.13.3" 383 | description = "Run-time type checker for Python" 384 | category = "main" 385 | optional = false 386 | python-versions = ">=3.5.3" 387 | 388 | [package.extras] 389 | doc = ["sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"] 390 | test = ["pytest", "typing-extensions", "mypy"] 391 | 392 | [[package]] 393 | name = "typing-extensions" 394 | version = "3.10.0.2" 395 | description = "Backported and Experimental Type Hints for Python 3.5+" 396 | category = "main" 397 | optional = false 398 | python-versions = "*" 399 | 400 | [[package]] 401 | name = "urllib3" 402 | version = "1.25.11" 403 | description = "HTTP library with thread-safe connection pooling, file post, and more." 404 | category = "main" 405 | optional = false 406 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" 407 | 408 | [package.extras] 409 | brotli = ["brotlipy (>=0.6.0)"] 410 | secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] 411 | socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] 412 | 413 | [metadata] 414 | lock-version = "1.1" 415 | python-versions = "~3.8" 416 | content-hash = "29cc9b13975124bce25d0e5443b6951462c99035b1a3f28f841311b308933e33" 417 | 418 | [metadata.files] 419 | apache-libcloud = [ 420 | {file = "apache-libcloud-3.4.1.tar.gz", hash = "sha256:88f18da0cf3fac0af723e743fb741d9d1be251881edab7a5a0d1629955b5011b"}, 421 | {file = "apache_libcloud-3.4.1-py2.py3-none-any.whl", hash = "sha256:af1a5b3cda7bc3220093726ff67dbb70928521e2ec19d0e33a31b1e22fde1850"}, 422 | ] 423 | boto = [ 424 | {file = "boto-2.49.0-py2.py3-none-any.whl", hash = "sha256:147758d41ae7240dc989f0039f27da8ca0d53734be0eb869ef16e3adcfa462e8"}, 425 | {file = "boto-2.49.0.tar.gz", hash = "sha256:ea0d3b40a2d852767be77ca343b58a9e3a4b00d9db440efb8da74b4e58025e5a"}, 426 | ] 427 | boto3 = [ 428 | {file = "boto3-1.21.46-py3-none-any.whl", hash = "sha256:3b13d727854aba9dea900b6c7fa134c52396869d842460d14fab8b85b69645f7"}, 429 | {file = "boto3-1.21.46.tar.gz", hash = "sha256:9ac902076eac82112f4536cc2606a1f597a387dbc56b250575ac2d2c64c75e20"}, 430 | ] 431 | botocore = [ 432 | {file = "botocore-1.24.46-py3-none-any.whl", hash = "sha256:663d8f02b98641846eb959c54c840cc33264d5f2dee5b8fc09ee8adbef0f8dcf"}, 433 | {file = "botocore-1.24.46.tar.gz", hash = "sha256:89a203bba3c8f2299287e48a9e112e2dbe478cf67eaac26716f0e7f176446146"}, 434 | ] 435 | certifi = [ 436 | {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, 437 | {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, 438 | ] 439 | cffi = [ 440 | {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"}, 441 | {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"}, 442 | {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"}, 443 | {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"}, 444 | {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"}, 445 | {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"}, 446 | {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"}, 447 | {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"}, 448 | {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"}, 449 | {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"}, 450 | {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"}, 451 | {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"}, 452 | {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"}, 453 | {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"}, 454 | {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"}, 455 | {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"}, 456 | {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"}, 457 | {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"}, 458 | {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"}, 459 | {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"}, 460 | {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"}, 461 | {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"}, 462 | {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"}, 463 | {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"}, 464 | {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"}, 465 | {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"}, 466 | {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"}, 467 | {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"}, 468 | {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"}, 469 | {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"}, 470 | {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"}, 471 | {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"}, 472 | {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"}, 473 | {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"}, 474 | {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"}, 475 | {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"}, 476 | {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"}, 477 | {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"}, 478 | {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"}, 479 | {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"}, 480 | {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"}, 481 | {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"}, 482 | {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"}, 483 | {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"}, 484 | {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"}, 485 | {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"}, 486 | {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"}, 487 | {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"}, 488 | {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"}, 489 | {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"}, 490 | ] 491 | chardet = [ 492 | {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, 493 | {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, 494 | ] 495 | cryptography = [ 496 | {file = "cryptography-3.4.8-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:a00cf305f07b26c351d8d4e1af84ad7501eca8a342dedf24a7acb0e7b7406e14"}, 497 | {file = "cryptography-3.4.8-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:f44d141b8c4ea5eb4dbc9b3ad992d45580c1d22bf5e24363f2fbf50c2d7ae8a7"}, 498 | {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0a7dcbcd3f1913f664aca35d47c1331fce738d44ec34b7be8b9d332151b0b01e"}, 499 | {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34dae04a0dce5730d8eb7894eab617d8a70d0c97da76b905de9efb7128ad7085"}, 500 | {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eb7bb0df6f6f583dd8e054689def236255161ebbcf62b226454ab9ec663746b"}, 501 | {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:9965c46c674ba8cc572bc09a03f4c649292ee73e1b683adb1ce81e82e9a6a0fb"}, 502 | {file = "cryptography-3.4.8-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:3c4129fc3fdc0fa8e40861b5ac0c673315b3c902bbdc05fc176764815b43dd1d"}, 503 | {file = "cryptography-3.4.8-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:695104a9223a7239d155d7627ad912953b540929ef97ae0c34c7b8bf30857e89"}, 504 | {file = "cryptography-3.4.8-cp36-abi3-win32.whl", hash = "sha256:21ca464b3a4b8d8e86ba0ee5045e103a1fcfac3b39319727bc0fc58c09c6aff7"}, 505 | {file = "cryptography-3.4.8-cp36-abi3-win_amd64.whl", hash = "sha256:3520667fda779eb788ea00080124875be18f2d8f0848ec00733c0ec3bb8219fc"}, 506 | {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d2a6e5ef66503da51d2110edf6c403dc6b494cc0082f85db12f54e9c5d4c3ec5"}, 507 | {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a305600e7a6b7b855cd798e00278161b681ad6e9b7eca94c721d5f588ab212af"}, 508 | {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:3fa3a7ccf96e826affdf1a0a9432be74dc73423125c8f96a909e3835a5ef194a"}, 509 | {file = "cryptography-3.4.8-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:d9ec0e67a14f9d1d48dd87a2531009a9b251c02ea42851c060b25c782516ff06"}, 510 | {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b0fbfae7ff7febdb74b574055c7466da334a5371f253732d7e2e7525d570498"}, 511 | {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94fff993ee9bc1b2440d3b7243d488c6a3d9724cc2b09cdb297f6a886d040ef7"}, 512 | {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:8695456444f277af73a4877db9fc979849cd3ee74c198d04fc0776ebc3db52b9"}, 513 | {file = "cryptography-3.4.8-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:cd65b60cfe004790c795cc35f272e41a3df4631e2fb6b35aa7ac6ef2859d554e"}, 514 | {file = "cryptography-3.4.8.tar.gz", hash = "sha256:94cc5ed4ceaefcbe5bf38c8fba6a21fc1d365bb8fb826ea1688e3370b2e24a1c"}, 515 | ] 516 | future = [ 517 | {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, 518 | ] 519 | hcloud = [ 520 | {file = "hcloud-1.8.1.tar.gz", hash = "sha256:f289aeed0fb760b32fc6cd58b120c1901a84cc6f232470c2df5e42f213d16df6"}, 521 | ] 522 | idna = [ 523 | {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, 524 | {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, 525 | ] 526 | jmespath = [ 527 | {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"}, 528 | {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"}, 529 | ] 530 | jsonpickle = [ 531 | {file = "jsonpickle-2.1.0-py2.py3-none-any.whl", hash = "sha256:1dee77ddc5d652dfdabc33d33cff9d7e131d428007007da4fd6f7071ae774b0f"}, 532 | {file = "jsonpickle-2.1.0.tar.gz", hash = "sha256:84684cfc5338a534173c8dd69809e40f2865d0be1f8a2b7af8465e5b968dcfa9"}, 533 | ] 534 | nixops = [] 535 | nixops-aws = [] 536 | nixops-digitalocean = [] 537 | nixops-gcp = [] 538 | nixops-hetznercloud = [] 539 | nixopsvbox = [] 540 | nixos-modules-contrib = [] 541 | pluggy = [ 542 | {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, 543 | {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, 544 | ] 545 | prettytable = [ 546 | {file = "prettytable-0.7.2.tar.bz2", hash = "sha256:853c116513625c738dc3ce1aee148b5b5757a86727e67eff6502c7ca59d43c36"}, 547 | {file = "prettytable-0.7.2.tar.gz", hash = "sha256:2d5460dc9db74a32bcc8f9f67de68b2c4f4d2f01fa3bd518764c69156d9cacd9"}, 548 | {file = "prettytable-0.7.2.zip", hash = "sha256:a53da3b43d7a5c229b5e3ca2892ef982c46b7923b51e98f0db49956531211c4f"}, 549 | ] 550 | pycparser = [ 551 | {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, 552 | {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, 553 | ] 554 | python-dateutil = [ 555 | {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, 556 | {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, 557 | ] 558 | python-digitalocean = [ 559 | {file = "python-digitalocean-1.17.0.tar.gz", hash = "sha256:107854fde1aafa21774e8053cf253b04173613c94531f75d5a039ad770562b24"}, 560 | {file = "python_digitalocean-1.17.0-py3-none-any.whl", hash = "sha256:0032168e022e85fca314eb3f8dfaabf82087f2ed40839eb28f1eeeeca5afb1fa"}, 561 | ] 562 | requests = [ 563 | {file = "requests-2.23.0-py2.7.egg", hash = "sha256:5d2d0ffbb515f39417009a46c14256291061ac01ba8f875b90cad137de83beb4"}, 564 | {file = "requests-2.23.0-py2.py3-none-any.whl", hash = "sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee"}, 565 | {file = "requests-2.23.0.tar.gz", hash = "sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6"}, 566 | ] 567 | s3transfer = [ 568 | {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"}, 569 | {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"}, 570 | ] 571 | six = [ 572 | {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, 573 | {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, 574 | ] 575 | typeguard = [ 576 | {file = "typeguard-2.13.3-py3-none-any.whl", hash = "sha256:5e3e3be01e887e7eafae5af63d1f36c849aaa94e3a0112097312aabfa16284f1"}, 577 | {file = "typeguard-2.13.3.tar.gz", hash = "sha256:00edaa8da3a133674796cf5ea87d9f4b4c367d77476e185e80251cc13dfbb8c4"}, 578 | ] 579 | typing-extensions = [ 580 | {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"}, 581 | {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"}, 582 | {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"}, 583 | ] 584 | urllib3 = [ 585 | {file = "urllib3-1.25.11-py2.py3-none-any.whl", hash = "sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e"}, 586 | {file = "urllib3-1.25.11.tar.gz", hash = "sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2"}, 587 | ] 588 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "nixops-with-plugins" 3 | version = "0.1.0" 4 | description = "NixOps with batteries included." 5 | authors = ["adisbladis ", "typetetris ", "lukebfox =0.12"] 21 | build-backend = "poetry.masonry.api" 22 | -------------------------------------------------------------------------------- /shell.nix: -------------------------------------------------------------------------------- 1 | (import ( 2 | let 3 | lock = builtins.fromJSON (builtins.readFile ./flake.lock); 4 | in fetchTarball { 5 | url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; 6 | sha256 = lock.nodes.flake-compat.locked.narHash; } 7 | ) { 8 | src = ./.; 9 | }).shellNix 10 | --------------------------------------------------------------------------------