Enable CI/CD by adding .onedev-buildspec.yml
| src | Loading last commit info... | |
| tests | ||
| .gitignore | ||
| .phpunit.result.cache | ||
| README.md | ||
| composer.json | ||
| composer.lock | ||
| phpunit.xml | ||
| sample.config.php |
README.md
Kipchak ClouDNS Driver
A fully typed ClouDNS DNS driver for the Kipchak API Development Kit. Manage DNS zones and records using the ClouDNS API directly — no SDK dependency required.
Requirements
- PHP 8.4+
- Kipchak ^2
kipchak/driver-config^1kipchak/driver-http^1
Installation
composer require kipchak/driver-cloudns
Initialise
Add to your drivers/drivers.php:
\Kipchak\Driver\ClouDns\ClouDns::initialise($container);
Configuration
Create config/kipchak.cloudns.php:
<?php
use function Kipchak\Core\env;
return [
'connections' => [
'default' => [
'auth_id' => env('CLOUDNS_AUTH_ID', ''),
'auth_password' => env('CLOUDNS_AUTH_PASSWORD', ''),
],
],
];
Supply exactly one identity key per connection: auth_id, sub_auth_id, or sub_auth_user.
auth_password is always required.
Usage
use Kipchak\Driver\ClouDns\ClouDns;
use Kipchak\Driver\ClouDns\Enum\DnsRecordType;
use Kipchak\Driver\ClouDns\Request\AddDnsRecordRequest;
use Kipchak\Driver\ClouDns\Request\ModifyDnsRecordRequest;
$dns = ClouDns::get(); // 'default' connection
// List zones
$zones = $dns->listZones();
// List records
$records = $dns->listRecords('example.com');
// Add an A record
$dns->addRecord('example.com', new AddDnsRecordRequest(
type: DnsRecordType::A,
host: 'api',
ttl: 3600,
record: '192.0.2.1',
));
// Modify a record
$dns->modifyRecord('example.com', 123456, new ModifyDnsRecordRequest(
host: 'api',
ttl: 300,
record: '192.0.2.2',
));
// Delete a record
$dns->deleteRecord('example.com', 123456);
GeoDNS
Add GeoDNS-targeted records using the geodnsLocation and geodnsCode parameters:
use Kipchak\Driver\ClouDns\Request\AddDnsRecordRequest;
use Kipchak\Driver\ClouDns\Enum\DnsRecordType;
// Add a GeoDNS A record targeting European visitors
$dns->addRecord('example.com', new AddDnsRecordRequest(
type: DnsRecordType::A,
host: '@',
ttl: 60,
record: '198.51.100.10',
geodnsLocation: 7, // ClouDNS location ID for Europe
geodnsCode: 'EU',
));
// Modify an existing GeoDNS record
$dns->modifyRecord('example.com', 654321, new ModifyDnsRecordRequest(
host: '@',
ttl: 60,
record: '198.51.100.20',
geodnsLocation: 7,
geodnsCode: 'EU',
));
GeoDNS requires a zone of type ZoneType::GeoDns. Location IDs and codes are available
from the ClouDNS control panel or the list-geodns-locations API endpoint.
Features
- Multiple named connections (main account, sub-accounts, sub-users)
- Zone management: list zones, get zone info, page count
- DNS record management: list, get, add, modify, delete
- Typed enums for record types (
DnsRecordType), zone types (ZoneType), and status (RecordStatus) - Typed request objects:
AddDnsRecordRequest,ModifyDnsRecordRequest,ListZonesRequest,ListDnsRecordsRequest - Typed result objects:
ZoneResult,DnsRecordResult - Full record-type support: A, AAAA, ALIAS, CAA, CERT, CNAME, DNSKEY, DS, HINFO, HTTPS, LOC, MX, NAPTR, NS, PTR, RP, SMIMEA, SPF, SRV, SSHFP, SVCB, TLSA, TXT, WR
- GeoDNS record support
Running Tests
composer install
./vendor/bin/phpunit
License
MIT — see LICENSE!!missing!!.