Domains ======= Get domain ---------- To retrieve a specific domain, you will need the domain's **id**, not its domain name: .. code-block:: php $domain = $service->domain('{domainId}'); If you are having trouble remembering or accessing the domain ID, you can do a domain list search for your domain and then access its ID. List domains ------------ These calls provide a list of all DNS domains manageable by a given account. The resulting list is flat, and does not break the domains down hierarchically by subdomain. All representative domains are included in the list, even if a domain is conceptually a subdomain of another domain in the list. .. code-block:: php $domains = $service->domainList(); # Return detailed information for each domain $domains = $service->domainList(true); Filter parameters ~~~~~~~~~~~~~~~~~ You can filter the search by using the ``name`` parameter in a key/value array supplied as a method argument. For example, to retrieve domains named ``foo.com``, along with any subdomains like ``bar.foo.com``: .. code-block:: php $hoolaDomains = $service->domainList(array( 'name' => 'foo.com' )); Filter criteria may consist of: * Any letter (A-Za-z) * Numbers (0-9) * Hyphen ("-") * 1 to 63 characters Filter criteria should not include any of the following characters: ' + , \| ! " £ $ % & / ( ) = ? ^ \* ç ° § ; : \_ > ] [ @ à, é, ò Finding a domain ID ~~~~~~~~~~~~~~~~~~~ Once you have a list of domains, to retrieve a domain's ID: .. code-block:: php foreach ($domains as $domain) { $id = $domain->id; } List domain changes ------------------- This call shows all changes to the specified domain since the specified date/time. To list all available changes for a domain for the current day: .. code-block:: php $changes = $domain->changes(); For more granular control, you can manually define the ``since`` parameter like so: .. code-block:: php $since = date('c', strtotime('last week')); $changes = $domain->changes($since); Once you have a set of changes, you can iterate over them like so: .. code-block:: php foreach ($changes->changes as $change) { printf("Domain: %s\nAction: %s\nTarget: %s", $change->domain, $change->action, $change->targetType); foreach ($change->changeDetails as $detail) { printf("Details: %s was changed from %s to %s", $detail->field, $detail->oldValue, $detail->newValue); } } Create domain ------------- The first thing you will need to do is instantiate a new object and set the primary ``A`` record for the DNS domain, like so: .. code-block:: php // get empty object $domain = $service->domain(); // add A record $aRecord = $domain->record(array( 'type' => 'A', 'name' => 'example.com', 'data' => '192.0.2.17', 'ttl' => 3600 )); $domain->addRecord($aRecord); You also have the option of adding more types of DNS records such as ``CNAME``, ``MX`` and ``NS`` records. This step is completely optional and depends on your requirements: .. code-block:: php // add CNAME record $cRecord = $domain->record(array( 'type' => 'CNAME', 'name' => 'www.example.com', 'data' => 'example.com', 'ttl' => 3600 )); $domain->addRecord($cRecord); // add MX record $mxRecord = $domain->record(array( 'type' => 'MX', 'data' => 'mail.example.com', 'name' => 'example.com', 'ttl' => 3600, 'priority' => 5 )); $domain->addRecord($mxRecord); // add NS record $nsRecord = $domain->record(array( 'type' => 'NS', 'data' => 'dns1.stabletransit.com', 'name' => 'example.com', 'ttl' => 5400 )); $domain->addRecord($nsRecord); You can also add sub-domains to your new DNS domain. Again, this is completely optional: .. code-block:: php $subdomain = $domain->subdomain(array( 'emailAddress' => 'foo@example.com', 'name' => 'dev.example.com', 'comment' => 'Dev portal' )); $domain->addSubdomain($subdomain); Once you've finished configuring how your DNS domain will work, you're ready to specify the essential details and send it to the API for creation: .. code-block:: php $domain->create(array( 'emailAddress' => 'webmaster@example.com', 'ttl' => 3600, 'name' => 'example.com', 'comment' => 'Optional comment' )); Clone domain ------------ This call will duplicate an existing domain under a new name. By default, all records and, optionally, subdomains are duplicated as well. The method signature you will need to use is: .. function:: cloneDomain( $newDomainName[, $subdomains[, $comments[, $email[, $records]]]] ) Clone a domain :param string $newDomainName: The name of the new domain entry :param bool $subdomains: Set to ``true`` to clone all the subdomains for this domain :param bool $comments: Set to ``true`` to replace occurrences of the reference domain name with the new domain name in comments on the cloned (new) domain. :param bool $email: Set to ``true`` to replace occurrences of the reference domain name with the new domain name in data fields (of records) on the cloned (new) domain. Does not affect NS records. :param bool $records: Set to ``true`` to replace occurrences of the reference domain name with the new domain name in data fields (of records) on the cloned (new) domain. Does not affect NS records. For example: .. code-block:: php $asyncResponse = $domain->cloneDomain('new-name.com', true, false, true, false); Export domain ------------- This call provides access to the `BIND `_ (Berkeley Internet Name Domain) 9 for the requested domain. This call is for a single domain only, and as such, does not traverse up or down the domain hierarchy for details: .. code-block:: php $asyncResponse = $domain->export(); $body = $asyncResponse->waitFor('COMPLETED'); echo $body['contents']; Import domain ------------- This operation will create a new DNS domain according to a `BIND `_ (Berkeley Internet Name Domain) 9 formatted value. In order for the BIND value to be considered valid, it needs to adhere to the following rules: * Each record starts on a new line and on the first column. If a record will not fit on one line, use the BIND\_9 line continuation convention where you put a left parenthesis and continue the one record on the next line and put a right parenthesis when the record ends. For example: example2.net. 3600 IN SOA dns1.stabletransit.com. (sample@rackspace.com. 1308874739 3600 3600 3600 3600) * The attribute values of a record must be separated by a single blank or tab. No other white space characters. * If there are any NS records, the data field should not be ``dns1.stabletransit.com`` or ``dns2.stabletransit.com``. They will result in "duplicate record" errors. For example: .. code-block:: php $bind9Data = <<import($bind9Data); Modify domain ------------- Only the TTL, email address and comment attributes of a domain can be modified. Records cannot be added, modified, or removed through this API operation - you will need to use the `add records `__, `modify records `__ or `remove records `__ operations respectively. .. code-block:: php $domain->update(array( 'ttl' => ($domain->ttl + 100), 'emailAddress' => 'new_dev@foo.com' )); Delete domain ------------- .. code-block:: php $domain->delete();