static void VerifyEnvironments(Attributes a, Promise *pp) { char hyper_uri[CF_MAXVARSIZE]; enum cfhypervisors envtype = cfv_none; switch (Str2Hypervisors(a.env.type)) { case cfv_virt_xen: case cfv_virt_xen_net: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "xen:///"); envtype = cfv_virt_xen; break; case cfv_virt_kvm: case cfv_virt_kvm_net: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "qemu:///session"); envtype = cfv_virt_kvm; break; case cfv_virt_esx: case cfv_virt_esx_net: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "esx://127.0.0.1"); envtype = cfv_virt_esx; break; case cfv_virt_test: case cfv_virt_test_net: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "test:///default"); envtype = cfv_virt_test; break; case cfv_virt_vbox: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "vbox:///session"); envtype = cfv_virt_vbox; break; case cfv_zone: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "solaris_zone"); envtype = cfv_zone; break; default: CfOut(cf_error, "", " !! Environment type \"%s\" not currently supported", a.env.type); return; break; } CfOut(cf_verbose, "", " -> Selecting environment type \"%s\" -> \"%s\"", a.env.type, hyper_uri); if (!IsDefinedClass(a.env.host, NULL)) { switch (a.env.state) { case cfvs_create: case cfvs_running: CfOut(cf_verbose, "", " -> This host (\"%s\") is not the promised host for the environment (\"%s\"), so setting its intended state to \"down\"", VFQNAME, a.env.host); a.env.state = cfvs_down; break; default: CfOut(cf_verbose, "", " -> This is not the promised host for the environment, but it does not promise a run state, so take promise as valid"); } } virInitialize(); switch (VSYSTEMHARDCLASS) { case linuxx: switch (Str2Hypervisors(a.env.type)) { case cfv_virt_xen: case cfv_virt_kvm: case cfv_virt_esx: case cfv_virt_vbox: case cfv_virt_test: VerifyVirtDomain(hyper_uri, envtype, a, pp); break; case cfv_virt_xen_net: case cfv_virt_kvm_net: case cfv_virt_esx_net: case cfv_virt_test_net: VerifyVirtNetwork(hyper_uri, envtype, a, pp); break; case cfv_ec2: break; case cfv_eucalyptus: break; default: break; } break; case darwin: switch (Str2Hypervisors(a.env.type)) { case cfv_virt_vbox: case cfv_virt_test: VerifyVirtDomain(hyper_uri, envtype, a, pp); break; case cfv_virt_xen_net: case cfv_virt_kvm_net: case cfv_virt_esx_net: case cfv_virt_test_net: VerifyVirtNetwork(hyper_uri, envtype, a, pp); break; default: break; } break; case solaris: switch (Str2Hypervisors(a.env.type)) { case cfv_zone: VerifyZone(a, pp); break; default: break; } break; default: CfOut(cf_verbose, "", " -> Unable to resolve an environment supervisor/monitor for this platform, aborting"); break; } }
static PromiseResult VerifyEnvironments(EvalContext *ctx, Attributes a, const Promise *pp) { char hyper_uri[CF_MAXVARSIZE]; enum cfhypervisors envtype = cfv_none; switch (Str2Hypervisors(a.env.type)) { case cfv_virt_xen: case cfv_virt_xen_net: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "xen:///"); envtype = cfv_virt_xen; break; case cfv_virt_kvm: case cfv_virt_kvm_net: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "qemu:///session"); envtype = cfv_virt_kvm; break; case cfv_virt_esx: case cfv_virt_esx_net: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "esx://127.0.0.1"); envtype = cfv_virt_esx; break; case cfv_virt_test: case cfv_virt_test_net: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "test:///default"); envtype = cfv_virt_test; break; case cfv_virt_vbox: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "vbox:///session"); envtype = cfv_virt_vbox; break; case cfv_zone: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "solaris_zone"); envtype = cfv_zone; break; default: Log(LOG_LEVEL_ERR, "Environment type '%s' not currently supported", a.env.type); return PROMISE_RESULT_NOOP; break; } Log(LOG_LEVEL_VERBOSE, "Selecting environment type '%s' '%s'", a.env.type, hyper_uri); ClassRef environment_host_ref = ClassRefParse(a.env.host); if (!EvalContextClassGet(ctx, environment_host_ref.ns, environment_host_ref.name)) { switch (a.env.state) { case ENVIRONMENT_STATE_CREATE: case ENVIRONMENT_STATE_RUNNING: Log(LOG_LEVEL_VERBOSE, "This host ''%s' is not the promised host for the environment '%s', so setting its intended state to 'down'", VFQNAME, a.env.host); a.env.state = ENVIRONMENT_STATE_DOWN; break; default: Log(LOG_LEVEL_VERBOSE, "This is not the promised host for the environment, but it does not promise a run state, so take promise as valid"); } } ClassRefDestroy(environment_host_ref); virInitialize(); PromiseResult result = PROMISE_RESULT_NOOP; #if defined(__linux__) switch (Str2Hypervisors(a.env.type)) { case cfv_virt_xen: case cfv_virt_kvm: case cfv_virt_esx: case cfv_virt_vbox: case cfv_virt_test: result = PromiseResultUpdate(result, VerifyVirtDomain(ctx, hyper_uri, envtype, a, pp)); break; case cfv_virt_xen_net: case cfv_virt_kvm_net: case cfv_virt_esx_net: case cfv_virt_test_net: result = PromiseResultUpdate(result, VerifyVirtNetwork(ctx, hyper_uri, envtype, a, pp)); break; case cfv_ec2: break; case cfv_eucalyptus: break; default: break; } #elif defined(__APPLE__) switch (Str2Hypervisors(a.env.type)) { case cfv_virt_vbox: case cfv_virt_test: result = PromiseResultUpdate(result, VerifyVirtDomain(ctx, hyper_uri, envtype, a, pp)); break; case cfv_virt_xen_net: case cfv_virt_kvm_net: case cfv_virt_esx_net: case cfv_virt_test_net: result = PromiseResultUpdate(result, VerifyVirtNetwork(ctx, hyper_uri, envtype, a, pp)); break; default: break; } #elif defined(__sun) switch (Str2Hypervisors(a.env.type)) { case cfv_zone: result = PromiseResultUpdate(result, VerifyZone(a, pp)); break; default: break; } #else Log(LOG_LEVEL_VERBOSE, "Unable to resolve an environment supervisor/monitor for this platform, aborting"); #endif return result; }
static void VerifyEnvironments(EvalContext *ctx, Attributes a, Promise *pp) { char hyper_uri[CF_MAXVARSIZE]; enum cfhypervisors envtype = cfv_none; switch (Str2Hypervisors(a.env.type)) { case cfv_virt_xen: case cfv_virt_xen_net: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "xen:///"); envtype = cfv_virt_xen; break; case cfv_virt_kvm: case cfv_virt_kvm_net: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "qemu:///session"); envtype = cfv_virt_kvm; break; case cfv_virt_esx: case cfv_virt_esx_net: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "esx://127.0.0.1"); envtype = cfv_virt_esx; break; case cfv_virt_test: case cfv_virt_test_net: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "test:///default"); envtype = cfv_virt_test; break; case cfv_virt_vbox: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "vbox:///session"); envtype = cfv_virt_vbox; break; case cfv_zone: snprintf(hyper_uri, CF_MAXVARSIZE - 1, "solaris_zone"); envtype = cfv_zone; break; default: CfOut(OUTPUT_LEVEL_ERROR, "", " !! Environment type \"%s\" not currently supported", a.env.type); return; break; } CfOut(OUTPUT_LEVEL_VERBOSE, "", " -> Selecting environment type \"%s\" -> \"%s\"", a.env.type, hyper_uri); if (!IsDefinedClass(ctx, a.env.host, NULL)) { switch (a.env.state) { case ENVIRONMENT_STATE_CREATE: case ENVIRONMENT_STATE_RUNNING: CfOut(OUTPUT_LEVEL_VERBOSE, "", " -> This host (\"%s\") is not the promised host for the environment (\"%s\"), so setting its intended state to \"down\"", VFQNAME, a.env.host); a.env.state = ENVIRONMENT_STATE_DOWN; break; default: CfOut(OUTPUT_LEVEL_VERBOSE, "", " -> This is not the promised host for the environment, but it does not promise a run state, so take promise as valid"); } } virInitialize(); #if defined(__linux__) switch (Str2Hypervisors(a.env.type)) { case cfv_virt_xen: case cfv_virt_kvm: case cfv_virt_esx: case cfv_virt_vbox: case cfv_virt_test: VerifyVirtDomain(ctx, hyper_uri, envtype, a, pp); break; case cfv_virt_xen_net: case cfv_virt_kvm_net: case cfv_virt_esx_net: case cfv_virt_test_net: VerifyVirtNetwork(ctx, hyper_uri, envtype, a, pp); break; case cfv_ec2: break; case cfv_eucalyptus: break; default: break; } #elif defined(__APPLE__) switch (Str2Hypervisors(a.env.type)) { case cfv_virt_vbox: case cfv_virt_test: VerifyVirtDomain(hyper_uri, envtype, a, pp); break; case cfv_virt_xen_net: case cfv_virt_kvm_net: case cfv_virt_esx_net: case cfv_virt_test_net: VerifyVirtNetwork(hyper_uri, envtype, a, pp); break; default: break; } #elif defined(__sun) switch (Str2Hypervisors(a.env.type)) { case cfv_zone: VerifyZone(a, pp); break; default: break; } #else CfOut(OUTPUT_LEVEL_VERBOSE, "", " -> Unable to resolve an environment supervisor/monitor for this platform, aborting"); #endif }