hcloud-rdns-manager


Namehcloud-rdns-manager JSON
Version 1.0.2 PyPI version JSON
download
home_pageNone
SummaryThe hcloud-rdns-manager - the smart way to manage your rDNS records in the Hetzner cloud
upload_time2025-02-09 00:09:18
maintainerNone
docs_urlNone
authorNone
requires_python>=3.13
licenseCopyright (c) 2025 wh0ami Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords automation cloud dns hetzner iac infrastructure as code ptr rdns
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Hetzner Cloud (hcloud) rDNS manager

This is a tiny python3 software to easily manage your rDNS records in the Hetzner Cloud.

My personal issue was, that I am doing quite much networking and vpn stuff on Hetzner Cloud servers, which is why I
wanted to manage my rDNS records automated via GitLab CI. And there was no solution, that fitted for my purpose and
taste.

## Installation

Just install it from pypi by using `pipx install hcloud-rdns-manager` or `pip install hcloud-rdns-manager`.

Then, you can call it via `hcloud-rdns-manager` or `hcloud-rdns-cli`.

## Configuration

First, copy the file `rdns-zones.example.yml` into e.g. `rdns-zones.yml`. There is no default config file or something -
you will pass the path with each run, which is why you can select the config file name by your own.

I guess there is no need for much explanation. The config is using normal YAML - take care for the indentation and
everything will be fine. You can specify as many projects and servers, as you want.

The project name in the config doesn't have any relation to the project name in the webui - it is a custom nickname that
you can create by yourself. The project will be identified via the passed token when talking to the Hetzner Cloud API.

The server ain't identified by its (nick-)name - they will be identified by its unique Hetzner Cloud ID. Please take
care to set `'` around the number, since the config validator will fail otherwise. You can get the ID's by
running `hcloud server list` using [hetznercloud/cli](https://github.com/hetznercloud/cli).

I know that it's quite annoying, to identify the servers via its ID. This is the reason, why I preferred YAML over JSON
for the config file. YAML can do comments, JSON not. So just place comment lines starting with `#` wherever you want, to
get a better overview over the configuration file.

## Usage

### Getting started - show the help

If you run the script like `hcloud-rdns-cli -h` (or `--help` instead), you can see the all possible parameters with
explanation.

```
user@pc:~/Workspace/hcloud-rdns-manager$ hcloud-rdns-cli --help
usage: hcloud-rdns-cli [-h] [--commit] [--servers server-id] [--projects project-name] action rdns_zone_file

This is the hcloud-rdns-manager - the smart way to manage your rDNS records in the Hetzner cloud

positional arguments:
  action                Valid actions are:
                        check   - read the rdns zone file and validate it (--servers and --projects will be ignored, if passed)
                        deploy  - deploy the rdns entries from the rdns zone file in the Hetzner cloud, if --commit was passed. Otherwise, it will only perform a dry-run and display the changes.
                        dump    - obtain and dump the current config from the Hetzner cloud
                        
  rdns_zone_file        rDNS zone file that should be processed

optional arguments:
  -h, --help            show this help message and exit
  --commit              Commit, that the changes should really be deployed. (only deploy action)
  --servers server-id   Only affect these server id(s). Can be given multiple times. By default, all servers are affected.
  --projects project-name
                        Only affect these projects. The project name passed here is NOT the name from the Web UI, it is the name that you defined in your local rdns zone file. Can be given multiple times. By default, all projects are affected.
user@pc:~/Workspace/hcloud-rdns-manager$ 
```

### Validate your config file

If you just want to check, whether the syntax of you config file is correct, you can simply
use `hcloud-rdns-cli check my-config.yml`

```
user@pc:~/Workspace/hcloud-rdns-manager$ hcloud-rdns-cli check my-config.yml 
Validating passed rdns zone config...
The passed rdns zone config is valid!
user@pc:~/Workspace/hcloud-rdns-manager$ 
```

The config file will be checked/validated with each run - e.g. also before you do a validation or a deployment. If
something is wrong, it will abort before doing anything regarding the Hetzner API.

### Validation and Deployment

The script is going to practice something like a staging - so if you run `hcloud-rdns-cli deploy my-config.yml`, you
will only do a dry-run and see, what's going to be changed.

```
user@pc:~/Workspace/hcloud-rdns-manager$ hcloud-rdns-cli deploy my-config.yml
Validating passed rdns zone config...
The passed rdns zone config is valid!

--> Server 1234567 (myfancyserver) from project my-project-1
Nothing to do!

--> Server 6942069 (myperfectserver) from project my-project-1
Nothing to do!

--> Server 6842569 (veryspecialserver) from project my-other-project
+----------+----------------------------+-----------------------------+--------------------------------------+
| Action   | IP                         | Current PTR                 | New PTR                              |
|----------+----------------------------+-----------------------------+--------------------------------------|
| UPDATE   | 2000:1ce:beer:babe:69::1   | myvpnserver.vpn.mydomain.de | myvpnserver.vpn-internal.mydomain.de |
| CREATE   | 2000:1ce:beer:babe:69::2   |                             | myvpnclient.vpn-internal.mydomain.de |
| DELETE   | 2000:1ce:beer:babe:69::420 | kekse.vpn.mydomain.de       |                                      |
+----------+----------------------------+-----------------------------+--------------------------------------+

user@pc:~/Workspace/hcloud-rdns-manager$ 
```

And if this is what you want, you can simply pass an additional `--commit` to put these changes into production.

```
user@pc:~/Workspace/hcloud-rdns-manager$ hcloud-rdns-cli --commit deploy my-config.yml
Validating passed rdns zone config...
The passed rdns zone config is valid!

--> Server 1234567 (myfancyserver) from project my-project-1
Nothing to do!

--> Server 6942069 (myperfectserver) from project my-project-1
Nothing to do!

--> Server 6842569 (veryspecialserver) from project my-other-project
+----------+----------------------------+-----------------------------+--------------------------------------+
| Action   | IP                         | Current PTR                 | New PTR                              |
|----------+----------------------------+-----------------------------+--------------------------------------|
| UPDATE   | 2000:1ce:beer:babe:69::1   | myvpnserver.vpn.mydomain.de | myvpnserver.vpn-internal.mydomain.de |
| CREATE   | 2000:1ce:beer:babe:69::2   |                             | myvpnclient.vpn-internal.mydomain.de |
| DELETE   | 2000:1ce:beer:babe:69::420 | kekse.vpn.mydomain.de       |                                      |
+----------+----------------------------+-----------------------------+--------------------------------------+
Applying changeset...
Changes applied!

user@pc:~/Workspace/hcloud-rdns-manager$ 
```

You can use the additional parameters `--servers <server ID>` or `--projects <project name>` to limit your changes to
apply. This could be helpful, if you manage a very big environment with this script.

```
user@pc:~/Workspace/hcloud-rdns-manager$ hcloud-rdns-cli --projects my-other-project deploy my-config.yml
Validating passed rdns zone config...
The passed rdns zone config is valid!

--> Server 6842569 (veryspecialserver) from project my-other-project
+----------+----------------------------+-----------------------------+--------------------------------------+
| Action   | IP                         | Current PTR                 | New PTR                              |
|----------+----------------------------+-----------------------------+--------------------------------------|
| UPDATE   | 2000:1ce:beer:babe:69::1   | myvpnserver.vpn.mydomain.de | myvpnserver.vpn-internal.mydomain.de |
| CREATE   | 2000:1ce:beer:babe:69::2   |                             | myvpnclient.vpn-internal.mydomain.de |
| DELETE   | 2000:1ce:beer:babe:69::420 | kekse.vpn.mydomain.de       |                                      |
+----------+----------------------------+-----------------------------+--------------------------------------+

user@pc:~/Workspace/hcloud-rdns-manager$ 
```

### Dump an existing config

No backup, no mercy. That's why I implemented a feature to dump the rDNS configuration based on the projects and servers
defined in your current configuration.

Just run `hcloud-rdns-cli dump my-config.yml` and your dump will be stored in a file
called `hcloud_rdns_dump_YYYY-mm-dd_HH-MM-SS.yml` in your current working directory. The spacer will be replaced with a
current timestamp.

```
user@pc:~/Workspace/hcloud-rdns-manager$ hcloud-rdns-cli dump my-config.yml 
Validating passed rdns zone config...
The passed rdns zone config is valid!
Creating project dump...
Dump created!
Validating passed rdns zone config...
The passed rdns zone config is valid!
Writing dump to hcloud_rdns_dump_2022-01-22_22-17-34.yml...
Dump written to hcloud_rdns_dump_2022-01-22_22-17-34.yml !
user@pc:~/Workspace/hcloud-rdns-manager$ 
```

The dump will be syntax checked with the same schema, as the input config was checked. Based on that fact, your dump
should be directly re-importable with the `deploy` action.   
Please note, that the dump action is also compatible with the `--projects` and `--servers` options.

## Development

This is an uv project. You can set up your development environment by cloning
this Repository via `git` and running a `uv sync` in the project
directory afterward.

The Lockfile can be updated by using `uv lock` (also updates the installed
packages in the dependency tree).

The project can be bundled by running `uv build` and published by running
`uv publish`. Results can be found in the `dist/` directory.

For code linting and formatting, `ruff` was used. You may run it via
`uv run ruff check` or `uv run ruff format`.

This project is using [Semantic Versioning](https://semver.org/) and
[Conventional Commits](https://www.conventionalcommits.org/en/).

## Not clarified topics and possible problems

- I didn't test this with floating ip addresses or subnets - I guess those are handled different by the Hetzner API
- This was only tested under Linux. All other unix-like OS (including macOS) should work without any problems
  (in theory), but be careful. For Windows, it could work - I basically don't have an idea, whether or whether not.
- Unit tests using PyTest would be pretty nice, but I don't have the time for that. May somebody want's to
  contribute them? :)

## Licensing, contribution, thanks and other stuff

For licensing information, please see the `LICENSE` file. Every idea and everybody's
knowledge is welcome - feel free to contribute by creating issues and pull requests! :)

Thanks to the python3 development team!

Also, thanks to the maintainers of the python3 dependencies:

- tabulate: [GitHub](https://github.com/astanin/python-tabulate)
- pyyaml: [Website](https://pyyaml.org/) / [GitHub](https://github.com/yaml/pyyaml)
- hcloud: [GitHub](https://github.com/hetznercloud/hcloud-python)
- loguru: [GitHub](https://github.com/Delgan/loguru)
- jsonschema: [GitHub](https://github.com/Julian/jsonschema)

Furthermore, I want to thank Jetbrains for providing their [PyCharm IDE](https://www.jetbrains.com/pycharm/) for free to
the community (I used it to write the code of this project). Please note, that this is not a paid ad - I am truly
convinced of their work, and I am writing this based on my own free will.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "hcloud-rdns-manager",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.13",
    "maintainer_email": null,
    "keywords": "Automation, Cloud, DNS, Hetzner, IaC, Infrastructure as Code, PTR, rDNS",
    "author": null,
    "author_email": "wh0ami <wh0ami@noreply.codeberg.org>",
    "download_url": "https://files.pythonhosted.org/packages/0d/35/fa11d2c35ae4b9e52d806e25eed9ea59ca12af9d651786f6e21734af16cd/hcloud_rdns_manager-1.0.2.tar.gz",
    "platform": null,
    "description": "# Hetzner Cloud (hcloud) rDNS manager\n\nThis is a tiny python3 software to easily manage your rDNS records in the Hetzner Cloud.\n\nMy personal issue was, that I am doing quite much networking and vpn stuff on Hetzner Cloud servers, which is why I\nwanted to manage my rDNS records automated via GitLab CI. And there was no solution, that fitted for my purpose and\ntaste.\n\n## Installation\n\nJust install it from pypi by using `pipx install hcloud-rdns-manager` or `pip install hcloud-rdns-manager`.\n\nThen, you can call it via `hcloud-rdns-manager` or `hcloud-rdns-cli`.\n\n## Configuration\n\nFirst, copy the file `rdns-zones.example.yml` into e.g. `rdns-zones.yml`. There is no default config file or something -\nyou will pass the path with each run, which is why you can select the config file name by your own.\n\nI guess there is no need for much explanation. The config is using normal YAML - take care for the indentation and\neverything will be fine. You can specify as many projects and servers, as you want.\n\nThe project name in the config doesn't have any relation to the project name in the webui - it is a custom nickname that\nyou can create by yourself. The project will be identified via the passed token when talking to the Hetzner Cloud API.\n\nThe server ain't identified by its (nick-)name - they will be identified by its unique Hetzner Cloud ID. Please take\ncare to set `'` around the number, since the config validator will fail otherwise. You can get the ID's by\nrunning `hcloud server list` using [hetznercloud/cli](https://github.com/hetznercloud/cli).\n\nI know that it's quite annoying, to identify the servers via its ID. This is the reason, why I preferred YAML over JSON\nfor the config file. YAML can do comments, JSON not. So just place comment lines starting with `#` wherever you want, to\nget a better overview over the configuration file.\n\n## Usage\n\n### Getting started - show the help\n\nIf you run the script like `hcloud-rdns-cli -h` (or `--help` instead), you can see the all possible parameters with\nexplanation.\n\n```\nuser@pc:~/Workspace/hcloud-rdns-manager$ hcloud-rdns-cli --help\nusage: hcloud-rdns-cli [-h] [--commit] [--servers server-id] [--projects project-name] action rdns_zone_file\n\nThis is the hcloud-rdns-manager - the smart way to manage your rDNS records in the Hetzner cloud\n\npositional arguments:\n  action                Valid actions are:\n                        check   - read the rdns zone file and validate it (--servers and --projects will be ignored, if passed)\n                        deploy  - deploy the rdns entries from the rdns zone file in the Hetzner cloud, if --commit was passed. Otherwise, it will only perform a dry-run and display the changes.\n                        dump    - obtain and dump the current config from the Hetzner cloud\n                        \n  rdns_zone_file        rDNS zone file that should be processed\n\noptional arguments:\n  -h, --help            show this help message and exit\n  --commit              Commit, that the changes should really be deployed. (only deploy action)\n  --servers server-id   Only affect these server id(s). Can be given multiple times. By default, all servers are affected.\n  --projects project-name\n                        Only affect these projects. The project name passed here is NOT the name from the Web UI, it is the name that you defined in your local rdns zone file. Can be given multiple times. By default, all projects are affected.\nuser@pc:~/Workspace/hcloud-rdns-manager$ \n```\n\n### Validate your config file\n\nIf you just want to check, whether the syntax of you config file is correct, you can simply\nuse `hcloud-rdns-cli check my-config.yml`\n\n```\nuser@pc:~/Workspace/hcloud-rdns-manager$ hcloud-rdns-cli check my-config.yml \nValidating passed rdns zone config...\nThe passed rdns zone config is valid!\nuser@pc:~/Workspace/hcloud-rdns-manager$ \n```\n\nThe config file will be checked/validated with each run - e.g. also before you do a validation or a deployment. If\nsomething is wrong, it will abort before doing anything regarding the Hetzner API.\n\n### Validation and Deployment\n\nThe script is going to practice something like a staging - so if you run `hcloud-rdns-cli deploy my-config.yml`, you\nwill only do a dry-run and see, what's going to be changed.\n\n```\nuser@pc:~/Workspace/hcloud-rdns-manager$ hcloud-rdns-cli deploy my-config.yml\nValidating passed rdns zone config...\nThe passed rdns zone config is valid!\n\n--> Server 1234567 (myfancyserver) from project my-project-1\nNothing to do!\n\n--> Server 6942069 (myperfectserver) from project my-project-1\nNothing to do!\n\n--> Server 6842569 (veryspecialserver) from project my-other-project\n+----------+----------------------------+-----------------------------+--------------------------------------+\n| Action   | IP                         | Current PTR                 | New PTR                              |\n|----------+----------------------------+-----------------------------+--------------------------------------|\n| UPDATE   | 2000:1ce:beer:babe:69::1   | myvpnserver.vpn.mydomain.de | myvpnserver.vpn-internal.mydomain.de |\n| CREATE   | 2000:1ce:beer:babe:69::2   |                             | myvpnclient.vpn-internal.mydomain.de |\n| DELETE   | 2000:1ce:beer:babe:69::420 | kekse.vpn.mydomain.de       |                                      |\n+----------+----------------------------+-----------------------------+--------------------------------------+\n\nuser@pc:~/Workspace/hcloud-rdns-manager$ \n```\n\nAnd if this is what you want, you can simply pass an additional `--commit` to put these changes into production.\n\n```\nuser@pc:~/Workspace/hcloud-rdns-manager$ hcloud-rdns-cli --commit deploy my-config.yml\nValidating passed rdns zone config...\nThe passed rdns zone config is valid!\n\n--> Server 1234567 (myfancyserver) from project my-project-1\nNothing to do!\n\n--> Server 6942069 (myperfectserver) from project my-project-1\nNothing to do!\n\n--> Server 6842569 (veryspecialserver) from project my-other-project\n+----------+----------------------------+-----------------------------+--------------------------------------+\n| Action   | IP                         | Current PTR                 | New PTR                              |\n|----------+----------------------------+-----------------------------+--------------------------------------|\n| UPDATE   | 2000:1ce:beer:babe:69::1   | myvpnserver.vpn.mydomain.de | myvpnserver.vpn-internal.mydomain.de |\n| CREATE   | 2000:1ce:beer:babe:69::2   |                             | myvpnclient.vpn-internal.mydomain.de |\n| DELETE   | 2000:1ce:beer:babe:69::420 | kekse.vpn.mydomain.de       |                                      |\n+----------+----------------------------+-----------------------------+--------------------------------------+\nApplying changeset...\nChanges applied!\n\nuser@pc:~/Workspace/hcloud-rdns-manager$ \n```\n\nYou can use the additional parameters `--servers <server ID>` or `--projects <project name>` to limit your changes to\napply. This could be helpful, if you manage a very big environment with this script.\n\n```\nuser@pc:~/Workspace/hcloud-rdns-manager$ hcloud-rdns-cli --projects my-other-project deploy my-config.yml\nValidating passed rdns zone config...\nThe passed rdns zone config is valid!\n\n--> Server 6842569 (veryspecialserver) from project my-other-project\n+----------+----------------------------+-----------------------------+--------------------------------------+\n| Action   | IP                         | Current PTR                 | New PTR                              |\n|----------+----------------------------+-----------------------------+--------------------------------------|\n| UPDATE   | 2000:1ce:beer:babe:69::1   | myvpnserver.vpn.mydomain.de | myvpnserver.vpn-internal.mydomain.de |\n| CREATE   | 2000:1ce:beer:babe:69::2   |                             | myvpnclient.vpn-internal.mydomain.de |\n| DELETE   | 2000:1ce:beer:babe:69::420 | kekse.vpn.mydomain.de       |                                      |\n+----------+----------------------------+-----------------------------+--------------------------------------+\n\nuser@pc:~/Workspace/hcloud-rdns-manager$ \n```\n\n### Dump an existing config\n\nNo backup, no mercy. That's why I implemented a feature to dump the rDNS configuration based on the projects and servers\ndefined in your current configuration.\n\nJust run `hcloud-rdns-cli dump my-config.yml` and your dump will be stored in a file\ncalled `hcloud_rdns_dump_YYYY-mm-dd_HH-MM-SS.yml` in your current working directory. The spacer will be replaced with a\ncurrent timestamp.\n\n```\nuser@pc:~/Workspace/hcloud-rdns-manager$ hcloud-rdns-cli dump my-config.yml \nValidating passed rdns zone config...\nThe passed rdns zone config is valid!\nCreating project dump...\nDump created!\nValidating passed rdns zone config...\nThe passed rdns zone config is valid!\nWriting dump to hcloud_rdns_dump_2022-01-22_22-17-34.yml...\nDump written to hcloud_rdns_dump_2022-01-22_22-17-34.yml !\nuser@pc:~/Workspace/hcloud-rdns-manager$ \n```\n\nThe dump will be syntax checked with the same schema, as the input config was checked. Based on that fact, your dump\nshould be directly re-importable with the `deploy` action.   \nPlease note, that the dump action is also compatible with the `--projects` and `--servers` options.\n\n## Development\n\nThis is an uv project. You can set up your development environment by cloning\nthis Repository via `git` and running a `uv sync` in the project\ndirectory afterward.\n\nThe Lockfile can be updated by using `uv lock` (also updates the installed\npackages in the dependency tree).\n\nThe project can be bundled by running `uv build` and published by running\n`uv publish`. Results can be found in the `dist/` directory.\n\nFor code linting and formatting, `ruff` was used. You may run it via\n`uv run ruff check` or `uv run ruff format`.\n\nThis project is using [Semantic Versioning](https://semver.org/) and\n[Conventional Commits](https://www.conventionalcommits.org/en/).\n\n## Not clarified topics and possible problems\n\n- I didn't test this with floating ip addresses or subnets - I guess those are handled different by the Hetzner API\n- This was only tested under Linux. All other unix-like OS (including macOS) should work without any problems\n  (in theory), but be careful. For Windows, it could work - I basically don't have an idea, whether or whether not.\n- Unit tests using PyTest would be pretty nice, but I don't have the time for that. May somebody want's to\n  contribute them? :)\n\n## Licensing, contribution, thanks and other stuff\n\nFor licensing information, please see the `LICENSE` file. Every idea and everybody's\nknowledge is welcome - feel free to contribute by creating issues and pull requests! :)\n\nThanks to the python3 development team!\n\nAlso, thanks to the maintainers of the python3 dependencies:\n\n- tabulate: [GitHub](https://github.com/astanin/python-tabulate)\n- pyyaml: [Website](https://pyyaml.org/) / [GitHub](https://github.com/yaml/pyyaml)\n- hcloud: [GitHub](https://github.com/hetznercloud/hcloud-python)\n- loguru: [GitHub](https://github.com/Delgan/loguru)\n- jsonschema: [GitHub](https://github.com/Julian/jsonschema)\n\nFurthermore, I want to thank Jetbrains for providing their [PyCharm IDE](https://www.jetbrains.com/pycharm/) for free to\nthe community (I used it to write the code of this project). Please note, that this is not a paid ad - I am truly\nconvinced of their work, and I am writing this based on my own free will.\n",
    "bugtrack_url": null,
    "license": "Copyright (c) 2025 wh0ami  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \u201cSoftware\u201d), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED \u201cAS IS\u201d, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",
    "summary": "The hcloud-rdns-manager - the smart way to manage your rDNS records in the Hetzner cloud",
    "version": "1.0.2",
    "project_urls": {
        "Documentation": "https://codeberg.org/wh0ami/hcloud-rdns-manager/src/branch/master/README.md",
        "Homepage": "https://codeberg.org/wh0ami/hcloud-rdns-manager",
        "Issues": "https://codeberg.org/wh0ami/hcloud-rdns-manager/issues",
        "Repository": "https://codeberg.org/wh0ami/hcloud-rdns-manager"
    },
    "split_keywords": [
        "automation",
        " cloud",
        " dns",
        " hetzner",
        " iac",
        " infrastructure as code",
        " ptr",
        " rdns"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d5d5ad449a9e4fbbb76359ed2e94c1143dac239302b3182a2fca937b3b103d18",
                "md5": "0738a4dc5cbf37a26f340b9ec76d05d8",
                "sha256": "c0035515f57cabf8e16dc4764d2eef1fc36c5abb08e4a978f7a1aed5989f3403"
            },
            "downloads": -1,
            "filename": "hcloud_rdns_manager-1.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "0738a4dc5cbf37a26f340b9ec76d05d8",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.13",
            "size": 13745,
            "upload_time": "2025-02-09T00:09:17",
            "upload_time_iso_8601": "2025-02-09T00:09:17.222281Z",
            "url": "https://files.pythonhosted.org/packages/d5/d5/ad449a9e4fbbb76359ed2e94c1143dac239302b3182a2fca937b3b103d18/hcloud_rdns_manager-1.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0d35fa11d2c35ae4b9e52d806e25eed9ea59ca12af9d651786f6e21734af16cd",
                "md5": "0dccfa669e36b3c5f091caa8733bd1d2",
                "sha256": "39ae0c12ecd54a0a41787ac38a14b20620b60cb68f1353d726fba5f2c3a964b3"
            },
            "downloads": -1,
            "filename": "hcloud_rdns_manager-1.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "0dccfa669e36b3c5f091caa8733bd1d2",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.13",
            "size": 22198,
            "upload_time": "2025-02-09T00:09:18",
            "upload_time_iso_8601": "2025-02-09T00:09:18.348690Z",
            "url": "https://files.pythonhosted.org/packages/0d/35/fa11d2c35ae4b9e52d806e25eed9ea59ca12af9d651786f6e21734af16cd/hcloud_rdns_manager-1.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-09 00:09:18",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": true,
    "codeberg_user": "wh0ami",
    "codeberg_project": "hcloud-rdns-manager",
    "lcname": "hcloud-rdns-manager"
}
        
Elapsed time: 0.86787s