/*
* Copyright 2014 by SCSK Corporation.
*
* This file is part of PrimeCloud Controller(TM).
*
* PrimeCloud Controller(TM) is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* PrimeCloud Controller(TM) is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PrimeCloud Controller(TM). If not, see <http://www.gnu.org/licenses/>.
*/
package jp.primecloud.auto.process.nifty;
import jp.primecloud.auto.entity.crud.Instance;
import jp.primecloud.auto.entity.crud.NiftyInstance;
import jp.primecloud.auto.entity.crud.Platform;
import jp.primecloud.auto.process.DnsProcessClient;
import jp.primecloud.auto.process.DnsProcessClientFactory;
import jp.primecloud.auto.process.ProcessLogger;
import jp.primecloud.auto.service.ServiceSupport;
import org.apache.commons.lang.StringUtils;
/**
* <p>
* TODO: クラスコメントを記述
* </p>
*
*/
public class NiftyDnsProcess extends ServiceSupport {
protected DnsProcessClientFactory dnsProcessClientFactory;
protected ProcessLogger processLogger;
/**
* TODO: メソッドコメント
*
* @param instanceNo
*/
public void startDns(Long instanceNo) {
Instance instance = instanceDao.read(instanceNo);
Platform platform = platformDao.read(instance.getPlatformNo());
if (platform.getInternal()) {
// 内部のプラットフォームの場合
startDnsNormal(instanceNo);
} else {
// 外部のプラットフォームの場合
startDnsVpn(instanceNo);
}
// イベントログ出力
instance = instanceDao.read(instanceNo);
processLogger.debug(null, instance, "DnsRegist", new Object[] { instance.getFqdn(), instance.getPublicIp() });
}
/**
* TODO: メソッドコメント
*
* @param instanceNo
*/
public void stopDns(Long instanceNo) {
Instance instance = instanceDao.read(instanceNo);
Platform platform = platformDao.read(instance.getPlatformNo());
if (platform.getInternal()) {
// 内部のプラットフォームの場合
stopDnsNormal(instanceNo);
} else {
// 外部のプラットフォームの場合
stopDnsVpn(instanceNo);
}
// イベントログ出力
processLogger.debug(null, instance, "DnsUnregist", new Object[] { instance.getFqdn(), instance.getPublicIp() });
}
protected void startDnsNormal(Long instanceNo) {
Instance instance = instanceDao.read(instanceNo);
NiftyInstance niftyInstance = niftyInstanceDao.read(instanceNo);
// 最新のNiftyInstance情報がInstanceに登録されている場合はスキップする
if (StringUtils.equals(instance.getPublicIp(), niftyInstance.getIpAddress())) {
return;
}
DnsProcessClient dnsProcessClient = dnsProcessClientFactory.createDnsProcessClient();
String fqdn = instance.getFqdn();
String publicIp = niftyInstance.getIpAddress();
String privateIp = niftyInstance.getPrivateIpAddress();
// 正引きの追加
dnsProcessClient.addForward(fqdn, publicIp);
// 逆引きの追加
dnsProcessClient.addReverse(fqdn, publicIp);
// データベースの更新
instance.setPublicIp(publicIp);
instance.setPrivateIp(privateIp);
instanceDao.update(instance);
}
protected void startDnsVpn(Long instanceNo) {
Instance instance = instanceDao.read(instanceNo);
// InstanceにIPアドレスが登録済みの場合はスキップする
if (!StringUtils.isEmpty(instance.getPublicIp())) {
return;
}
DnsProcessClient dnsProcessClient = dnsProcessClientFactory.createDnsProcessClient();
NiftyInstance niftyInstance = niftyInstanceDao.read(instanceNo);
// IPアドレスを正引きにより取得する(正引きの追加はインスタンス内で行う)
String fqdn = instance.getFqdn();
String publicIp = dnsProcessClient.resolveHost(fqdn); // VPNインタフェースのIPアドレス
String privateIp = niftyInstance.getPrivateIpAddress();
// 逆引きの追加
dnsProcessClient.addReverse(fqdn, publicIp);
// データベースの更新
instance.setPublicIp(publicIp);
instance.setPrivateIp(privateIp);
instanceDao.update(instance);
}
protected void stopDnsNormal(Long instanceNo) {
Instance instance = instanceDao.read(instanceNo);
// IPアドレスがない場合はスキップ
if (StringUtils.isEmpty(instance.getPublicIp())) {
return;
}
DnsProcessClient dnsProcessClient = dnsProcessClientFactory.createDnsProcessClient();
String fqdn = instance.getFqdn();
String publicIp = instance.getPublicIp();
// 正引きの削除
dnsProcessClient.deleteForward(fqdn);
// 逆引きの削除
dnsProcessClient.deleteReverse(publicIp);
// データベースの更新
instance.setPublicIp(null);
instance.setPrivateIp(null);
instanceDao.update(instance);
}
protected void stopDnsVpn(Long instanceNo) {
Instance instance = instanceDao.read(instanceNo);
// IPアドレスがない場合はスキップ
if (StringUtils.isEmpty(instance.getPublicIp())) {
return;
}
DnsProcessClient dnsProcessClient = dnsProcessClientFactory.createDnsProcessClient();
String fqdn = instance.getFqdn();
String publicIp = instance.getPublicIp();
// 正引きの削除
dnsProcessClient.deleteForward(fqdn);
// 逆引きの削除
dnsProcessClient.deleteReverse(publicIp);
// データベースの更新
instance.setPublicIp(null);
instance.setPrivateIp(null);
instanceDao.update(instance);
}
public void setDnsProcessClientFactory(DnsProcessClientFactory dnsProcessClientFactory) {
this.dnsProcessClientFactory = dnsProcessClientFactory;
}
/**
* processLoggerを設定します。
*
* @param processLogger processLogger
*/
public void setProcessLogger(ProcessLogger processLogger) {
this.processLogger = processLogger;
}
}