package org.zstack.test.deployer;
import org.zstack.header.identity.SessionInventory;
import org.zstack.header.network.l3.L3NetworkInventory;
import org.zstack.network.securitygroup.APIAddSecurityGroupRuleMsg.SecurityGroupRuleAO;
import org.zstack.network.securitygroup.SecurityGroupInventory;
import org.zstack.test.ApiSenderException;
import org.zstack.test.deployer.schema.DeployerConfig;
import org.zstack.test.deployer.schema.SecurityGroupConfig;
import org.zstack.test.deployer.schema.SecurityGroupRuleConfig;
import java.util.ArrayList;
import java.util.List;
public class DefaultSecurityGroupDeployer implements SecurityGroupDeployer<SecurityGroupConfig> {
@Override
public Class<SecurityGroupConfig> getSupportedDeployerClassType() {
return SecurityGroupConfig.class;
}
@Override
public void deploy(List<SecurityGroupConfig> securityGroups, DeployerConfig config, Deployer deployer) throws ApiSenderException {
for (SecurityGroupConfig sc : securityGroups) {
SecurityGroupInventory scinv = new SecurityGroupInventory();
scinv.setName(sc.getName());
scinv.setDescription(sc.getDescription());
SessionInventory session = null;
if (sc.getAccountRef() != null) {
session = deployer.loginByAccountRef(sc.getAccountRef(), config);
}
if (session != null) {
scinv = deployer.getApi().createSecurityGroupByFullConfig(scinv, session);
} else {
scinv = deployer.getApi().createSecurityGroupByFullConfig(scinv);
}
List<SecurityGroupRuleAO> aos = new ArrayList<SecurityGroupRuleAO>();
for (SecurityGroupRuleConfig rc : sc.getRule()) {
SecurityGroupRuleAO ao = new SecurityGroupRuleAO();
ao.setAllowedCidr(rc.getAllowedCidr());
ao.setEndPort(rc.getEndPort().intValue());
ao.setStartPort(rc.getStartPort().intValue());
ao.setProtocol(rc.getProtocol());
ao.setType(rc.getType());
aos.add(ao);
}
if (!aos.isEmpty()) {
if (session != null) {
scinv = deployer.getApi().addSecurityGroupRuleByFullConfig(scinv.getUuid(), aos, session);
} else {
scinv = deployer.getApi().addSecurityGroupRuleByFullConfig(scinv.getUuid(), aos);
}
}
for (String l3nwName : sc.getL3NetworkRef()) {
L3NetworkInventory l3nw = deployer.l3Networks.get(l3nwName);
assert l3nw != null;
scinv = deployer.getApi().attachSecurityGroupToL3Network(scinv.getUuid(), l3nw.getUuid());
}
deployer.securityGroups.put(scinv.getName(), scinv);
}
}
}