package io.airlift.airship.coordinator; import io.airlift.configuration.Config; import io.airlift.configuration.ConfigDescription; import io.airlift.units.Duration; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import java.util.concurrent.TimeUnit; public class AwsProvisionerConfig extends ProvisionerConfig<AwsProvisionerConfig> { private String awsCredentialsFile = "aws-credentials.properties"; private String awsCoordinatorAmi = "ami-27b7744e"; private String awsCoordinatorKeypair = "keypair"; private String awsCoordinatorSecurityGroup = "default"; private String awsCoordinatorDefaultInstanceType = "t1.micro"; private String awsAgentAmi = "ami-27b7744e"; private String awsAgentKeypair = "keypair"; private String awsAgentSecurityGroup = "default"; private String awsAgentDefaultInstanceType = "t1.micro"; private String provisioningScriptsArtifact; // todo add zone private String awsEndpoint; private String s3KeystoreBucket; private String s3KeystorePath; private Duration s3KeystoreRefreshInterval = new Duration(10, TimeUnit.SECONDS); @Config("coordinator.aws.credentials-file") @ConfigDescription("File containing aws credentials") public AwsProvisionerConfig setAwsCredentialsFile(String awsCredentialsFile) { this.awsCredentialsFile = awsCredentialsFile; return this; } @NotNull public String getAwsCredentialsFile() { return awsCredentialsFile; } @Config("coordinator.aws.coordinator.ami") @ConfigDescription("AWS AMI for provisioned coordinators") public AwsProvisionerConfig setAwsCoordinatorAmi(String awsCoordinatorAmi) { this.awsCoordinatorAmi = awsCoordinatorAmi; return this; } @NotNull public String getAwsCoordinatorAmi() { return awsCoordinatorAmi; } @Config("coordinator.aws.coordinator.keypair") @ConfigDescription("AWS keypair for provisioned coordinators") public AwsProvisionerConfig setAwsCoordinatorKeypair(String awsCoordinatorKeypair) { this.awsCoordinatorKeypair = awsCoordinatorKeypair; return this; } @NotNull public String getAwsCoordinatorKeypair() { return awsCoordinatorKeypair; } @Config("coordinator.aws.coordinator.security-group") @ConfigDescription("AWS security group for provisioned coordinators") public AwsProvisionerConfig setAwsCoordinatorSecurityGroup(String awsCoordinatorSecurityGroup) { this.awsCoordinatorSecurityGroup = awsCoordinatorSecurityGroup; return this; } @NotNull public String getAwsCoordinatorSecurityGroup() { return awsCoordinatorSecurityGroup; } @Config("coordinator.aws.coordinator.default-instance-type") @ConfigDescription("AWS default instance type for provisioned coordinators") public AwsProvisionerConfig setAwsCoordinatorDefaultInstanceType(String awsCoordinatorDefaultInstanceType) { this.awsCoordinatorDefaultInstanceType = awsCoordinatorDefaultInstanceType; return this; } @NotNull public String getAwsCoordinatorDefaultInstanceType() { return awsCoordinatorDefaultInstanceType; } @Config("coordinator.aws.agent.ami") @ConfigDescription("AWS AMI for provisioned agents") public AwsProvisionerConfig setAwsAgentAmi(String awsAgentAmi) { this.awsAgentAmi = awsAgentAmi; return this; } @NotNull public String getAwsAgentAmi() { return awsAgentAmi; } @Config("coordinator.aws.agent.keypair") @ConfigDescription("AWS keypair for provisioned agents") public AwsProvisionerConfig setAwsAgentKeypair(String awsAgentKeypair) { this.awsAgentKeypair = awsAgentKeypair; return this; } @NotNull public String getAwsAgentKeypair() { return awsAgentKeypair; } @Config("coordinator.aws.agent.security-group") @ConfigDescription("AWS security group for provisioned agents") public AwsProvisionerConfig setAwsAgentSecurityGroup(String awsAgentSecurityGroup) { this.awsAgentSecurityGroup = awsAgentSecurityGroup; return this; } @NotNull public String getAwsAgentSecurityGroup() { return awsAgentSecurityGroup; } @Config("coordinator.aws.agent.default-instance-type") @ConfigDescription("AWS default instance type for provisioned agents") public AwsProvisionerConfig setAwsAgentDefaultInstanceType(String awsAgentDefaultInstanceType) { this.awsAgentDefaultInstanceType = awsAgentDefaultInstanceType; return this; } @NotNull public String getAwsAgentDefaultInstanceType() { return awsAgentDefaultInstanceType; } @Config("coordinator.aws.endpoint") @ConfigDescription("Override AWS endpoint for talking to ec2") public AwsProvisionerConfig setAwsEndpoint(String awsEndpoint) { this.awsEndpoint = awsEndpoint; return this; } public String getAwsEndpoint() { return awsEndpoint; } @Config("coordinator.aws.s3-keystore.bucket") @ConfigDescription("S3 bucket for keystore") public AwsProvisionerConfig setS3KeystoreBucket(String s3KeystoreBucket) { this.s3KeystoreBucket = s3KeystoreBucket; return this; } public String getS3KeystoreBucket() { return s3KeystoreBucket; } @Config("coordinator.aws.s3-keystore.path") @ConfigDescription("S3 path for keystore") public AwsProvisionerConfig setS3KeystorePath(String s3KeystorePath) { this.s3KeystorePath = s3KeystorePath; return this; } public String getS3KeystorePath() { return s3KeystorePath; } @Config("coordinator.aws.s3-keystore.refresh") @ConfigDescription("Refresh interval for S3 keystore") public AwsProvisionerConfig setS3KeystoreRefreshInterval(Duration s3KeystoreRefreshInterval) { this.s3KeystoreRefreshInterval = s3KeystoreRefreshInterval; return this; } public Duration getS3KeystoreRefreshInterval() { return s3KeystoreRefreshInterval; } @Config("coordinator.aws.provisioning.artifact") @ConfigDescription("An alternate package of provisioning scripts") public AwsProvisionerConfig setProvisioningScriptsArtifact(String provisioningScriptsArtifact) { this.provisioningScriptsArtifact = provisioningScriptsArtifact; return this; } @Pattern(regexp = "[A-Za-z0-9_\\-.]+:[A-Za-z0-9_\\-.]+:[A-Za-z0-9_\\-.]+", message = "Invalid provisioning script artifact") public String getProvisioningScriptsArtifact() { return provisioningScriptsArtifact; } }