2015-09-28 5 views
2

Я хотел бы добавить дополнительные записи cname в google cloud dns, используя php api. Записи cname уже существуют для sub1.example.com и sub2.example.com, добавленных через веб-консоль. но im получение ошибкиgoogle cloud dns, php api, добавление нескольких cname

Набор записей ресурсов «entity.change.additions [0]» недействителен, поскольку DNS-имя «example.com.» могут иметь либо один набор записей ресурса CNAME, либо набор записей ресурсов других типов, но не оба.

<?php 
require '../autoload.php'; 


$client_email = CEMAIL; 
$private_key = file_get_contents(PKEY); 
$scopes = array('https://www.googleapis.com/auth/ndev.clouddns.readwrite'); 
$project = PNAME; 
$managedZone = "example-com"; 

$creds = new Google_Auth_AssertionCredentials($client_email,$scopes,$private_key); 
$client = new Google_Client(); 
$client->setAssertionCredentials($creds); 

$resource = new Google_Service_Dns_ResourceRecordSet(); 
$resource->kind = "dns#resourceRecordSet"; 
$resource->name = "example.com."; 
$resource->rrdatas[] = "sub3.example.com."; 
$resource->ttl = 300; 
$resource->type = "CNAME"; 

$dns = new Google_Service_Dns($client); 

$change = new Google_Service_Dns_Change(); 
$change->kind = "dns#change"; 
$change->setAdditions([$resource]); 

$r=$dns->changes->create($project,$managedZone,$change); 
echo '<pre>'.print_r($r,true).'</pre>'; 

?> 

также я не мог найти способ перечислить existsing CNAME записи с помощью PHP API, как это бы дало мне ключ к ответу здесь. Кто-нибудь знает, как извлечь эти, до сих пор код

<?php 
//include details from above 

$dns = new Google_Service_Dns($client); 

$r=$dns->managedZones->listManagedZones($project); 
echo '<pre>'.print_r($r,true).'</pre>'; 

$r=$dns->managedZones->get($project,$managedZone); 
echo '<pre>'.print_r($r,true).'</pre>'; 

?> 

не перечисляет эти CNAME записи, хотя методы, получить и listManagedZones взять дополнительный необязательный параметр я не могу найти документацию на нем

источник: https://github.com/google/google-api-php-client/blob/master/src/Google/Service/Dns.php линия: 416, 395

следовать по из статьи: Google Cloud DNS Services - entity.change parameter is required but missing

-

https://developers.google.com/api-client-library/php/

https://developers.google.com/apis-explorer/#p/dns/v1/

https://support.google.com/cloud/answer/6158849?hl=en

https://cloud.google.com/dns/api/v1/resourceRecordSets#resource

https://cloud.google.com/dns/docs

ответ

1

для тех, кто может найти этот пост позже я ответил на свой вопрос, так как на этот пост

https://www.zeitgeist.se/2014/05/01/google-cloud-dns-how-to/

я заметил, к середине статьи, список для почты записи имели корневой домен в поле rrdatas и поддомен имя свойства ресурса, переключил два круглых и voila

$resource = new Google_Service_Dns_ResourceRecordSet(); 
$resource->kind = "dns#resourceRecordSet"; 
$resource->name = "sub3.example.com.";  //sub 
$resource->rrdatas[] = "example.com.";  //root domain 

TXT дополнения:

$del = new Google_Service_Dns_ResourceRecordSet(); 
$del->kind = "dns#resourceRecordSet"; 
$del->name = "example.com."; 
$del->type = "TXT"; 
$del->ttl = 300; 
$del->rrdatas[] = "\"test=test\""; 

$add = new Google_Service_Dns_ResourceRecordSet(); 
$add->kind = "dns#resourceRecordSet"; 
$add->name = "example.com."; 
$add->type = "TXT"; 
$add->ttl = 300; 
$add->rrdatas[] = "\"test2=test2\""; 
$add->rrdatas[] = "\"test3=test3\""; 

$change->setAdditions([$add]); 
$change->setDeletions([$del]); 

$r=$dns->changes->create($project,$managedZone,$change); 

https://github.com/google/google-api-php-client/tree/master/examples

llso.

+

Looking up Google Cloud DNS records (nslookup) directly

+0

+1 Что касается объяснения ошибки, нашел 'cnameResourceRecordSetConflict' здесь: https://cloud.google.com/dns/troubleshooting?hl=en, который "несколько" дал ключ к разгадке... – EdSF