in cmd/aotutil/ssm.go [127:158]
func (s *SSMWrapper) WaitPatch(ctx context.Context, instanceId string, timeout time.Duration) error {
logger := s.logger.With(zap.String("InstanceId", instanceId), zap.String("Action", "WaitPatch"))
logger.Info("Start waiting patch")
start := time.Now()
return Wait(waitInterval, timeout, func() (WaitAction, error) {
infos, err := describeInstanceAssocStatus(ctx, s.client, instanceId)
if err != nil {
return WaitDone, err
}
for _, assoc := range infos {
if aws.ToString(assoc.Name) != SSMPatchDocument {
continue
}
status := aws.ToString(assoc.Status)
switch status {
case "Success":
logger.Info("patch on instance succeeded",
zap.Time("PatchTime", aws.ToTime(assoc.ExecutionDate)),
zap.Duration("Waited", time.Now().Sub(start)))
return WaitDone, nil
case "Failed":
return WaitDone, fmt.Errorf("patch on instance failed instanceId %s waited %s", instanceId, time.Now().Sub(start))
default:
logger.Info("waiting patching", zap.String("Status", status))
return WaitContinue, nil
}
}
//return WaitDone, fmt.Errorf("patch document is not associated on the instance, requires %s", SSMPatchDocument)
// NOTE: it seems it takes a while for SSM to associate the documents to instance ...
return WaitContinue, nil
})
}