void DefaultVarPromise(Promise *pp) { char *regex = GetConstraintValue("if_match_regex", pp, CF_SCALAR); Rval rval; enum cfdatatype dt; Rlist *rp; bool okay = true; dt = GetVariable("this", pp->promiser, &rval); switch (dt) { case cf_str: case cf_int: case cf_real: if (regex && !FullTextMatch(regex,rval.item)) { return; } if (regex == NULL) { return; } break; case cf_slist: case cf_ilist: case cf_rlist: if (regex) { for (rp = (Rlist *) rval.item; rp != NULL; rp = rp->next) { if (FullTextMatch(regex,rp->item)) { okay = false; break; } } if (okay) { return; } } break; default: break; } DeleteScalar(pp->bundle, pp->promiser); ConvergeVarHashPromise(pp->bundle, pp, true); }
static void CheckVariablePromises(char *scope,struct Promise *varlist) { struct Promise *pp; int allow_redefine = false; Debug("CheckVariablePromises()\n"); for (pp = varlist; pp != NULL; pp=pp->next) { ConvergeVarHashPromise(scope,pp,allow_redefine); } }
static void KeepAgentPromise(Promise *pp, const ReportContext *report_context) { char *sp = NULL; struct timespec start = BeginMeasure(); if (!IsDefinedClass(pp->classes, pp->ns)) { CfOut(cf_verbose, "", "\n"); CfOut(cf_verbose, "", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . \n"); CfOut(cf_verbose, "", "Skipping whole next promise (%s), as context %s is not relevant\n", pp->promiser, pp->classes); CfOut(cf_verbose, "", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . \n"); return; } if (pp->done) { return; } if (VarClassExcluded(pp, &sp)) { CfOut(cf_verbose, "", "\n"); CfOut(cf_verbose, "", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . \n"); CfOut(cf_verbose, "", "Skipping whole next promise (%s), as var-context %s is not relevant\n", pp->promiser, sp); CfOut(cf_verbose, "", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . \n"); return; } if (MissingDependencies(pp)) { return; } // Record promises examined for efficiency calc if (strcmp("meta", pp->agentsubtype) == 0) { char ns[CF_BUFSIZE]; snprintf(ns,CF_BUFSIZE,"%s_meta",pp->bundle); NewScope(ns); ConvergeVarHashPromise(ns, pp, true); return; } if (strcmp("vars", pp->agentsubtype) == 0) { ConvergeVarHashPromise(pp->bundle, pp, true); return; } if (strcmp("defaults", pp->agentsubtype) == 0) { DefaultVarPromise(pp); return; } if (strcmp("classes", pp->agentsubtype) == 0) { KeepClassContextPromise(pp); return; } if (strcmp("outputs", pp->agentsubtype) == 0) { VerifyOutputsPromise(pp); return; } SetPromiseOutputs(pp); if (strcmp("interfaces", pp->agentsubtype) == 0) { VerifyInterfacesPromise(pp); return; } if (strcmp("processes", pp->agentsubtype) == 0) { VerifyProcessesPromise(pp); return; } if (strcmp("storage", pp->agentsubtype) == 0) { FindAndVerifyStoragePromises(pp, report_context); EndMeasurePromise(start, pp); return; } if (strcmp("packages", pp->agentsubtype) == 0) { VerifyPackagesPromise(pp); EndMeasurePromise(start, pp); return; } if (strcmp("files", pp->agentsubtype) == 0) { if (GetBooleanConstraint("background", pp)) { ParallelFindAndVerifyFilesPromises(pp, report_context); } else { FindAndVerifyFilesPromises(pp, report_context); } EndMeasurePromise(start, pp); return; } if (strcmp("commands", pp->agentsubtype) == 0) { VerifyExecPromise(pp); EndMeasurePromise(start, pp); return; } if (strcmp("databases", pp->agentsubtype) == 0) { VerifyDatabasePromises(pp); EndMeasurePromise(start, pp); return; } if (strcmp("methods", pp->agentsubtype) == 0) { VerifyMethodsPromise(pp, report_context); EndMeasurePromise(start, pp); return; } if (strcmp("services", pp->agentsubtype) == 0) { VerifyServicesPromise(pp, report_context); EndMeasurePromise(start, pp); return; } if (strcmp("guest_environments", pp->agentsubtype) == 0) { VerifyEnvironmentsPromise(pp); EndMeasurePromise(start, pp); return; } if (strcmp("reports", pp->agentsubtype) == 0) { VerifyReportPromise(pp); return; } }