/* * (c) 2015 CenturyLink. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package sample; import com.centurylink.cloud.sdk.ClcSdk; import com.centurylink.cloud.sdk.core.auth.services.domain.credentials.DefaultCredentialsProvider; import com.centurylink.cloud.sdk.core.services.refs.ReferenceNotResolvedException; import com.centurylink.cloud.sdk.server.services.client.domain.server.metadata.ServerMetadata; import com.centurylink.cloud.sdk.server.services.dsl.GroupService; import com.centurylink.cloud.sdk.server.services.dsl.ServerService; import com.centurylink.cloud.sdk.server.services.dsl.domain.group.refs.Group; import com.centurylink.cloud.sdk.server.services.dsl.domain.ip.CreatePublicIpConfig; import com.centurylink.cloud.sdk.server.services.dsl.domain.ip.port.PortConfig; import com.centurylink.cloud.sdk.server.services.dsl.domain.server.CreateServerConfig; import com.centurylink.cloud.sdk.server.services.dsl.domain.server.DiskConfig; import com.centurylink.cloud.sdk.server.services.dsl.domain.server.DiskType; import com.centurylink.cloud.sdk.server.services.dsl.domain.server.Machine; import com.centurylink.cloud.sdk.server.services.dsl.domain.server.NetworkConfig; import com.centurylink.cloud.sdk.server.services.dsl.domain.server.filters.ServerFilter; import com.centurylink.cloud.sdk.server.services.dsl.domain.server.refs.Server; import com.centurylink.cloud.sdk.server.services.dsl.domain.template.refs.Template; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.time.ZonedDateTime; import static com.centurylink.cloud.sdk.base.services.dsl.domain.datacenters.refs.DataCenter.DE_FRANKFURT; import static com.centurylink.cloud.sdk.base.services.dsl.domain.datacenters.refs.DataCenter.US_CENTRAL_SALT_LAKE_CITY; import static com.centurylink.cloud.sdk.server.services.dsl.domain.InfrastructureConfig.dataCenter; import static com.centurylink.cloud.sdk.server.services.dsl.domain.group.GroupHierarchyConfig.group; import static com.centurylink.cloud.sdk.server.services.dsl.domain.server.ServerType.STANDARD; import static com.centurylink.cloud.sdk.server.services.dsl.domain.template.filters.os.CpuArchitecture.x86_64; import static com.centurylink.cloud.sdk.server.services.dsl.domain.template.filters.os.OsType.CENTOS; import static java.util.stream.Collectors.toList; import static sample.SamplesTestsConstants.SAMPLES; @Test(groups = {SAMPLES}) public class SuperCommandSampleApp extends Assert { private ServerService serverService; private GroupService groupService; private static final Logger LOGGER = LoggerFactory.getLogger(SuperCommandSampleApp.class); public SuperCommandSampleApp() { ClcSdk sdk = new ClcSdk( new DefaultCredentialsProvider() ); serverService = sdk.serverService(); groupService = sdk.groupService(); } @BeforeClass public void init() { clearAll(); groupService .defineInfrastructure(dataCenter(DE_FRANKFURT).subitems( group("Sample application").subitems( nginxServer(), group("Business").subitems( apacheHttpServer(), mysqlServer() ) ) )) .waitUntilComplete(); } @AfterClass public void deleteServers() { clearAll(); } public static CreateServerConfig centOsServer(String name) { return new CreateServerConfig() .name(name) .description(name) .type(STANDARD) .machine(new Machine() .cpuCount(1) .ram(2) ) .template(Template.refByOs() .dataCenter(US_CENTRAL_SALT_LAKE_CITY) .type(CENTOS) .version("6") .architecture(x86_64) ) .timeToLive( ZonedDateTime.now().plusHours(2) ); } public static CreateServerConfig mysqlServer() { CreateServerConfig mySqlSrv = centOsServer("MySQL"); mySqlSrv.getMachine() .disk(new DiskConfig() .type(DiskType.RAW) .size(10) ); return mySqlSrv; } public static CreateServerConfig nginxServer() { return centOsServer("Nginx") .network(new NetworkConfig() .publicIpConfig(new CreatePublicIpConfig() .openPorts(PortConfig.HTTP))); } public static CreateServerConfig apacheHttpServer() { return centOsServer("Apache"); } private void clearAll() { Group ref = Group.refByName(DE_FRANKFURT, "Sample application"); try { groupService.delete(ref); } catch (ReferenceNotResolvedException ex) { LOGGER.info("nothing to delete", ex); } } private ServerMetadata loadServerMetadata(Server server) { ServerMetadata metadata = serverService.findByRef(server); assertNotNull(metadata); return metadata; } private void checkServerIsStarted(String name) { assertEquals( "started", serverService .findLazy(new ServerFilter() .onlyActive() .descriptionContains(name) ) .findFirst().get() .getDetails() .getPowerState() ); } @Test public void checkServersIsActiveTest() { checkServerIsStarted("nginx"); checkServerIsStarted("mysql"); checkServerIsStarted("apache"); } @Test public void nginxTest() { ServerMetadata nginxMetadata = loadServerMetadata( Server.refByDescription(DE_FRANKFURT, "nginx") ); assert nginxMetadata.getDetails().getIpAddresses().stream() .filter(address -> address.getPublicIp() != null) .collect(toList()) .size() == 1; } }