#!/usr/bin/perl -w # добавляем алиас *.domain.com к каждому домену use strict; use dedikit; my $DB_ID = YOUR_LOGIN; my $DB_LOGIN = 'admin'; my $DB_PASSWORD = YOUR_PASSWORD; dedikit::login(id => $DB_ID, login => $DB_LOGIN, password => $DB_PASSWORD, ); if($dedikit::ERROR) { print "Failed to login ($dedikit::ERROR)\n"; exit 1; } # выбираем все хосты my @result = dedikit::select(table => 'hosts', columns => [ 'id', 'name' ]); for my $href (@result) { my $host_id = $href->{id}; my $hostname = $href->{name}; # выбираем dnszone_id my @res2 = dedikit::select(table => 'dnszones', columns => [ 'id' ], where => [ { op => 'EQ', name => 'name', value => $hostname } ] ); if(scalar @res2 == 0) { print STDERR "Not found DNS zone for host $hostname, skipping!\n"; next; } my $dnszone_id = $res2[0]->{id}; # проверяем, есть ли уже * в алиасах # (на самом деле это не нужно, так как индекс не позволит вставить # дубликат) @res2 = dedikit::select(table => 'host_aliases', columns => [ 'id' ], where => [ { op => 'EQ', name => 'dnszone_prefix', value => '*', }, { op => 'AND', }, { op => 'EQ', name => 'host_id', value => $host_id, }, { op => 'AND', }, { op => 'EQ', name => 'dnszone_id', value => $dnszone_id } ] ); if(scalar @res2 != 0) { print "* already present on host $hostname, skipping\n"; next; } print "Processing host $hostname\n"; # засовываем алиас dedikit::insert(table => 'host_aliases', columns => { host_id => $host_id, dnszone_id => $dnszone_id, dnszone_prefix => '*', } ); }