/**
* This file is part of CloudML [ http://cloudml.org ]
*
* Copyright (C) 2012 - SINTEF ICT
* Contact: Franck Chauvel <franck.chauvel@sintef.no>
*
* Module: root
*
* CloudML is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* CloudML 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* Public License along with CloudML. If not, see
* <http://www.gnu.org/licenses/>.
*/
/*
*/
package org.cloudml.core.samples;
import org.cloudml.core.builders.*;
import static org.cloudml.core.builders.Commons.*;
/**
* A sample deployment model, used for testing purpose
*/
public class SshClientServer {
public static final String AMAZON_EC2 = "Amazon EC2";
public static final String EC2_LARGE_LINUX = "Large Linux";
public static final String UBUNTU_1204 = "Ubuntu 12.04";
public static final String SSH_CLIENT = "Client SSH Application";
public static final String SSH_SERVER = "Server SSH Application";
public static final String WINDOWS_7 = "Windows 7";
public static final String SSH_CONNECTION = "SSH connection";
public static final String EC2_XLARGE_WINDOWS_7 = "xLarge Windows 7";
public static final String CLIENT_PORT = "client";
public static final String SERVER_PORT = "server";
public static final String OPERATING_SYSTEM = "OS";
public static final String REQUIRED_PLATFORM = "run on";
public static final String PROVIDED_PLATFORM = "running";
public static final String VM_OF_CLIENT_1 = "client's host";
public static final String VM_OF_SERVER_1 = "server's host";
public static final String SERVER_1 = "server";
public static final String CLIENT_1 = "client";
public static final String CLIENT_2 = "another client";
public static final String VM_OF_CLIENT_2 = "vm of client 2";
public static final String VM_OF_SERVER_2 = "vm of server 2";
public static final String SERVER_2 = "server 2";
public static ProviderBuilder amazonEc2() {
return aProvider()
.named(AMAZON_EC2);
}
public static VMBuilder ec2LargeLinux() {
return aVM()
.named(EC2_LARGE_LINUX)
.providedBy(AMAZON_EC2)
.with(aProvidedExecutionPlatform()
.named(PROVIDED_PLATFORM)
.offering(OPERATING_SYSTEM, UBUNTU_1204));
}
public static VMBuilder ec2XLargeWindows7() {
return aVM()
.named(EC2_XLARGE_WINDOWS_7)
.providedBy(AMAZON_EC2)
.with(aProvidedExecutionPlatform()
.named("running")
.offering(OPERATING_SYSTEM, WINDOWS_7));
}
public static InternalComponentBuilder sshClient() {
return anInternalComponent()
.named(SSH_CLIENT)
.with(aRequiredExecutionPlatform()
.named("run on")
.demanding(OPERATING_SYSTEM, UBUNTU_1204))
.with(sshClientPort());
}
public static InternalComponentBuilder sshServer() {
return anInternalComponent()
.named(SSH_SERVER)
.with(aRequiredExecutionPlatform()
.named(REQUIRED_PLATFORM)
.demanding(OPERATING_SYSTEM, WINDOWS_7))
.with(sshServerPort());
}
public static RelationshipBuilder sshConnection() {
return aRelationship()
.named(SSH_CONNECTION)
.from(SSH_CLIENT, CLIENT_PORT)
.to(SSH_SERVER, SERVER_PORT);
}
public static ProvidedPortBuilder sshServerPort() {
return aProvidedPort()
.named(SERVER_PORT)
.remote();
}
public static RequiredPortBuilder sshClientPort() {
return aRequiredPort()
.named(CLIENT_PORT)
.mandatory()
.remote();
}
public static DeploymentBuilder getSshTypes() {
return aDeployment()
.with(amazonEc2())
.with(ec2LargeLinux())
.with(ec2XLargeWindows7())
.with(sshClient())
.with(sshServer())
.with(sshConnection());
}
public static DeploymentBuilder getOneClientConnectedToOneServer() {
return getSshTypes()
.with(vmOfClient1())
.with(client1())
.with(vmOfServer1())
.with(server1())
.with(aRelationshipInstance()
.named("ssh")
.ofType(SSH_CONNECTION)
.from(CLIENT_1, CLIENT_PORT)
.to(SERVER_1, SERVER_PORT));
}
public static DeploymentBuilder getOneClientConnectedToOneOfTwoServers() {
return getOneClientConnectedToOneServer()
.with(vmOfServer2())
.with(server2());
}
public static DeploymentBuilder getTwoClientsConnectedToOneServer() {
return getOneClientConnectedToOneServer()
.with(vmOfClient2())
.with(client2())
.with(aRelationshipInstance()
.named("ssh 2")
.ofType(SSH_CONNECTION)
.from(CLIENT_2, CLIENT_PORT)
.to(SERVER_1, SERVER_PORT));
}
public static DeploymentBuilder getTwoClientsConnectedToTwoServers() {
return getOneClientConnectedToOneServer()
.with(vmOfClient2())
.with(client2())
.with(vmOfServer2())
.with(server2())
.with(aRelationshipInstance()
.named("ssh 2")
.ofType(SSH_CONNECTION)
.from(CLIENT_2, CLIENT_PORT)
.to(SERVER_2, SERVER_PORT));
}
private static InternalComponentInstanceBuilder client2() {
return anInternalComponentInstance()
.named(CLIENT_2)
.ofType(SSH_CLIENT)
.hostedBy(VM_OF_CLIENT_2);
}
private static VMInstanceBuilder vmOfClient2() {
return aVMInstance()
.named(VM_OF_CLIENT_2)
.ofType(EC2_LARGE_LINUX);
}
private static VMInstanceBuilder vmOfClient1() {
return aVMInstance()
.named(VM_OF_CLIENT_1)
.ofType(EC2_LARGE_LINUX);
}
private static InternalComponentInstanceBuilder client1() {
return anInternalComponentInstance()
.named(CLIENT_1)
.ofType(SSH_CLIENT)
.hostedBy(VM_OF_CLIENT_1);
}
private static VMInstanceBuilder vmOfServer1() {
return aVMInstance()
.named(VM_OF_SERVER_1)
.ofType(EC2_XLARGE_WINDOWS_7);
}
private static InternalComponentInstanceBuilder server1() {
return anInternalComponentInstance()
.named(SERVER_1)
.ofType(SSH_SERVER)
.hostedBy(VM_OF_SERVER_1);
}
private static VMInstanceBuilder vmOfServer2() {
return aVMInstance()
.named(VM_OF_SERVER_2)
.ofType(EC2_XLARGE_WINDOWS_7);
}
private static InternalComponentInstanceBuilder server2() {
return anInternalComponentInstance()
.named(SERVER_2)
.ofType(SSH_SERVER)
.hostedBy(VM_OF_SERVER_2);
}
}