June
a7772aa154
Having this option available allows for using a flake which isn't in (or
upwards of) the directory the command gets executed in and allows for
using remote flakes.
Also archive the flake to use first and then operate on the archive.
This allows for easily getting the deployment_configuration.json from
the archive and also ensures that once the archiving suceeds, there
shouldn't be issues with the flakes source anymore.
Since now the deployment_configuration.json will always be taken from
the root of the flakes archive and therefore from the root of the flakes
repo, this is a breaking change, since previously it was taken from the
current working directory.
The idea of archiving the flake first and operating on the archive comes
from bij:
221052d846
Moreover introduce helper functions for facilitating recursive options
(i.e. options one can set on root and sub-commands).
75 lines
2.9 KiB
Markdown
75 lines
2.9 KiB
Markdown
# infra-rebuild
|
|
|
|
infra-rebuild mirrors nixos-rebuild closely in its command-line interface, but focuses on making infrastructure deployment more convenient. It is built for infrastructure defined in a flake, where each hosts configuration is represented by a different `nixosConfiguration` in the flakes output.
|
|
|
|
For building the configuration of e.g. two hosts called `web-01` and `git` one can simply run:
|
|
|
|
```
|
|
infra-rebuild build web-01 git
|
|
```
|
|
|
|
For deploying the hosts - using the switch operation - it's as simple as:
|
|
|
|
```
|
|
infra-rebuild switch web-01 git
|
|
```
|
|
|
|
Here infra-rebuild will simply run `nixos-rebuild switch` with the `target-host` option set for each host.
|
|
Because infra-rebuild tries to be usable without any configuration, by default it queries the hosts FQDN from its `nixosConfiguration` and uses that for the target host.
|
|
However to override aspects of the target host for specific or all hosts, infra-rebuild also accepts a `deployment_configuration.json` as configuration.
|
|
|
|
## Configuration
|
|
|
|
infra-rebuild accepts optional configuration in a `deployment_configuration.json` present in the flake repos root. \
|
|
The following keys are available to be set for configuring various aspects of deployment for specific or all hosts:
|
|
|
|
- `default.targetPort`: A default port to use for connecting to all host.
|
|
- `default.targetUser`: A default user to use for connecting to all host.
|
|
- `hosts.<host>.targetPort`: The port to use for connecting to `<host>`.
|
|
- `hosts.<host>.targetUser`: The user to use for connecting to `<host>`.
|
|
- `hosts.<host>.targetHostname`: The hostname to use for connecting to `<host>`.
|
|
|
|
### Example
|
|
|
|
An example `deployment_configuration.json` might look like this then:
|
|
|
|
```json
|
|
{
|
|
"default": {
|
|
"targetPort": 2222,
|
|
"targetUser": "deploy"
|
|
},
|
|
"hosts": {
|
|
"web-01": {
|
|
"targetUser": "web-deploy",
|
|
"targetHostname": "web-01-intern.infra.example",
|
|
"targetPort": 22
|
|
}
|
|
},
|
|
"git": {
|
|
"targetUser": "git-deploy"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Order of Precedence
|
|
|
|
The order of precedence from least to greatest for `targetPort` and `targetUser` is the following:
|
|
|
|
1. system default
|
|
2. `default.targetPort/User`
|
|
3. `hosts.<host>.targetPort/User`
|
|
|
|
The order of precedence from least to greatest for `targetHostname` is the following:
|
|
|
|
1. FQDN from hosts nixosConfiguration
|
|
2. `hosts.<host>.targetHostname`
|
|
|
|
## License
|
|
|
|
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|