pkg/seqno/seqno_linux.go (49 lines of code) (raw):

// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. package seqno import ( "fmt" "io/ioutil" "os" "path/filepath" "strconv" "github.com/Azure/azure-extension-platform/pkg/constants" "github.com/Azure/azure-extension-platform/pkg/extensionerrors" "github.com/Azure/azure-extension-platform/pkg/utils" ) var mostRecentSequenceFileName = "mrseq" // sequence number for the extension from the registry func getSequenceNumberInternal(name, version string) (uint, error) { mrseqPath, err := getMrseqFilePath() if err != nil { return 0, err } mrseqStr, err := ioutil.ReadFile(mrseqPath) if err != nil { if os.IsNotExist(err) { return 0, extensionerrors.ErrNoMrseqFile } return 0, fmt.Errorf("failed to read mrseq file : %s", err) } seqNum, err := strconv.Atoi(string(mrseqStr)) if err != nil { return 0, err } return uint(seqNum), nil } func setSequenceNumberInternal(extName, extVersion string, seqNo uint) error { b := []byte(fmt.Sprintf("%v", seqNo)) mrseqPath, err := getMrseqFilePath() if err != nil { return err } err = ioutil.WriteFile(mrseqPath, b, constants.FilePermissions_UserOnly_ReadWrite) if err != nil { return fmt.Errorf("could not write sequence number file %s, error: %v", mostRecentSequenceFileName, err) } return nil } func getMrseqFilePath() (string, error) { // mrseq file path must always be present in the same directory as the extension executable currentDir, err := utils.GetCurrentProcessWorkingDir() if err != nil { return "", err } return filepath.Join(currentDir, mostRecentSequenceFileName), nil }