~ubuntu-branches/ubuntu/raring/eucalyptus/raring

« back to all changes in this revision

Viewing changes to node/handlers.h

  • Committer: Package Import Robot
  • Author(s): Brian Thomason
  • Date: 2011-11-29 13:17:52 UTC
  • mfrom: (1.2.1 upstream)
  • mto: This revision was merged to the branch mainline in revision 185.
  • Revision ID: package-import@ubuntu.com-20111129131752-rq31al3ntutv2vvl
Tags: upstream-3.0.999beta1
ImportĀ upstreamĀ versionĀ 3.0.999beta1

Show diffs side-by-side

added added

removed removed

Lines of Context:
52
52
  SOFTWARE, AND IF ANY SUCH MATERIAL IS DISCOVERED THE PARTY DISCOVERING
53
53
  IT MAY INFORM DR. RICH WOLSKI AT THE UNIVERSITY OF CALIFORNIA, SANTA
54
54
  BARBARA WHO WILL THEN ASCERTAIN THE MOST APPROPRIATE REMEDY, WHICH IN
55
 
  THE REGENTSā€™ DISCRETION MAY INCLUDE, WITHOUT LIMITATION, REPLACEMENT
 
55
  THE REGENTS' DISCRETION MAY INCLUDE, WITHOUT LIMITATION, REPLACEMENT
56
56
  OF THE CODE SO IDENTIFIED, LICENSING OF THE CODE SO IDENTIFIED, OR
57
57
  WITHDRAWAL OF THE CODE CAPABILITY TO THE EXTENT NEEDED TO COMPLY WITH
58
58
  ANY SUCH LICENSES OR RIGHTS.
66
66
#include "vnetwork.h"
67
67
#include "data.h"
68
68
 
 
69
#include <windows-bundle.h>
 
70
 
69
71
#define LIBVIRT_QUERY_RETRIES 5
70
72
#define MAXDOMS 1024
71
 
#define BYTES_PER_DISK_UNIT 1048576 /* disk stats are in Gigs */
72
 
#define SWAP_SIZE 512 /* for now, the only possible swap size, in MBs */
 
73
#define BYTES_PER_DISK_UNIT 1073741824 // describeResource disk units are GBs
 
74
#define MB_PER_DISK_UNIT    1024       // describeResource disk units are GBs
73
75
 
74
76
/* NC state */
75
77
struct nc_state_t {
76
78
        struct handlers *H;             // selected handler
77
79
        struct handlers *D;             // default  handler
 
80
        hypervisorCapabilityType capability;
78
81
        vnetConfig *vnetconfig;         // network config
79
82
        // globals
80
 
        int  config_network_port;
81
83
        char admin_user_id[CHAR_BUFFER_SIZE];
82
84
        int save_instance_files;
83
85
        char uri[CHAR_BUFFER_SIZE];
 
86
        char iqn[CHAR_BUFFER_SIZE];
84
87
        virConnectPtr conn;
85
 
        int convert_to_disk;
 
88
        boolean convert_to_disk;
 
89
        boolean do_inject_key;
 
90
        int concurrent_disk_ops;
86
91
        // defined max
87
 
        long long config_max_disk;
88
92
        long long config_max_mem;
89
93
        long long config_max_cores;
90
94
        // current max
94
98
        // paths
95
99
        char home[MAX_PATH];
96
100
        char config_network_path [MAX_PATH];
97
 
        char gen_libvirt_cmd_path[MAX_PATH];
 
101
        char libvirt_xslt_path[MAX_PATH];
98
102
        char get_info_cmd_path[MAX_PATH];
99
103
        char rootwrap_cmd_path[MAX_PATH];
100
104
        char virsh_cmd_path[MAX_PATH];
101
105
        char xm_cmd_path[MAX_PATH];
102
106
        char detach_cmd_path[MAX_PATH];
103
 
        char connect_storage_cmd_path[MAX_PATH];
104
 
        char disconnect_storage_cmd_path[MAX_PATH];
105
 
        char get_storage_cmd_path[MAX_PATH];
106
107
        // virtio
107
108
        int config_use_virtio_net;      // KVM: use virtio for network
108
109
        int config_use_virtio_disk;     // KVM: use virtio for disk attachment
109
110
        int config_use_virtio_root;     // KVM: use virtio for root partition
 
111
        // windows support
 
112
        char ncBundleUploadCmd[MAX_PATH];
 
113
        char ncCheckBucketCmd[MAX_PATH];
 
114
        char ncDeleteBundleCmd[MAX_PATH];
110
115
};
111
116
 
112
117
 
113
118
struct handlers {
114
119
    char name [CHAR_BUFFER_SIZE];
115
120
    int (*doInitialize)         (struct nc_state_t *nc);
 
121
    int (*doAssignAddress)      (struct nc_state_t *nc,
 
122
                                 ncMetadata *meta,
 
123
                                 char *instanceId,
 
124
                                 char *publicIp);
116
125
    int (*doPowerDown)          (struct nc_state_t *nc,
117
126
                                ncMetadata *meta);
118
127
    int (*doDescribeInstances)  (struct nc_state_t *nc,
123
132
                                int *outInstsLen);
124
133
    int (*doRunInstance)        (struct nc_state_t *nc,
125
134
                                ncMetadata *meta,
 
135
                                char *uuid,
126
136
                                char *instanceId,
127
137
                                char *reservationId,
128
138
                                virtualMachine *params,
132
142
                                char *kernelURL,
133
143
                                char *ramdiskId,
134
144
                                char *ramdiskURL,
 
145
                                char *ownerId, 
 
146
                                char *accountId,
135
147
                                char *keyName,
136
148
                                netConfig *netparams,
137
149
                                char *userData,
138
150
                                char *launchIndex,
 
151
                                char *platform,
 
152
                                int expiryTime,
139
153
                                char **groupNames,
140
154
                                int groupNamesSize,
141
155
                                ncInstance **outInst);
142
156
    int (*doTerminateInstance)  (struct nc_state_t *nc,
143
157
                                ncMetadata *meta,
144
158
                                char *instanceId,
 
159
                                int force,
145
160
                                int *shutdownState,
146
161
                                int *previousState);
147
162
    int (*doRebootInstance)     (struct nc_state_t *nc,
157
172
                                ncResource **outRes);
158
173
    int (*doStartNetwork)       (struct nc_state_t *nc,
159
174
                                ncMetadata *ccMeta,
 
175
                                char *uuid,
160
176
                                char **remoteHosts,
161
177
                                int remoteHostsLen,
162
178
                                int port,
173
189
                                char *volumeId,
174
190
                                char *remoteDev,
175
191
                                char *localDev,
176
 
                                int force);
 
192
                                int force,
 
193
                                int grab_inst_sem);
 
194
    int (*doCreateImage)        (struct nc_state_t *nc,
 
195
                                ncMetadata *meta,
 
196
                                char *instanceId,
 
197
                                char *volumeId,
 
198
                                char *remoteDev);
 
199
    int (*doBundleInstance)     (struct nc_state_t *nc,
 
200
                                ncMetadata *meta,
 
201
                                char *instanceId,
 
202
                                char *bucketName,
 
203
                                char *filePrefix,
 
204
                                char *walrusURL,
 
205
                                char *userPublicKey,
 
206
                                char *S3Policy,
 
207
                                char *S3PolicySig);
 
208
    int (*doCancelBundleTask)   (struct nc_state_t *nc,
 
209
                                ncMetadata *meta,
 
210
                                char *instanceId);
 
211
    int (*doDescribeBundleTasks)        (struct nc_state_t *nc,
 
212
                                         ncMetadata *meta,
 
213
                                         char **instIds,
 
214
                                         int instIdsLen,
 
215
                                         bundleTask ***outBundleTasks,
 
216
                                         int *outBundleTasksLen);
177
217
};
178
218
 
179
219
#ifdef HANDLERS_FANOUT // only declare for the fanout code, not the actual handlers
 
220
int doAssignAddress             (ncMetadata *meta, char *instanceId, char *publicIp);
180
221
int doPowerDown                 (ncMetadata *meta);
181
222
int doDescribeInstances         (ncMetadata *meta, char **instIds, int instIdsLen, ncInstance ***outInsts, int *outInstsLen);
182
 
int doRunInstance               (ncMetadata *meta, char *instanceId, char *reservationId, virtualMachine *params, char *imageId, char *imageURL, char *kernelId, char *kernelURL, char *ramdiskId, char *ramdiskURL, char *keyName, netConfig *netparams, char *userData, char *launchIndex, char **groupNames, int groupNamesSize, ncInstance **outInst);
183
 
int doTerminateInstance         (ncMetadata *meta, char *instanceId, int *shutdownState, int *previousState);
 
223
int doRunInstance               (ncMetadata *meta, char *uuid, char *instanceId, char *reservationId, virtualMachine *params, char *imageId, char *imageURL, char *kernelId, char *kernelURL, char *ramdiskId, char *ramdiskURL, char *ownerId, char *accountId, char *keyName, netConfig *netparams, char *userData, char *launchIndex, char *platform, int expiryTime, char **groupNames, int groupNamesSize, ncInstance **outInst);
 
224
int doTerminateInstance         (ncMetadata *meta, char *instanceId, int force, int *shutdownState, int *previousState);
184
225
int doRebootInstance            (ncMetadata *meta, char *instanceId);
185
226
int doGetConsoleOutput          (ncMetadata *meta, char *instanceId, char **consoleOutput);
186
227
int doDescribeResource          (ncMetadata *meta, char *resourceType, ncResource **outRes);
187
 
int doStartNetwork              (ncMetadata *ccMeta, char **remoteHosts, int remoteHostsLen, int port, int vlan);
 
228
int doStartNetwork              (ncMetadata *ccMeta, char *uuid, char **remoteHosts, int remoteHostsLen, int port, int vlan);
188
229
int doAttachVolume              (ncMetadata *meta, char *instanceId, char *volumeId, char *remoteDev, char *localDev);
189
 
int doDetachVolume              (ncMetadata *meta, char *instanceId, char *volumeId, char *remoteDev, char *localDev, int force);
 
230
int doDetachVolume              (ncMetadata *meta, char *instanceId, char *volumeId, char *remoteDev, char *localDev, int force, int grab_inst_sem);
 
231
int doBundleInstance            (ncMetadata *meta, char *instanceId, char *bucketName, char *filePrefix, char *walrusURL, char *userPublicKey, char *S3Policy, char *S3PolicySig);
 
232
int doCancelBundleTask          (ncMetadata *meta, char *instanceId);
 
233
int doDescribeBundleTasks       (ncMetadata *meta, char **instIds, int instIdsLen, bundleTask ***outBundleTasks, int *outBundleTasksLen);
 
234
int doCreateImage               (ncMetadata *meta, char *instanceId, char *volumeId, char *remoteDev);
 
235
 
190
236
#endif /* HANDLERS_FANOUT */
191
237
 
 
238
int callBundleInstanceHelper(struct nc_state_t *nc, char *instanceId, char *bucketName, char *filePrefix, char *walrusURL, char *userPublicKey, char *S3Policy, char *S3PolicySig);
 
239
 
192
240
/* helper functions used by the low level handlers */
193
241
int get_value(                  char *s,
194
242
                                const char *name,
195
243
                                long long *valp);
196
 
int convert_dev_names(          char *localDev,
 
244
int convert_dev_names(          const char *localDev,
197
245
                                char *localDevReal,
198
246
                                char *localDevTag);
199
247
void libvirt_error_handler(     void * userData,
210
258
int get_instance_xml(           const char *gen_libvirt_cmd_path,
211
259
                                char *userId,
212
260
                                char *instanceId,
 
261
                                char *platform,
213
262
                                char *ramdiskId,
214
263
                                char *kernelId,
215
264
                                char *disk_path,
216
265
                                virtualMachine *params,
217
266
                                char *privMac,
218
 
                                //                              char *pubMac,
219
267
                                char *brname,
220
268
                                int use_virtio_net,
221
269
                                int use_virtio_root,
223
271
void * monitoring_thread(       void *arg);
224
272
void * startup_thread(          void *arg);
225
273
 
226
 
int check_iscsi(char* dev_string);
227
 
void parse_target(char *dev_string);
228
 
char* connect_iscsi_target(const char *storage_cmd_path, char *dev_string);
229
 
int disconnect_iscsi_target(const char *storage_cmd_path, char *dev_string);
230
 
char* get_iscsi_target(const char *storage_cmd_path, char *dev_string);
 
274
int get_instance_stats(virDomainPtr dom, ncInstance *instance);
 
275
ncInstance * find_global_instance (const char * instanceId);
 
276
int find_and_terminate_instance (struct nc_state_t *nc_state, ncMetadata *meta, char *instanceId, int force, ncInstance **instance_p, char destroy);
231
277
 
232
278
// bundling structure
233
279
struct bundling_params_t {
242
288
        char * diskPath; // disk file path
243
289
        char * eucalyptusHomePath; 
244
290
        long long sizeMb; // diskPath size
 
291
        char * ncBundleUploadCmd;
 
292
        char * ncCheckBucketCmd;
 
293
        char * ncDeleteBundleCmd;
 
294
};
 
295
 
 
296
// bundling structure
 
297
struct createImage_params_t {
 
298
        ncInstance * instance;
 
299
        char *volumeId;
 
300
        char *remoteDev;
 
301
        char * workPath; // work directory path
 
302
        char * diskPath; // disk file path
 
303
        char * eucalyptusHomePath; 
 
304
        long long sizeMb; // diskPath size
245
305
};
246
306
 
247
307
#endif /* INCLUDE */