From e7f208367be3bf2f9e21b1d539a6fe8c4e1340af Mon Sep 17 00:00:00 2001 From: Gabriel Adrian Samfira Date: Sun, 26 Mar 2023 22:08:51 +0300 Subject: [PATCH] Error if we can't remove instance from provider Signed-off-by: Gabriel Adrian Samfira --- Makefile | 2 +- go.mod | 11 +++--- go.sum | 36 +++++++++---------- runner/pool/pool.go | 6 ++-- runner/providers/external/external.go | 16 ++++----- runner/providers/lxd/lxd.go | 6 ++++ runner/providers/lxd/util.go | 3 +- .../github.com/lxc/lxd/client/connection.go | 4 +-- vendor/github.com/lxc/lxd/client/lxd.go | 2 +- .../lxc/lxd/client/lxd_containers.go | 8 ++--- .../lxc/lxd/client/lxd_instances.go | 30 ++++++++-------- .../lxc/lxd/shared/api/migration.go | 10 ++++++ vendor/github.com/lxc/lxd/shared/instance.go | 9 +++-- vendor/github.com/lxc/lxd/shared/network.go | 26 +++++++------- .../lxd/shared/simplestreams/simplestreams.go | 8 ++++- .../internal/encoding/text/decode_number.go | 6 ++-- .../protobuf/internal/version/version.go | 2 +- vendor/modules.txt | 14 ++++---- 18 files changed, 114 insertions(+), 85 deletions(-) create mode 100644 vendor/github.com/lxc/lxd/shared/api/migration.go diff --git a/Makefile b/Makefile index 6f7f5396..a4e9a75f 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ build-static: @echo Binaries are available in $(PWD)/bin install: - @$(GO) install ./... + @$(GO) install -tags osusergo,netgo,sqlite_omit_load_extension ./... @echo Binaries available in ${GOPATH} test: verify go-test diff --git a/go.mod b/go.mod index 9dcd7e42..d5e3ca47 100644 --- a/go.mod +++ b/go.mod @@ -14,9 +14,9 @@ require ( github.com/jedib0t/go-pretty/v6 v6.4.6 github.com/juju/clock v1.0.3 github.com/juju/retry v1.0.0 - github.com/lxc/lxd v0.0.0-20230310224854-36b345fbd578 + github.com/lxc/lxd v0.0.0-20230325180147-8d608287b0ce github.com/manifoldco/promptui v0.9.0 - github.com/mattn/go-isatty v0.0.17 + github.com/mattn/go-isatty v0.0.18 github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.14.0 @@ -43,6 +43,7 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect github.com/flosch/pongo2 v0.0.0-20200913210552-0d938eb266f3 // indirect + github.com/frankban/quicktest v1.14.3 // indirect github.com/go-macaroon-bakery/macaroon-bakery/v3 v3.0.1 // indirect github.com/go-macaroon-bakery/macaroonpb v1.0.0 // indirect github.com/go-sql-driver/mysql v1.7.0 // indirect @@ -52,11 +53,12 @@ require ( github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/juju/errors v1.0.0 // indirect + github.com/juju/testing v1.0.2 // indirect github.com/juju/webbrowser v1.0.0 // indirect github.com/julienschmidt/httprouter v1.3.0 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/kr/fs v0.1.0 // indirect - github.com/kr/pretty v0.3.0 // indirect + github.com/kr/pretty v0.3.1 // indirect github.com/mattn/go-runewidth v0.0.14 // indirect github.com/mattn/go-sqlite3 v1.14.16 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect @@ -73,11 +75,10 @@ require ( github.com/sirupsen/logrus v1.9.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/objx v0.5.0 // indirect - github.com/xdg-go/stringprep v1.0.3 // indirect golang.org/x/net v0.8.0 // indirect golang.org/x/term v0.6.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.29.0 // indirect + google.golang.org/protobuf v1.30.0 // indirect gopkg.in/errgo.v1 v1.0.1 // indirect gopkg.in/httprequest.v1 v1.2.1 // indirect gopkg.in/macaroon.v2 v2.1.0 // indirect diff --git a/go.sum b/go.sum index c1b74f9d..a1b53e64 100644 --- a/go.sum +++ b/go.sum @@ -33,7 +33,8 @@ github.com/frankban/quicktest v1.0.0/go.mod h1:R98jIehRai+d1/3Hv2//jOVCTJhW1VBav github.com/frankban/quicktest v1.2.2/go.mod h1:Qh/WofXFeiAFII1aEBu529AtJo6Zg2VHscnEsbBnJ20= github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o= github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= -github.com/frankban/quicktest v1.11.3 h1:8sXhOn0uLys67V8EsXLc6eszDs8VXWxL3iRvebPhedY= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/go-macaroon-bakery/macaroon-bakery/v3 v3.0.1 h1:uvQJoKTHrFFu8zxoaopNKedRzwdy3+8H72we4T/5cGs= github.com/go-macaroon-bakery/macaroon-bakery/v3 v3.0.1/go.mod h1:H59IYeChwvD1po3dhGUPvq5na+4NVD7SJlbhGKvslr0= github.com/go-macaroon-bakery/macaroonpb v1.0.0 h1:It9exBaRMZ9iix1iJ6gwzfwsDE6ExNuwtAJ9e09v6XE= @@ -70,6 +71,7 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-github/v48 v48.2.0 h1:68puzySE6WqUY9KWmpOsDEQfDZsso98rT6pZcz9HqcE= github.com/google/go-github/v48 v48.2.0/go.mod h1:dDlehKBDo850ZPvCTK0sEqTCVWcrGl2LcDiajkYi89Y= @@ -104,19 +106,16 @@ github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/juju/clock v1.0.3 h1:yJHIsWXeU8j3QcBdiess09SzfiXRRrsjKPn2whnMeds= github.com/juju/clock v1.0.3/go.mod h1:HIBvJ8kiV/n7UHwKuCkdYL4l/MDECztHR2sAvWDxxf0= -github.com/juju/collections v1.0.2 h1:y9t99Nq/uUZksJgWehiWxIr2vB1UG3hUT7LBNy1xiH8= github.com/juju/errors v1.0.0 h1:yiq7kjCLll1BiaRuNY53MGI0+EQ3rF6GB+wvboZDefM= github.com/juju/errors v1.0.0/go.mod h1:B5x9thDqx0wIMH3+aLIMP9HjItInYWObRovoCFM5Qe8= github.com/juju/loggo v1.0.0 h1:Y6ZMQOGR9Aj3BGkiWx7HBbIx6zNwNkxhVNOHU2i1bl0= -github.com/juju/mgo/v2 v2.0.2 h1:ufYtW2OFNjniTuxOngecP3Mk5sSclo8Zl1mnmyGWUWA= github.com/juju/qthttptest v0.1.1/go.mod h1:aTlAv8TYaflIiTDIQYzxnl1QdPjAg8Q8qJMErpKy6A4= github.com/juju/qthttptest v0.1.3 h1:M0HdpwsK/UTHRGRcIw5zvh5z+QOgdqyK+ecDMN+swwM= github.com/juju/retry v1.0.0 h1:Tb1hFdDSPGLH/BGdYQOF7utQ9lA0ouVJX2imqgJK6tk= github.com/juju/retry v1.0.0/go.mod h1:SssN1eYeK3A2qjnFGTiVMbdzGJ2BfluaJblJXvuvgqA= -github.com/juju/testing v0.0.0-20220203020004-a0ff61f03494 h1:XEDzpuZb8Ma7vLja3+5hzUqVTvAqm5Y+ygvnDs5iTMM= -github.com/juju/utils/v3 v3.0.0-20220203023959-c3fbc78a33b0 h1:bn+2Adl1yWqYjm3KSFlFqsvfLg2eq+XNL7GGMYApdVw= -github.com/juju/version v0.0.0-20210303051006-2015802527a8 h1:BTo6HzRR0zPBcXbs1Sy08aQNfvdm3ey8O+mBTiO3g00= -github.com/juju/version/v2 v2.0.0-20211007103408-2e8da085dc23 h1:wtEPbidt1VyHlb8RSztU6ySQj29FLsOQiI9XiJhXDM4= +github.com/juju/testing v1.0.2 h1:OR90RqCd9CJONxXamZAjLknpZdtqDyxqW8IwCbgw3i4= +github.com/juju/testing v1.0.2/go.mod h1:h3Vd2rzB57KrdsBEy6R7bmSKPzP76BnNavt7i8PerwQ= +github.com/juju/utils/v3 v3.0.0 h1:Gg3n63mGPbBuoXCo+EPJuMi44hGZfloI8nlCIebHu2Q= github.com/juju/webbrowser v1.0.0 h1:JLdmbFtCGY6Qf2jmS6bVaenJFGIFkdF1/BjUm76af78= github.com/juju/webbrowser v1.0.0/go.mod h1:RwVlbBcF91Q4vS+iwlkJ6bZTE3EwlrjbYlM3WMVD6Bc= github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= @@ -127,18 +126,19 @@ github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/lxc/lxd v0.0.0-20230310224854-36b345fbd578 h1:Rqzj0l43LLcTciHKIwKpTesAv9rSeC4LbUc+BsiIY6Q= -github.com/lxc/lxd v0.0.0-20230310224854-36b345fbd578/go.mod h1:6Z1AwZwLm5Y+tzoW5CdKOo51fyDiCKJz3QgAXJ9/IYI= +github.com/lxc/lxd v0.0.0-20230325180147-8d608287b0ce h1:3zb1HRvOAHOMZ8VGTDEBkKpCUVlF28zalZcb7RFjMnE= +github.com/lxc/lxd v0.0.0-20230325180147-8d608287b0ce/go.mod h1:JJ1ShHzaOzMzU0B5TNcdI9+vq8Y45ijVeNYxE1wJ8zM= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= +github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= @@ -153,6 +153,7 @@ github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/pborman/uuid v1.2.1 h1:+ZZIw58t/ozdjRaXh/3awHfmWRbzYxJoAdNJxe/3pvw= github.com/pborman/uuid v1.2.1/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= @@ -179,8 +180,9 @@ github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b h1:gQZ0qzfKHQIybLANtM3mBXNUtOfsCFXeTsnBqCsx1KM= github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= @@ -203,8 +205,6 @@ github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/teris-io/shortid v0.0.0-20220617161101-71ec9f2aa569 h1:xzABM9let0HLLqFypcxvLmlvEciCHL7+Lv+4vwZqecI= github.com/teris-io/shortid v0.0.0-20220617161101-71ec9f2aa569/go.mod h1:2Ly+NIftZN4de9zRmENdYbvPQeaVIYKWpLFStLFEBgI= -github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs= -github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= golang.org/x/crypto v0.0.0-20180723164146-c126467f60eb/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -250,7 +250,6 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -260,7 +259,6 @@ golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -293,8 +291,8 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.29.0 h1:44S3JjaKmLEE4YIkjzexaP+NzZsudE3Zin5Njn/pYX0= -google.golang.org/protobuf v1.29.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/DATA-DOG/go-sqlmock.v1 v1.3.0 h1:FVCohIoYO7IJoDDVpV2pdq7SgrMH6wHnuTyrdrxJNoY= gopkg.in/DATA-DOG/go-sqlmock.v1 v1.3.0/go.mod h1:OdE7CF6DbADk7lN8LIKRzRJTTZXIjtWgA5THM5lhBAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/runner/pool/pool.go b/runner/pool/pool.go index 5b336185..9029948c 100644 --- a/runner/pool/pool.go +++ b/runner/pool/pool.go @@ -1032,11 +1032,11 @@ func (r *basePoolManager) deletePendingInstances() { err = r.deleteInstanceFromProvider(instance) if err != nil { - log.Printf("failed to delete instance from provider: %+v", err) + return errors.Wrap(err, "removing instance from provider") } - if err := r.store.DeleteInstance(r.ctx, instance.PoolID, instance.Name); err != nil { - return errors.Wrap(err, "deleting instance from database") + if deleteErr := r.store.DeleteInstance(r.ctx, instance.PoolID, instance.Name); deleteErr != nil { + return errors.Wrap(deleteErr, "deleting instance from database") } return }(instance) //nolint diff --git a/runner/providers/external/external.go b/runner/providers/external/external.go index f5ee282f..a6e45bbb 100644 --- a/runner/providers/external/external.go +++ b/runner/providers/external/external.go @@ -12,7 +12,7 @@ import ( "github.com/cloudbase/garm/runner/common" providerCommon "github.com/cloudbase/garm/runner/providers/common" "github.com/cloudbase/garm/runner/providers/external/execution" - "github.com/cloudbase/garm/util/exec" + garmExec "github.com/cloudbase/garm/util/exec" "github.com/pkg/errors" ) @@ -77,7 +77,7 @@ func (e *external) CreateInstance(ctx context.Context, bootstrapParams params.Bo return params.Instance{}, errors.Wrap(err, "serializing bootstrap params") } - out, err := exec.Exec(ctx, e.execPath, asJs, asEnv) + out, err := garmExec.Exec(ctx, e.execPath, asJs, asEnv) if err != nil { return params.Instance{}, garmErrors.NewProviderError("provider binary %s returned error: %s", e.execPath, err) } @@ -105,7 +105,7 @@ func (e *external) DeleteInstance(ctx context.Context, instance string) error { fmt.Sprintf("GARM_PROVIDER_CONFIG_FILE=%s", e.cfg.External.ConfigFile), } - _, err := exec.Exec(ctx, e.execPath, nil, asEnv) + _, err := garmExec.Exec(ctx, e.execPath, nil, asEnv) if err != nil { return garmErrors.NewProviderError("provider binary %s returned error: %s", e.execPath, err) } @@ -123,7 +123,7 @@ func (e *external) GetInstance(ctx context.Context, instance string) (params.Ins // TODO(gabriel-samfira): handle error types. Of particular insterest is to // know when the error is ErrNotFound. - out, err := exec.Exec(ctx, e.execPath, nil, asEnv) + out, err := garmExec.Exec(ctx, e.execPath, nil, asEnv) if err != nil { return params.Instance{}, garmErrors.NewProviderError("provider binary %s returned error: %s", e.execPath, err) } @@ -144,7 +144,7 @@ func (e *external) ListInstances(ctx context.Context, poolID string) ([]params.I fmt.Sprintf("GARM_PROVIDER_CONFIG_FILE=%s", e.cfg.External.ConfigFile), } - out, err := exec.Exec(ctx, e.execPath, nil, asEnv) + out, err := garmExec.Exec(ctx, e.execPath, nil, asEnv) if err != nil { return []params.Instance{}, garmErrors.NewProviderError("provider binary %s returned error: %s", e.execPath, err) } @@ -163,7 +163,7 @@ func (e *external) RemoveAllInstances(ctx context.Context) error { fmt.Sprintf("GARM_CONTROLLER_ID=%s", e.controllerID), fmt.Sprintf("GARM_PROVIDER_CONFIG_FILE=%s", e.cfg.External.ConfigFile), } - _, err := exec.Exec(ctx, e.execPath, nil, asEnv) + _, err := garmExec.Exec(ctx, e.execPath, nil, asEnv) if err != nil { return garmErrors.NewProviderError("provider binary %s returned error: %s", e.execPath, err) } @@ -178,7 +178,7 @@ func (e *external) Stop(ctx context.Context, instance string, force bool) error fmt.Sprintf("GARM_INSTANCE_ID=%s", instance), fmt.Sprintf("GARM_PROVIDER_CONFIG_FILE=%s", e.cfg.External.ConfigFile), } - _, err := exec.Exec(ctx, e.execPath, nil, asEnv) + _, err := garmExec.Exec(ctx, e.execPath, nil, asEnv) if err != nil { return garmErrors.NewProviderError("provider binary %s returned error: %s", e.execPath, err) } @@ -193,7 +193,7 @@ func (e *external) Start(ctx context.Context, instance string) error { fmt.Sprintf("GARM_INSTANCE_ID=%s", instance), fmt.Sprintf("GARM_PROVIDER_CONFIG_FILE=%s", e.cfg.External.ConfigFile), } - _, err := exec.Exec(ctx, e.execPath, nil, asEnv) + _, err := garmExec.Exec(ctx, e.execPath, nil, asEnv) if err != nil { return garmErrors.NewProviderError("provider binary %s returned error: %s", e.execPath, err) } diff --git a/runner/providers/lxd/lxd.go b/runner/providers/lxd/lxd.go index c09cdff7..aabc03f8 100644 --- a/runner/providers/lxd/lxd.go +++ b/runner/providers/lxd/lxd.go @@ -384,11 +384,17 @@ func (l *LXD) DeleteInstance(ctx context.Context, instance string) error { op, err := cli.DeleteInstance(instance) if err != nil { + if isNotFoundError(err) { + return nil + } return errors.Wrap(err, "removing instance") } err = op.Wait() if err != nil { + if isNotFoundError(err) { + return nil + } return errors.Wrap(err, "waiting for instance deletion") } return nil diff --git a/runner/providers/lxd/util.go b/runner/providers/lxd/util.go index c22b0f9c..f029037d 100644 --- a/runner/providers/lxd/util.go +++ b/runner/providers/lxd/util.go @@ -38,7 +38,8 @@ import ( ) var ( - errInstanceIsStopped error = fmt.Errorf("The instance is already stopped") //nolint + //lint:ignore ST1005 imported error from lxd + errInstanceIsStopped error = fmt.Errorf("The instance is already stopped") ) var httpResponseErrors = map[int][]error{ diff --git a/vendor/github.com/lxc/lxd/client/connection.go b/vendor/github.com/lxc/lxd/client/connection.go index 8a0c2821..895a0f81 100644 --- a/vendor/github.com/lxc/lxd/client/connection.go +++ b/vendor/github.com/lxc/lxd/client/connection.go @@ -84,11 +84,11 @@ func ConnectLXD(url string, args *ConnectionArgs) (InstanceServer, error) { // // Unless the remote server is trusted by the system CA, the remote certificate must be provided (TLSServerCert). func ConnectLXDWithContext(ctx context.Context, url string, args *ConnectionArgs) (InstanceServer, error) { - logger.Debug("Connecting to a remote LXD over HTTPS") - // Cleanup URL url = strings.TrimSuffix(url, "/") + logger.Debug("Connecting to a remote LXD over HTTPS", logger.Ctx{"url": url}) + return httpsLXD(ctx, url, args) } diff --git a/vendor/github.com/lxc/lxd/client/lxd.go b/vendor/github.com/lxc/lxd/client/lxd.go index 83249cb1..25903298 100644 --- a/vendor/github.com/lxc/lxd/client/lxd.go +++ b/vendor/github.com/lxc/lxd/client/lxd.go @@ -440,7 +440,7 @@ func (r *ProtocolLXD) rawWebsocket(url string) (*websocket.Conn, error) { if remoteTCP != nil { err = tcp.SetTimeouts(remoteTCP, 0) if err != nil { - logger.Error("Failed setting TCP timeouts on remote connection", logger.Ctx{"err": err}) + logger.Warn("Failed setting TCP timeouts on remote connection", logger.Ctx{"err": err}) } } diff --git a/vendor/github.com/lxc/lxd/client/lxd_containers.go b/vendor/github.com/lxc/lxd/client/lxd_containers.go index 50e602f6..b8d960ee 100644 --- a/vendor/github.com/lxc/lxd/client/lxd_containers.go +++ b/vendor/github.com/lxc/lxd/client/lxd_containers.go @@ -651,8 +651,8 @@ func (r *ProtocolLXD) ExecContainer(containerName string, exec api.ContainerExec } // Call the control handler with a connection to the control socket - if args.Control != nil && fds["control"] != "" { - conn, err := r.GetOperationWebsocket(opAPI.ID, fds["control"]) + if args.Control != nil && fds[api.SecretNameControl] != "" { + conn, err := r.GetOperationWebsocket(opAPI.ID, fds[api.SecretNameControl]) if err != nil { return nil, err } @@ -1546,11 +1546,11 @@ func (r *ProtocolLXD) ConsoleContainer(containerName string, console api.Contain var controlConn *websocket.Conn // Call the control handler with a connection to the control socket - if fds["control"] == "" { + if fds[api.SecretNameControl] == "" { return nil, fmt.Errorf("Did not receive a file descriptor for the control channel") } - controlConn, err = r.GetOperationWebsocket(opAPI.ID, fds["control"]) + controlConn, err = r.GetOperationWebsocket(opAPI.ID, fds[api.SecretNameControl]) if err != nil { return nil, err } diff --git a/vendor/github.com/lxc/lxd/client/lxd_instances.go b/vendor/github.com/lxc/lxd/client/lxd_instances.go index bbc1e61e..9fc972a1 100644 --- a/vendor/github.com/lxc/lxd/client/lxd_instances.go +++ b/vendor/github.com/lxc/lxd/client/lxd_instances.go @@ -1046,8 +1046,8 @@ func (r *ProtocolLXD) ExecInstance(instanceName string, exec api.InstanceExecPos } // Call the control handler with a connection to the control socket - if args.Control != nil && fds["control"] != "" { - conn, err := r.GetOperationWebsocket(opAPI.ID, fds["control"]) + if args.Control != nil && fds[api.SecretNameControl] != "" { + conn, err := r.GetOperationWebsocket(opAPI.ID, fds[api.SecretNameControl]) if err != nil { return nil, err } @@ -2209,11 +2209,11 @@ func (r *ProtocolLXD) ConsoleInstance(instanceName string, console api.InstanceC var controlConn *websocket.Conn // Call the control handler with a connection to the control socket - if fds["control"] == "" { + if fds[api.SecretNameControl] == "" { return nil, fmt.Errorf("Did not receive a file descriptor for the control channel") } - controlConn, err = r.GetOperationWebsocket(opAPI.ID, fds["control"]) + controlConn, err = r.GetOperationWebsocket(opAPI.ID, fds[api.SecretNameControl]) if err != nil { return nil, err } @@ -2296,11 +2296,11 @@ func (r *ProtocolLXD) ConsoleInstanceDynamic(instanceName string, console api.In } // Call the control handler with a connection to the control socket. - if fds["control"] == "" { + if fds[api.SecretNameControl] == "" { return nil, nil, fmt.Errorf("Did not receive a file descriptor for the control channel") } - controlConn, err := r.GetOperationWebsocket(opAPI.ID, fds["control"]) + controlConn, err := r.GetOperationWebsocket(opAPI.ID, fds[api.SecretNameControl]) if err != nil { return nil, nil, err } @@ -2600,7 +2600,7 @@ func (r *ProtocolLXD) proxyMigration(targetOp *operation, targetSecrets map[stri } } - if targetSecrets["control"] == "" { + if targetSecrets[api.SecretNameControl] == "" { return fmt.Errorf("Migration target didn't setup the required \"control\" socket") } @@ -2614,17 +2614,17 @@ func (r *ProtocolLXD) proxyMigration(targetOp *operation, targetSecrets map[stri proxies := map[string]*proxy{} // Connect the control socket - sourceConn, err := source.GetOperationWebsocket(sourceOp.ID, sourceSecrets["control"]) + sourceConn, err := source.GetOperationWebsocket(sourceOp.ID, sourceSecrets[api.SecretNameControl]) if err != nil { return err } - targetConn, err := r.GetOperationWebsocket(targetOp.ID, targetSecrets["control"]) + targetConn, err := r.GetOperationWebsocket(targetOp.ID, targetSecrets[api.SecretNameControl]) if err != nil { return err } - proxies["control"] = &proxy{ + proxies[api.SecretNameControl] = &proxy{ done: shared.WebsocketProxy(sourceConn, targetConn), sourceConn: sourceConn, targetConn: targetConn, @@ -2632,7 +2632,7 @@ func (r *ProtocolLXD) proxyMigration(targetOp *operation, targetSecrets map[stri // Connect the data sockets for name := range sourceSecrets { - if name == "control" { + if name == api.SecretNameControl { continue } @@ -2657,13 +2657,13 @@ func (r *ProtocolLXD) proxyMigration(targetOp *operation, targetSecrets map[stri // Cleanup once everything is done go func() { // Wait for control socket - <-proxies["control"].done - _ = proxies["control"].sourceConn.Close() - _ = proxies["control"].targetConn.Close() + <-proxies[api.SecretNameControl].done + _ = proxies[api.SecretNameControl].sourceConn.Close() + _ = proxies[api.SecretNameControl].targetConn.Close() // Then deal with the others for name, proxy := range proxies { - if name == "control" { + if name == api.SecretNameControl { continue } diff --git a/vendor/github.com/lxc/lxd/shared/api/migration.go b/vendor/github.com/lxc/lxd/shared/api/migration.go new file mode 100644 index 00000000..ae132a6d --- /dev/null +++ b/vendor/github.com/lxc/lxd/shared/api/migration.go @@ -0,0 +1,10 @@ +package api + +// SecretNameControl is the secret name used for the migration control connection. +const SecretNameControl = "control" + +// SecretNameFilesystem is the secret name used for the migration filesystem connection. +const SecretNameFilesystem = "fs" + +// SecretNameState is the secret name used for the migration state connection. +const SecretNameState = "criu" // Legacy value used for backward compatibility for clients. diff --git a/vendor/github.com/lxc/lxd/shared/instance.go b/vendor/github.com/lxc/lxd/shared/instance.go index 6472b152..7b2fa4cd 100644 --- a/vendor/github.com/lxc/lxd/shared/instance.go +++ b/vendor/github.com/lxc/lxd/shared/instance.go @@ -150,6 +150,7 @@ var InstanceConfigKeysAny = map[string]func(value string) error{ "volatile.apply_quota": validate.IsAny, "volatile.uuid": validate.Optional(validate.IsUUID), "volatile.vsock_id": validate.Optional(validate.IsInt64), + "volatile.uuid.generation": validate.Optional(validate.IsUUID), // Caller is responsible for full validation of any raw.* value. "raw.idmap": validate.IsAny, @@ -256,8 +257,12 @@ var InstanceConfigKeysVM = map[string]func(value string) error{ "raw.qemu": validate.IsAny, "raw.qemu.conf": validate.IsAny, - "security.agent.metrics": validate.Optional(validate.IsBool), - "security.secureboot": validate.Optional(validate.IsBool), + "security.agent.metrics": validate.Optional(validate.IsBool), + "security.secureboot": validate.Optional(validate.IsBool), + "security.sev": validate.Optional(validate.IsBool), + "security.sev.policy.es": validate.Optional(validate.IsBool), + "security.sev.session.dh": validate.Optional(validate.IsAny), + "security.sev.session.data": validate.Optional(validate.IsAny), "agent.nic_config": validate.Optional(validate.IsBool), diff --git a/vendor/github.com/lxc/lxd/shared/network.go b/vendor/github.com/lxc/lxd/shared/network.go index 6b7e62dd..1f584714 100644 --- a/vendor/github.com/lxc/lxd/shared/network.go +++ b/vendor/github.com/lxc/lxd/shared/network.go @@ -375,10 +375,14 @@ func DefaultWriter(conn *websocket.Conn, w io.WriteCloser, writeDone chan<- bool type WebsocketIO struct { Conn *websocket.Conn reader io.Reader - mu sync.Mutex + mur sync.Mutex + muw sync.Mutex } func (w *WebsocketIO) Read(p []byte) (n int, err error) { + w.mur.Lock() + defer w.mur.Unlock() + // Get new message if no active one. if w.reader == nil { var mt int @@ -410,26 +414,22 @@ func (w *WebsocketIO) Read(p []byte) (n int, err error) { return n, nil } -func (w *WebsocketIO) Write(p []byte) (n int, err error) { - w.mu.Lock() - defer w.mu.Unlock() - wr, err := w.Conn.NextWriter(websocket.BinaryMessage) +func (w *WebsocketIO) Write(p []byte) (int, error) { + w.muw.Lock() + defer w.muw.Unlock() + + err := w.Conn.WriteMessage(websocket.BinaryMessage, p) if err != nil { return -1, err } - n, err = wr.Write(p) - if err != nil { - return -1, err - } - - return n, wr.Close() + return len(p), nil } // Close sends a control message indicating the stream is finished, but it does not actually close the socket. func (w *WebsocketIO) Close() error { - w.mu.Lock() - defer w.mu.Unlock() + w.muw.Lock() + defer w.muw.Unlock() // Target expects to get a control message indicating stream is finished. return w.Conn.WriteMessage(websocket.TextMessage, []byte{}) } diff --git a/vendor/github.com/lxc/lxd/shared/simplestreams/simplestreams.go b/vendor/github.com/lxc/lxd/shared/simplestreams/simplestreams.go index d01d1f54..87889aeb 100644 --- a/vendor/github.com/lxc/lxd/shared/simplestreams/simplestreams.go +++ b/vendor/github.com/lxc/lxd/shared/simplestreams/simplestreams.go @@ -138,6 +138,10 @@ func (s *SimpleStreams) cachedDownload(path string) ([]byte, error) { return nil, err } + if len(body) == 0 { + return nil, fmt.Errorf("No content in download from %q", uri) + } + // Attempt to store in cache if s.cachePath != "" { cacheName := filepath.Join(s.cachePath, fileName) @@ -159,11 +163,13 @@ func (s *SimpleStreams) parseStream() (*Stream, error) { return nil, err } + pathURL, _ := shared.JoinUrls(s.url, path) + // Parse the idnex stream := Stream{} err = json.Unmarshal(body, &stream) if err != nil { - return nil, fmt.Errorf("Failed decoding stream JSON from %q: %w", path, err) + return nil, fmt.Errorf("Failed decoding stream JSON from %q: %w (%q)", pathURL, err, string(body)) } s.cachedStream = &stream diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go index 3dc8e978..45c81f02 100644 --- a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go +++ b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go @@ -88,15 +88,15 @@ func parseNumber(input []byte) number { neg = true s = s[1:] size++ - if len(s) == 0 { - return number{} - } // Consume any whitespace or comments between the // negative sign and the rest of the number lenBefore := len(s) s = consume(s, 0) sep = lenBefore - len(s) size += sep + if len(s) == 0 { + return number{} + } } switch { diff --git a/vendor/google.golang.org/protobuf/internal/version/version.go b/vendor/google.golang.org/protobuf/internal/version/version.go index f6e0119f..f7014cd5 100644 --- a/vendor/google.golang.org/protobuf/internal/version/version.go +++ b/vendor/google.golang.org/protobuf/internal/version/version.go @@ -51,7 +51,7 @@ import ( // 10. Send out the CL for review and submit it. const ( Major = 1 - Minor = 29 + Minor = 30 Patch = 0 PreRelease = "" ) diff --git a/vendor/modules.txt b/vendor/modules.txt index c42b6291..bd55d435 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -20,6 +20,8 @@ github.com/felixge/httpsnoop # github.com/flosch/pongo2 v0.0.0-20200913210552-0d938eb266f3 ## explicit; go 1.14 github.com/flosch/pongo2 +# github.com/frankban/quicktest v1.14.3 +## explicit; go 1.13 # github.com/go-macaroon-bakery/macaroon-bakery/v3 v3.0.1 ## explicit; go 1.17 github.com/go-macaroon-bakery/macaroon-bakery/v3/bakery @@ -82,6 +84,8 @@ github.com/juju/errors # github.com/juju/retry v1.0.0 ## explicit; go 1.17 github.com/juju/retry +# github.com/juju/testing v1.0.2 +## explicit; go 1.17 # github.com/juju/webbrowser v1.0.0 ## explicit; go 1.11 github.com/juju/webbrowser @@ -94,9 +98,9 @@ github.com/kballard/go-shellquote # github.com/kr/fs v0.1.0 ## explicit github.com/kr/fs -# github.com/kr/pretty v0.3.0 +# github.com/kr/pretty v0.3.1 ## explicit; go 1.12 -# github.com/lxc/lxd v0.0.0-20230310224854-36b345fbd578 +# github.com/lxc/lxd v0.0.0-20230325180147-8d608287b0ce ## explicit; go 1.18 github.com/lxc/lxd/client github.com/lxc/lxd/lxd/device/config @@ -118,7 +122,7 @@ github.com/lxc/lxd/shared/validate github.com/manifoldco/promptui github.com/manifoldco/promptui/list github.com/manifoldco/promptui/screenbuf -# github.com/mattn/go-isatty v0.0.17 +# github.com/mattn/go-isatty v0.0.18 ## explicit; go 1.15 github.com/mattn/go-isatty # github.com/mattn/go-runewidth v0.0.14 @@ -210,8 +214,6 @@ github.com/stretchr/testify/suite # github.com/teris-io/shortid v0.0.0-20220617161101-71ec9f2aa569 ## explicit; go 1.18 github.com/teris-io/shortid -# github.com/xdg-go/stringprep v1.0.3 -## explicit; go 1.11 # golang.org/x/crypto v0.7.0 ## explicit; go 1.17 golang.org/x/crypto/bcrypt @@ -265,7 +267,7 @@ google.golang.org/appengine/internal/log google.golang.org/appengine/internal/remote_api google.golang.org/appengine/internal/urlfetch google.golang.org/appengine/urlfetch -# google.golang.org/protobuf v1.29.0 +# google.golang.org/protobuf v1.30.0 ## explicit; go 1.11 google.golang.org/protobuf/encoding/prototext google.golang.org/protobuf/encoding/protowire