/* * 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 gobblin.config.store.deploy; import gobblin.config.store.api.ConfigStore; import gobblin.config.store.api.ConfigStoreFactory; import java.net.URI; import java.util.ServiceLoader; import lombok.extern.slf4j.Slf4j; /** * A tool to deploy configs provided by a {@link DeployableConfigSource} to a {@link ConfigStore}. The deployment * semantics are defined the {@link ConfigStore} themselves. A {@link ConfigStore} must implement {@link Deployable} for * the {@link StoreDeployer} to deploy on it. If the {@link ConfigStore} for <code>storeUri</code> does not implement * {@link Deployable}, the deployment will be a no-op */ @Slf4j public class StoreDeployer { /** * Deploy configs in <code>classpathStoreRoot</code> to <code>storeUri</code> * * @param storeUri to which confgs are deployed * @param confgSource The source that provides deployable configs. * @param version to be used for this deployment * */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static void deploy(URI storeUri, DeployableConfigSource confgSource, String version) throws Exception { ServiceLoader<ConfigStoreFactory> loader = ServiceLoader.load(ConfigStoreFactory.class); for (ConfigStoreFactory storeFactory : loader) { log.info("Found ConfigStore with scheme : " + storeFactory.getScheme()); if (storeUri.getScheme().equals(storeFactory.getScheme())) { log.info("Using ConfigStore with scheme : " + storeFactory.getScheme()); ConfigStore configStore = storeFactory.createConfigStore(storeUri); if (configStore instanceof Deployable<?>) { ((Deployable) configStore).deploy(new FsDeploymentConfig(confgSource, version)); } else { log.error(String.format("Deployment failed. The store %s does not implement %s", storeFactory.getClass(), Deployable.class.getName())); } } } } }