Поскольку Вы имеете контроль над доменом, я думаю, что у Вас есть все основания использовать DNS для этого. Вот пара опций:
Выполните свой собственный DNS-сервер и запишите новое записи на зональный файл автоматически, когда пользователь подпишется. Когда клиент подписывается через Ваш веб-интерфейс, Вы называете Сценарий оболочки, который работает через SSH на Вашем DNS-сервере для записи записи в файл. Передача в переменных для домена клиента и на каком сервере Вы хотите их.
Или можно использовать Сервис DNS как www.zerigo.com и автоматизировать его через их API.
Сценарий был бы хотеть что-то как:
#!bin/sh
serverip=$1
customername=$2
cat > /etc/DNSSERVER/Zonefile <<-_EOF1_
IN A $serverip $customername.ourdomain.com
_EOF1_
Передача в переменных, когда Вы выполняете сценарий (которые собраны через форму на Вашем сайте на регистрацию):
./add_a_record.sh 73.203.218.41 <customername>
DNS был специально предназначен для обработки любого количества запросов, которые можно бросить в него...
Мне удалось создать политику cfengine3, аналогичную манифест @cosimo, и он, похоже, работает. Меня это устраивает, но я все еще считаю, что ошибка № 592216 еще не устранена, поэтому я могу передать еще одну в Debian.
Моя реализация cfengine использует тот факт, что /etc/locale.gen
похоже, содержит все возможные локали, но закомментированы.
Вместо того, чтобы переписывать файл с нуля и, возможно, вносить ошибки, Я прошу cfengine раскомментировать локали, которые я хочу создать. Если языковой стандарт не указан, потому что он не поддерживается или я ошибся, ничего не происходит. Этот подход также упрощает ситуацию, поскольку нет необходимости записывать кодировку одновременно и : вы можете просто написать локаль и позволить cfengine раскомментировать все связанные кодировки для этой локали.
'nuff сказал :
body common control
{
inputs => { "cfengine_stdlib.cf" } ;
bundlesequence => {"test"} ;
}
bundle agent test
{
vars:
"locales"
slist => { "da_DK.UTF-8", "de_DE.UTF-8", "en_US.UTF-8",
"es_ES.UTF-8", "fr_FR.UTF-8", "it_IT.UTF-8",
"nl_NL.UTF-8", "ru_RU.UTF-8", "sv_SE.UTF-8",
"tr_TR.UTF-8", "id_ID.UTF-8", "nb_NO.UTF-8",
"pl_PL.UTF-8", "vi_VN.TCVN" },
comment => "locales to generate" ;
files:
"/etc/locale.gen"
edit_line => enable_locales(@(test.locales)),
classes => if_repaired("regenerate_locales"),
comment => "Enable locales, trigger locale-gen if needed" ;
commands:
regenerate_locales::
"/usr/sbin/locale-gen"
comment => "Regenerate locales when needed" ;
reports:
regenerate_locales::
"Locales regenerated" ;
}
bundle edit_line enable_locales(locales)
{
replace_patterns:
"^#\s+($(locales).*)$"
replace_with => uncomment ;
}
Да, я столкнулся с той же проблемой, и после некоторой борьбы с ней я нашел обходной путь, который использует /etc/locale.gen
.
I опубликовал марионеточный модуль для настройки локалей, которые мы обычно используем на наших серверах, то есть только en_US.UTF-8
:
https://github.com/cosimo/puppet-modules/blob/ master / locales / manifestests / init.pp
Вот он, встроенный:
class locales {
package { "locales":
ensure => "latest",
}
file { "/etc/locale.gen":
source => [
"puppet:///locales/locale.gen.$fqdn",
"puppet:///locales/locale.gen"
],
owner => "root",
group => "root",
mode => 644,
require => Package["locales"],
}
exec { "/usr/sbin/locale-gen":
subscribe => File["/etc/locale.gen"],
refreshonly => true,
require => [ Package["locales"], File["/etc/locale.gen"] ]
}
}
Даже если вы не используете puppet ;-), вы можете легко понять, что происходит. Вы просто создаете файл /etc/locale.gen
со списком локалей, которые вы хотите создать, а затем запускаете / usr / sbin / locale-gen
.
Вот это файл списка, который я использую как /etc/locale.gen
:
# This file lists locales that you wish to have built. You can find a list
# of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add
# user defined locales to /usr/local/share/i18n/SUPPORTED. If you change
# this file, you need to rerun locale-gen.
en_US.UTF-8 UTF-8