octodns / octodns-gandi

Gandi v5 API provider for octoDNS
MIT License
6 stars 1 forks source link

API key now deprecated, PAT support ? #23

Closed comete-geek closed 11 months ago

comete-geek commented 11 months ago

Hello, Gandi says API key is now deprecated (https://news.gandi.net/en/2023/09/pat-jetons-acces-personnels-api-gandi/). I've quickly tested octodns-gandi (0.0.1) with a PAT token without success.

requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: https://api.gandi.net/v5/livedns/domains/mydomain.io/records

Thanks

ross commented 11 months ago

Thanks for the report. I don't personally have access to gandi so it'll be up to someone else to put together a PR to handle the change.

Support-Green-IT-Solutions commented 11 months ago

Hello,

I open a pull request to fix Header Authorization with the new method for Gandi API. Futhermore, your PAT Token need permission to see and manage your organization otherwise you can't edit zone.

Best regards

yzguy commented 11 months ago

28

onny commented 8 months ago

I created a PAT and run GANDI_TOKEN=*** octodns-sync --config config.yaml --doit but get:

2024-01-16T15:23:31  [140324114007872] INFO  Manager __init__: config_file=config.yaml, (octoDNS 1.4.0)
2024-01-16T15:23:31  [140324114007872] INFO  Manager _config_executor: max_workers=1
2024-01-16T15:23:31  [140324114007872] INFO  Manager _config_include_meta: include_meta=False
2024-01-16T15:23:31  [140324114007872] INFO  Manager _config_auto_arpa: auto_arpa=False
2024-01-16T15:23:31  [140324114007872] INFO  Manager __init__: global_processors=[]
2024-01-16T15:23:31  [140324114007872] INFO  Manager __init__: global_post_processors=[]
2024-01-16T15:23:31  [140324114007872] INFO  Manager __init__: provider=config (octodns.provider.yaml 1.4.0)
2024-01-16T15:23:31  [140324114007872] INFO  Manager __init__: provider=gandi (octodns_gandi 0.0.2+unknown)
2024-01-16T15:23:31  [140324114007872] INFO  Manager sync: eligible_zones=[], eligible_targets=[], dry_run=False, force=False, plan_output_fh=<stdout>
2024-01-16T15:23:31  [140324114007872] INFO  Manager sync:   sources=['config']
2024-01-16T15:23:31  [140324114007872] INFO  Manager sync:   dynamic zone=*, sources=None
2024-01-16T15:23:31  [140324114007872] INFO  Manager sync:      adding dynamic zone=turbotux.de.
2024-01-16T15:23:31  [140324114007872] INFO  Manager sync:   zone=turbotux.de.
2024-01-16T15:23:31  [140324114007872] INFO  Manager sync:   sources=['config']
2024-01-16T15:23:31  [140324114007872] INFO  Manager sync:   targets=['gandi']
2024-01-16T15:23:31  [140324114007872] INFO  YamlProvider[config] populate:   found 1 records, exists=False
2024-01-16T15:23:31  [140324114007872] INFO  GandiProvider[gandi] plan: desired=turbotux.de.
Traceback (most recent call last):
  File "/nix/store/sffhkqdxq6priaj4p1nzp80ap395l9rg-python3.11-octodns-1.4.0/bin/.octodns-sync-wrapped", line 9, in <module>
    sys.exit(main())
             ^^^^^^
  File "/nix/store/i3zfqgyi4qr6kxa8yyqpraypwvddix9r-python3-3.11.7-env/lib/python3.11/site-packages/octodns/cmds/sync.py", line 57, in main
    manager.sync(
  File "/nix/store/i3zfqgyi4qr6kxa8yyqpraypwvddix9r-python3-3.11.7-env/lib/python3.11/site-packages/octodns/manager.py", line 697, in sync
    ps, d = future.result()
            ^^^^^^^^^^^^^^^
  File "/nix/store/i3zfqgyi4qr6kxa8yyqpraypwvddix9r-python3-3.11.7-env/lib/python3.11/site-packages/octodns/manager.py", line 60, in result
    return self.func(*self.args, **self.kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/i3zfqgyi4qr6kxa8yyqpraypwvddix9r-python3-3.11.7-env/lib/python3.11/site-packages/octodns/manager.py", line 460, in _populate_and_plan
    plan = target.plan(zone, processors=processors)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/i3zfqgyi4qr6kxa8yyqpraypwvddix9r-python3-3.11.7-env/lib/python3.11/site-packages/octodns/provider/base.py", line 226, in plan
    exists = self.populate(existing, target=True, lenient=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/i3zfqgyi4qr6kxa8yyqpraypwvddix9r-python3-3.11.7-env/lib/python3.11/site-packages/octodns_gandi/__init__.py", line 250, in populate
    for record in self.zone_records(zone):
                  ^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/i3zfqgyi4qr6kxa8yyqpraypwvddix9r-python3-3.11.7-env/lib/python3.11/site-packages/octodns_gandi/__init__.py", line 233, in zone_records
    self._zone_records[zone.name] = self._client.zone_records(
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/i3zfqgyi4qr6kxa8yyqpraypwvddix9r-python3-3.11.7-env/lib/python3.11/site-packages/octodns_gandi/__init__.py", line 82, in zone_records
    records = self._request(
              ^^^^^^^^^^^^^^
  File "/nix/store/i3zfqgyi4qr6kxa8yyqpraypwvddix9r-python3-3.11.7-env/lib/python3.11/site-packages/octodns_gandi/__init__.py", line 65, in _request
    raise GandiClientUnauthorized(r)
octodns_gandi.GandiClientUnauthorized: {"message":"You must provide an access token or an API Key. See https://api.gandi.net/docs/authentication/"}

Does this still work?

here's my config

---
providers:
  config:
    class: octodns.provider.yaml.YamlProvider
    directory: ./config
    default_ttl: 3600
    enforce_order: True
  gandi:
    class: octodns_gandi.GandiProvider
    token: env/GANDI_TOKEN

zones:
  '*':
    sources:
      - config
    targets:
      - gandi
onny commented 7 months ago

okay sorry was my fault. i had an .netrc lyring around in $HOME and this totally interacts with all python requests :/