in main/cmds.go [61:127]
func enable(lg ExtensionLogger, hEnv vmextension.HandlerEnvironment, seqNum int) error {
// parse the extension handler settings (file not available prior to 'enable')
cfg, err := parseAndValidateSettings(hEnv.HandlerEnvironment.ConfigFolder)
if err != nil {
return errors.Wrap(err, "failed to get configuration")
}
// parse and log the agent version
//_, err = parseAndLogAgentVersion(AgentZipDir)
//if err != nil {
// lg.customLog(logEvent, "failed to parse version string", logError, err, logAgentName, AgentZipDir)
// return errors.Wrap(err, "failed to parse version string")
//}
// check to see if agent directory exists
unzipDir, agentDirectory := getAgentPaths()
var runErr error
if _, err := os.Stat(agentDirectory); err == nil {
// directory exists, run enable.sh for agent health check
lg.event("agent health check")
_, runErr := runCmd(lg, "bash ./enable.sh", agentDirectory, cfg)
if runErr != nil {
lg.eventError("agent health check failed", runErr)
return runErr
}
lg.event("agent health check succeeded")
return nil
}
// directory does not exist, unzipAgent agent
_, err = unzipAgent(lg, AgentZipDir, AgentName, unzipDir)
if err != nil {
lg.eventError("failed to unzipAgent agent dir", err)
return errors.Wrap(err, "failed to unzipAgent agent")
}
// set permissions for the .sh files
err = setPermissions()
if err != nil {
lg.eventError("failed to update the permissions for the scripts", err)
telemetry(TelemetryScenario, err.Error(), false, 0)
return errors.Wrap(err, "failed to update the permissions for the scripts")
}
// run install.sh and enable.sh
lg.event("installing agent")
_, runErr = runCmd(lg, "bash ./install.sh", agentDirectory, cfg)
if runErr != nil {
lg.eventError("agent installation failed", runErr)
telemetry(TelemetryScenario, "agent installation failed: "+runErr.Error(), false, 0)
} else {
lg.customLog(logEvent, "agent installation succeeded", logEvent, "enabling agent")
telemetry(TelemetryScenario, "agent installation succeeded", true, 0)
_, runErr = runCmd(lg, "bash ./enable.sh", agentDirectory, cfg)
if runErr != nil {
lg.eventError("enable agent failed", runErr)
telemetry(TelemetryScenario, "agent enable failed: "+runErr.Error(), false, 0)
} else {
lg.event("enable agent succeeded")
telemetry(TelemetryScenario, "agent enable succeeded", true, 0)
}
}
// collect the logs if available and send telemetry updates
getStdPipesAndTelemetry(lg, unzipDir, runErr)
return runErr
}