Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/adfinis/pyaptly
Automates the creation and managment of aptly mirrors and snapshots based on yml input files.
https://github.com/adfinis/pyaptly
aptly automation cli python yml
Last synced: about 1 month ago
JSON representation
Automates the creation and managment of aptly mirrors and snapshots based on yml input files.
- Host: GitHub
- URL: https://github.com/adfinis/pyaptly
- Owner: adfinis
- License: agpl-3.0
- Created: 2016-05-02T13:52:26.000Z (over 8 years ago)
- Default Branch: main
- Last Pushed: 2024-07-24T08:23:31.000Z (4 months ago)
- Last Synced: 2024-09-30T23:03:30.901Z (about 2 months ago)
- Topics: aptly, automation, cli, python, yml
- Language: Python
- Size: 17.3 MB
- Stars: 16
- Watchers: 12
- Forks: 12
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG
- License: LICENSE
Awesome Lists containing this project
README
# Pyaptly
Automates the creation and managment of aptly mirrors and snapshots based on toml
input files.**Important**: Currently under heavy development:
- For for the old version [switch to the master branch](https://github.com/adfinis/pyaptly/tree/master)
- Main branch builds contain [alpha packages](https://github.com/adfinis/pyaptly/actions/runs/8147002919), see Artifacts# Why & How
[Aptly](https://www.aptly.info/) is great tool for creating Debian repositories.
But as soon as it's required to maintain repositories for different [environments](https://en.wikipedia.org/wiki/Deployment_environment) it gets very complicated fast.This is where Pyaptly comes in.
First of all, a single `config.toml` can be used to define `mirrors`, `snapshots` and `publishes` instead of using command line arguments.
The definition includes exactly how the entities are created and updated.Secondly, aptly isn't really layed out to have retention policies. Updating a `snapshot` will lose the information of the previous state.
That means it's hard to roll back to a previous state if required.
This problem is fixed by using fix timestamps in snapshot names.
That behaviour also allows to define a fixed update spacing. It's possible to say for example "only update this snapshot once a week".[Follow the Tutorial](./docs/TUTORIAL.md)
## Example commands
Initialize a new aptly server.
```shell
pyaptly mirror mirrors.toml create
pyaptly mirror mirrors.toml update
pyaptly snapshot mirrors.toml create
pyaptly publish mirrors.toml create
```Update mirrors and snapshots and switch publish endpoints with
```automatic-update: true``` to the new snapshots.```shell
pyaptly mirror mirrors.toml update
pyaptly snapshot mirrors.toml create
pyaptly publish mirrors.toml create
pyaptly publish mirrors.toml update
```Manually trigger a switch to the new snapshots for the publish endpoint
ubuntu/stable.```shell
pyaptly publish mirrors.toml update -n ubuntu/stable
```## Debugging
The most interesting mode for users is not `--debug` but `--info` which shows
all commands executed.```bash
> pyaptly legacy -- --info --config pyaptly/tests/repo.toml repo create
Command call
cmd: gpg --no-default-keyring --keyring trustedkeys.gpg --list-keys --with-colons -> 0
stdout: 'tru::1:1709575833:0:3:1:5
pub:-:255:22:2841988729C7F3FF:1701882080:::-:::scESC:::::ed25519:::0:
fpr:::::::::6380C07FF6496016E01CF4522841988729C7F3FF:
uid:-::::1701882080::5BBE9C7E7AA5EEE3538F66274125D69FA727FD1E::Pyaptly Test 01 ::::::::::0:
sub:-:255:18:0A1CBEF26FE4F36E:1701882080::::::e:::::cv25519::
fpr:::::::::9EE64E40A5E3530D3E18A97C0A1CBEF26FE4F36E:
pub:-:255:22:EC54D33E5B5EBE98:1701882297:::-:::scESC:::::ed25519:::0:
fpr:::::::::660D45228AB6B59CCE48AFB3EC54D33E5B5EBE98:
uid:-::::1701882297::F3EF71B78669C0FC259A4078151BDC5815A6015D::Pyaptly Test 02 ::::::::::0:
sub:-:255:18:042FE0F5BB743B60:1701882297::::::e:::::cv25519::
fpr:::::::::AE58B62134E02AF8E5D55FF4042FE0F5BB743B60:'
Command call
cmd: aptly repo list -raw -> 0
stderr: 'Config file not found, creating default config at /root/.aptly.conf'
Command call
cmd: aptly mirror list -raw -> 0
Command call
cmd: aptly snapshot list -raw -> 0
Command call
cmd: aptly publish list -raw -> 0
Command call
cmd: aptly repo -architectures=amd64,i386 -distribution=stable -component=main create centrify -> 0
stdout: 'Local repo [centrify] successfully added.
You can run 'aptly repo add centrify ...' to add packages to repository.'
```Commands that fail are always displayed in red on a tty, but that actually only
happens if something is broken.