This is an automated email from the ASF dual-hosted git repository. ppapou pushed a commit to branch spring-migration in repository https://gitbox.apache.org/repos/asf/incubator-datalab.git
commit 222d68f9e0957c7259333752653b77480fac20d4 Author: Pavel Papou <[email protected]> AuthorDate: Sun Jan 23 10:26:07 2022 -0500 [spring-migration] provisioning sevice - main class has been asjusted - config structure has been change --- .../src/ssn/templates/ssn.yml | 12 ++-- services/billing-gcp/pom.xml | 2 +- services/datalab-webapp-common/pom.xml | 12 ++++ .../java/com/epam/datalab/cloud/CloudModule.java | 2 +- services/provisioning-service/pom.xml | 4 +- services/provisioning-service/provisioning.yml | 72 ++++++++++++---------- .../DropwizardBearerTokenFilterImpl.java | 39 ------------ .../backendapi/ProvisioningServiceApplication.java | 66 ++++++++++++++++---- ...rovisioningServiceApplicationConfiguration.java | 54 ++++++++++++---- .../backendapi/conf/SecurityConfiguration.java | 55 +++++++++++++++++ .../datalab/backendapi/core/DockerWarmuper.java | 22 +++---- .../response/folderlistener/AsyncFileHandler.java | 5 +- .../folderlistener/FolderListenerExecutor.java | 18 ++++-- .../response/folderlistener/WatchItemList.java | 5 +- .../response/handlers/ComputationalConfigure.java | 15 +++-- .../handlers/dao/FileSystemCallbackHandlerDao.java | 16 +++-- .../backendapi/modules/AwsProvisioningModule.java | 24 +++++--- .../modules/CloudModuleConfigurator.java | 4 +- .../backendapi/resources/BackupResource.java | 9 +-- .../resources/ProvisioningHealthCheckResource.java | 3 +- .../resources/aws/ComputationalResourceAws.java | 3 +- .../resources/gcp/ComputationalResourceGcp.java | 5 +- .../backendapi/resources/gcp/EdgeResourceGcp.java | 4 +- .../resources/gcp/ExploratoryResourceGcp.java | 4 +- .../resources/gcp/InfrastructureResourceGcp.java | 3 + .../service/impl/CheckInactivityServiceImpl.java | 3 +- .../backendapi/service/impl/DockerService.java | 11 ++-- .../backendapi/service/impl/KeyService.java | 6 +- .../backendapi/service/impl/OdahuServiceImpl.java | 3 +- .../service/impl/ProjectServiceImpl.java | 5 +- .../impl/RestoreCallbackHandlerServiceImpl.java | 23 +++---- .../service/impl/SparkClusterService.java | 6 +- .../service/impl/aws/BucketServiceAwsImpl.java | 2 + .../service/impl/azure/BucketServiceAzureImpl.java | 5 +- .../service/impl/gcp/BucketServiceGcpImpl.java | 2 + .../epam/datalab/process/model/DatalabProcess.java | 5 +- .../backendapi/core/DockerWarmuperTest.java | 5 +- .../response/folderlistener/WatchItemTest.java | 5 +- .../RestoreCallbackHandlerServiceImplTest.java | 7 ++- services/self-service/self-service.yml | 22 +++---- 40 files changed, 365 insertions(+), 203 deletions(-) diff --git a/infrastructure-provisioning/src/ssn/templates/ssn.yml b/infrastructure-provisioning/src/ssn/templates/ssn.yml index 8720ef2..4a5ff8d 100644 --- a/infrastructure-provisioning/src/ssn/templates/ssn.yml +++ b/infrastructure-provisioning/src/ssn/templates/ssn.yml @@ -20,26 +20,26 @@ # ****************************************************************************** <#assign LOG_ROOT_DIR="/var/opt/datalab/log"> -<#assign KEYS_DIR="/home/${sys['user.name']}/keys"> +<#assign KEYS_DIR="/home/pavel/keys"> <#assign KEY_STORE_PATH="${KEYS_DIR}/ssn.keystore.jks"> <#assign KEY_STORE_PASSWORD="KEYSTORE_PASSWORD"> -<#assign TRUST_STORE_PATH="${JRE_HOME}/lib/security/cacerts"> +<#assign TRUST_STORE_PATH="/opt/jdk1.8.0_202/jre/lib/security/cacerts"> <#assign TRUST_STORE_PASSWORD="changeit"> # Available options are aws, azure, gcp -<#assign CLOUD_TYPE="CLOUD_PROVIDER"> +<#assign CLOUD_TYPE="GCP"> cloudProvider: ${CLOUD_TYPE} #Switch on/off developer mode here -<#assign DEV_MODE="false"> +<#assign DEV_MODE="true"> devMode: ${DEV_MODE} mongo: host: localhost port: 27017 username: admin - password: MONGO_PASSWORD - database: datalabdb + password: admin + database: pavel selfService: protocol: https diff --git a/services/billing-gcp/pom.xml b/services/billing-gcp/pom.xml index fa4bbcf..bc3034d 100644 --- a/services/billing-gcp/pom.xml +++ b/services/billing-gcp/pom.xml @@ -61,7 +61,7 @@ </dependency> <dependency> <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> + <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> diff --git a/services/datalab-webapp-common/pom.xml b/services/datalab-webapp-common/pom.xml index b42da46..6011fbe 100644 --- a/services/datalab-webapp-common/pom.xml +++ b/services/datalab-webapp-common/pom.xml @@ -70,5 +70,17 @@ <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-core</artifactId> + <version>4.0.6.RELEASE</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-core</artifactId> + <version>4.0.6.RELEASE</version> + <scope>compile</scope> + </dependency> </dependencies> </project> \ No newline at end of file diff --git a/services/datalab-webapp-common/src/main/java/com/epam/datalab/cloud/CloudModule.java b/services/datalab-webapp-common/src/main/java/com/epam/datalab/cloud/CloudModule.java index 7be15b1..b87c1b0 100644 --- a/services/datalab-webapp-common/src/main/java/com/epam/datalab/cloud/CloudModule.java +++ b/services/datalab-webapp-common/src/main/java/com/epam/datalab/cloud/CloudModule.java @@ -23,6 +23,7 @@ import com.google.inject.AbstractModule; import com.google.inject.Injector; import io.dropwizard.setup.Environment; +//TODO: the object can be removed and replaced by spring annotations public abstract class CloudModule extends AbstractModule { @Override @@ -30,5 +31,4 @@ public abstract class CloudModule extends AbstractModule { } public abstract void init(Environment environment, Injector injector); - } diff --git a/services/provisioning-service/pom.xml b/services/provisioning-service/pom.xml index 5a9bdee..444938c 100644 --- a/services/provisioning-service/pom.xml +++ b/services/provisioning-service/pom.xml @@ -74,11 +74,11 @@ <groupId>com.epam.datalab</groupId> <artifactId>common</artifactId> </dependency> - <dependency> + <!--dependency> <groupId>de.ahus1.keycloak.dropwizard</groupId> <artifactId>keycloak-dropwizard</artifactId> <version>1.1.1</version> - </dependency> + </dependency--> <dependency> <groupId>de.thomaskrille</groupId> <artifactId>dropwizard-template-config</artifactId> diff --git a/services/provisioning-service/provisioning.yml b/services/provisioning-service/provisioning.yml index b6ced32..a657763 100644 --- a/services/provisioning-service/provisioning.yml +++ b/services/provisioning-service/provisioning.yml @@ -19,26 +19,26 @@ # # ****************************************************************************** - <#include "ssn.yml"> +#---"infrastructure-provisioning/src/ssn/templates/ssn.yml" backupScriptPath: /opt/datalab/tmp/backup.py backupDirectory: /opt/datalab/tmp/result -keyDirectory: ${KEYS_DIR} +keyDirectory: /home/pavel/keys responseDirectory: /opt/datalab/tmp handlerDirectory: /opt/datalab/handlers -dockerLogDirectory: ${LOG_ROOT_DIR} -warmupPollTimeout: 2m -resourceStatusPollTimeout: 400m +dockerLogDirectory: /var/opt/datalab/log +warmupPollTimeout: 50s +resourceStatusPollTimeout: 300m keyLoaderPollTimeout: 30m requestEnvStatusTimeout: 50s adminKey: KEYNAME edgeImage: docker.datalab-edge fileLengthCheckDelay: 500ms - <#if CLOUD_TYPE == "aws"> +#<#if CLOUD_TYPE == "aws"> emrEC2RoleDefault: EMR_EC2_DefaultRole emrServiceRoleDefault: EMR_DefaultRole -</#if> +#</#if> processMaxThreadsPerJvm: 50 processMaxThreadsPerUser: 5 @@ -46,7 +46,16 @@ processTimeout: 180m handlersPersistenceEnabled: true +cloudProvider: GCP + server: + port: 8084 + type: https + ssl: + key-store: /home/pavel/keys/ssn.keystore.jks + key-store-type: JKS + key-alias: ssn + key-store-password: KEYSTORE_PASSWORD requestLog: appenders: - type: file @@ -55,15 +64,15 @@ server: archivedLogFilenamePattern: ${LOG_ROOT_DIR}/ssn/request-provisioning-%d{yyyy-MM-dd}.log.gz archivedFileCount: 10 applicationConnectors: -# - type: http - - type: https - port: 8084 - certAlias: ssn - validateCerts: false - keyStorePath: ${KEY_STORE_PATH} - keyStorePassword: ${KEY_STORE_PASSWORD} - trustStorePath: ${TRUST_STORE_PATH} - trustStorePassword: ${TRUST_STORE_PASSWORD} +## - type: http +# - type: https +# port: 8084 +# certAlias: ssn +# validateCerts: false +# keyStorePath: ${KEY_STORE_PATH} +# keyStorePassword: ${KEY_STORE_PASSWORD} +# trustStorePath: ${TRUST_STORE_PATH} +# trustStorePassword: ${TRUST_STORE_PASSWORD} adminConnectors: # - type: http - type: https @@ -76,30 +85,31 @@ server: trustStorePassword: ${TRUST_STORE_PASSWORD} logging: - level: INFO - loggers: - com.epam: TRACE - com.aegisql: INFO + level: + root: ERROR + com: + epam: DEBUG + aegisql: INFO appenders: -<#if DEV_MODE == "true"> +#<#if DEV_MODE == "true"> - type: console -</#if> - - type: file +#</#if> +# - type: file currentLogFilename: ${LOG_ROOT_DIR}/ssn/provisioning.log archive: true archivedLogFilenamePattern: ${LOG_ROOT_DIR}/ssn/provisioning-%d{yyyy-MM-dd}.log.gz archivedFileCount: 10 -keycloakConfiguration: - realm: KEYCLOAK_REALM_NAME +keycloak: + realm: DLAB_bhliva bearer-only: true - auth-server-url: KEYCLOAK_AUTH_SERVER_URL + auth-server-url: http://52.11.45.11:8080/auth ssl-required: none register-node-at-startup: true register-node-period: 600 - resource: KEYCLOAK_CLIENT_NAME + resource: sss credentials: - secret: KEYCLOAK_CLIENT_SECRET + secret: cf5a484b-039b-4161-8707-ad65c0f25962 cloudProperties: os: CONF_OS @@ -122,7 +132,7 @@ cloudProperties: datalakeTagName: AZURE_DATALAKE_TAG azureClientId: AZURE_CLIENT_ID gcpProjectId: GCP_PROJECT_ID - imageEnabled: CONF_IMAGE_ENABLED + imageEnabled: true azureAuthFile: AZURE_AUTH_FILE_PATH ldap: host: LDAP_HOST @@ -131,7 +141,7 @@ cloudProperties: user: LDAP_USER_NAME password: LDAP_USER_PASSWORD stepCerts: - enabled: STEP_CERTS_ENABLED + enabled: true rootCA: STEP_ROOT_CA kid: STEP_KID_ID kidPassword: STEP_KID_PASSWORD @@ -140,4 +150,4 @@ cloudProperties: auth_server_url: KEYCLOAK_AUTH_SERVER_URL realm_name: KEYCLOAK_REALM_NAME user: KEYCLOAK_USER_NAME - user_password: KEYCLOAK_PASSWORD \ No newline at end of file + user_password: KEYCLOAK_PASSWORD diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/DropwizardBearerTokenFilterImpl.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/DropwizardBearerTokenFilterImpl.java deleted file mode 100644 index d0a36ba..0000000 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/DropwizardBearerTokenFilterImpl.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 com.epam.datalab.backendapi; - -import org.keycloak.adapters.AdapterDeploymentContext; -import org.keycloak.adapters.KeycloakDeployment; -import org.keycloak.adapters.NodesRegistrationManagement; -import org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl; - -import javax.annotation.Priority; -import javax.ws.rs.Priorities; -import javax.ws.rs.container.PreMatching; - -@PreMatching -@Priority(Priorities.AUTHENTICATION) -public class DropwizardBearerTokenFilterImpl extends JaxrsBearerTokenFilterImpl { - - public DropwizardBearerTokenFilterImpl(KeycloakDeployment keycloakDeployment) { - deploymentContext = new AdapterDeploymentContext(keycloakDeployment); - nodesRegistrationManagement = new NodesRegistrationManagement(); - } -} \ No newline at end of file diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/ProvisioningServiceApplication.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/ProvisioningServiceApplication.java index e331980..52b749a 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/ProvisioningServiceApplication.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/ProvisioningServiceApplication.java @@ -29,6 +29,7 @@ import com.epam.datalab.backendapi.resources.*; import com.epam.datalab.backendapi.resources.base.KeyResource; import com.epam.datalab.backendapi.service.impl.RestoreCallbackHandlerServiceImpl; import com.epam.datalab.cloud.CloudModule; +import com.epam.datalab.exceptions.InitializationException; import com.epam.datalab.process.model.DatalabProcess; import com.epam.datalab.rest.client.RESTService; import com.epam.datalab.rest.mappers.JsonProcessingExceptionMapper; @@ -38,12 +39,12 @@ import com.fasterxml.jackson.databind.InjectableValues; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.inject.Guice; import com.google.inject.Injector; -import de.ahus1.keycloak.dropwizard.AbstractKeycloakAuthenticator; -import de.ahus1.keycloak.dropwizard.KeycloakBundle; -import de.ahus1.keycloak.dropwizard.KeycloakConfiguration; -import de.thomaskrille.dropwizard_template_config.TemplateConfigBundle; -import de.thomaskrille.dropwizard_template_config.TemplateConfigBundleConfiguration; -import io.dropwizard.Application; +//import de.ahus1.keycloak.dropwizard.AbstractKeycloakAuthenticator; +//import de.ahus1.keycloak.dropwizard.KeycloakBundle; +//import de.ahus1.keycloak.dropwizard.KeycloakConfiguration; +//import de.thomaskrille.dropwizard_template_config.TemplateConfigBundle; +//import de.thomaskrille.dropwizard_template_config.TemplateConfigBundleConfiguration; +/*import io.dropwizard.Application; import io.dropwizard.auth.Authenticator; import io.dropwizard.auth.Authorizer; import io.dropwizard.forms.MultiPartBundle; @@ -51,6 +52,7 @@ import io.dropwizard.jersey.setup.JerseyEnvironment; import io.dropwizard.setup.Bootstrap; import io.dropwizard.setup.Environment; import org.keycloak.KeycloakSecurityContext; +*/ /* import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; @@ -59,24 +61,64 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; */ +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.ApplicationContext; +import org.springframework.context.EnvironmentAware; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; +import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; import java.security.Principal; - -public class ProvisioningServiceApplication extends Application<ProvisioningServiceApplicationConfiguration> { - - public static void main(String[] args) throws Exception { +import java.util.Arrays; + +@SpringBootApplication +@EnableMongoRepositories +//@EnableConfigurationProperties(ProvisioningServiceApplicationConfiguration.class) +public class ProvisioningServiceApplication implements ApplicationRunner{ +//TODO: thrown Exception class has been removed. See the distinguish. + //TODO: Double check with Keycloak barear filter impl!!! + + @Autowired//Is it required to proceed with component annotation for ProvisioningServiceApplication + //Is there way to get an env from the context + private Environment environment; + + @Autowired//TODO: read about autowired abd EnableConfigurationProperties + //Is there way to get a configuration from the context + private ProvisioningServiceApplicationConfiguration configuration; + + public static void main(String[] args) { if (ServiceUtils.printAppVersion(ProvisioningServiceApplication.class, args)) { return; } - new ProvisioningServiceApplication().run(args); + new SpringApplicationBuilder() + .sources(ProvisioningServiceApplication.class) + .build() + .run(args); } @Override + public void run(ApplicationArguments arg){ + DatalabProcess.getInstance().setProcessTimeout(configuration.getProcessTimeout()); + DatalabProcess.getInstance().setMaxProcessesPerBox(configuration.getProcessMaxThreadsPerJvm()); + DatalabProcess.getInstance().setMaxProcessesPerUser(configuration.getProcessMaxThreadsPerUser()); + + //CloudModule cloudModule = CloudModuleConfigurator.getCloudModule(configuration); + + System.out.println("Docker directory: " + environment.getProperty("dockerLogDirectory")); + System.out.println("Cloud provider: " + configuration.getCloudProvider()); + System.out.println("T/O: " + configuration.getProcessTimeout()); + } + /* + @Override public void initialize(Bootstrap<ProvisioningServiceApplicationConfiguration> bootstrap) { bootstrap.addBundle(new MultiPartBundle()); bootstrap.addBundle(new TemplateConfigBundle( @@ -162,4 +204,6 @@ public class ProvisioningServiceApplication extends Application<ProvisioningServ jersey.register(injector.getInstance(ProvisioningHealthCheckResource.class)); environment.jersey().register(injector.getInstance(BucketResource.class)); } + + */ } diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/ProvisioningServiceApplicationConfiguration.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/ProvisioningServiceApplicationConfiguration.java index 84ff288..73bed31 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/ProvisioningServiceApplicationConfiguration.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/ProvisioningServiceApplicationConfiguration.java @@ -25,78 +25,110 @@ import com.epam.datalab.backendapi.core.Directories; import com.epam.datalab.backendapi.validation.ProvisioningServiceCloudConfigurationSequenceProvider; import com.epam.datalab.validation.AwsValidation; import com.fasterxml.jackson.annotation.JsonProperty; -import de.ahus1.keycloak.dropwizard.KeycloakConfiguration; -import io.dropwizard.util.Duration; +//import de.ahus1.keycloak.dropwizard.KeycloakConfiguration; +import java.time.Duration; +import lombok.Setter; +//import io.dropwizard.util.Duration; import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.group.GroupSequenceProvider; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +//TODO: overview the configuration annotation +@Configuration +//@ConfigurationProperties @GroupSequenceProvider(ProvisioningServiceCloudConfigurationSequenceProvider.class) public class ProvisioningServiceApplicationConfiguration extends ServiceConfiguration implements Directories { @NotEmpty @JsonProperty + @Setter //TODO: Required for spring private String keyDirectory; @NotEmpty @JsonProperty + @Setter //TODO: reqs for spring? private String responseDirectory; @NotEmpty @JsonProperty + @Setter //TODO: reqs for spring? private String dockerLogDirectory; + @JsonProperty + @Setter //TODO: reqs for spring? + private String cloudProvider; + @NotEmpty @JsonProperty + @Setter //TODO: reqs for spring? private String handlerDirectory; @JsonProperty + @Setter //TODO: req for spring private Duration warmupPollTimeout; @JsonProperty - private Duration resourceStatusPollTimeout = Duration.minutes(3); + @Setter //TODO: reqs for spring? + private Duration resourceStatusPollTimeout = Duration.ofMinutes(3); @JsonProperty - private Duration keyLoaderPollTimeout = Duration.minutes(2); + @Setter //TODO: reqs for spring? + private Duration keyLoaderPollTimeout = Duration.ofMinutes(2); @JsonProperty - private Duration requestEnvStatusTimeout = Duration.seconds(30); + @Setter //TODO: reqs for spring? + private Duration requestEnvStatusTimeout = Duration.ofSeconds(30); @NotEmpty @JsonProperty + @Setter //TODO: reqs for spring? private String adminKey; @NotEmpty @JsonProperty + @Setter //TODO: reqs for spring? private String edgeImage; @JsonProperty - private Duration fileLengthCheckDelay = Duration.seconds(3); + @Setter //TODO: reqs for spring? + private Duration fileLengthCheckDelay = Duration.ofSeconds(3); @NotEmpty(groups = AwsValidation.class) @JsonProperty + @Setter //TODO: reqs for spring? private String emrEC2RoleDefault; @NotEmpty(groups = AwsValidation.class) @JsonProperty + @Setter //TODO: reqs for spring? private String emrServiceRoleDefault; @JsonProperty + @Setter //TODO: reqs for spring? private int processMaxThreadsPerJvm = 50; @JsonProperty + @Setter //TODO: reqs for spring? private int processMaxThreadsPerUser = 5; @JsonProperty - private Duration processTimeout = Duration.hours(3); + @Setter //TODO: reqs for spring? + private Duration processTimeout = Duration.ofHours(3); + @JsonProperty + @Setter //TODO: reqs for spring? private String backupScriptPath; + @JsonProperty + @Setter //TODO: reqs for spring? private String backupDirectory; + @JsonProperty + @Setter //TODO: setter is required for spring private boolean handlersPersistenceEnabled; - private KeycloakConfiguration keycloakConfiguration = new KeycloakConfiguration(); - @JsonProperty("cloudProperties") private CloudConfiguration cloudConfiguration; @@ -187,10 +219,6 @@ public class ProvisioningServiceApplicationConfiguration extends ServiceConfigur return handlerDirectory; } - public KeycloakConfiguration getKeycloakConfiguration() { - return keycloakConfiguration; - } - public CloudConfiguration getCloudConfiguration() { return cloudConfiguration; } diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/conf/SecurityConfiguration.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/conf/SecurityConfiguration.java new file mode 100644 index 0000000..0f36c3d --- /dev/null +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/conf/SecurityConfiguration.java @@ -0,0 +1,55 @@ +package com.epam.datalab.backendapi.conf; + +import org.keycloak.adapters.KeycloakConfigResolver; +import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver; +import org.keycloak.adapters.springsecurity.KeycloakConfiguration; +import org.keycloak.adapters.springsecurity.KeycloakSecurityComponents; +import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider; +import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper; +import org.springframework.security.core.session.SessionRegistryImpl; +import org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy; +import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy; + +@Configuration +@ComponentScan( + basePackageClasses = KeycloakSecurityComponents.class, + excludeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.keycloak.adapters.springsecurity.management.HttpSessionManager")) +public class SecurityConfiguration extends KeycloakWebSecurityConfigurerAdapter { + + @Autowired + public void configureGlobal(AuthenticationManagerBuilder auth) { + KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider(); + keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper()); + auth.authenticationProvider(keycloakAuthenticationProvider); + } + + @Bean + public KeycloakConfigResolver keycloakConfigResolver() { + return new KeycloakSpringBootConfigResolver(); + } + + @Bean + @Override + protected SessionAuthenticationStrategy sessionAuthenticationStrategy() { + return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl()); + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + super.configure(http); + http + .anonymous().disable() + .authorizeRequests() + .anyRequest() + .authenticated(); + } + +} diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/DockerWarmuper.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/DockerWarmuper.java index eebb032..0893229 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/DockerWarmuper.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/DockerWarmuper.java @@ -32,12 +32,14 @@ import com.epam.datalab.process.model.ProcessInfo; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.JsonNode; -import com.google.inject.Inject; -import com.google.inject.Singleton; +//import com.google.inject.Inject; +//import com.google.inject.Singleton; import io.dropwizard.lifecycle.Managed; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -45,23 +47,23 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; -@Singleton +@Scope("singleton") @Slf4j -public class DockerWarmuper implements Managed, DockerCommands, MetadataHolder { +public class DockerWarmuper implements DockerCommands, MetadataHolder { private static final Logger LOGGER = LoggerFactory.getLogger(DockerWarmuper.class); public static final String EXPLORATORY_RESPONSE_MARKER = "exploratory_environment_shapes"; - @Inject + @Autowired private ProvisioningServiceApplicationConfiguration configuration; - @Inject + @Autowired private FolderListenerExecutor folderListenerExecutor; - @Inject + @Autowired private ICommandExecutor commandExecutor; + private final Map<String, String> imageList = new ConcurrentHashMap<>(); private final Set<ImageMetadataDTO> metadataDTOs = ConcurrentHashMap.newKeySet(); - @Override public void start() throws Exception { LOGGER.debug("warming up docker"); final ProcessInfo processInfo = commandExecutor.executeSync("warmup", DockerCommands.generateUUID(), @@ -152,10 +154,6 @@ public class DockerWarmuper implements Managed, DockerCommands, MetadataHolder { } } - @Override - public void stop() throws Exception { - //do nothing - } @Override public String getResourceType() { diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/folderlistener/AsyncFileHandler.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/folderlistener/AsyncFileHandler.java index e2fe9c2..503f853 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/folderlistener/AsyncFileHandler.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/folderlistener/AsyncFileHandler.java @@ -20,7 +20,8 @@ package com.epam.datalab.backendapi.core.response.folderlistener; import com.epam.datalab.backendapi.core.FileHandlerCallback; -import io.dropwizard.util.Duration; +//import io.dropwizard.util.Duration; +import java.time.Duration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -127,7 +128,7 @@ public final class AsyncFileHandler implements Supplier<Boolean> { long after = file.length(); do { before = after; - Thread.sleep(fileLengthCheckDelay.toMilliseconds()); + Thread.sleep(fileLengthCheckDelay.toMillis()); after = file.length(); } while (before != after); } diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/folderlistener/FolderListenerExecutor.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/folderlistener/FolderListenerExecutor.java index 7462b80..fa85d84 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/folderlistener/FolderListenerExecutor.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/folderlistener/FolderListenerExecutor.java @@ -24,18 +24,24 @@ import com.epam.datalab.backendapi.core.FileHandlerCallback; import com.epam.datalab.backendapi.core.response.handlers.dao.CallbackHandlerDao; import com.google.inject.Inject; import com.google.inject.Singleton; -import io.dropwizard.util.Duration; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; +//import io.dropwizard.util.Duration; +import java.time.Duration; import static com.epam.datalab.backendapi.core.response.folderlistener.FolderListener.listen; /** * Starts asynchronously of waiting for file creation and processing this file. */ -@Singleton +@Component +@Scope("singleton") public class FolderListenerExecutor { - @Inject + @Autowired private ProvisioningServiceApplicationConfiguration configuration; - @Inject + @Autowired private CallbackHandlerDao handlerDao; /** @@ -49,7 +55,7 @@ public class FolderListenerExecutor { */ public void start(String directory, Duration timeout, FileHandlerCallback fileHandlerCallback) { CallbackHandlerDao dao = configuration.isHandlersPersistenceEnabled() ? handlerDao : null; - listen(directory, fileHandlerCallback, timeout.toMilliseconds(), - configuration.getFileLengthCheckDelay().toMilliseconds(), dao); + listen(directory, fileHandlerCallback, timeout.toMillis(), + configuration.getFileLengthCheckDelay().toMillis(), dao); } } diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/folderlistener/WatchItemList.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/folderlistener/WatchItemList.java index 76418ae..d8b1a32 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/folderlistener/WatchItemList.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/folderlistener/WatchItemList.java @@ -24,7 +24,8 @@ import com.epam.datalab.backendapi.core.commands.DockerCommands; import com.epam.datalab.backendapi.core.response.folderlistener.WatchItem.ItemStatus; import com.epam.datalab.backendapi.core.response.handlers.PersistentFileHandler; import com.epam.datalab.backendapi.core.response.handlers.dao.CallbackHandlerDao; -import io.dropwizard.util.Duration; +//import io.dropwizard.util.Duration; +import java.time.Duration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -230,7 +231,7 @@ public class WatchItemList { LOGGER.trace("Process file {} for folder {}", item.getFileName(), directoryFullName); item.setFuture(CompletableFuture.supplyAsync( new AsyncFileHandler(item.getFileName(), getDirectoryName(), - item.getFileHandlerCallback(), Duration.milliseconds(item.getFileLengthCheckDelay())))); + item.getFileHandlerCallback(), Duration.ofMillis(item.getFileLengthCheckDelay())))); } /** diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/ComputationalConfigure.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/ComputationalConfigure.java index 3cdfcf2..c90a4b2 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/ComputationalConfigure.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/ComputationalConfigure.java @@ -38,23 +38,26 @@ import com.epam.datalab.rest.client.RESTService; import com.google.inject.Inject; import com.google.inject.Singleton; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; import java.util.Objects; import static com.epam.datalab.backendapi.core.commands.DockerAction.CONFIGURE; @Slf4j -@Singleton +@Scope("singleton") public class ComputationalConfigure implements DockerCommands { - @Inject + @Autowired private ProvisioningServiceApplicationConfiguration configuration; - @Inject + @Autowired private FolderListenerExecutor folderListenerExecutor; - @Inject + @Autowired private ICommandExecutor commandExecutor; - @Inject + @Autowired private CommandBuilder commandBuilder; - @Inject + @Autowired private RESTService selfService; public String configure(String uuid, ComputationalBase<?> dto) { diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/dao/FileSystemCallbackHandlerDao.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/dao/FileSystemCallbackHandlerDao.java index 6e39555..8346554 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/dao/FileSystemCallbackHandlerDao.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/dao/FileSystemCallbackHandlerDao.java @@ -24,9 +24,13 @@ import com.epam.datalab.backendapi.core.response.handlers.PersistentFileHandler; import com.epam.datalab.exceptions.DatalabException; import com.epam.datalab.util.FileUtils; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.inject.Inject; -import com.google.inject.Singleton; +//import com.google.inject.Inject; +//import com.google.inject.Singleton; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; import java.io.File; import java.io.IOException; @@ -41,13 +45,15 @@ import java.util.stream.Stream; import static java.util.stream.Collectors.toList; -@Singleton + +@Scope("singleton") @Slf4j +@Component public class FileSystemCallbackHandlerDao implements CallbackHandlerDao { - @Inject + @Autowired private ProvisioningServiceApplicationConfiguration configuration; - @Inject + @Autowired private ObjectMapper mapper; @Override diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/modules/AwsProvisioningModule.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/modules/AwsProvisioningModule.java index bced6b7..f9eee86 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/modules/AwsProvisioningModule.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/modules/AwsProvisioningModule.java @@ -23,17 +23,21 @@ import com.epam.datalab.backendapi.resources.aws.ComputationalResourceAws; import com.epam.datalab.backendapi.resources.aws.EdgeResourceAws; import com.epam.datalab.backendapi.resources.aws.ExploratoryResourceAws; import com.epam.datalab.backendapi.resources.aws.InfrastructureResourceAws; -import com.epam.datalab.cloud.CloudModule; -import com.google.inject.Injector; -import io.dropwizard.setup.Environment; +//import com.epam.datalab.cloud.CloudModule; +//import com.google.inject.Injector; +//import io.dropwizard.setup.Environment; +//import org.springframework.core.env.Environment; +import org.glassfish.jersey.server.ResourceConfig; +import org.springframework.stereotype.Component; -public class AwsProvisioningModule extends CloudModule { - @Override - public void init(Environment environment, Injector injector) { - environment.jersey().register(injector.getInstance(EdgeResourceAws.class)); - environment.jersey().register(injector.getInstance(InfrastructureResourceAws.class)); - environment.jersey().register(injector.getInstance(ExploratoryResourceAws.class)); - environment.jersey().register(injector.getInstance(ComputationalResourceAws.class)); +public class AwsProvisioningModule extends ResourceConfig { + + public AwsProvisioningModule() { + register(EdgeResourceAws.class); + register(InfrastructureResourceAws.class); + register(ExploratoryResourceAws.class); + register(ComputationalResourceAws.class); } + } diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/modules/CloudModuleConfigurator.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/modules/CloudModuleConfigurator.java index ba1595b..68aed49 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/modules/CloudModuleConfigurator.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/modules/CloudModuleConfigurator.java @@ -29,8 +29,8 @@ public class CloudModuleConfigurator { public static CloudModule getCloudModule(ProvisioningServiceApplicationConfiguration configuration) { switch (configuration.getCloudProvider()) { - case AWS: - return new AwsProvisioningModule(); +// case AWS: +// return new AwsProvisioningModule(); case AZURE: return new AzureProvisioningModule(); case GCP: diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/BackupResource.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/BackupResource.java index 4b0cce7..b9034f5 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/BackupResource.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/BackupResource.java @@ -32,6 +32,7 @@ import com.epam.datalab.rest.contracts.BackupAPI; import com.google.inject.Inject; import io.dropwizard.auth.Auth; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import javax.ws.rs.Consumes; import javax.ws.rs.POST; @@ -46,13 +47,13 @@ import javax.ws.rs.core.Response; @Slf4j public class BackupResource { - @Inject + @Autowired private ProvisioningServiceApplicationConfiguration configuration; - @Inject + @Autowired protected FolderListenerExecutor folderListenerExecutor; - @Inject + @Autowired protected ICommandExecutor commandExecutor; - @Inject + @Autowired protected RESTService selfService; diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/ProvisioningHealthCheckResource.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/ProvisioningHealthCheckResource.java index 0693c09..959303d 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/ProvisioningHealthCheckResource.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/ProvisioningHealthCheckResource.java @@ -23,6 +23,7 @@ import com.epam.datalab.auth.UserInfo; import com.epam.datalab.backendapi.ProvisioningServiceApplicationConfiguration; import com.google.inject.Inject; import io.dropwizard.auth.Auth; +import org.springframework.beans.factory.annotation.Autowired; import javax.ws.rs.GET; import javax.ws.rs.Path; @@ -33,7 +34,7 @@ import javax.ws.rs.core.Response; @Path("/healthcheck") @Produces(MediaType.APPLICATION_JSON) public class ProvisioningHealthCheckResource { - @Inject + @Autowired private ProvisioningServiceApplicationConfiguration configuration; @GET diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/aws/ComputationalResourceAws.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/aws/ComputationalResourceAws.java index 9af68b3..de38a34 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/aws/ComputationalResourceAws.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/aws/ComputationalResourceAws.java @@ -75,7 +75,8 @@ public class ComputationalResourceAws extends DockerService implements DockerCom configuration.getResourceStatusPollTimeout(), getFileHandlerCallback(CREATE, uuid, dto)); try { - long timeout = configuration.getResourceStatusPollTimeout().toSeconds(); + //TODO: verify the getSeconds method + long timeout = configuration.getResourceStatusPollTimeout().getSeconds(); commandExecutor.executeAsync( ui.getName(), uuid, diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/gcp/ComputationalResourceGcp.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/gcp/ComputationalResourceGcp.java index 0ff68f0..ab79031 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/gcp/ComputationalResourceGcp.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/gcp/ComputationalResourceGcp.java @@ -43,6 +43,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.google.inject.Inject; import io.dropwizard.auth.Auth; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import javax.ws.rs.Consumes; import javax.ws.rs.POST; @@ -60,9 +61,9 @@ import static com.epam.datalab.backendapi.core.commands.DockerAction.TERMINATE; @Slf4j public class ComputationalResourceGcp extends DockerService implements DockerCommands { - @Inject + @Autowired private ComputationalConfigure computationalConfigure; - @Inject + @Autowired private SparkClusterService sparkClusterService; @POST diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/gcp/EdgeResourceGcp.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/gcp/EdgeResourceGcp.java index 654f660..99bd973 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/gcp/EdgeResourceGcp.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/gcp/EdgeResourceGcp.java @@ -32,6 +32,7 @@ import com.epam.datalab.util.FileUtils; import com.fasterxml.jackson.core.JsonProcessingException; import io.dropwizard.auth.Auth; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import javax.ws.rs.Consumes; import javax.ws.rs.POST; @@ -51,10 +52,11 @@ import static com.epam.datalab.rest.contracts.ApiCallbacks.STATUS_URI; @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @Slf4j +@Component public class EdgeResourceGcp extends EdgeService { public EdgeResourceGcp() { - log.info("{} is initialized", getClass().getSimpleName()); + log.debug("{} is initialized", getClass().getSimpleName()); } @POST diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/gcp/ExploratoryResourceGcp.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/gcp/ExploratoryResourceGcp.java index c946ff7..dceb381 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/gcp/ExploratoryResourceGcp.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/gcp/ExploratoryResourceGcp.java @@ -29,6 +29,8 @@ import com.epam.datalab.dto.gcp.exploratory.ExploratoryCreateGcp; import com.fasterxml.jackson.core.JsonProcessingException; import com.google.inject.Inject; import io.dropwizard.auth.Auth; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import javax.ws.rs.Consumes; import javax.ws.rs.POST; @@ -41,7 +43,7 @@ import javax.ws.rs.core.MediaType; @Produces(MediaType.APPLICATION_JSON) public class ExploratoryResourceGcp { - @Inject + @Autowired private ExploratoryService exploratoryService; diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/gcp/InfrastructureResourceGcp.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/gcp/InfrastructureResourceGcp.java index f15f63f..177eb9b 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/gcp/InfrastructureResourceGcp.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/gcp/InfrastructureResourceGcp.java @@ -25,6 +25,8 @@ import com.epam.datalab.backendapi.resources.base.InfrastructureService; import com.epam.datalab.dto.UserEnvironmentResources; import io.dropwizard.auth.Auth; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import javax.ws.rs.Consumes; import javax.ws.rs.POST; @@ -36,6 +38,7 @@ import javax.ws.rs.core.MediaType; @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @Slf4j +@Component public class InfrastructureResourceGcp extends InfrastructureService { public InfrastructureResourceGcp() { log.info("{} is initialized", getClass().getSimpleName()); diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/CheckInactivityServiceImpl.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/CheckInactivityServiceImpl.java index 1d9aa16..133274c 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/CheckInactivityServiceImpl.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/CheckInactivityServiceImpl.java @@ -32,11 +32,12 @@ import com.epam.datalab.dto.exploratory.ExploratoryCheckInactivityAction; import com.epam.datalab.rest.contracts.ApiCallbacks; import com.google.inject.Singleton; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Scope; import java.util.Objects; @Slf4j -@Singleton +@Scope("singleton") public class CheckInactivityServiceImpl extends DockerService implements CheckInactivityService, DockerCommands { diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/DockerService.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/DockerService.java index 4a08f69..254385e 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/DockerService.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/DockerService.java @@ -25,18 +25,19 @@ import com.epam.datalab.backendapi.core.commands.ICommandExecutor; import com.epam.datalab.backendapi.core.response.folderlistener.FolderListenerExecutor; import com.epam.datalab.rest.client.RESTService; import com.google.inject.Inject; +import org.springframework.beans.factory.annotation.Autowired; public abstract class DockerService { - @Inject + @Autowired protected ProvisioningServiceApplicationConfiguration configuration; - @Inject + @Autowired protected FolderListenerExecutor folderListenerExecutor; - @Inject + @Autowired protected ICommandExecutor commandExecutor; - @Inject + @Autowired protected CommandBuilder commandBuilder; - @Inject + @Autowired protected RESTService selfService; } diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/KeyService.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/KeyService.java index 443d6a4..3fc380a 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/KeyService.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/KeyService.java @@ -33,6 +33,8 @@ import com.epam.datalab.rest.contracts.ApiCallbacks; import com.google.inject.Inject; import com.google.inject.Singleton; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; import java.io.IOException; @@ -41,14 +43,14 @@ import static java.nio.file.Files.readAllBytes; import static java.nio.file.Paths.get; @Slf4j -@Singleton +@Scope("singleton") public class KeyService extends DockerService implements DockerCommands { private static final String REUPLOAD_KEY_ACTION = "reupload_key"; private final ProvisioningServiceApplicationConfiguration conf; - @Inject + @Autowired public KeyService(ProvisioningServiceApplicationConfiguration conf) { this.conf = conf; } diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/OdahuServiceImpl.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/OdahuServiceImpl.java index 6be8ece..35f7baa 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/OdahuServiceImpl.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/OdahuServiceImpl.java @@ -35,6 +35,7 @@ import com.epam.datalab.dto.odahu.CreateOdahuDTO; import com.epam.datalab.rest.client.RESTService; import com.fasterxml.jackson.core.JsonProcessingException; import com.google.inject.Inject; +import org.springframework.beans.factory.annotation.Autowired; public class OdahuServiceImpl implements OdahuService { @@ -48,7 +49,7 @@ public class OdahuServiceImpl implements OdahuService { private final ICommandExecutor commandExecutor; private final RESTService selfService; - @Inject + @Autowired public OdahuServiceImpl(ProvisioningServiceApplicationConfiguration configuration, FolderListenerExecutor folderListenerExecutor, CommandBuilder commandBuilder, ICommandExecutor commandExecutor, RESTService selfService) { diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/ProjectServiceImpl.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/ProjectServiceImpl.java index f92e1f4..1e3140c 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/ProjectServiceImpl.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/ProjectServiceImpl.java @@ -36,6 +36,9 @@ import com.epam.datalab.rest.client.RESTService; import com.fasterxml.jackson.core.JsonProcessingException; import com.google.inject.Inject; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; import java.util.Objects; @@ -53,7 +56,7 @@ public class ProjectServiceImpl implements ProjectService { private final ICommandExecutor commandExecutor; private final CommandBuilder commandBuilder; - @Inject + @Autowired public ProjectServiceImpl(RESTService selfService, ProvisioningServiceApplicationConfiguration configuration, FolderListenerExecutor folderListenerExecutor, ICommandExecutor commandExecutor, CommandBuilder commandBuilder) { this.selfService = selfService; diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/RestoreCallbackHandlerServiceImpl.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/RestoreCallbackHandlerServiceImpl.java index 4e21d0d..bd3ef49 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/RestoreCallbackHandlerServiceImpl.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/RestoreCallbackHandlerServiceImpl.java @@ -24,25 +24,26 @@ import com.epam.datalab.backendapi.core.response.handlers.dao.CallbackHandlerDao import com.epam.datalab.backendapi.service.RestoreCallbackHandlerService; import com.google.inject.Inject; import com.google.inject.Singleton; -import io.dropwizard.lifecycle.Managed; -import io.dropwizard.util.Duration; +//TODO: remove the lifecycle dependency +//import io.dropwizard.lifecycle.Managed; +//import io.dropwizard.util.Duration; +import java.time.Duration; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; @Singleton @Slf4j -public class RestoreCallbackHandlerServiceImpl implements Managed, RestoreCallbackHandlerService { +@Service +public class RestoreCallbackHandlerServiceImpl implements RestoreCallbackHandlerService { - @Inject + @Autowired private CallbackHandlerDao callbackHandlerDao; - @Inject + @Autowired private FolderListenerExecutor folderListenerExecutor; - @Override - public void start() { - restore(); - } + public void start() {restore();} - @Override public void stop() { log.info("RestoreCallbackHandlerServiceImpl stopped"); } @@ -51,7 +52,7 @@ public class RestoreCallbackHandlerServiceImpl implements Managed, RestoreCallba log.info("Restoring callback handlers"); callbackHandlerDao.findAll().forEach(persistentFileHandler -> folderListenerExecutor.start(persistentFileHandler.getDirectory(), - Duration.milliseconds(persistentFileHandler.getTimeout()), + Duration.ofMillis(persistentFileHandler.getTimeout()), persistentFileHandler.getHandler())); log.info("Successfully restored file handlers"); } diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/SparkClusterService.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/SparkClusterService.java index 62ae5b1..4ef2dc9 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/SparkClusterService.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/SparkClusterService.java @@ -38,6 +38,8 @@ import com.epam.datalab.exceptions.DatalabException; import com.fasterxml.jackson.core.JsonProcessingException; import com.google.inject.Inject; import com.google.inject.Singleton; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; import java.util.Objects; @@ -47,12 +49,12 @@ import static com.epam.datalab.backendapi.core.commands.DockerAction.START; import static com.epam.datalab.backendapi.core.commands.DockerAction.STOP; import static com.epam.datalab.backendapi.core.commands.DockerAction.TERMINATE; -@Singleton +@Scope("singleton") public class SparkClusterService extends DockerService implements DockerCommands { private static final DataEngineType SPARK_ENGINE = DataEngineType.SPARK_STANDALONE; - @Inject + @Autowired private ComputationalConfigure computationalConfigure; public String create(UserInfo ui, ComputationalBase<?> dto) { diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/aws/BucketServiceAwsImpl.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/aws/BucketServiceAwsImpl.java index 2999df9..8cfdba9 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/aws/BucketServiceAwsImpl.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/aws/BucketServiceAwsImpl.java @@ -24,6 +24,7 @@ import com.epam.datalab.backendapi.service.BucketService; import com.epam.datalab.dto.bucket.BucketDTO; import com.epam.datalab.exceptions.DatalabException; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.core.sync.ResponseTransformer; import software.amazon.awssdk.services.s3.S3Client; @@ -42,6 +43,7 @@ import java.util.List; import java.util.stream.Collectors; @Slf4j +@Component public class BucketServiceAwsImpl implements BucketService { @Override diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/azure/BucketServiceAzureImpl.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/azure/BucketServiceAzureImpl.java index 4c56b2c..6b930ea 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/azure/BucketServiceAzureImpl.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/azure/BucketServiceAzureImpl.java @@ -37,6 +37,9 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.ToString; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; @@ -53,7 +56,7 @@ public class BucketServiceAzureImpl implements BucketService { private final AzureAuthFile azureAuthFile; - @Inject + @Autowired public BucketServiceAzureImpl(ProvisioningServiceApplicationConfiguration configuration) throws Exception { azureAuthFile = getAzureAuthFile(configuration); } diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/gcp/BucketServiceGcpImpl.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/gcp/BucketServiceGcpImpl.java index 65e9fe6..dd732b4 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/gcp/BucketServiceGcpImpl.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/gcp/BucketServiceGcpImpl.java @@ -30,6 +30,7 @@ import com.google.cloud.storage.Bucket; import com.google.cloud.storage.Storage; import com.google.cloud.storage.StorageOptions; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; @@ -39,6 +40,7 @@ import java.util.stream.Collectors; import java.util.stream.StreamSupport; @Slf4j +@Component public class BucketServiceGcpImpl implements BucketService { @Override diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/process/model/DatalabProcess.java b/services/provisioning-service/src/main/java/com/epam/datalab/process/model/DatalabProcess.java index 9722ab6..0acc927 100644 --- a/services/provisioning-service/src/main/java/com/epam/datalab/process/model/DatalabProcess.java +++ b/services/provisioning-service/src/main/java/com/epam/datalab/process/model/DatalabProcess.java @@ -21,7 +21,8 @@ package com.epam.datalab.process.model; import com.epam.datalab.process.ProcessConveyor; import com.epam.datalab.process.builder.ProcessInfoBuilder; import com.epam.datalab.util.SecurityUtils; -import io.dropwizard.util.Duration; +import java.time.Duration; +//import io.dropwizard.util.Duration; import lombok.extern.slf4j.Slf4j; import java.io.PrintWriter; @@ -161,7 +162,7 @@ public class DatalabProcess { } public void setProcessTimeout(Duration duration) { - this.expirationTime = duration.toMilliseconds(); + this.expirationTime = duration.toMillis(); } } diff --git a/services/provisioning-service/src/test/java/com/epam/datalab/backendapi/core/DockerWarmuperTest.java b/services/provisioning-service/src/test/java/com/epam/datalab/backendapi/core/DockerWarmuperTest.java index 191da79..c640fd0 100644 --- a/services/provisioning-service/src/test/java/com/epam/datalab/backendapi/core/DockerWarmuperTest.java +++ b/services/provisioning-service/src/test/java/com/epam/datalab/backendapi/core/DockerWarmuperTest.java @@ -33,7 +33,8 @@ import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Inject; import com.google.inject.Injector; -import io.dropwizard.util.Duration; +import java.time.Duration; +//import io.dropwizard.util.Duration; import org.junit.Before; import org.junit.Test; @@ -115,7 +116,7 @@ public class DockerWarmuperTest { private ProvisioningServiceApplicationConfiguration createConfiguration() { ProvisioningServiceApplicationConfiguration result = mock(ProvisioningServiceApplicationConfiguration.class); when(result.getWarmupDirectory()).thenReturn("/tmp"); - when(result.getWarmupPollTimeout()).thenReturn(Duration.seconds(3)); + when(result.getWarmupPollTimeout()).thenReturn(Duration.ofMillis(3)); return result; } diff --git a/services/provisioning-service/src/test/java/com/epam/datalab/backendapi/core/response/folderlistener/WatchItemTest.java b/services/provisioning-service/src/test/java/com/epam/datalab/backendapi/core/response/folderlistener/WatchItemTest.java index 075523d..25ec2f5 100644 --- a/services/provisioning-service/src/test/java/com/epam/datalab/backendapi/core/response/folderlistener/WatchItemTest.java +++ b/services/provisioning-service/src/test/java/com/epam/datalab/backendapi/core/response/folderlistener/WatchItemTest.java @@ -21,7 +21,8 @@ package com.epam.datalab.backendapi.core.response.folderlistener; import com.epam.datalab.backendapi.core.FileHandlerCallback; import com.epam.datalab.backendapi.core.response.folderlistener.WatchItem.ItemStatus; -import io.dropwizard.util.Duration; +import java.time.Duration; +//import io.dropwizard.util.Duration; import org.junit.Test; import java.util.concurrent.CompletableFuture; @@ -87,7 +88,7 @@ public class WatchItemTest { private AsyncFileHandler getSupplier(WatchItem item) { return new AsyncFileHandler(item.getFileName(), getDirectory(), item.getFileHandlerCallback(), - Duration.milliseconds(item.getFileLengthCheckDelay())); + Duration.ofMillis(item.getFileLengthCheckDelay())); } @Test diff --git a/services/provisioning-service/src/test/java/com/epam/datalab/backendapi/service/RestoreCallbackHandlerServiceImplTest.java b/services/provisioning-service/src/test/java/com/epam/datalab/backendapi/service/RestoreCallbackHandlerServiceImplTest.java index 1df6778..6c0a5f7 100644 --- a/services/provisioning-service/src/test/java/com/epam/datalab/backendapi/service/RestoreCallbackHandlerServiceImplTest.java +++ b/services/provisioning-service/src/test/java/com/epam/datalab/backendapi/service/RestoreCallbackHandlerServiceImplTest.java @@ -23,7 +23,8 @@ import com.epam.datalab.backendapi.core.response.folderlistener.FolderListenerEx import com.epam.datalab.backendapi.core.response.handlers.PersistentFileHandler; import com.epam.datalab.backendapi.core.response.handlers.dao.CallbackHandlerDao; import com.epam.datalab.backendapi.service.impl.RestoreCallbackHandlerServiceImpl; -import io.dropwizard.util.Duration; +import java.time.Duration; +//import io.dropwizard.util.Duration; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; @@ -56,9 +57,9 @@ public class RestoreCallbackHandlerServiceImplTest { restoreCallbackHandlerService.start(); verify(dao).findAll(); - verify(folderListenerExecutor).start(handler1.getDirectory(), Duration.milliseconds(handler1.getTimeout()), + verify(folderListenerExecutor).start(handler1.getDirectory(), Duration.ofMillis(handler1.getTimeout()), handler1.getHandler()); - verify(folderListenerExecutor).start(handler2.getDirectory(), Duration.milliseconds(handler2.getTimeout()), + verify(folderListenerExecutor).start(handler2.getDirectory(), Duration.ofMillis(handler2.getTimeout()), handler2.getHandler()); verifyNoMoreInteractions(dao, folderListenerExecutor); } diff --git a/services/self-service/self-service.yml b/services/self-service/self-service.yml index 9e20bf0..b8b1ed2 100644 --- a/services/self-service/self-service.yml +++ b/services/self-service/self-service.yml @@ -19,7 +19,7 @@ # # ****************************************************************************** -<#include "ssn.yml"> +<#include "infrastructure-provisioning/src/ssn/templates/ssn.yml"> # Minimum and maximum number of slave EMR instances than could be created minEmrInstanceCount: 2 @@ -46,15 +46,15 @@ checkEnvStatusTimeout: 5m # Restrict access to DataLab features using roles policy rolePolicyEnabled: true # Default access to DataLab features using roles policy -roleDefaultAccess: false +roleDefaultAccess: true # Set to true to enable the scheduler of billing report. -billingSchedulerEnabled: false +billingSchedulerEnabled: true billingPort: 8088 # Set to true to enable audit auditEnabled: true # Name of configuration file for billing report. - <#if DEV_MODE == "true"> +<#if DEV_MODE == "true"> billingConfFile: ${sys['user.dir']}/../billing/billing.yml <#else> billingConfFile: ${DATALAB_CONF_DIR}/billing.yml @@ -146,13 +146,13 @@ schedulers: cron: "*/20 * * ? * * *" checkQuoteScheduler: enabled: true - cron: "0 2/15 * ? * *" + cron: "0 0 * ? * * *" checkUserQuoteScheduler: enabled: false cron: "0 0 * ? * * *" checkProjectQuoteScheduler: enabled: true - cron: "0 4/15 * ? * *" + cron: "0 * * ? * * *" checkEndpointStatusScheduler: enabled: true cron: "0 6/15 * ? * *" @@ -168,16 +168,16 @@ guacamole: username: datalab-user keycloakConfiguration: - redirectUri: KEYCLOAK_REDIRECT_URI - realm: KEYCLOAK_REALM_NAME + redirectUri: https://localhost:8443/ + realm: DLAB_bhliva bearer-only: true - auth-server-url: KEYCLOAK_AUTH_SERVER_URL + auth-server-url: http://52.11.45.11:8080/auth ssl-required: none register-node-at-startup: true register-node-period: 600 - resource: KEYCLOAK_CLIENT_NAME + resource: sss credentials: - secret: KEYCLOAK_CLIENT_SECRET + secret: cf5a484b-039b-4161-8707-ad65c0f25962 jerseyClient: minThreads: 1 --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
