package com.sequenceiq.cloudbreak.api.model; import java.util.HashSet; import java.util.Set; import javax.validation.Valid; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonRawValue; import com.fasterxml.jackson.databind.JsonNode; import com.sequenceiq.cloudbreak.doc.ModelDescriptions; import com.sequenceiq.cloudbreak.doc.ModelDescriptions.ClusterModelDescription; import io.swagger.annotations.ApiModelProperty; @JsonIgnoreProperties(ignoreUnknown = true) public class ClusterRequest { @Size(max = 40, min = 5, message = "The length of the cluster's name has to be in range of 5 to 40") @Pattern(regexp = "([a-z][-a-z0-9]*[a-z0-9])", message = "The name of the cluster can only contain lowercase alphanumeric characters and hyphens and has to start with an alphanumeric character") @NotNull @ApiModelProperty(value = ModelDescriptions.NAME, required = true) private String name; @ApiModelProperty(value = ClusterModelDescription.BLUEPRINT_ID) private Long blueprintId; @ApiModelProperty(value = ClusterModelDescription.BLUEPRINT) private BlueprintRequest blueprint; @Size(max = 1000) @ApiModelProperty(ModelDescriptions.DESCRIPTION) private String description; @Valid @ApiModelProperty(value = ModelDescriptions.ClusterModelDescription.HOSTGROUPS) private Set<HostGroupRequest> hostGroups; @ApiModelProperty(ClusterModelDescription.EMAIL_NEEDED) private Boolean emailNeeded = Boolean.FALSE; @ApiModelProperty(ClusterModelDescription.EMAIL_TO) private String emailTo; private GatewayJson gateway; @ApiModelProperty(value = ModelDescriptions.StackModelDescription.ENABLE_SECURITY) private Boolean enableSecurity = Boolean.FALSE; @Size(max = 15, min = 5, message = "The length of the username has to be in range of 5 to 15") @Pattern(regexp = "([a-z][-a-z0-9]*[a-z0-9])", message = "The username can only contain lowercase alphanumeric characters and hyphens and has start with an alphanumeric character") @NotNull @ApiModelProperty(value = ModelDescriptions.StackModelDescription.USERNAME, required = true) private String userName; @NotNull @Size(max = 100, min = 5, message = "The length of the password has to be in range of 5 to 100") @ApiModelProperty(value = ModelDescriptions.StackModelDescription.PASSWORD, required = true) private String password; private KerberosRequest kerberos; @ApiModelProperty(value = ClusterModelDescription.LDAP_REQUIRED) private Boolean ldapRequired = Boolean.FALSE; @ApiModelProperty(value = ClusterModelDescription.SSSDCONFIG_ID) private Long sssdConfigId; @ApiModelProperty(value = ClusterModelDescription.SSSDCONFIG) private SssdConfigRequest sssdConfig; @ApiModelProperty(value = ClusterModelDescription.LDAP_CONFIG_ID) private Long ldapConfigId; @ApiModelProperty(value = ClusterModelDescription.LDAP_CONFIG) private LdapConfigRequest ldapConfig; @ApiModelProperty(value = ModelDescriptions.ClusterModelDescription.VALIDATE_BLUEPRINT) private Boolean validateBlueprint = Boolean.TRUE; @Valid @ApiModelProperty(value = ModelDescriptions.ClusterModelDescription.AMBARI_STACK_DETAILS) private AmbariStackDetailsJson ambariStackDetails; @Valid @ApiModelProperty(value = ModelDescriptions.ClusterModelDescription.AMBARI_REPO_DETAILS) private AmbariRepoDetailsJson ambariRepoDetailsJson; @ApiModelProperty(value = ClusterModelDescription.RDSCONFIG_IDS) private Set<Long> rdsConfigIds = new HashSet<>(); @Valid @ApiModelProperty(value = ModelDescriptions.ClusterModelDescription.AMBARI_DATABASE_DETAILS) private AmbariDatabaseDetailsJson ambariDatabaseDetails; @Valid @ApiModelProperty(value = ModelDescriptions.ClusterModelDescription.RDS_CONFIGS) private Set<RDSConfigRequest> rdsConfigJsons = new HashSet<>(); @Valid @ApiModelProperty(value = ModelDescriptions.StackModelDescription.FILE_SYSTEM) private FileSystemRequest fileSystem; @ApiModelProperty(ClusterModelDescription.CONFIG_STRATEGY) private ConfigStrategy configStrategy = ConfigStrategy.ALWAYS_APPLY_DONT_OVERRIDE_CUSTOM_VALUES; @ApiModelProperty(value = ClusterModelDescription.ENABLE_SHIPYARD) private Boolean enableShipyard = Boolean.FALSE; @ApiModelProperty(value = ClusterModelDescription.BLUEPRINT_INPUTS) private Set<BlueprintInputJson> blueprintInputs = new HashSet<>(); @ApiModelProperty(value = ClusterModelDescription.BLUEPRINT_CUSTOM_PROPERTIES) private String blueprintCustomProperties; @ApiModelProperty(value = ClusterModelDescription.CUSTOM_CONTAINERS) private CustomContainerRequest customContainer; @ApiModelProperty(value = ClusterModelDescription.CUSTOM_QUEUE) private String customQueue; public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getBlueprintId() { return blueprintId; } public void setBlueprintId(Long blueprintId) { this.blueprintId = blueprintId; } public Set<HostGroupRequest> getHostGroups() { return hostGroups; } public void setHostGroups(Set<HostGroupRequest> hostGroups) { this.hostGroups = hostGroups; } public Boolean getEmailNeeded() { return emailNeeded; } public void setEmailNeeded(Boolean emailNeeded) { this.emailNeeded = emailNeeded; } public Boolean getEnableSecurity() { return enableSecurity; } public void setEnableSecurity(Boolean enableSecurity) { this.enableSecurity = enableSecurity; } public GatewayJson getGateway() { return gateway; } public void setGateway(GatewayJson gateway) { this.gateway = gateway; } public Boolean getLdapRequired() { return ldapRequired; } public void setLdapRequired(Boolean ldapRequired) { this.ldapRequired = ldapRequired; } public Long getSssdConfigId() { return sssdConfigId; } public void setSssdConfigId(Long sssdConfigId) { this.sssdConfigId = sssdConfigId; } public boolean getValidateBlueprint() { return validateBlueprint == null ? false : validateBlueprint; } public void setValidateBlueprint(Boolean validateBlueprint) { this.validateBlueprint = validateBlueprint; } public AmbariStackDetailsJson getAmbariStackDetails() { return ambariStackDetails; } public void setAmbariStackDetails(AmbariStackDetailsJson ambariStackDetails) { this.ambariStackDetails = ambariStackDetails; } public AmbariRepoDetailsJson getAmbariRepoDetailsJson() { return ambariRepoDetailsJson; } public void setAmbariRepoDetailsJson(AmbariRepoDetailsJson ambariRepoDetailsJson) { this.ambariRepoDetailsJson = ambariRepoDetailsJson; } public AmbariDatabaseDetailsJson getAmbariDatabaseDetails() { return ambariDatabaseDetails; } public void setAmbariDatabaseDetails(AmbariDatabaseDetailsJson ambariDatabaseDetails) { this.ambariDatabaseDetails = ambariDatabaseDetails; } public Set<Long> getRdsConfigIds() { return rdsConfigIds; } public void setRdsConfigIds(Set<Long> rdsConfigIds) { this.rdsConfigIds = rdsConfigIds; } public Set<RDSConfigRequest> getRdsConfigJsons() { return rdsConfigJsons; } public void setRdsConfigJsons(Set<RDSConfigRequest> rdsConfigJsons) { this.rdsConfigJsons = rdsConfigJsons; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public FileSystemRequest getFileSystem() { return fileSystem; } public void setFileSystem(FileSystemRequest fileSystem) { this.fileSystem = fileSystem; } public Long getLdapConfigId() { return ldapConfigId; } public void setLdapConfigId(Long ldapConfigId) { this.ldapConfigId = ldapConfigId; } public ConfigStrategy getConfigStrategy() { return configStrategy; } public void setConfigStrategy(ConfigStrategy configStrategy) { this.configStrategy = configStrategy; } public Boolean getEnableShipyard() { return enableShipyard; } public void setEnableShipyard(Boolean enableShipyard) { this.enableShipyard = enableShipyard; } public String getEmailTo() { return emailTo; } public void setEmailTo(String emailTo) { this.emailTo = emailTo; } public Set<BlueprintInputJson> getBlueprintInputs() { return blueprintInputs; } public void setBlueprintInputs(Set<BlueprintInputJson> blueprintInputs) { this.blueprintInputs = blueprintInputs; } @JsonRawValue public String getBlueprintCustomProperties() { return blueprintCustomProperties; } public void setBlueprintCustomProperties(JsonNode blueprintCustomProperties) { this.blueprintCustomProperties = blueprintCustomProperties.toString(); } public KerberosRequest getKerberos() { return kerberos; } public void setKerberos(KerberosRequest kerberos) { this.kerberos = kerberos; } public SssdConfigRequest getSssdConfig() { return sssdConfig; } public void setSssdConfig(SssdConfigRequest sssdConfig) { this.sssdConfig = sssdConfig; } public LdapConfigRequest getLdapConfig() { return ldapConfig; } public void setLdapConfig(LdapConfigRequest ldapConfig) { this.ldapConfig = ldapConfig; } public BlueprintRequest getBlueprint() { return blueprint; } public void setBlueprint(BlueprintRequest blueprint) { this.blueprint = blueprint; } public CustomContainerRequest getCustomContainer() { return customContainer; } public String getCustomQueue() { return customQueue; } public void setCustomQueue(String customQueue) { this.customQueue = customQueue; } public void setCustomContainer(CustomContainerRequest customContainer) { this.customContainer = customContainer; } }