Search in sources :

Example 21 with ItemBase

use of org.platformlayer.core.model.ItemBase in project platformlayer by platformlayer.

the class OperationWorker method doOperation.

Object doOperation() throws OpsException {
    final Action action = activeJob.getAction();
    final PlatformLayerKey targetItemKey = activeJob.getTargetItemKey();
    RenameThread rename = new RenameThread(action.getClass().getSimpleName() + " " + targetItemKey);
    try {
        OpsContextBuilder opsContextBuilder = opsSystem.getInjector().getInstance(OpsContextBuilder.class);
        final ProjectAuthorization project = activeJob.getProjectAuthorization();
        final OpsContext opsContext = opsContextBuilder.buildOpsContext(activeJob);
        final ServiceType serviceType = activeJob.getServiceType();
        final ServiceProvider serviceProvider = opsSystem.getServiceProvider(serviceType);
        try {
            return OpsContext.runInContext(opsContext, new CheckedCallable<Object, Exception>() {

                @Override
                public Object call() throws Exception {
                    log.info("Starting job");
                    activeJob.setState(JobState.RUNNING);
                    ItemBase item;
                    ManagedItemRepository repository = opsSystem.getManagedItemRepository();
                    try {
                        boolean fetchTags = true;
                        item = repository.getManagedItem(targetItemKey, fetchTags, SecretProvider.from(project));
                    } catch (RepositoryException e) {
                        throw new OpsException("Error reading item from repository", e);
                    }
                    if (item == null) {
                        throw new WebApplicationException(404);
                    }
                    List<Object> scopeItems = Lists.newArrayList();
                    addActionScopeItems(action, item, scopeItems);
                    Object controller = serviceProvider.getController(item);
                    scopeItems.add(item);
                    scopeItems.add(action);
                    BindingScope scope = BindingScope.push(scopeItems);
                    opsContext.recurseOperation(scope, controller);
                    // TODO: Should we run a verify operation before -> ACTIVE??
                    // (we need to fix the states as well)
                    ManagedItemState newState = finishAction(action, scope);
                    if (newState != null) {
                        repository.changeState(targetItemKey, newState);
                        item.state = newState;
                    }
                    log.info("Job finished with SUCCESS");
                    activeJob.setState(JobState.SUCCESS);
                    return null;
                }

                private ManagedItemState finishAction(Action action, BindingScope scope) throws OpsException {
                    ManagedItemState newState = null;
                    if (action instanceof ConfigureAction) {
                        newState = ManagedItemState.ACTIVE;
                    }
                    if (action instanceof ValidateAction) {
                    // TODO: Change state to healthy??
                    }
                    if (action instanceof DeleteAction) {
                        newState = ManagedItemState.DELETED;
                    }
                    if (action instanceof BackupAction) {
                        BackupContext backupContext = scope.getInstance(BackupContext.class);
                        backupContext.writeDescriptor();
                    }
                    return newState;
                }

                private void addActionScopeItems(Action action, ItemBase item, List<Object> scopeItems) throws OpsException {
                    if (action instanceof BackupAction) {
                        // TODO: Don't hard-code this
                        BackupHelpers backupHelpers = opsSystem.getInjector().getInstance(BackupHelpers.class);
                        BackupContext backupContext = backupHelpers.createBackupContext(item);
                        scopeItems.add(backupContext);
                    }
                }
            });
        } catch (Throwable e) {
            log.warn("Error running operation", e);
            log.warn("Job finished with FAILED");
            // boolean isDone = false; // We will retry
            activeJob.setState(JobState.FAILED);
            TimeSpan retry = null;
            HasRetryInfo retryInfo = ExceptionHelpers.findRetryInfo(e);
            if (retryInfo != null) {
                retry = retryInfo.getRetry();
            }
            if (retry == null) {
                // TODO: Eventually give up??
                retry = ApplicationMode.isDevelopment() ? TimeSpan.ONE_MINUTE : TimeSpan.FIVE_MINUTES;
            }
            // TODO: State transition??
            // managedItem.setState(ManagedItemState.ACTIVE, true);
            log.warn("Scheduling retry in " + retry);
            activeJob.enqueueRetry(retry);
            return null;
        } finally {
            try {
                activeJob.recordJobEnd();
            } catch (OpsException e) {
                log.error("Error recording job in registry", e);
            }
        }
    } finally {
        IoUtils.safeClose(rename);
    }
}
Also used : ValidateAction(org.platformlayer.core.model.ValidateAction) ConfigureAction(org.platformlayer.core.model.ConfigureAction) DeleteAction(org.platformlayer.core.model.DeleteAction) BackupAction(org.platformlayer.core.model.BackupAction) Action(org.platformlayer.core.model.Action) OpsException(org.platformlayer.ops.OpsException) WebApplicationException(javax.ws.rs.WebApplicationException) BackupHelpers(org.platformlayer.ops.backups.BackupHelpers) ManagedItemRepository(org.platformlayer.xaas.repository.ManagedItemRepository) OpsContext(org.platformlayer.ops.OpsContext) TimeSpan(com.fathomdb.TimeSpan) BackupAction(org.platformlayer.core.model.BackupAction) ServiceType(org.platformlayer.ids.ServiceType) BackupContext(org.platformlayer.ops.backups.BackupContext) HasRetryInfo(org.platformlayer.exceptions.HasRetryInfo) List(java.util.List) BindingScope(org.platformlayer.ops.BindingScope) ConfigureAction(org.platformlayer.core.model.ConfigureAction) ItemBase(org.platformlayer.core.model.ItemBase) PlatformLayerKey(org.platformlayer.core.model.PlatformLayerKey) RepositoryException(org.platformlayer.RepositoryException) RepositoryException(org.platformlayer.RepositoryException) OpsException(org.platformlayer.ops.OpsException) WebApplicationException(javax.ws.rs.WebApplicationException) ServiceProvider(org.platformlayer.xaas.services.ServiceProvider) ProjectAuthorization(org.platformlayer.model.ProjectAuthorization) DeleteAction(org.platformlayer.core.model.DeleteAction) ValidateAction(org.platformlayer.core.model.ValidateAction) ManagedItemState(org.platformlayer.core.model.ManagedItemState)

Example 22 with ItemBase

use of org.platformlayer.core.model.ItemBase in project platformlayer by platformlayer.

the class HttpProxyHelper method findHttpProxies.

public List<String> findHttpProxies(OpsTarget target, URI uri) throws OpsException {
    List<String> proxies = Lists.newArrayList();
    for (ProviderOf<HttpProxyController> httpProxyProvider : providerHelper.listItemsProviding(HttpProxyController.class)) {
        ItemBase item = httpProxyProvider.getItem();
        if (item.getState() != ManagedItemState.ACTIVE) {
            continue;
        }
        HttpProxyController httpProxy = httpProxyProvider.get();
        NetworkPoint forNetworkPoint = NetworkPoint.forTarget(target);
        String url = httpProxy.getUrl(httpProxyProvider.getItem(), forNetworkPoint, uri);
        if (url == null) {
            log.info("Could not get URL for proxy: " + item);
        } else {
            proxies.add(url);
        }
    }
    return proxies;
}
Also used : ItemBase(org.platformlayer.core.model.ItemBase) NetworkPoint(org.platformlayer.ops.networks.NetworkPoint)

Example 23 with ItemBase

use of org.platformlayer.core.model.ItemBase in project platformlayer by platformlayer.

the class StandardTemplateData method findPublicSslKey.

public ManagedSecretKey findPublicSslKey() throws OpsException {
    PlatformLayerKey sslKey = getSslKeyPath();
    if (sslKey == null) {
        if (getCaPath() != null) {
            ManagedSecretKey key = findCaSignedKey("public");
            if (key != null) {
                return key;
            }
        }
        return null;
    }
    ItemBase sslKeyItem = (ItemBase) platformLayer.getItem(sslKey);
    ManagedSecretKey key = providers.toInterface(sslKeyItem, ManagedSecretKey.class);
    return key;
}
Also used : ItemBase(org.platformlayer.core.model.ItemBase) ManagedSecretKey(org.platformlayer.ops.crypto.ManagedSecretKey) PlatformLayerKey(org.platformlayer.core.model.PlatformLayerKey)

Example 24 with ItemBase

use of org.platformlayer.core.model.ItemBase in project platformlayer by platformlayer.

the class NetworkPoints method resolveAll.

public List<NetworkPoint> resolveAll(List<? extends ItemBase> items, boolean ignoreErrors) throws OpsException {
    List<NetworkPoint> points = Lists.newArrayList();
    for (ItemBase item : items) {
        NetworkPoint point = findNetworkPoint(item);
        if (point == null) {
            if (ignoreErrors) {
                log.debug("Ignoring unresolvable item");
            } else {
                throw new OpsException("Unable to resolve item: " + item.getKey());
            }
        }
        points.add(point);
    }
    return points;
}
Also used : OpsException(org.platformlayer.ops.OpsException) ItemBase(org.platformlayer.core.model.ItemBase)

Example 25 with ItemBase

use of org.platformlayer.core.model.ItemBase in project platformlayer by platformlayer.

the class IpsecHelpers method getIpsecSecret.

public Secret getIpsecSecret() throws OpsException {
    Secret secret = null;
    for (ProviderOf<HasIpsecPolicy> ipsecPolicyProvider : providerHelper.listItemsProviding(HasIpsecPolicy.class)) {
        ItemBase item = ipsecPolicyProvider.getItem();
        if (item.getState() != ManagedItemState.ACTIVE) {
            continue;
        }
        HasIpsecPolicy ipsec = ipsecPolicyProvider.get();
        if (secret != null) {
            throw new IllegalStateException("Multiple IPSEC policies found");
        }
        secret = ipsec.getIpsecPreSharedKey(item);
        if (secret == null) {
            // Should we allow this?
            throw new IllegalStateException();
        }
    }
    if (secret == null) {
        throw new OpsException("Ipsec policy not found");
    }
    return secret;
}
Also used : Secret(org.platformlayer.core.model.Secret) OpsException(org.platformlayer.ops.OpsException) ItemBase(org.platformlayer.core.model.ItemBase)

Aggregations

ItemBase (org.platformlayer.core.model.ItemBase)56 OpsException (org.platformlayer.ops.OpsException)20 PlatformLayerKey (org.platformlayer.core.model.PlatformLayerKey)14 RepositoryException (org.platformlayer.RepositoryException)11 OpsContext (org.platformlayer.ops.OpsContext)11 Tag (org.platformlayer.core.model.Tag)8 BindingScope (org.platformlayer.ops.BindingScope)7 Machine (org.platformlayer.ops.Machine)7 DatabaseServer (org.platformlayer.ops.databases.DatabaseServer)6 ServiceProvider (org.platformlayer.xaas.services.ServiceProvider)6 Produces (javax.ws.rs.Produces)5 List (java.util.List)4 GET (javax.ws.rs.GET)4 TagChanges (org.platformlayer.core.model.TagChanges)4 OpsTarget (org.platformlayer.ops.OpsTarget)4 NetworkPoint (org.platformlayer.ops.networks.NetworkPoint)4 JAXBException (javax.xml.bind.JAXBException)3 Filter (org.platformlayer.Filter)3 InetAddressChooser (org.platformlayer.InetAddressChooser)3 StateFilter (org.platformlayer.StateFilter)3