Skip to content

Commit

Permalink
vcsim: toggle Content Library cached fields in sync and evict calls
Browse files Browse the repository at this point in the history
  • Loading branch information
dougm authored and acharyasreej committed Apr 12, 2024
1 parent 9285e44 commit 70a7617
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 8 deletions.
15 changes: 15 additions & 0 deletions govc/USAGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,7 @@ but appear via `govc $cmd -h`:
- [library.cp](#librarycp)
- [library.create](#librarycreate)
- [library.deploy](#librarydeploy)
- [library.evict](#libraryevict)
- [library.export](#libraryexport)
- [library.import](#libraryimport)
- [library.info](#libraryinfo)
Expand Down Expand Up @@ -3549,6 +3550,20 @@ Options:
-profile= Storage profile
```

## library.evict

```
Usage: govc library.evict [OPTIONS] LIBRARY NAME | ITEM NAME
Evict library NAME or item NAME.
Examples:
govc library.evict subscribed-library
govc library.evict subscribed-library/item
Options:
```

## library.export

```
Expand Down
2 changes: 1 addition & 1 deletion govc/library/evict.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright (c) 2024 VMware, Inc. All Rights Reserved.
Copyright (c) 2024-2024 VMware, Inc. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand Down
14 changes: 8 additions & 6 deletions govc/test/library.bats
Original file line number Diff line number Diff line change
Expand Up @@ -608,7 +608,7 @@ EOF
assert_matches INVALID_URL
}

@test "library.sublibevict" {
@test "library.evict" {
vcsim_env

run govc library.create -pub published-content
Expand Down Expand Up @@ -640,14 +640,16 @@ EOF
run govc library.sync subscribed-content/ttylinux-latest
assert_success

result=$(govc library.info -l subscribed-content/ttylinux-latest)
echo "$result"
# assert cached is true
# assert cached is false after item sync
cached=$(govc library.info subscribed-content/ttylinux-latest | grep Cached: | awk '{print $2}')
assert_equal "true" "$cached"

run govc library.evict subscribed-content
run govc library.evict subscribed-content/ttylinux-latest
assert_success

# assert cached is false
# assert cached is false after library item evict
cached=$(govc library.info subscribed-content/ttylinux-latest | grep Cached: | awk '{print $2}')
assert_equal "false" "$cached"
}


24 changes: 23 additions & 1 deletion vapi/simulator/simulator.go
Original file line number Diff line number Diff line change
Expand Up @@ -905,6 +905,19 @@ func (s *handler) library(w http.ResponseWriter, r *http.Request) {
}
}

func (content *content) cached(val bool) {
for _, item := range content.Item {
item.cached(val)
}
}

func (item *item) cached(val bool) {
item.Cached = val
for _, file := range item.File {
file.Cached = types.NewBool(val)
}
}

func (s *handler) publish(w http.ResponseWriter, r *http.Request, sids []internal.SubscriptionDestination, l *content, vmtx *item) bool {
var ids []string
if len(sids) == 0 {
Expand Down Expand Up @@ -991,10 +1004,14 @@ func (s *handler) libraryID(w http.ResponseWriter, r *http.Request) {
case "sync":
if l.Type == "SUBSCRIBED" {
l.LastSyncTime = types.NewTime(time.Now())
l.cached(true)
OK(w)
} else {
http.NotFound(w, r)
}
case "evict":
l.cached(false)
OK(w)
}
case http.MethodGet:
OK(w, l)
Expand Down Expand Up @@ -1242,8 +1259,9 @@ func (s *handler) libraryItemID(w http.ResponseWriter, r *http.Request) {

OK(w, id)
case "sync":
if l.Type == "SUBSCRIBED" {
if l.Type == "SUBSCRIBED" || l.Publication != nil {
item.LastSyncTime = types.NewTime(time.Now())
item.cached(true)
OK(w)
} else {
http.NotFound(w, r)
Expand All @@ -1255,6 +1273,9 @@ func (s *handler) libraryItemID(w http.ResponseWriter, r *http.Request) {
OK(w)
}
}
case "evict":
item.cached(false)
OK(w, id)
}
case http.MethodGet:
OK(w, item)
Expand Down Expand Up @@ -2309,6 +2330,7 @@ func (s *handler) libraryItemTemplateID(w http.ResponseWriter, r *http.Request)
return
}

item.cached(true)
ref, err := s.cloneVM(item.Template.Value, spec.Name, p, spec.DiskStorage)
if err != nil {
BadRequest(w, err.Error())
Expand Down

0 comments on commit 70a7617

Please sign in to comment.