func()

in iot-onboarding-service/src/cloudrack-lambda-core/iot/iot.go [73:135]


func (cfg Config) DeleteDevice(device Device) error {
	policyName := device.Name + "Policy"
	//1-Detach policy from certificate
	policyAttachementInput := awsiot.DetachPolicyInput{
		PolicyName: aws.String(policyName),
		Target:     aws.String(device.CertificateArn),
	}
	_, err1 := cfg.Client.DetachPolicy(&policyAttachementInput)
	if err1 != nil {
		//non blocking error since if it can't detach. delete policy will fail
		log.Printf("[IOT][DELETE] Error during DetachPolicy : %+v", err1)
	}

	//2-Detach thing from certificate
	attachmentInput := awsiot.DetachThingPrincipalInput{
		Principal: aws.String(device.CertificateArn),
		ThingName: aws.String(device.Name),
	}
	_, err2 := cfg.Client.DetachThingPrincipal(&attachmentInput)
	if err2 != nil {
		//non blocking error since if it can't detach. delete policy will fail
		log.Printf("[IOT][DELETE] Error during DetachThingPrincipal: %+v", err2)
	}
	//3-Delete Policy
	policyInput := awsiot.DeletePolicyInput{
		PolicyName: aws.String(policyName),
	}
	_, err3 := cfg.Client.DeletePolicy(&policyInput)
	if isErrorForDelete(err3) {
		log.Printf("[IOT][DELETE] Error during DeletePolicy:%+v", err3)
		return err3
	}
	//4-Delete Certificate
	//To delete cretificate we must first deactivate it
	certifDeactivateInput := awsiot.UpdateCertificateInput{
		CertificateId: aws.String(device.CertificateId),
		NewStatus:     aws.String("INACTIVE"),
	}
	_, err41 := cfg.Client.UpdateCertificate(&certifDeactivateInput)
	if err41 != nil {
		//non blocking error since if it can't deactivate. delete certificate will fail
		log.Printf("[IOT][DELETE] Error during Deactivating certificate: %+v", err41)
	}
	credsInput := awsiot.DeleteCertificateInput{
		CertificateId: aws.String(device.CertificateId),
		ForceDelete:   aws.Bool(true),
	}
	_, err42 := cfg.Client.DeleteCertificate(&credsInput)
	if isErrorForDelete(err42) {
		log.Printf("[IOT][DELETE] Error during DeleteCertificate: %+v", err42)
		return err42
	}
	//5-Delete Thing
	thingINput := awsiot.DeleteThingInput{
		ThingName: aws.String(device.Name),
	}
	_, err5 := cfg.Client.DeleteThing(&thingINput)
	if isErrorForDelete(err5) {
		log.Printf("[IOT][DELETE] Error during DeleteThingInput: %+v", err5)
		return err5
	}
	return nil
}