1
/*******************************************************************************
2
*Copyright (c) 2009 Eucalyptus Systems, Inc.
4
* This program is free software: you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation, only version 3 of the License.
9
* This file is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* You should have received a copy of the GNU General Public License along
15
* with this program. If not, see <http://www.gnu.org/licenses/>.
17
* Please contact Eucalyptus Systems, Inc., 130 Castilian
18
* Dr., Goleta, CA 93101 USA or visit <http://www.eucalyptus.com/licenses/>
19
* if you need additional information or have any questions.
21
* This file may incorporate work covered under the following copyright and
24
* Software License Agreement (BSD License)
26
* Copyright (c) 2008, Regents of the University of California
27
* All rights reserved.
29
* Redistribution and use of this software in source and binary forms, with
30
* or without modification, are permitted provided that the following
33
* Redistributions of source code must retain the above copyright notice,
34
* this list of conditions and the following disclaimer.
36
* Redistributions in binary form must reproduce the above copyright
37
* notice, this list of conditions and the following disclaimer in the
38
* documentation and/or other materials provided with the distribution.
40
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
41
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
42
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
43
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
44
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
45
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
46
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
47
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
48
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
49
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
50
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. USERS OF
51
* THIS SOFTWARE ACKNOWLEDGE THE POSSIBLE PRESENCE OF OTHER OPEN SOURCE
52
* LICENSED MATERIAL, COPYRIGHTED MATERIAL OR PATENTED MATERIAL IN THIS
53
* SOFTWARE, AND IF ANY SUCH MATERIAL IS DISCOVERED THE PARTY DISCOVERING
54
* IT MAY INFORM DR. RICH WOLSKI AT THE UNIVERSITY OF CALIFORNIA, SANTA
55
* BARBARA WHO WILL THEN ASCERTAIN THE MOST APPROPRIATE REMEDY, WHICH IN
56
* THE REGENTS’ DISCRETION MAY INCLUDE, WITHOUT LIMITATION, REPLACEMENT
57
* OF THE CODE SO IDENTIFIED, LICENSING OF THE CODE SO IDENTIFIED, OR
58
* WITHDRAWAL OF THE CODE CAPABILITY TO THE EXTENT NEEDED TO COMPLY WITH
59
* ANY SUCH LICENSES OR RIGHTS.
60
*******************************************************************************/
62
* Author: chris grzegorczyk <grze@eucalyptus.com>
64
package com.eucalyptus.config;
66
import java.io.Serializable;
68
import java.util.Date;
70
import javax.persistence.Entity;
71
import javax.persistence.Id;
73
import org.hibernate.annotations.Cache;
74
import org.hibernate.annotations.CacheConcurrencyStrategy;
75
import org.hibernate.annotations.GenericGenerator;
77
import javax.persistence.MappedSuperclass;
78
import javax.persistence.PersistenceContext;
79
import javax.persistence.Table;
80
import javax.persistence.GeneratedValue;
81
import javax.persistence.Column;
82
import javax.persistence.Lob;
83
import javax.persistence.OneToMany;
84
import javax.persistence.OneToOne;
85
import javax.persistence.FetchType;
86
import javax.persistence.CascadeType;
87
import javax.persistence.JoinTable;
88
import javax.persistence.JoinColumn;
89
import javax.persistence.Transient;
90
import org.hibernate.sql.Alias;
91
import javax.persistence.Temporal;
92
import javax.persistence.TemporalType;
93
import javax.persistence.Version;
95
import com.eucalyptus.bootstrap.Component;
96
import com.eucalyptus.util.NetworkUtil;
97
import com.eucalyptus.entities.AbstractPersistent;
100
public abstract class ComponentConfiguration extends AbstractPersistent implements Serializable, Comparable {
101
@Column( name = "config_component_name", unique=true )
103
@Column( name = "config_component_hostname" )
105
@Column( name = "config_component_port" )
107
@Column( name = "config_component_service_path" )
110
public ComponentConfiguration( ) {}
112
public ComponentConfiguration( String name, String hostName, String servicePath ) {
115
this.hostName = hostName;
116
this.servicePath = servicePath;
118
public ComponentConfiguration( String name, String hostName, Integer port, String servicePath ) {
120
this.hostName = hostName;
122
this.servicePath = servicePath;
125
public String getUri() {
126
return "http://" + this.getHostName() + ":" + this.getPort() + this.getServicePath();
129
public String getName() {
133
public abstract Component getComponent();
135
public Boolean isLocal() {
137
return NetworkUtil.testLocal( w.getHostName( ) );
138
} catch ( Exception e ) {
143
public String toString() {
148
public int hashCode( ) {
149
final int prime = 31;
151
result = prime * result + ( ( hostName == null ) ? 0 : hostName.hashCode( ) );
152
result = prime * result + ( ( name == null ) ? 0 : name.hashCode( ) );
156
public boolean equals( Object obj ) {
157
if ( this.is( obj ) ) return true;
158
if ( obj == null ) return false;
159
if ( !getClass( ).equals( obj.getClass( ) ) ) return false;
160
ComponentConfiguration other = ( ComponentConfiguration ) obj;
161
if ( hostName == null ) {
162
if ( other.hostName != null ) return false;
163
} else if ( !hostName.equals( other.hostName ) ) return false;
164
if ( name == null ) {
165
if ( other.name != null ) return false;
166
} else if ( !name.equals( other.name ) ) return false;
170
public int compareTo(Object o) {
171
return name.compareTo(((ComponentConfiguration) o).getName());
175
public class EphemeralConfiguration extends ComponentConfiguration {
179
public EphemeralConfiguration( Component c, URI uri ) {
180
super( c.name(), uri.getHost( ), uri.getPort( ), uri.getPath( ) );
184
public Component getComponent() {
187
public String getUri() {
188
return this.uri.toASCIIString( );
191
public class LocalConfiguration extends EphemeralConfiguration {
192
public LocalConfiguration( Component c, URI uri ) {
196
public class RemoteConfiguration extends EphemeralConfiguration {
197
public RemoteConfiguration( Component c, URI uri ) {
203
@PersistenceContext(name="eucalyptus_config")
204
@Table( name = "config_clusters" )
205
@Cache( usage = CacheConcurrencyStrategy.READ_WRITE )
206
public class ClusterConfiguration extends ComponentConfiguration implements Serializable {
208
private static String DEFAULT_SERVICE_PATH = "/axis2/services/EucalyptusCC";
210
private static String INSECURE_SERVICE_PATH = "/axis2/services/EucalyptusGL";
214
public ClusterConfiguration( ) {}
215
public ClusterConfiguration( String name, String hostName, Integer port ) {
216
super( name, hostName, port, DEFAULT_SERVICE_PATH );
218
public ClusterConfiguration( String name, String hostName, Integer port, Integer minVlan, Integer maxVlan ) {
219
super( name, hostName, port, DEFAULT_SERVICE_PATH );
220
this.minVlan = minVlan;
221
this.maxVlan = maxVlan;
223
public String getInsecureServicePath() {
224
return INSECURE_SERVICE_PATH;
226
public String getInsecureUri() {
227
return "http://" + this.getHostName() + ":" + this.getPort() + INSECURE_SERVICE_PATH;
230
public static ClusterConfiguration byClusterName( String name ) {
231
ClusterConfiguration c = new ClusterConfiguration( );
232
c.setClusterName(name);
235
public static ClusterConfiguration byHostName( String hostName ) {
236
ClusterConfiguration c = new ClusterConfiguration( );
237
c.setHostName(hostName);
240
public Component getComponent() {
241
return Component.cluster;
246
@PersistenceContext(name="eucalyptus_config")
247
@Table( name = "config_sc" )
248
@Cache( usage = CacheConcurrencyStrategy.READ_WRITE )
249
public class StorageControllerConfiguration extends ComponentConfiguration implements Serializable {
251
private static String DEFAULT_SERVICE_PATH = "/services/Storage";
252
public StorageControllerConfiguration( ) {}
253
public StorageControllerConfiguration( String name, String hostName, Integer port ) {
254
super( name, hostName, port, DEFAULT_SERVICE_PATH );
256
public Component getComponent() {
257
return Component.storage;
261
@PersistenceContext(name="eucalyptus_config")
262
@Table( name = "config_walrus" )
263
@Cache( usage = CacheConcurrencyStrategy.READ_WRITE )
264
public class WalrusConfiguration extends ComponentConfiguration implements Serializable {
266
private static String DEFAULT_SERVICE_PATH = "/services/Walrus";
267
public WalrusConfiguration( ) {
269
public WalrusConfiguration( String name, String hostName, Integer port ) {
270
super( name, hostName, port, DEFAULT_SERVICE_PATH );
272
public Component getComponent() {
273
return Component.walrus;
279
@PersistenceContext(name="eucalyptus_config")
280
@Table( name = "config_system" )
281
@Cache( usage = CacheConcurrencyStrategy.READ_WRITE )
282
public class System implements Serializable {
284
@GeneratedValue(generator = "system-uuid")
285
@GenericGenerator(name="system-uuid", strategy = "uuid")
286
@Column( name = "config_system_id" )
288
@Column( name = "config_system_default_kernel" )
290
@Column( name = "config_system_default_ramdisk" )
291
String defaultRamdisk
292
@Column( name = "config_system_registration_id" )
293
String registrationId