mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-25 18:45:20 -06:00
fix: backend/cos - remove cos object write lock either when unlock state file
This commit is contained in:
parent
c4d7207230
commit
cab6cee385
@ -123,6 +123,11 @@ func (c *remoteClient) Unlock(check string) error {
|
|||||||
return c.lockError(err)
|
return c.lockError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = c.cosUnlock(c.bucket, c.lockFile)
|
||||||
|
if err != nil {
|
||||||
|
return c.lockError(err)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -362,6 +367,16 @@ func (c *remoteClient) cosUnlock(bucket, cosFile string) error {
|
|||||||
|
|
||||||
var err error
|
var err error
|
||||||
for i := 0; i < 30; i++ {
|
for i := 0; i < 30; i++ {
|
||||||
|
tagExists, err := c.CheckTag(lockTagKey, lockTagValue)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !tagExists {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
err = c.DeleteTag(lockTagKey, lockTagValue)
|
err = c.DeleteTag(lockTagKey, lockTagValue)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return nil
|
return nil
|
||||||
@ -372,6 +387,30 @@ func (c *remoteClient) cosUnlock(bucket, cosFile string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CheckTag checks if tag key:value exists
|
||||||
|
func (c *remoteClient) CheckTag(key, value string) (exists bool, err error) {
|
||||||
|
request := tag.NewDescribeTagsRequest()
|
||||||
|
request.TagKey = &key
|
||||||
|
request.TagValue = &value
|
||||||
|
|
||||||
|
response, err := c.tagClient.DescribeTags(request)
|
||||||
|
log.Printf("[DEBUG] create tag %s:%s: error: %v", key, value, err)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(response.Response.Tags) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
tagKey := response.Response.Tags[0].TagKey
|
||||||
|
tagValue := response.Response.Tags[0].TagValue
|
||||||
|
|
||||||
|
exists = key == *tagKey && value == *tagValue
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// CreateTag create tag by key and value
|
// CreateTag create tag by key and value
|
||||||
func (c *remoteClient) CreateTag(key, value string) error {
|
func (c *remoteClient) CreateTag(key, value string) error {
|
||||||
request := tag.NewCreateTagRequest()
|
request := tag.NewCreateTagRequest()
|
||||||
|
Loading…
Reference in New Issue
Block a user