static boolean shouldInitialize() { // GRZE:WARNING:HACKHACKHACK do not duplicate pls thanks. for (final Host h : Hosts.listActiveDatabases()) { final String url = String.format( "jdbc:%s", ServiceUris.remote(Database.class, h.getBindAddress(), "eucalyptus_config")); try { final Connection conn = DriverManager.getConnection(url, Databases.getUserName(), Databases.getPassword()); try { final PreparedStatement statement = conn.prepareStatement( "select config_component_hostname from config_component_base where config_component_partition='eucalyptus';"); final ResultSet result = statement.executeQuery(); while (result.next()) { final Object columnValue = result.getObject(1); if (Internets.testLocal(columnValue.toString())) { return true; } } } finally { conn.close(); } } catch (final Exception ex) { LOG.error(ex, ex); } } return false; }
static void sendRedirect( final ChannelHandlerContext ctx, final ChannelEvent e, final Class<? extends ComponentId> compClass, final MappingHttpRequest request) { e.getFuture().cancel(); String redirectUri = null; if (Topology.isEnabled(compClass)) { // have an enabled service, lets use that final URI serviceUri = ServiceUris.remote(Topology.lookup(compClass)); redirectUri = serviceUri.toASCIIString() + request.getServicePath().replace(serviceUri.getPath(), ""); } else if (Topology.isEnabled( Eucalyptus.class)) { // can't find service info, redirect via clc master final URI serviceUri = ServiceUris.remote(Topology.lookup(Eucalyptus.class)); redirectUri = serviceUri.toASCIIString().replace(Eucalyptus.INSTANCE.getServicePath(), "") + request.getServicePath().replace(serviceUri.getPath(), ""); } HttpResponse response = null; if (redirectUri == null || isRedirectLoop(request, redirectUri)) { response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.SERVICE_UNAVAILABLE); if (Logs.isDebug()) { String errorMessage = "Failed to lookup service for " + Components.lookup(compClass).getName() + " for path " + request.getServicePath() + ".\nCurrent state: \n\t" + Joiner.on("\n\t").join(Topology.enabledServices()); byte[] errorBytes = Exceptions.string(new ServiceStateException(errorMessage)).getBytes(); response.setContent(ChannelBuffers.wrappedBuffer(errorBytes)); } } else { response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.TEMPORARY_REDIRECT); if (request.getQuery() != null) { redirectUri += "?" + request.getQuery(); } response.setHeader(HttpHeaders.Names.LOCATION, redirectUri); } response.setHeader(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.CLOSE); if (ctx.getChannel().isConnected()) { ctx.getChannel().write(response).addListener(ChannelFutureListener.CLOSE); } }
/** Utility method for refreshing OSG URI in the S3Client object used by this class. */ private void refreshOsgURI() { try { ServiceConfiguration osgConfig = getOsgConfig(); String osgURI = ServiceUris.remote(osgConfig).toASCIIString(); s3Client.setS3Endpoint(osgURI); LOG.info("Setting objectstorage URI to: " + osgURI); } catch (Exception e) { LOG.warn("Could not refresh objectstorage URI"); } }
public static void updateWalrusUrl() { try { ServiceConfiguration walrusConfig = Topology.lookup(ObjectStorage.class); WALRUS_URL = ServiceUris.remote(walrusConfig).toASCIIString(); StorageProperties.enableSnapshots = true; LOG.info("Setting WALRUS_URL to: " + WALRUS_URL); } catch (Exception e) { LOG.warn( "Could not obtain walrus information. Snapshot functionality may be unavailable. Have you registered ObjectStorage?"); StorageProperties.enableSnapshots = false; } }
private static void prepareConnections(final Host host, final String contextName) throws NoSuchElementException { final String dbUrl = "jdbc:" + ServiceUris.remote(Database.class, host.getBindAddress(), contextName); final String hostName = host.getDisplayName(); final DriverDatabaseMBean database = Databases.lookupDatabase(contextName, hostName); database.setuser(getUserName()); database.setpassword(getPassword()); database.setweight( Hosts.isCoordinator(host) ? DATABASE_WEIGHT_PRIMARY : DATABASE_WEIGHT_SECONDARY); database.setlocal(host.isLocalHost()); database.setlocation(dbUrl); }
/** Constructor for outbound requests. */ public MappingHttpRequest( final HttpVersion httpVersion, final HttpMethod method, final ServiceConfiguration serviceConfiguration, final Object source) { super(httpVersion); this.method = method; URI fullUri = ServiceUris.internal(serviceConfiguration); this.uri = fullUri.toString(); this.servicePath = fullUri.getPath(); this.query = null; this.parameters = null; this.rawParameters = null; this.nonQueryParameterKeys = null; this.formFields = null; this.message = source; if (source instanceof BaseMessage) this.setCorrelationId(((BaseMessage) source).getCorrelationId()); this.addHeader(HttpHeaders.Names.HOST, fullUri.getHost() + ":" + fullUri.getPort()); }
private static byte[] getX509Zip(User u) throws Exception { X509Certificate cloudCert = null; final X509Certificate x509; String userAccessKey = null; String userSecretKey = null; KeyPair keyPair = null; try { for (AccessKey k : u.getKeys()) { if (k.isActive()) { userAccessKey = k.getAccessKey(); userSecretKey = k.getSecretKey(); } } if (userAccessKey == null) { AccessKey k = u.createKey(); userAccessKey = k.getAccessKey(); userSecretKey = k.getSecretKey(); } keyPair = Certs.generateKeyPair(); x509 = Certs.generateCertificate(keyPair, u.getName()); x509.checkValidity(); u.addCertificate(x509); cloudCert = SystemCredentials.lookup(Eucalyptus.class).getCertificate(); } catch (Exception e) { LOG.fatal(e, e); throw e; } ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); ZipArchiveOutputStream zipOut = new ZipArchiveOutputStream(byteOut); ZipArchiveEntry entry = null; String fingerPrint = Certs.getFingerPrint(keyPair.getPublic()); if (fingerPrint != null) { String baseName = X509Download.NAME_SHORT + "-" + u.getName() + "-" + fingerPrint.replaceAll(":", "").toLowerCase().substring(0, 8); zipOut.setComment("To setup the environment run: source /path/to/eucarc"); StringBuilder sb = new StringBuilder(); // TODO:GRZE:FIXME velocity String userNumber = u.getAccount().getAccountNumber(); sb.append("EUCA_KEY_DIR=$(dirname $(readlink -f ${BASH_SOURCE}))"); if (Topology.isEnabled(Eucalyptus.class)) { // GRZE:NOTE: this is temporary sb.append( "\nexport EC2_URL=" + ServiceUris.remotePublicify(Topology.lookup(Eucalyptus.class))); } else { sb.append("\necho WARN: Eucalyptus URL is not configured. >&2"); ServiceBuilder<? extends ServiceConfiguration> builder = ServiceBuilders.lookup(Eucalyptus.class); ServiceConfiguration localConfig = builder.newInstance( Internets.localHostAddress(), Internets.localHostAddress(), Internets.localHostAddress(), Eucalyptus.INSTANCE.getPort()); sb.append("\nexport EC2_URL=" + ServiceUris.remotePublicify(localConfig)); } if (Topology.isEnabled(Walrus.class)) { ServiceConfiguration walrusConfig = Topology.lookup(Walrus.class); try { String uri = ServiceUris.remotePublicify(walrusConfig).toASCIIString(); LOG.debug("Found walrus uri/configuration: uri=" + uri + " config=" + walrusConfig); sb.append("\nexport S3_URL=" + uri); } catch (Exception e) { LOG.error("Failed to set Walrus URL: " + walrusConfig, e); } } else { sb.append("\necho WARN: Walrus URL is not configured. >&2"); } // Disable notifications for now // sb.append( "\nexport AWS_SNS_URL=" + ServiceUris.remote( Notifications.class ) ); if (Topology.isEnabled(Euare.class)) { // GRZE:NOTE: this is temporary sb.append("\nexport EUARE_URL=" + ServiceUris.remotePublicify(Euare.class)); } else { sb.append("\necho WARN: EUARE URL is not configured. >&2"); } sb.append("\nexport EC2_PRIVATE_KEY=${EUCA_KEY_DIR}/" + baseName + "-pk.pem"); sb.append("\nexport EC2_CERT=${EUCA_KEY_DIR}/" + baseName + "-cert.pem"); sb.append("\nexport EC2_JVM_ARGS=-Djavax.net.ssl.trustStore=${EUCA_KEY_DIR}/jssecacerts"); sb.append("\nexport EUCALYPTUS_CERT=${EUCA_KEY_DIR}/cloud-cert.pem"); sb.append("\nexport EC2_ACCOUNT_NUMBER='" + u.getAccount().getAccountNumber() + "'"); sb.append("\nexport EC2_ACCESS_KEY='" + userAccessKey + "'"); sb.append("\nexport EC2_SECRET_KEY='" + userSecretKey + "'"); sb.append("\nexport AWS_CREDENTIAL_FILE=${EUCA_KEY_DIR}/iamrc"); sb.append("\nexport EC2_USER_ID='" + userNumber + "'"); sb.append( "\nalias ec2-bundle-image=\"ec2-bundle-image --cert ${EC2_CERT} --privatekey ${EC2_PRIVATE_KEY} --user ${EC2_ACCOUNT_NUMBER} --ec2cert ${EUCALYPTUS_CERT}\""); sb.append( "\nalias ec2-upload-bundle=\"ec2-upload-bundle -a ${EC2_ACCESS_KEY} -s ${EC2_SECRET_KEY} --url ${S3_URL}\""); sb.append("\n"); zipOut.putArchiveEntry(entry = new ZipArchiveEntry("eucarc")); entry.setUnixMode(0600); zipOut.write(sb.toString().getBytes("UTF-8")); zipOut.closeArchiveEntry(); sb = new StringBuilder(); sb.append("AWSAccessKeyId=").append(userAccessKey).append('\n'); sb.append("AWSSecretKey=").append(userSecretKey); zipOut.putArchiveEntry(entry = new ZipArchiveEntry("iamrc")); entry.setUnixMode(0600); zipOut.write(sb.toString().getBytes("UTF-8")); zipOut.closeArchiveEntry(); /** write the private key to the zip stream * */ zipOut.putArchiveEntry(entry = new ZipArchiveEntry("cloud-cert.pem")); entry.setUnixMode(0600); zipOut.write(PEMFiles.getBytes(cloudCert)); zipOut.closeArchiveEntry(); zipOut.putArchiveEntry(entry = new ZipArchiveEntry("jssecacerts")); entry.setUnixMode(0600); KeyStore tempKs = KeyStore.getInstance("jks"); tempKs.load(null); tempKs.setCertificateEntry("eucalyptus", cloudCert); ByteArrayOutputStream bos = new ByteArrayOutputStream(); tempKs.store(bos, "changeit".toCharArray()); zipOut.write(bos.toByteArray()); zipOut.closeArchiveEntry(); /** write the private key to the zip stream * */ zipOut.putArchiveEntry(entry = new ZipArchiveEntry(baseName + "-pk.pem")); entry.setUnixMode(0600); zipOut.write(PEMFiles.getBytes(keyPair.getPrivate())); zipOut.closeArchiveEntry(); /** write the X509 certificate to the zip stream * */ zipOut.putArchiveEntry(entry = new ZipArchiveEntry(baseName + "-cert.pem")); entry.setUnixMode(0600); zipOut.write(PEMFiles.getBytes(x509)); zipOut.closeArchiveEntry(); } /** close the zip output stream and return the bytes * */ zipOut.close(); return byteOut.toByteArray(); }