diff --git a/go.mod b/go.mod index c9ab8d64a..5b854ba3c 100644 --- a/go.mod +++ b/go.mod @@ -4,10 +4,11 @@ go 1.18 require ( github.com/Masterminds/semver/v3 v3.2.1 - github.com/aws/aws-sdk-go v1.44.95 + github.com/aws/aws-sdk-go v1.44.298 github.com/blang/semver/v4 v4.0.0 github.com/cloudfoundry/bosh-cli v6.4.1+incompatible - github.com/cloudfoundry/bosh-utils v0.0.0-20210130100352-ab14c90ad9f2 + github.com/cloudfoundry/bosh-cli/v7 v7.3.1 + github.com/cloudfoundry/bosh-utils v0.0.373 github.com/cppforlife/go-patch v0.2.0 github.com/crhntr/yamlutil v0.0.0-20230523004714-d7a84a7a5d64 github.com/cucumber/godog v0.12.5 @@ -22,44 +23,43 @@ require ( github.com/hashicorp/vault/api/auth/ldap v0.4.0 github.com/julienschmidt/httprouter v1.3.0 github.com/masterminds/sprig v2.22.0+incompatible - github.com/maxbrunsfeld/counterfeiter/v6 v6.5.0 + github.com/maxbrunsfeld/counterfeiter/v6 v6.6.2 github.com/migueleliasweb/go-github-mock v0.0.16 github.com/moby/buildkit v0.11.2 - github.com/onsi/ginkgo v1.16.4 - github.com/onsi/gomega v1.18.1 + github.com/onsi/ginkgo v1.16.5 + github.com/onsi/gomega v1.27.8 github.com/opencontainers/image-spec v1.0.3-0.20220303224323-02efb9a75ee1 github.com/pivotal-cf-experimental/gomegamatchers v0.0.0-20180326192815-e36bfcc98c3a github.com/pivotal-cf/go-pivnet/v2 v2.0.11 github.com/pivotal-cf/jhanda v0.0.0-20200619200912-8de8eb943a43 github.com/pivotal-cf/om v0.0.0-20211027143906-30b10602e528 - github.com/stretchr/testify v1.8.2 - golang.org/x/crypto v0.7.0 - golang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2 - golang.org/x/oauth2 v0.6.0 - golang.org/x/sync v0.1.0 - golang.org/x/term v0.6.0 + github.com/stretchr/testify v1.8.4 + golang.org/x/crypto v0.11.0 + golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df + golang.org/x/oauth2 v0.10.0 + golang.org/x/sync v0.3.0 + golang.org/x/term v0.10.0 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 ) require ( - cloud.google.com/go/compute v1.6.1 // indirect - code.cloudfoundry.org/tlsconfig v0.0.0-20200131000646-bbe0f8da39b3 // indirect + code.cloudfoundry.org/tlsconfig v0.0.0-20230612153104-23c0622de227 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver v1.5.0 // indirect github.com/Microsoft/go-winio v0.5.2 // indirect github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 // indirect github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect - github.com/VividCortex/ewma v1.1.1 // indirect + github.com/VividCortex/ewma v1.2.0 // indirect github.com/acomagu/bufpipe v1.0.3 // indirect github.com/bmatcuk/doublestar v1.3.4 // indirect github.com/cenkalti/backoff/v3 v3.2.2 // indirect - github.com/charlievieth/fs v0.0.1 // indirect - github.com/cheggaaa/pb/v3 v3.0.8 // indirect + github.com/charlievieth/fs v0.0.3 // indirect + github.com/cheggaaa/pb/v3 v3.1.2 // indirect github.com/cloudflare/circl v1.1.0 // indirect github.com/cloudfoundry-community/go-uaa v0.3.1 // indirect github.com/cloudfoundry/go-socks5 v0.0.0-20180221174514-54f73bdb8a8e // indirect - github.com/cloudfoundry/socks5-proxy v0.2.0 // indirect + github.com/cloudfoundry/socks5-proxy v0.2.94 // indirect github.com/containerd/containerd v1.6.18 // indirect github.com/containerd/typeurl v1.0.2 // indirect github.com/cppforlife/go-semi-semantic v0.0.0-20160921010311-576b6af77ae4 // indirect @@ -69,17 +69,18 @@ require ( github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/emirpasic/gods v1.12.0 // indirect - github.com/fatih/color v1.13.0 // indirect - github.com/fsnotify/fsnotify v1.4.9 // indirect + github.com/fatih/color v1.15.0 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-git/gcfg v1.5.0 // indirect - github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/logr v1.2.4 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-test/deep v1.0.8 // indirect github.com/gofrs/uuid v4.0.0+incompatible // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/google/go-cmp v0.5.9 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/uuid v1.3.0 // indirect github.com/gorilla/mux v1.8.0 // indirect @@ -105,10 +106,9 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect github.com/kevinburke/ssh_config v1.1.0 // indirect - github.com/kr/pretty v0.3.0 // indirect - github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mattn/go-isatty v0.0.14 // indirect - github.com/mattn/go-runewidth v0.0.12 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mattn/go-runewidth v0.0.14 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect @@ -120,27 +120,27 @@ require ( github.com/pivotal-cf/paraphernalia v0.0.0-20180203224945-a64ae2051c20 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/rivo/uniseg v0.2.0 // indirect + github.com/rivo/uniseg v0.4.4 // indirect github.com/rogpeppe/go-internal v1.8.1 // indirect github.com/ryanuber/go-glob v1.0.0 // indirect github.com/sergi/go-diff v1.2.0 // indirect github.com/shirou/gopsutil v3.21.1+incompatible // indirect - github.com/sirupsen/logrus v1.9.0 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/xanzy/ssh-agent v0.3.1 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.29.0 // indirect go.opentelemetry.io/otel v1.4.1 // indirect go.opentelemetry.io/otel/trace v1.4.1 // indirect - golang.org/x/mod v0.8.0 // indirect - golang.org/x/net v0.8.0 // indirect - golang.org/x/sys v0.6.0 // indirect - golang.org/x/text v0.8.0 // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/net v0.12.0 // indirect + golang.org/x/sys v0.10.0 // indirect + golang.org/x/text v0.11.0 // indirect golang.org/x/time v0.1.0 // indirect - golang.org/x/tools v0.6.0 // indirect + golang.org/x/tools v0.11.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20220706185917-7780775163c4 // indirect - google.golang.org/grpc v1.50.1 // indirect - google.golang.org/protobuf v1.28.1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130 // indirect + google.golang.org/grpc v1.56.2 // indirect + google.golang.org/protobuf v1.31.0 // indirect gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect gopkg.in/square/go-jose.v2 v2.6.0 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect diff --git a/go.sum b/go.sum index dad0777b1..45b1f9d14 100644 --- a/go.sum +++ b/go.sum @@ -15,30 +15,15 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= -cloud.google.com/go/compute v1.6.1 h1:2sMmt8prCn7DPaG4Pmh0N3Inmc8cT8ae5k1M6VJ9Wqc= -cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= @@ -52,14 +37,16 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= code.cloudfoundry.org/archiver v0.0.0-20200131002800-4ca7245c29b1/go.mod h1:EU/KcUvh4qBVN6ffu/b8t9x7SurDot+AO0HqEZ+9QOg= -code.cloudfoundry.org/clock v1.0.0 h1:kFXWQM4bxYvdBw2X8BbBeXwQNgfoWv1vqAk2ZZyBN2o= code.cloudfoundry.org/clock v1.0.0/go.mod h1:QD9Lzhd/ux6eNQVUDVRJX/RKTigpewimNYBi7ivZKY8= +code.cloudfoundry.org/clock v1.1.0 h1:XLzC6W3Ah/Y7ht1rmZ6+QfPdt1iGWEAAtIZXgiaj57c= code.cloudfoundry.org/credhub-cli v0.0.0-20201102140135-1a6b82ad1f99/go.mod h1:Zr68D62cO26cps/R/4q8qtKwsNdH+cOwvNDcYimSXJM= code.cloudfoundry.org/hydrator v0.0.0-20191120195058-919ca7133daa/go.mod h1:ZxzdUuTsl614pKwLbdmrpwj5jw6flyB7+s6WhkMPmB8= -code.cloudfoundry.org/tlsconfig v0.0.0-20200131000646-bbe0f8da39b3 h1:2Qal+q+tw/DmDOoJBWwDCPE3lIJNj/1o7oMkkb2c5SI= code.cloudfoundry.org/tlsconfig v0.0.0-20200131000646-bbe0f8da39b3/go.mod h1:eTbFJpyXRGuFVyg5+oaj9B2eIbIc+0/kZjH8ftbtdew= +code.cloudfoundry.org/tlsconfig v0.0.0-20230612153104-23c0622de227 h1:QYyb6Ur0Ys6FciDB3+8zCW3eVk7AxAs2++Foa5DAdt0= +code.cloudfoundry.org/tlsconfig v0.0.0-20230612153104-23c0622de227/go.mod h1:C8SxvGRSutmgzV2FxH8Zwqz2Q8HsaAITQRQFKhlDzPw= code.cloudfoundry.org/workpool v0.0.0-20200131000409-2ac56b354115/go.mod h1:O9HdfntfyDvYRH9nh03XdpnGMbjyZVi8nb2Kh+6hDho= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= github.com/Azure/azure-sdk-for-go v32.5.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v49.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= @@ -104,8 +91,9 @@ github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0g github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/VividCortex/ewma v1.1.1 h1:MnEK4VOv6n0RSY4vtRe3h11qjxL3+t0B8yOL8iMXdcM= github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA= +github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow= +github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -120,8 +108,8 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/aws/aws-sdk-go v1.23.4/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.36.19/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/aws/aws-sdk-go v1.44.95 h1:QwmA+PeR6v4pF0f/dPHVPWGAshAhb9TnGZBTM5uKuI8= -github.com/aws/aws-sdk-go v1.44.95/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.298 h1:5qTxdubgV7PptZJmp/2qDwD2JL187ePL7VOxsSh1i3g= +github.com/aws/aws-sdk-go v1.44.298/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= @@ -140,13 +128,14 @@ github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4r github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/charlievieth/fs v0.0.1 h1:sJqnp1RWguMAojHpyCbZ2KyXNp2ihxGIFPUNb8XDGu8= github.com/charlievieth/fs v0.0.1/go.mod h1:74vroF06jvR8XMafvi2CYzs8WruHL1axh/qFx7XN5Xw= +github.com/charlievieth/fs v0.0.3 h1:3lZQXTj4PbE81CVPwALSn+JoyCNXkZgORHN6h2XHGlg= +github.com/charlievieth/fs v0.0.3/go.mod h1:hD4sRzto1Hw8zCua76tNVKZxaeZZr1RiKftjAJQRLLo= github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= github.com/cheggaaa/pb v1.0.28/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/cheggaaa/pb/v3 v3.0.5/go.mod h1:X1L61/+36nz9bjIsrDU52qHKOQukUQe2Ge+YvGuquCw= -github.com/cheggaaa/pb/v3 v3.0.8 h1:bC8oemdChbke2FHIIGy9mn4DPJ2caZYQnfbRqwmdCoA= -github.com/cheggaaa/pb/v3 v3.0.8/go.mod h1:UICbiLec/XO6Hw6k+BHEtHeQFzzBH4i2/qk/ow1EJTA= +github.com/cheggaaa/pb/v3 v3.1.2 h1:FIxT3ZjOj9XJl0U4o2XbEhjFfZl7jCVCDOGq1ZAB7wQ= +github.com/cheggaaa/pb/v3 v3.1.2/go.mod h1:SNjnd0yKcW+kw0brSusraeDd5Bf1zBfxAzTL2ss3yQ4= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -158,27 +147,33 @@ github.com/cloudfoundry-community/go-uaa v0.3.1/go.mod h1:m3JOryy7cx+7QLxuwB+bXu github.com/cloudfoundry/bosh-agent v2.340.0+incompatible/go.mod h1:7UvVn5vc/d6icLrBx6GhBlpSMwe2+x1C2A7x4TbPhiU= github.com/cloudfoundry/bosh-cli v6.4.1+incompatible h1:n5/+NIF9QxvGINOrjh6DmO+GTen78MoCj5+LU9L8bR4= github.com/cloudfoundry/bosh-cli v6.4.1+incompatible/go.mod h1:rzIB+e1sn7wQL/TJ54bl/FemPKRhXby5BIMS3tLuWFM= +github.com/cloudfoundry/bosh-cli/v7 v7.3.1 h1:Uf2shJ/QPGeLCCRIT2wCA9yM7yv7OlozKYftDtOYlOY= +github.com/cloudfoundry/bosh-cli/v7 v7.3.1/go.mod h1:C6YH4jEdp9UczL9OfXGr51+iYhybzibDcjWOQNjhuto= github.com/cloudfoundry/bosh-davcli v0.0.44/go.mod h1:WERSlcwbbm6fF7GJfz421BeAduzbD6JlDF7NCpYTXUE= github.com/cloudfoundry/bosh-gcscli v0.0.6/go.mod h1:bsE5hLIzG74rkZNp+LozbIZrBeVtpiONNb/UAJ7ivlE= github.com/cloudfoundry/bosh-s3cli v0.0.95/go.mod h1:9qqPbgWJ4aXpo5It8RGpafc7S3/v+T//HLRjynVD4/8= github.com/cloudfoundry/bosh-utils v0.0.0-20201031100303-c96f4f0a552e/go.mod h1:JCrKwetZGjxbfq1U139TZuXDBfdGLtjOEAfxMWKV/QM= github.com/cloudfoundry/bosh-utils v0.0.0-20210102100234-ed8dcddc80c2/go.mod h1:JCrKwetZGjxbfq1U139TZuXDBfdGLtjOEAfxMWKV/QM= -github.com/cloudfoundry/bosh-utils v0.0.0-20210130100352-ab14c90ad9f2 h1:aLkBRK9QKAVtFZPqY+N/ZogVszS4aAL/FXvhdJRmK9k= -github.com/cloudfoundry/bosh-utils v0.0.0-20210130100352-ab14c90ad9f2/go.mod h1:JCrKwetZGjxbfq1U139TZuXDBfdGLtjOEAfxMWKV/QM= +github.com/cloudfoundry/bosh-utils v0.0.369 h1:iVw/A07a/hkyPYQ4NGiZCTUGFhOqaP/5+PuTVerrMHE= +github.com/cloudfoundry/bosh-utils v0.0.369/go.mod h1:rv+PVeycRL/JnyVgIT6JRkvxy3KbQUCQ//8y9AJUGLk= +github.com/cloudfoundry/bosh-utils v0.0.373 h1:Qp9gInFsyBeZRnnjWgBm9kqTMcw6W8XSHV9MT85ZeN0= +github.com/cloudfoundry/bosh-utils v0.0.373/go.mod h1:67n5J3/Iq53LCvubJ4sX5BwdtMWnFcs52djGlEtvv74= github.com/cloudfoundry/config-server v0.1.21/go.mod h1:Y3b/MHqyp22CcG0X1qvEHG8lujoebxjD9IAslyS/Yk0= github.com/cloudfoundry/go-socks5 v0.0.0-20180221174514-54f73bdb8a8e h1:FQdRViaoDphGRfgrotl2QGsX1gbloe57dbGBS5CG6KY= github.com/cloudfoundry/go-socks5 v0.0.0-20180221174514-54f73bdb8a8e/go.mod h1:PXmcacyJB/pJjSxEl15IU6rEIKXrhZQRzsr0UTkgNNs= -github.com/cloudfoundry/socks5-proxy v0.2.0 h1:ZRXcJxUqOyKmah+ytXh52K7m7S7SyuBacDUnd2g0ihU= github.com/cloudfoundry/socks5-proxy v0.2.0/go.mod h1:0a+Ghg38uB86Dx+de84dFSkILTnBHzCpFMRnjHgSzi4= +github.com/cloudfoundry/socks5-proxy v0.2.93 h1:41/75yjN0iRDWJ2roCv/Z4mh1SXVFJNWl48XgAAU4PE= +github.com/cloudfoundry/socks5-proxy v0.2.93/go.mod h1:Oi6r95E3xayW6QFZYsasnPxuo2ySkr5cYWgpBzapdlw= +github.com/cloudfoundry/socks5-proxy v0.2.94 h1:QxoVf8Ar3hydo6kuFJv9EW4q2hc+kLCzC81hdnd/was= +github.com/cloudfoundry/socks5-proxy v0.2.94/go.mod h1:Oi6r95E3xayW6QFZYsasnPxuo2ySkr5cYWgpBzapdlw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k= github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= github.com/containerd/containerd v1.6.18 h1:qZbsLvmyu+Vlty0/Ex5xc0z2YtKpIsb5n45mAMI+2Ns= github.com/containerd/containerd v1.6.18/go.mod h1:1RdCUu95+gc2v9t3IL+zIlpClSmew7/0YS8O5eQZrOw= @@ -234,22 +229,22 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.10.1 h1:c0g45+xCJhdgFGw7a5QAfdS4byAbud7miNWJ1WwEVf8= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/frankban/quicktest v1.11.2/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 h1:Mn26/9ZMNWSw9C9ERFA1PUxfmGpolnw2v0bKOREu5ew= github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= @@ -274,8 +269,8 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v0.0.0-20180625085808-7a0fa49edf48/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= @@ -286,6 +281,7 @@ github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTM github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= @@ -310,8 +306,6 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -327,11 +321,10 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -342,7 +335,6 @@ github.com/google/go-cmp v0.4.1/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.1/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.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/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.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -359,7 +351,6 @@ github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -369,12 +360,7 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20230705174524-200ffdc848b8 h1:n6vlPhxsA+BW/XsS5+uqi7GyzaLa5MH7qlSLBZtRdiA= github.com/google/readahead v0.0.0-20161222183148-eaceba169032/go.mod h1:qYysrqQXuV4tzsizt4oOQ6mrBZQ0xnQXP3ylXX8Jk5Y= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= @@ -384,10 +370,6 @@ github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= @@ -511,7 +493,6 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/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/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= @@ -528,26 +509,29 @@ github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.12 h1:Y41i/hVW3Pgwr8gV+J23B9YEY0zxjptBuCWEaxmAOow= -github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= +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= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= -github.com/maxbrunsfeld/counterfeiter/v6 v6.5.0 h1:rBhB9Rls+yb8kA4x5a/cWxOufWfXt24E+kq4YlbGj3g= -github.com/maxbrunsfeld/counterfeiter/v6 v6.5.0/go.mod h1:fJ0UAZc1fx3xZhU4eSHQDJ1ApFmTVhp5VTpV9tm2ogg= +github.com/maxbrunsfeld/counterfeiter/v6 v6.6.2 h1:CEy7VRV/Vbm7YLuZo3pGKa5GlPX4zzric6dEubIJTx0= +github.com/maxbrunsfeld/counterfeiter/v6 v6.6.2/go.mod h1:otjOyjeqm3LALYcmX2AQIGH0VlojDoSd8aGOzsHAnBc= github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/migueleliasweb/go-github-mock v0.0.16 h1:iEx6iqYASRJVoEO5eMOYpQZFTc00cZ6ysynOArUKM3A= @@ -595,10 +579,9 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo/v2 v2.0.0 h1:CcuG/HvWNkkaqCUpJifQY8z7qEMBJya6aLPx6ftGyjQ= -github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= github.com/onsi/gomega v1.4.0/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= @@ -608,9 +591,8 @@ github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoT github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= github.com/onsi/gomega v1.10.4/go.mod h1:g/HbgYopi++010VEqkFgJHKC09uJiW9UkXvMUuKHUCQ= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= +github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= +github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= @@ -656,14 +638,13 @@ github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= +github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robdimsdale/sanitizer v0.0.0-20160522134901-ab2334cb7539/go.mod h1:tqCODtkKV+9Tfvt9JURvKCTxJ69bA/OU/QhsaQLK/rc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= @@ -692,8 +673,8 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= @@ -708,11 +689,10 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/square/certstrap v1.2.0 h1:ecgyABrbFLr8jSbOC6oTBmBek0t/HqtgrMUZCPuyfdw= github.com/square/certstrap v1.2.0/go.mod h1:CUHqV+fxJW0Y5UQFnnbYwQ7bpKXO1AKbic9g73799yw= +github.com/square/certstrap v1.3.0 h1:N9P0ZRA+DjT8pq5fGDj0z3FjafRKnBDypP0QHpMlaAk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -720,11 +700,9 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tonistiigi/fsutil v0.0.0-20230105215944-fb433841cbfa h1:XOFp/3aBXlqmOFAg3r6e0qQjPnK5I970LilqX+Is1W8= @@ -747,7 +725,6 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -756,7 +733,6 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.29.0 h1:n9b7AAdbQtQ0k9dm0Dm2/KUcUqtG8i2O15KzNaDze8c= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.29.0/go.mod h1:LsankqVDx4W+RhZNA5uWarULII/MBhF5qwCYxTuyXjs= go.opentelemetry.io/otel v1.4.0/go.mod h1:jeAqMFKy2uLIxCtKxoFj0FAL5zAPKQagc3+GtBWakzk= @@ -769,6 +745,7 @@ go.opentelemetry.io/otel/trace v1.4.1 h1:O+16qcdTrT7zxv2J6GejTPFinSwA++cYerC5iSi go.opentelemetry.io/otel/trace v1.4.1/go.mod h1:iYEVbroFCNut9QkwEczV9vMRPHNKSSwYZjulEtsmhFc= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.12.0 h1:CMJ/3Wp7iOWES+CYLfnBv+DVmPbB+kmy9PJ92XvlR6c= +go.step.sm/crypto v0.16.2 h1:Pr9aazTwWBBZNogUsOqhOrPSdwAa9pPs+lMB602lnDA= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -792,8 +769,8 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -804,8 +781,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2 h1:Jvc7gsqn21cJHCmAWx0LiimpP18LZmUxkT5Mp7EZ1mI= -golang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df h1:UA2aFVmmsIlefxMk29Dp2juaUSth8Pyn3Tq5Y5mJGME= +golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -819,7 +796,6 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -829,11 +805,9 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180712202826-d0887baf81f4/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -877,21 +851,13 @@ golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -900,19 +866,8 @@ golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw= -golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= +golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= +golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -923,10 +878,9 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180709060233-1b2967e3c290/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -979,63 +933,45 @@ golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201231184435-2d18734c6014/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/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-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.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= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= -golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/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.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -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.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1092,22 +1028,15 @@ golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.11.0 h1:EMCa6U9S2LtZXLAMoWiR/R8dAQFRqbAitmbJ2UKhoi8= +golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1126,24 +1055,6 @@ google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSr google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1188,44 +1099,10 @@ google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220706185917-7780775163c4 h1:7YDGQC/0sigNGzsEWyb9s72jTxlFdwVEYNJHbfQ+Dtg= -google.golang.org/genproto v0.0.0-20220706185917-7780775163c4/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= +google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130 h1:XVeBY8d/FaK4848myy41HBqnDwvxeV3zMZhwN1TvAMU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130 h1:2FZP5XuJY9zQyGM5N0rtovnoXjiMUEIUMvw0m9wlpLc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:8mL13HKkDa+IuJ8yruA3ci0q+0vsUz4m//+ottjwS5o= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1242,22 +1119,10 @@ google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY= -google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/grpc v1.56.2 h1:fVRFRnXvU+x6C4IlHZewvJOVHoOv1TUuQyoRsYnB4bI= +google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1270,10 +1135,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj 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.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/internal/commands/compile_bosh_release_tarballs.go b/internal/commands/compile_bosh_release_tarballs.go new file mode 100644 index 000000000..553488080 --- /dev/null +++ b/internal/commands/compile_bosh_release_tarballs.go @@ -0,0 +1,126 @@ +package commands + +import ( + "context" + "errors" + "fmt" + "log" + "os" + "path/filepath" + + "golang.org/x/exp/slices" + + "github.com/cloudfoundry/bosh-cli/v7/director" + "github.com/pivotal-cf/jhanda" + "github.com/pivotal-cf/kiln/pkg/cargo" + "github.com/pivotal-cf/kiln/pkg/directorclient" +) + +//counterfeiter:generate -o ./fakes/bosh_director.go --fake-name BOSHDirector github.com/cloudfoundry/bosh-cli/v7/director.Director +type CompileBOSHReleaseTarballsFunc func(_ context.Context, logger *log.Logger, boshDirector director.Director, sc cargo.Stemcell, uploadTries int, tarballs ...cargo.BOSHReleaseTarball) ([]cargo.BOSHReleaseTarball, error) + +//counterfeiter:generate -o ./fakes/compile_bosh_release_tarballs.go --fake-name CompileBOSHReleaseTarballsFunc . CompileBOSHReleaseTarballsFunc + +type NewDirectorFunc func(configuration directorclient.Configuration) (director.Director, error) + +type CompileBOSHReleaseTarballs struct { + Options struct { + Kilnfile string `long:"kilnfile" default:"Kilnfile" description:"path to Kilnfile"` + ReleaseDirectory string `long:"releases-directory" default:"releases" description:"path to a directory containing release tarballs"` + + // UploadTargetID string `long:"upload-target-id" description:"the ID of the release source where the built release will be uploaded"` + + directorclient.Configuration + } + CompileBOSHReleaseTarballsFunc + NewDirectorFunc + Logger *log.Logger +} + +func NewCompileBOSHReleaseTarballs() *CompileBOSHReleaseTarballs { + return &CompileBOSHReleaseTarballs{ + CompileBOSHReleaseTarballsFunc: cargo.CompileBOSHReleaseTarballs, + NewDirectorFunc: directorclient.New, + Logger: log.Default(), + } +} + +func (cmd *CompileBOSHReleaseTarballs) Execute(args []string) error { + if _, err := jhanda.Parse(&cmd.Options, args); err != nil { + return err + } + stemcellSpec, releaseTarballPaths, err := loadCompileBOSHReleasesParameters(cmd.Options.Kilnfile, cmd.Options.ReleaseDirectory) + if err != nil { + return err + } + + if err := cmd.Options.Configuration.SetFieldsFromEnvironment(); err != nil { + return err + } + boshDirector, err := cmd.NewDirectorFunc(cmd.Options.Configuration) + if err != nil { + return err + } + + info, err := boshDirector.Info() + if err != nil { + return err + } + cmd.Logger.Println("BOSH Director info: ", info.Name, info.Version, info.CPI, info.UUID) + + boshReleaseTarballs := make([]cargo.BOSHReleaseTarball, 0, len(releaseTarballPaths)) + for _, p := range releaseTarballPaths { + t, err := cargo.ReadBOSHReleaseTarball(p) + if err != nil { + return err + } + if len(t.Manifest.CompiledPackages) == 0 { + boshReleaseTarballs = append(boshReleaseTarballs, t) + } + } + + compiledTarballs, err := cmd.CompileBOSHReleaseTarballsFunc(context.Background(), log.Default(), boshDirector, stemcellSpec, 5, boshReleaseTarballs...) + if err != nil { + return err + } + + for _, compiled := range compiledTarballs { + unCompiledIndex := slices.IndexFunc(boshReleaseTarballs, func(releaseTarball cargo.BOSHReleaseTarball) bool { + return releaseTarball.Manifest.Name == compiled.Manifest.Name && + releaseTarball.Manifest.Version == compiled.Manifest.Version + }) + if unCompiledIndex < 0 { + continue + } + _ = os.Remove(boshReleaseTarballs[unCompiledIndex].FilePath) + } + + return nil +} + +func (cmd *CompileBOSHReleaseTarballs) Usage() jhanda.Usage { + return jhanda.Usage{ + ShortDescription: "compile bosh releases with a bosh director", + Description: "upload bosh release tarballs to a bosh director, compile the packages against the stemcell from the stemcell lock, and download the compiled tarballs", + Flags: cmd.Options, + } +} + +func loadCompileBOSHReleasesParameters(kilnfilePath, releasesDirectory string) (stemcell cargo.Stemcell, releaseTarballPaths []string, err error) { + releaseTarballPaths, err = filepath.Glob(filepath.Join(releasesDirectory, "*.tgz")) + if len(releaseTarballPaths) == 0 { + err = errors.Join(fmt.Errorf("no BOSH release tarballs found"), err) + } + if err != nil { + return + } + + var kilnfileLock cargo.KilnfileLock + kilnfileLock, err = cargo.ReadKilnfileLock(kilnfilePath) + if err != nil { + return + } + stemcell = kilnfileLock.Stemcell + + return +} diff --git a/internal/commands/compile_bosh_release_tarballs_internal_test.go b/internal/commands/compile_bosh_release_tarballs_internal_test.go new file mode 100644 index 000000000..e4b0fe632 --- /dev/null +++ b/internal/commands/compile_bosh_release_tarballs_internal_test.go @@ -0,0 +1,87 @@ +package commands + +import ( + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/pivotal-cf/kiln/pkg/cargo" +) + +func Test_loadCompileBOSHReleasesParameters(t *testing.T) { + const lockContents = `{"stemcell_criteria": {"os": "peach", "version": "4.5"}}` + + t.Run("when the directory is empty and default flags are passed", func(t *testing.T) { + chTempDir(t) + + rd := "releases" + kf := "Kilnfile" + + _, _, err := loadCompileBOSHReleasesParameters(kf, rd) + require.Error(t, err) + }) + + t.Run("when the it finds releases and the stemcell", func(t *testing.T) { + chTempDir(t) + + rd := "releases" + require.NoError(t, os.MkdirAll(rd, 0o700)) + require.NoError(t, os.WriteFile(filepath.Join(rd, "pear.tgz"), []byte("contents"), 0o600)) + kf := "Kilnfile" + require.NoError(t, os.WriteFile(kf+".lock", []byte(lockContents), 0o600)) + + sc, releases, err := loadCompileBOSHReleasesParameters(kf, rd) + require.NoError(t, err) + + assert.Equal(t, cargo.Stemcell{ + OS: "peach", + Version: "4.5", + }, sc) + + assert.Equal(t, []string{filepath.Join("releases", "pear.tgz")}, releases) + }) + + t.Run("when no releases exist", func(t *testing.T) { + chTempDir(t) + + rd := "releases" + require.NoError(t, os.MkdirAll(rd, 0o700)) + kf := "Kilnfile" + require.NoError(t, os.WriteFile(kf+".lock", []byte(lockContents), 0o600)) + + _, _, err := loadCompileBOSHReleasesParameters(kf, rd) + require.ErrorContains(t, err, "no BOSH release tarballs found") + }) + + t.Run("when no Kilnfile lock exists", func(t *testing.T) { + chTempDir(t) + + rd := "releases" + require.NoError(t, os.MkdirAll(rd, 0o700)) + require.NoError(t, os.WriteFile(filepath.Join(rd, "pear.tgz"), []byte("contents"), 0o600)) + kf := "Kilnfile" + require.NoError(t, os.WriteFile(kf, []byte(lockContents), 0o600)) + + _, _, err := loadCompileBOSHReleasesParameters(kf, rd) + require.ErrorContains(t, err, "failed to read Kilnfile.lock") + }) +} + +func chTempDir(t *testing.T) { + dir := t.TempDir() + wd, err := os.Getwd() + if err != nil { + t.Fatalf("chdir %s: %v", dir, err) + } + if err := os.Chdir(dir); err != nil { + t.Fatal(err) + } + t.Cleanup(func() { + if err := os.Chdir(wd); err != nil { + t.Fatalf("restoring working directory: %v", err) + } + }) +} diff --git a/internal/commands/compile_bosh_release_tarballs_test.go b/internal/commands/compile_bosh_release_tarballs_test.go new file mode 100644 index 000000000..92461a7c8 --- /dev/null +++ b/internal/commands/compile_bosh_release_tarballs_test.go @@ -0,0 +1,248 @@ +package commands_test + +import ( + "bytes" + "context" + "io" + "log" + "os" + "path/filepath" + + "github.com/pivotal-cf/kiln/pkg/cargo" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "github.com/cloudfoundry/bosh-cli/v7/director" + "github.com/pivotal-cf/kiln/pkg/directorclient" + + "github.com/pivotal-cf/jhanda" + "github.com/pivotal-cf/kiln/internal/commands" + "github.com/pivotal-cf/kiln/internal/commands/fakes" +) + +var _ = Describe("compile-bosh-release-tarballs", func() { + var ( + cmd commands.CompileBOSHReleaseTarballs + fakeCompileFunc *fakes.CompileBOSHReleaseTarballsFunc + logOutput bytes.Buffer + newBOSHDirector func(configuration directorclient.Configuration) (director.Director, error) + fakeBOSHDirector *fakes.BOSHDirector + ) + BeforeEach(func() { + cmd = commands.CompileBOSHReleaseTarballs{} + fakeCompileFunc = new(fakes.CompileBOSHReleaseTarballsFunc) + fakeBOSHDirector = new(fakes.BOSHDirector) + newBOSHDirector = func(directorclient.Configuration) (director.Director, error) { + return fakeBOSHDirector, nil + } + }) + AfterEach(func() { + logOutput.Reset() + + fakeCompileFunc = nil + fakeBOSHDirector = nil + newBOSHDirector = nil + }) + JustBeforeEach(func() { + cmd.CompileBOSHReleaseTarballsFunc = fakeCompileFunc.Spy + cmd.Logger = log.New(&logOutput, "", 0) + cmd.NewDirectorFunc = newBOSHDirector + }) + + When("a BOSH release tarball with compiled tarballs", func() { + It("passes the releases in the releases directory to the compile func", func() { + dir, err := os.MkdirTemp("", "") + Expect(err).NotTo(HaveOccurred()) + + rd := filepath.Join(dir, "releases") + err = os.MkdirAll(rd, 0o700) + Expect(err).NotTo(HaveOccurred()) + testdataCompiledReleaseTarballPath := filepath.Join("testdata", "compile_bosh_release_tarballs", "bpm-1.1.21-ubuntu-xenial-621.463.tgz") + err = copyFile(filepath.Join(rd, filepath.Base(testdataCompiledReleaseTarballPath)), testdataCompiledReleaseTarballPath) + Expect(err).NotTo(HaveOccurred()) + kf := filepath.Join(dir, "Kilnfile") + err = os.WriteFile(kf+".lock", []byte(`{"stemcell_criteria": {"os": "peach", "version": "4.5"}}`), 0o600) + Expect(err).NotTo(HaveOccurred()) + + fakeBOSHDirector.InfoReturns(director.Info{}, nil) + + err = cmd.Execute([]string{"--releases-directory=" + rd, "--kilnfile=" + kf}) + Expect(err).NotTo(HaveOccurred()) + + Expect(fakeCompileFunc.CallCount()).To(Equal(1)) + Expect(fakeCompileFunc.CallCount()).To(Equal(1)) + + _, _, _, _, _, toCompile := fakeCompileFunc.ArgsForCall(0) + Expect(toCompile).To(HaveLen(0)) + }) + }) + + When("a BOSH release tarball without compiled tarballs", func() { + It("passes the releases in the releases directory to the compile func", func() { + dir, err := os.MkdirTemp("", "") + Expect(err).NotTo(HaveOccurred()) + + rd := filepath.Join(dir, "releases") + err = os.MkdirAll(rd, 0o700) + Expect(err).NotTo(HaveOccurred()) + testdataReleasePath := filepath.Join("testdata", "compile_bosh_release_tarballs", "bpm-1.1.21.tgz") + err = copyFile(filepath.Join(rd, filepath.Base("bpm-1.1.21.tgz")), testdataReleasePath) + Expect(err).NotTo(HaveOccurred()) + kf := filepath.Join(dir, "Kilnfile") + err = os.WriteFile(kf+".lock", []byte(`{"stemcell_criteria": {"os": "peach", "version": "4.5"}}`), 0o600) + Expect(err).NotTo(HaveOccurred()) + + fakeBOSHDirector.InfoReturns(director.Info{}, nil) + fakeCompileFunc.Stub = func(ctx context.Context, logger *log.Logger, d director.Director, stemcell cargo.Stemcell, i int, tarball ...cargo.BOSHReleaseTarball) ([]cargo.BOSHReleaseTarball, error) { + compiledTarballPath := filepath.Join("testdata", "compile_bosh_release_tarballs", "bpm-1.1.21-ubuntu-xenial-621.463.tgz") + err := copyFile(filepath.Join(rd, filepath.Base(compiledTarballPath)), compiledTarballPath) + if err != nil { + panic(err) + } + t, err := cargo.ReadBOSHReleaseTarball(compiledTarballPath) + if err != nil { + panic(err) + } + return []cargo.BOSHReleaseTarball{t}, nil + } + + err = cmd.Execute([]string{"--releases-directory=" + rd, "--kilnfile=" + kf}) + Expect(err).NotTo(HaveOccurred()) + + Expect(fakeCompileFunc.CallCount()).To(Equal(1)) + Expect(fakeCompileFunc.CallCount()).To(Equal(1)) + + _, _, _, _, _, toCompile := fakeCompileFunc.ArgsForCall(0) + Expect(toCompile).To(HaveLen(1)) + + lock, err := cargo.ReadKilnfileLock(kf) + Expect(err).NotTo(HaveOccurred()) + Expect(lock.Releases).To(Equal([]cargo.BOSHReleaseTarballLock{ + { + Name: "bpm", + Version: "1.1.21", + SHA1: "d260e4a628087f030dbc4d66bd6f688ec979b5bb", + StemcellVersion: "621.463", + StemcellOS: "ubuntu-xenial", + }, + })) + }) + }) + + Describe("NewCompileBOSHReleaseTarballs", func() { + It("sets required fields", func() { + cmd := commands.NewCompileBOSHReleaseTarballs() + Expect(cmd).NotTo(BeNil()) + Expect(cmd.CompileBOSHReleaseTarballsFunc).NotTo(BeNil()) + Expect(cmd.Logger).NotTo(BeNil()) + }) + }) + + Describe("Usage", func() { + When("Printed", func() { + It("prints helpful output", func() { + usage := cmd.Usage() + out, err := jhanda.PrintUsage(usage.Flags) + Expect(err).NotTo(HaveOccurred()) + + Expect(out).To(ContainSubstring("BOSH_ENVIRONMENT")) + Expect(out).To(ContainSubstring("BOSH_ENV_NAME")) + Expect(out).To(ContainSubstring("BOSH_ALL_PROXY")) + Expect(out).To(ContainSubstring("BOSH_CLIENT")) + Expect(out).To(ContainSubstring("BOSH_CLIENT_SECRET")) + Expect(out).To(ContainSubstring("BOSH_CA_CERT")) + + Expect(out).To(ContainSubstring("kilnfile")) + Expect(out).To(ContainSubstring("releases-directory")) + }) + }) + + When("Long Help", func() { + It("prints helpful output", func() { + usage := cmd.Usage() + Expect(usage.Description).NotTo(BeEmpty()) + }) + }) + + When("Short Help", func() { + It("prints helpful output", func() { + usage := cmd.Usage() + Expect(usage.ShortDescription).NotTo(BeEmpty()) + }) + }) + }) +}) + +func copyFile(dst, src string) error { + srcFile, err := os.Open(src) + if err != nil { + return err + } + defer closeAndIgnoreError(srcFile) + if err := os.MkdirAll(filepath.Dir(dst), 0o700); err != nil { + return err + } + dstFile, err := os.Create(dst) + if err != nil { + return err + } + defer closeAndIgnoreError(dstFile) + _, err = io.Copy(dstFile, srcFile) + return err +} + +/* +{ + FilePath: "bpm-1.1.21-ubuntu-xenial-621.463.tgz", + SHA1: "d260e4a628087f030dbc4d66bd6f688ec979b5bb", + Manifest: cargo.BOSHReleaseManifest{ + Name: "bpm", + Version: "1.1.21", + CommitHash: "fd88358", + UncommittedChanges: false, + CompiledPackages: []cargo.CompiledBOSHReleasePackage{ + { + Name: "bpm", + Version: "be375c78c703cea04667ea7cbbc6d024bb391182", + Fingerprint: "be375c78c703cea04667ea7cbbc6d024bb391182", + SHA1: "b67ab0ceb0cab69a170521bb1a77c91a8546ac21", + Dependencies: []string{"golang-1-linux", "bpm-runc", "tini"}, + Stemcell: "ubuntu-xenial/621.463", + }, + { + Name: "test-server", + Version: "12eba471a2c3dddb8547ef03c23a3231d1f62e6c", + Fingerprint: "12eba471a2c3dddb8547ef03c23a3231d1f62e6c", + SHA1: "7ab0c2066c63eb5c5dd2c06d35b73376f4ad9a81", + Dependencies: []string{"golang-1-linux"}, + Stemcell: "ubuntu-xenial/621.463", + }, + { + Name: "bpm-runc", + Version: "464c6e6611f814bd12016156bf3e682486f34672", + Fingerprint: "464c6e6611f814bd12016156bf3e682486f34672", + SHA1: "bacd602ee0830a30c17b7a502aa0021a6739a3ff", + Dependencies: []string{"golang-1-linux"}, + Stemcell: "ubuntu-xenial/621.463", + }, + { + Name: "golang-1-linux", + Version: "2336380dbf01a44020813425f92be34685ce118bf4767406c461771cfef14fc9", + Fingerprint: "2336380dbf01a44020813425f92be34685ce118bf4767406c461771cfef14fc9", + SHA1: "e8dad3e51eeb5f5fb41dd56bbb8a3ec9655bd4f7", + Dependencies: []string{}, + Stemcell: "ubuntu-xenial/621.463", + }, + { + Name: "tini", + Version: "3d7b02f3eeb480b9581bec4a0096dab9ebdfa4bc", + Fingerprint: "3d7b02f3eeb480b9581bec4a0096dab9ebdfa4bc", + SHA1: "347c76d509ad4b82d99bbbb4b291768ff90b0fba", + Dependencies: []string{}, + Stemcell: "ubuntu-xenial/621.463", + }, + }, + Packages: []cargo.BOSHReleasePackage(nil)}, + }, +*/ diff --git a/internal/commands/fakes/bosh_director.go b/internal/commands/fakes/bosh_director.go new file mode 100644 index 000000000..8c7623ac4 --- /dev/null +++ b/internal/commands/fakes/bosh_director.go @@ -0,0 +1,4331 @@ +// Code generated by counterfeiter. DO NOT EDIT. +package fakes + +import ( + "io" + "sync" + + "github.com/cloudfoundry/bosh-cli/v7/director" +) + +type BOSHDirector struct { + CancelTasksStub func(director.TasksFilter) error + cancelTasksMutex sync.RWMutex + cancelTasksArgsForCall []struct { + arg1 director.TasksFilter + } + cancelTasksReturns struct { + result1 error + } + cancelTasksReturnsOnCall map[int]struct { + result1 error + } + CertificateExpiryStub func() ([]director.CertificateExpiryInfo, error) + certificateExpiryMutex sync.RWMutex + certificateExpiryArgsForCall []struct { + } + certificateExpiryReturns struct { + result1 []director.CertificateExpiryInfo + result2 error + } + certificateExpiryReturnsOnCall map[int]struct { + result1 []director.CertificateExpiryInfo + result2 error + } + CleanUpStub func(bool, bool, bool) (director.CleanUp, error) + cleanUpMutex sync.RWMutex + cleanUpArgsForCall []struct { + arg1 bool + arg2 bool + arg3 bool + } + cleanUpReturns struct { + result1 director.CleanUp + result2 error + } + cleanUpReturnsOnCall map[int]struct { + result1 director.CleanUp + result2 error + } + CurrentTasksStub func(director.TasksFilter) ([]director.Task, error) + currentTasksMutex sync.RWMutex + currentTasksArgsForCall []struct { + arg1 director.TasksFilter + } + currentTasksReturns struct { + result1 []director.Task + result2 error + } + currentTasksReturnsOnCall map[int]struct { + result1 []director.Task + result2 error + } + DeleteConfigStub func(string, string) (bool, error) + deleteConfigMutex sync.RWMutex + deleteConfigArgsForCall []struct { + arg1 string + arg2 string + } + deleteConfigReturns struct { + result1 bool + result2 error + } + deleteConfigReturnsOnCall map[int]struct { + result1 bool + result2 error + } + DeleteConfigByIDStub func(string) (bool, error) + deleteConfigByIDMutex sync.RWMutex + deleteConfigByIDArgsForCall []struct { + arg1 string + } + deleteConfigByIDReturns struct { + result1 bool + result2 error + } + deleteConfigByIDReturnsOnCall map[int]struct { + result1 bool + result2 error + } + DeploymentsStub func() ([]director.Deployment, error) + deploymentsMutex sync.RWMutex + deploymentsArgsForCall []struct { + } + deploymentsReturns struct { + result1 []director.Deployment + result2 error + } + deploymentsReturnsOnCall map[int]struct { + result1 []director.Deployment + result2 error + } + DiffCPIConfigStub func([]byte, bool) (director.ConfigDiff, error) + diffCPIConfigMutex sync.RWMutex + diffCPIConfigArgsForCall []struct { + arg1 []byte + arg2 bool + } + diffCPIConfigReturns struct { + result1 director.ConfigDiff + result2 error + } + diffCPIConfigReturnsOnCall map[int]struct { + result1 director.ConfigDiff + result2 error + } + DiffCloudConfigStub func(string, []byte) (director.ConfigDiff, error) + diffCloudConfigMutex sync.RWMutex + diffCloudConfigArgsForCall []struct { + arg1 string + arg2 []byte + } + diffCloudConfigReturns struct { + result1 director.ConfigDiff + result2 error + } + diffCloudConfigReturnsOnCall map[int]struct { + result1 director.ConfigDiff + result2 error + } + DiffConfigStub func(string, string, []byte) (director.ConfigDiff, error) + diffConfigMutex sync.RWMutex + diffConfigArgsForCall []struct { + arg1 string + arg2 string + arg3 []byte + } + diffConfigReturns struct { + result1 director.ConfigDiff + result2 error + } + diffConfigReturnsOnCall map[int]struct { + result1 director.ConfigDiff + result2 error + } + DiffConfigByIDOrContentStub func(string, []byte, string, []byte) (director.ConfigDiff, error) + diffConfigByIDOrContentMutex sync.RWMutex + diffConfigByIDOrContentArgsForCall []struct { + arg1 string + arg2 []byte + arg3 string + arg4 []byte + } + diffConfigByIDOrContentReturns struct { + result1 director.ConfigDiff + result2 error + } + diffConfigByIDOrContentReturnsOnCall map[int]struct { + result1 director.ConfigDiff + result2 error + } + DiffRuntimeConfigStub func(string, []byte, bool) (director.ConfigDiff, error) + diffRuntimeConfigMutex sync.RWMutex + diffRuntimeConfigArgsForCall []struct { + arg1 string + arg2 []byte + arg3 bool + } + diffRuntimeConfigReturns struct { + result1 director.ConfigDiff + result2 error + } + diffRuntimeConfigReturnsOnCall map[int]struct { + result1 director.ConfigDiff + result2 error + } + DownloadResourceUncheckedStub func(string, io.Writer) error + downloadResourceUncheckedMutex sync.RWMutex + downloadResourceUncheckedArgsForCall []struct { + arg1 string + arg2 io.Writer + } + downloadResourceUncheckedReturns struct { + result1 error + } + downloadResourceUncheckedReturnsOnCall map[int]struct { + result1 error + } + EnableResurrectionStub func(bool) error + enableResurrectionMutex sync.RWMutex + enableResurrectionArgsForCall []struct { + arg1 bool + } + enableResurrectionReturns struct { + result1 error + } + enableResurrectionReturnsOnCall map[int]struct { + result1 error + } + EventStub func(string) (director.Event, error) + eventMutex sync.RWMutex + eventArgsForCall []struct { + arg1 string + } + eventReturns struct { + result1 director.Event + result2 error + } + eventReturnsOnCall map[int]struct { + result1 director.Event + result2 error + } + EventsStub func(director.EventsFilter) ([]director.Event, error) + eventsMutex sync.RWMutex + eventsArgsForCall []struct { + arg1 director.EventsFilter + } + eventsReturns struct { + result1 []director.Event + result2 error + } + eventsReturnsOnCall map[int]struct { + result1 []director.Event + result2 error + } + FindDeploymentStub func(string) (director.Deployment, error) + findDeploymentMutex sync.RWMutex + findDeploymentArgsForCall []struct { + arg1 string + } + findDeploymentReturns struct { + result1 director.Deployment + result2 error + } + findDeploymentReturnsOnCall map[int]struct { + result1 director.Deployment + result2 error + } + FindOrphanDiskStub func(string) (director.OrphanDisk, error) + findOrphanDiskMutex sync.RWMutex + findOrphanDiskArgsForCall []struct { + arg1 string + } + findOrphanDiskReturns struct { + result1 director.OrphanDisk + result2 error + } + findOrphanDiskReturnsOnCall map[int]struct { + result1 director.OrphanDisk + result2 error + } + FindOrphanNetworkStub func(string) (director.OrphanNetwork, error) + findOrphanNetworkMutex sync.RWMutex + findOrphanNetworkArgsForCall []struct { + arg1 string + } + findOrphanNetworkReturns struct { + result1 director.OrphanNetwork + result2 error + } + findOrphanNetworkReturnsOnCall map[int]struct { + result1 director.OrphanNetwork + result2 error + } + FindReleaseStub func(director.ReleaseSlug) (director.Release, error) + findReleaseMutex sync.RWMutex + findReleaseArgsForCall []struct { + arg1 director.ReleaseSlug + } + findReleaseReturns struct { + result1 director.Release + result2 error + } + findReleaseReturnsOnCall map[int]struct { + result1 director.Release + result2 error + } + FindReleaseSeriesStub func(director.ReleaseSeriesSlug) (director.ReleaseSeries, error) + findReleaseSeriesMutex sync.RWMutex + findReleaseSeriesArgsForCall []struct { + arg1 director.ReleaseSeriesSlug + } + findReleaseSeriesReturns struct { + result1 director.ReleaseSeries + result2 error + } + findReleaseSeriesReturnsOnCall map[int]struct { + result1 director.ReleaseSeries + result2 error + } + FindStemcellStub func(director.StemcellSlug) (director.Stemcell, error) + findStemcellMutex sync.RWMutex + findStemcellArgsForCall []struct { + arg1 director.StemcellSlug + } + findStemcellReturns struct { + result1 director.Stemcell + result2 error + } + findStemcellReturnsOnCall map[int]struct { + result1 director.Stemcell + result2 error + } + FindTaskStub func(int) (director.Task, error) + findTaskMutex sync.RWMutex + findTaskArgsForCall []struct { + arg1 int + } + findTaskReturns struct { + result1 director.Task + result2 error + } + findTaskReturnsOnCall map[int]struct { + result1 director.Task + result2 error + } + FindTasksByContextIdStub func(string) ([]director.Task, error) + findTasksByContextIdMutex sync.RWMutex + findTasksByContextIdArgsForCall []struct { + arg1 string + } + findTasksByContextIdReturns struct { + result1 []director.Task + result2 error + } + findTasksByContextIdReturnsOnCall map[int]struct { + result1 []director.Task + result2 error + } + HasReleaseStub func(string, string, director.OSVersionSlug) (bool, error) + hasReleaseMutex sync.RWMutex + hasReleaseArgsForCall []struct { + arg1 string + arg2 string + arg3 director.OSVersionSlug + } + hasReleaseReturns struct { + result1 bool + result2 error + } + hasReleaseReturnsOnCall map[int]struct { + result1 bool + result2 error + } + InfoStub func() (director.Info, error) + infoMutex sync.RWMutex + infoArgsForCall []struct { + } + infoReturns struct { + result1 director.Info + result2 error + } + infoReturnsOnCall map[int]struct { + result1 director.Info + result2 error + } + IsAuthenticatedStub func() (bool, error) + isAuthenticatedMutex sync.RWMutex + isAuthenticatedArgsForCall []struct { + } + isAuthenticatedReturns struct { + result1 bool + result2 error + } + isAuthenticatedReturnsOnCall map[int]struct { + result1 bool + result2 error + } + LatestCPIConfigStub func() (director.CPIConfig, error) + latestCPIConfigMutex sync.RWMutex + latestCPIConfigArgsForCall []struct { + } + latestCPIConfigReturns struct { + result1 director.CPIConfig + result2 error + } + latestCPIConfigReturnsOnCall map[int]struct { + result1 director.CPIConfig + result2 error + } + LatestCloudConfigStub func(string) (director.CloudConfig, error) + latestCloudConfigMutex sync.RWMutex + latestCloudConfigArgsForCall []struct { + arg1 string + } + latestCloudConfigReturns struct { + result1 director.CloudConfig + result2 error + } + latestCloudConfigReturnsOnCall map[int]struct { + result1 director.CloudConfig + result2 error + } + LatestConfigStub func(string, string) (director.Config, error) + latestConfigMutex sync.RWMutex + latestConfigArgsForCall []struct { + arg1 string + arg2 string + } + latestConfigReturns struct { + result1 director.Config + result2 error + } + latestConfigReturnsOnCall map[int]struct { + result1 director.Config + result2 error + } + LatestConfigByIDStub func(string) (director.Config, error) + latestConfigByIDMutex sync.RWMutex + latestConfigByIDArgsForCall []struct { + arg1 string + } + latestConfigByIDReturns struct { + result1 director.Config + result2 error + } + latestConfigByIDReturnsOnCall map[int]struct { + result1 director.Config + result2 error + } + LatestRuntimeConfigStub func(string) (director.RuntimeConfig, error) + latestRuntimeConfigMutex sync.RWMutex + latestRuntimeConfigArgsForCall []struct { + arg1 string + } + latestRuntimeConfigReturns struct { + result1 director.RuntimeConfig + result2 error + } + latestRuntimeConfigReturnsOnCall map[int]struct { + result1 director.RuntimeConfig + result2 error + } + ListConfigsStub func(int, director.ConfigsFilter) ([]director.Config, error) + listConfigsMutex sync.RWMutex + listConfigsArgsForCall []struct { + arg1 int + arg2 director.ConfigsFilter + } + listConfigsReturns struct { + result1 []director.Config + result2 error + } + listConfigsReturnsOnCall map[int]struct { + result1 []director.Config + result2 error + } + ListDeploymentConfigsStub func(string) (director.DeploymentConfigs, error) + listDeploymentConfigsMutex sync.RWMutex + listDeploymentConfigsArgsForCall []struct { + arg1 string + } + listDeploymentConfigsReturns struct { + result1 director.DeploymentConfigs + result2 error + } + listDeploymentConfigsReturnsOnCall map[int]struct { + result1 director.DeploymentConfigs + result2 error + } + ListDeploymentsStub func() ([]director.DeploymentResp, error) + listDeploymentsMutex sync.RWMutex + listDeploymentsArgsForCall []struct { + } + listDeploymentsReturns struct { + result1 []director.DeploymentResp + result2 error + } + listDeploymentsReturnsOnCall map[int]struct { + result1 []director.DeploymentResp + result2 error + } + LocksStub func() ([]director.Lock, error) + locksMutex sync.RWMutex + locksArgsForCall []struct { + } + locksReturns struct { + result1 []director.Lock + result2 error + } + locksReturnsOnCall map[int]struct { + result1 []director.Lock + result2 error + } + MatchPackagesStub func(interface{}, bool) ([]string, error) + matchPackagesMutex sync.RWMutex + matchPackagesArgsForCall []struct { + arg1 interface{} + arg2 bool + } + matchPackagesReturns struct { + result1 []string + result2 error + } + matchPackagesReturnsOnCall map[int]struct { + result1 []string + result2 error + } + OrphanDiskStub func(string) error + orphanDiskMutex sync.RWMutex + orphanDiskArgsForCall []struct { + arg1 string + } + orphanDiskReturns struct { + result1 error + } + orphanDiskReturnsOnCall map[int]struct { + result1 error + } + OrphanDisksStub func() ([]director.OrphanDisk, error) + orphanDisksMutex sync.RWMutex + orphanDisksArgsForCall []struct { + } + orphanDisksReturns struct { + result1 []director.OrphanDisk + result2 error + } + orphanDisksReturnsOnCall map[int]struct { + result1 []director.OrphanDisk + result2 error + } + OrphanNetworksStub func() ([]director.OrphanNetwork, error) + orphanNetworksMutex sync.RWMutex + orphanNetworksArgsForCall []struct { + } + orphanNetworksReturns struct { + result1 []director.OrphanNetwork + result2 error + } + orphanNetworksReturnsOnCall map[int]struct { + result1 []director.OrphanNetwork + result2 error + } + OrphanedVMsStub func() ([]director.OrphanedVM, error) + orphanedVMsMutex sync.RWMutex + orphanedVMsArgsForCall []struct { + } + orphanedVMsReturns struct { + result1 []director.OrphanedVM + result2 error + } + orphanedVMsReturnsOnCall map[int]struct { + result1 []director.OrphanedVM + result2 error + } + RecentTasksStub func(int, director.TasksFilter) ([]director.Task, error) + recentTasksMutex sync.RWMutex + recentTasksArgsForCall []struct { + arg1 int + arg2 director.TasksFilter + } + recentTasksReturns struct { + result1 []director.Task + result2 error + } + recentTasksReturnsOnCall map[int]struct { + result1 []director.Task + result2 error + } + ReleaseHasCompiledPackageStub func(director.ReleaseSlug, director.OSVersionSlug) (bool, error) + releaseHasCompiledPackageMutex sync.RWMutex + releaseHasCompiledPackageArgsForCall []struct { + arg1 director.ReleaseSlug + arg2 director.OSVersionSlug + } + releaseHasCompiledPackageReturns struct { + result1 bool + result2 error + } + releaseHasCompiledPackageReturnsOnCall map[int]struct { + result1 bool + result2 error + } + ReleasesStub func() ([]director.Release, error) + releasesMutex sync.RWMutex + releasesArgsForCall []struct { + } + releasesReturns struct { + result1 []director.Release + result2 error + } + releasesReturnsOnCall map[int]struct { + result1 []director.Release + result2 error + } + StemcellNeedsUploadStub func(director.StemcellInfo) (bool, error) + stemcellNeedsUploadMutex sync.RWMutex + stemcellNeedsUploadArgsForCall []struct { + arg1 director.StemcellInfo + } + stemcellNeedsUploadReturns struct { + result1 bool + result2 error + } + stemcellNeedsUploadReturnsOnCall map[int]struct { + result1 bool + result2 error + } + StemcellsStub func() ([]director.Stemcell, error) + stemcellsMutex sync.RWMutex + stemcellsArgsForCall []struct { + } + stemcellsReturns struct { + result1 []director.Stemcell + result2 error + } + stemcellsReturnsOnCall map[int]struct { + result1 []director.Stemcell + result2 error + } + UpdateCPIConfigStub func([]byte) error + updateCPIConfigMutex sync.RWMutex + updateCPIConfigArgsForCall []struct { + arg1 []byte + } + updateCPIConfigReturns struct { + result1 error + } + updateCPIConfigReturnsOnCall map[int]struct { + result1 error + } + UpdateCloudConfigStub func(string, []byte) error + updateCloudConfigMutex sync.RWMutex + updateCloudConfigArgsForCall []struct { + arg1 string + arg2 []byte + } + updateCloudConfigReturns struct { + result1 error + } + updateCloudConfigReturnsOnCall map[int]struct { + result1 error + } + UpdateConfigStub func(string, string, string, []byte) (director.Config, error) + updateConfigMutex sync.RWMutex + updateConfigArgsForCall []struct { + arg1 string + arg2 string + arg3 string + arg4 []byte + } + updateConfigReturns struct { + result1 director.Config + result2 error + } + updateConfigReturnsOnCall map[int]struct { + result1 director.Config + result2 error + } + UpdateRuntimeConfigStub func(string, []byte) error + updateRuntimeConfigMutex sync.RWMutex + updateRuntimeConfigArgsForCall []struct { + arg1 string + arg2 []byte + } + updateRuntimeConfigReturns struct { + result1 error + } + updateRuntimeConfigReturnsOnCall map[int]struct { + result1 error + } + UploadReleaseFileStub func(director.UploadFile, bool, bool) error + uploadReleaseFileMutex sync.RWMutex + uploadReleaseFileArgsForCall []struct { + arg1 director.UploadFile + arg2 bool + arg3 bool + } + uploadReleaseFileReturns struct { + result1 error + } + uploadReleaseFileReturnsOnCall map[int]struct { + result1 error + } + UploadReleaseURLStub func(string, string, bool, bool) error + uploadReleaseURLMutex sync.RWMutex + uploadReleaseURLArgsForCall []struct { + arg1 string + arg2 string + arg3 bool + arg4 bool + } + uploadReleaseURLReturns struct { + result1 error + } + uploadReleaseURLReturnsOnCall map[int]struct { + result1 error + } + UploadStemcellFileStub func(director.UploadFile, bool) error + uploadStemcellFileMutex sync.RWMutex + uploadStemcellFileArgsForCall []struct { + arg1 director.UploadFile + arg2 bool + } + uploadStemcellFileReturns struct { + result1 error + } + uploadStemcellFileReturnsOnCall map[int]struct { + result1 error + } + UploadStemcellURLStub func(string, string, bool) error + uploadStemcellURLMutex sync.RWMutex + uploadStemcellURLArgsForCall []struct { + arg1 string + arg2 string + arg3 bool + } + uploadStemcellURLReturns struct { + result1 error + } + uploadStemcellURLReturnsOnCall map[int]struct { + result1 error + } + WithContextStub func(string) director.Director + withContextMutex sync.RWMutex + withContextArgsForCall []struct { + arg1 string + } + withContextReturns struct { + result1 director.Director + } + withContextReturnsOnCall map[int]struct { + result1 director.Director + } + invocations map[string][][]interface{} + invocationsMutex sync.RWMutex +} + +func (fake *BOSHDirector) CancelTasks(arg1 director.TasksFilter) error { + fake.cancelTasksMutex.Lock() + ret, specificReturn := fake.cancelTasksReturnsOnCall[len(fake.cancelTasksArgsForCall)] + fake.cancelTasksArgsForCall = append(fake.cancelTasksArgsForCall, struct { + arg1 director.TasksFilter + }{arg1}) + stub := fake.CancelTasksStub + fakeReturns := fake.cancelTasksReturns + fake.recordInvocation("CancelTasks", []interface{}{arg1}) + fake.cancelTasksMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1 + } + return fakeReturns.result1 +} + +func (fake *BOSHDirector) CancelTasksCallCount() int { + fake.cancelTasksMutex.RLock() + defer fake.cancelTasksMutex.RUnlock() + return len(fake.cancelTasksArgsForCall) +} + +func (fake *BOSHDirector) CancelTasksCalls(stub func(director.TasksFilter) error) { + fake.cancelTasksMutex.Lock() + defer fake.cancelTasksMutex.Unlock() + fake.CancelTasksStub = stub +} + +func (fake *BOSHDirector) CancelTasksArgsForCall(i int) director.TasksFilter { + fake.cancelTasksMutex.RLock() + defer fake.cancelTasksMutex.RUnlock() + argsForCall := fake.cancelTasksArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) CancelTasksReturns(result1 error) { + fake.cancelTasksMutex.Lock() + defer fake.cancelTasksMutex.Unlock() + fake.CancelTasksStub = nil + fake.cancelTasksReturns = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) CancelTasksReturnsOnCall(i int, result1 error) { + fake.cancelTasksMutex.Lock() + defer fake.cancelTasksMutex.Unlock() + fake.CancelTasksStub = nil + if fake.cancelTasksReturnsOnCall == nil { + fake.cancelTasksReturnsOnCall = make(map[int]struct { + result1 error + }) + } + fake.cancelTasksReturnsOnCall[i] = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) CertificateExpiry() ([]director.CertificateExpiryInfo, error) { + fake.certificateExpiryMutex.Lock() + ret, specificReturn := fake.certificateExpiryReturnsOnCall[len(fake.certificateExpiryArgsForCall)] + fake.certificateExpiryArgsForCall = append(fake.certificateExpiryArgsForCall, struct { + }{}) + stub := fake.CertificateExpiryStub + fakeReturns := fake.certificateExpiryReturns + fake.recordInvocation("CertificateExpiry", []interface{}{}) + fake.certificateExpiryMutex.Unlock() + if stub != nil { + return stub() + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) CertificateExpiryCallCount() int { + fake.certificateExpiryMutex.RLock() + defer fake.certificateExpiryMutex.RUnlock() + return len(fake.certificateExpiryArgsForCall) +} + +func (fake *BOSHDirector) CertificateExpiryCalls(stub func() ([]director.CertificateExpiryInfo, error)) { + fake.certificateExpiryMutex.Lock() + defer fake.certificateExpiryMutex.Unlock() + fake.CertificateExpiryStub = stub +} + +func (fake *BOSHDirector) CertificateExpiryReturns(result1 []director.CertificateExpiryInfo, result2 error) { + fake.certificateExpiryMutex.Lock() + defer fake.certificateExpiryMutex.Unlock() + fake.CertificateExpiryStub = nil + fake.certificateExpiryReturns = struct { + result1 []director.CertificateExpiryInfo + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) CertificateExpiryReturnsOnCall(i int, result1 []director.CertificateExpiryInfo, result2 error) { + fake.certificateExpiryMutex.Lock() + defer fake.certificateExpiryMutex.Unlock() + fake.CertificateExpiryStub = nil + if fake.certificateExpiryReturnsOnCall == nil { + fake.certificateExpiryReturnsOnCall = make(map[int]struct { + result1 []director.CertificateExpiryInfo + result2 error + }) + } + fake.certificateExpiryReturnsOnCall[i] = struct { + result1 []director.CertificateExpiryInfo + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) CleanUp(arg1 bool, arg2 bool, arg3 bool) (director.CleanUp, error) { + fake.cleanUpMutex.Lock() + ret, specificReturn := fake.cleanUpReturnsOnCall[len(fake.cleanUpArgsForCall)] + fake.cleanUpArgsForCall = append(fake.cleanUpArgsForCall, struct { + arg1 bool + arg2 bool + arg3 bool + }{arg1, arg2, arg3}) + stub := fake.CleanUpStub + fakeReturns := fake.cleanUpReturns + fake.recordInvocation("CleanUp", []interface{}{arg1, arg2, arg3}) + fake.cleanUpMutex.Unlock() + if stub != nil { + return stub(arg1, arg2, arg3) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) CleanUpCallCount() int { + fake.cleanUpMutex.RLock() + defer fake.cleanUpMutex.RUnlock() + return len(fake.cleanUpArgsForCall) +} + +func (fake *BOSHDirector) CleanUpCalls(stub func(bool, bool, bool) (director.CleanUp, error)) { + fake.cleanUpMutex.Lock() + defer fake.cleanUpMutex.Unlock() + fake.CleanUpStub = stub +} + +func (fake *BOSHDirector) CleanUpArgsForCall(i int) (bool, bool, bool) { + fake.cleanUpMutex.RLock() + defer fake.cleanUpMutex.RUnlock() + argsForCall := fake.cleanUpArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3 +} + +func (fake *BOSHDirector) CleanUpReturns(result1 director.CleanUp, result2 error) { + fake.cleanUpMutex.Lock() + defer fake.cleanUpMutex.Unlock() + fake.CleanUpStub = nil + fake.cleanUpReturns = struct { + result1 director.CleanUp + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) CleanUpReturnsOnCall(i int, result1 director.CleanUp, result2 error) { + fake.cleanUpMutex.Lock() + defer fake.cleanUpMutex.Unlock() + fake.CleanUpStub = nil + if fake.cleanUpReturnsOnCall == nil { + fake.cleanUpReturnsOnCall = make(map[int]struct { + result1 director.CleanUp + result2 error + }) + } + fake.cleanUpReturnsOnCall[i] = struct { + result1 director.CleanUp + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) CurrentTasks(arg1 director.TasksFilter) ([]director.Task, error) { + fake.currentTasksMutex.Lock() + ret, specificReturn := fake.currentTasksReturnsOnCall[len(fake.currentTasksArgsForCall)] + fake.currentTasksArgsForCall = append(fake.currentTasksArgsForCall, struct { + arg1 director.TasksFilter + }{arg1}) + stub := fake.CurrentTasksStub + fakeReturns := fake.currentTasksReturns + fake.recordInvocation("CurrentTasks", []interface{}{arg1}) + fake.currentTasksMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) CurrentTasksCallCount() int { + fake.currentTasksMutex.RLock() + defer fake.currentTasksMutex.RUnlock() + return len(fake.currentTasksArgsForCall) +} + +func (fake *BOSHDirector) CurrentTasksCalls(stub func(director.TasksFilter) ([]director.Task, error)) { + fake.currentTasksMutex.Lock() + defer fake.currentTasksMutex.Unlock() + fake.CurrentTasksStub = stub +} + +func (fake *BOSHDirector) CurrentTasksArgsForCall(i int) director.TasksFilter { + fake.currentTasksMutex.RLock() + defer fake.currentTasksMutex.RUnlock() + argsForCall := fake.currentTasksArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) CurrentTasksReturns(result1 []director.Task, result2 error) { + fake.currentTasksMutex.Lock() + defer fake.currentTasksMutex.Unlock() + fake.CurrentTasksStub = nil + fake.currentTasksReturns = struct { + result1 []director.Task + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) CurrentTasksReturnsOnCall(i int, result1 []director.Task, result2 error) { + fake.currentTasksMutex.Lock() + defer fake.currentTasksMutex.Unlock() + fake.CurrentTasksStub = nil + if fake.currentTasksReturnsOnCall == nil { + fake.currentTasksReturnsOnCall = make(map[int]struct { + result1 []director.Task + result2 error + }) + } + fake.currentTasksReturnsOnCall[i] = struct { + result1 []director.Task + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) DeleteConfig(arg1 string, arg2 string) (bool, error) { + fake.deleteConfigMutex.Lock() + ret, specificReturn := fake.deleteConfigReturnsOnCall[len(fake.deleteConfigArgsForCall)] + fake.deleteConfigArgsForCall = append(fake.deleteConfigArgsForCall, struct { + arg1 string + arg2 string + }{arg1, arg2}) + stub := fake.DeleteConfigStub + fakeReturns := fake.deleteConfigReturns + fake.recordInvocation("DeleteConfig", []interface{}{arg1, arg2}) + fake.deleteConfigMutex.Unlock() + if stub != nil { + return stub(arg1, arg2) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) DeleteConfigCallCount() int { + fake.deleteConfigMutex.RLock() + defer fake.deleteConfigMutex.RUnlock() + return len(fake.deleteConfigArgsForCall) +} + +func (fake *BOSHDirector) DeleteConfigCalls(stub func(string, string) (bool, error)) { + fake.deleteConfigMutex.Lock() + defer fake.deleteConfigMutex.Unlock() + fake.DeleteConfigStub = stub +} + +func (fake *BOSHDirector) DeleteConfigArgsForCall(i int) (string, string) { + fake.deleteConfigMutex.RLock() + defer fake.deleteConfigMutex.RUnlock() + argsForCall := fake.deleteConfigArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2 +} + +func (fake *BOSHDirector) DeleteConfigReturns(result1 bool, result2 error) { + fake.deleteConfigMutex.Lock() + defer fake.deleteConfigMutex.Unlock() + fake.DeleteConfigStub = nil + fake.deleteConfigReturns = struct { + result1 bool + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) DeleteConfigReturnsOnCall(i int, result1 bool, result2 error) { + fake.deleteConfigMutex.Lock() + defer fake.deleteConfigMutex.Unlock() + fake.DeleteConfigStub = nil + if fake.deleteConfigReturnsOnCall == nil { + fake.deleteConfigReturnsOnCall = make(map[int]struct { + result1 bool + result2 error + }) + } + fake.deleteConfigReturnsOnCall[i] = struct { + result1 bool + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) DeleteConfigByID(arg1 string) (bool, error) { + fake.deleteConfigByIDMutex.Lock() + ret, specificReturn := fake.deleteConfigByIDReturnsOnCall[len(fake.deleteConfigByIDArgsForCall)] + fake.deleteConfigByIDArgsForCall = append(fake.deleteConfigByIDArgsForCall, struct { + arg1 string + }{arg1}) + stub := fake.DeleteConfigByIDStub + fakeReturns := fake.deleteConfigByIDReturns + fake.recordInvocation("DeleteConfigByID", []interface{}{arg1}) + fake.deleteConfigByIDMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) DeleteConfigByIDCallCount() int { + fake.deleteConfigByIDMutex.RLock() + defer fake.deleteConfigByIDMutex.RUnlock() + return len(fake.deleteConfigByIDArgsForCall) +} + +func (fake *BOSHDirector) DeleteConfigByIDCalls(stub func(string) (bool, error)) { + fake.deleteConfigByIDMutex.Lock() + defer fake.deleteConfigByIDMutex.Unlock() + fake.DeleteConfigByIDStub = stub +} + +func (fake *BOSHDirector) DeleteConfigByIDArgsForCall(i int) string { + fake.deleteConfigByIDMutex.RLock() + defer fake.deleteConfigByIDMutex.RUnlock() + argsForCall := fake.deleteConfigByIDArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) DeleteConfigByIDReturns(result1 bool, result2 error) { + fake.deleteConfigByIDMutex.Lock() + defer fake.deleteConfigByIDMutex.Unlock() + fake.DeleteConfigByIDStub = nil + fake.deleteConfigByIDReturns = struct { + result1 bool + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) DeleteConfigByIDReturnsOnCall(i int, result1 bool, result2 error) { + fake.deleteConfigByIDMutex.Lock() + defer fake.deleteConfigByIDMutex.Unlock() + fake.DeleteConfigByIDStub = nil + if fake.deleteConfigByIDReturnsOnCall == nil { + fake.deleteConfigByIDReturnsOnCall = make(map[int]struct { + result1 bool + result2 error + }) + } + fake.deleteConfigByIDReturnsOnCall[i] = struct { + result1 bool + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) Deployments() ([]director.Deployment, error) { + fake.deploymentsMutex.Lock() + ret, specificReturn := fake.deploymentsReturnsOnCall[len(fake.deploymentsArgsForCall)] + fake.deploymentsArgsForCall = append(fake.deploymentsArgsForCall, struct { + }{}) + stub := fake.DeploymentsStub + fakeReturns := fake.deploymentsReturns + fake.recordInvocation("Deployments", []interface{}{}) + fake.deploymentsMutex.Unlock() + if stub != nil { + return stub() + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) DeploymentsCallCount() int { + fake.deploymentsMutex.RLock() + defer fake.deploymentsMutex.RUnlock() + return len(fake.deploymentsArgsForCall) +} + +func (fake *BOSHDirector) DeploymentsCalls(stub func() ([]director.Deployment, error)) { + fake.deploymentsMutex.Lock() + defer fake.deploymentsMutex.Unlock() + fake.DeploymentsStub = stub +} + +func (fake *BOSHDirector) DeploymentsReturns(result1 []director.Deployment, result2 error) { + fake.deploymentsMutex.Lock() + defer fake.deploymentsMutex.Unlock() + fake.DeploymentsStub = nil + fake.deploymentsReturns = struct { + result1 []director.Deployment + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) DeploymentsReturnsOnCall(i int, result1 []director.Deployment, result2 error) { + fake.deploymentsMutex.Lock() + defer fake.deploymentsMutex.Unlock() + fake.DeploymentsStub = nil + if fake.deploymentsReturnsOnCall == nil { + fake.deploymentsReturnsOnCall = make(map[int]struct { + result1 []director.Deployment + result2 error + }) + } + fake.deploymentsReturnsOnCall[i] = struct { + result1 []director.Deployment + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) DiffCPIConfig(arg1 []byte, arg2 bool) (director.ConfigDiff, error) { + var arg1Copy []byte + if arg1 != nil { + arg1Copy = make([]byte, len(arg1)) + copy(arg1Copy, arg1) + } + fake.diffCPIConfigMutex.Lock() + ret, specificReturn := fake.diffCPIConfigReturnsOnCall[len(fake.diffCPIConfigArgsForCall)] + fake.diffCPIConfigArgsForCall = append(fake.diffCPIConfigArgsForCall, struct { + arg1 []byte + arg2 bool + }{arg1Copy, arg2}) + stub := fake.DiffCPIConfigStub + fakeReturns := fake.diffCPIConfigReturns + fake.recordInvocation("DiffCPIConfig", []interface{}{arg1Copy, arg2}) + fake.diffCPIConfigMutex.Unlock() + if stub != nil { + return stub(arg1, arg2) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) DiffCPIConfigCallCount() int { + fake.diffCPIConfigMutex.RLock() + defer fake.diffCPIConfigMutex.RUnlock() + return len(fake.diffCPIConfigArgsForCall) +} + +func (fake *BOSHDirector) DiffCPIConfigCalls(stub func([]byte, bool) (director.ConfigDiff, error)) { + fake.diffCPIConfigMutex.Lock() + defer fake.diffCPIConfigMutex.Unlock() + fake.DiffCPIConfigStub = stub +} + +func (fake *BOSHDirector) DiffCPIConfigArgsForCall(i int) ([]byte, bool) { + fake.diffCPIConfigMutex.RLock() + defer fake.diffCPIConfigMutex.RUnlock() + argsForCall := fake.diffCPIConfigArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2 +} + +func (fake *BOSHDirector) DiffCPIConfigReturns(result1 director.ConfigDiff, result2 error) { + fake.diffCPIConfigMutex.Lock() + defer fake.diffCPIConfigMutex.Unlock() + fake.DiffCPIConfigStub = nil + fake.diffCPIConfigReturns = struct { + result1 director.ConfigDiff + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) DiffCPIConfigReturnsOnCall(i int, result1 director.ConfigDiff, result2 error) { + fake.diffCPIConfigMutex.Lock() + defer fake.diffCPIConfigMutex.Unlock() + fake.DiffCPIConfigStub = nil + if fake.diffCPIConfigReturnsOnCall == nil { + fake.diffCPIConfigReturnsOnCall = make(map[int]struct { + result1 director.ConfigDiff + result2 error + }) + } + fake.diffCPIConfigReturnsOnCall[i] = struct { + result1 director.ConfigDiff + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) DiffCloudConfig(arg1 string, arg2 []byte) (director.ConfigDiff, error) { + var arg2Copy []byte + if arg2 != nil { + arg2Copy = make([]byte, len(arg2)) + copy(arg2Copy, arg2) + } + fake.diffCloudConfigMutex.Lock() + ret, specificReturn := fake.diffCloudConfigReturnsOnCall[len(fake.diffCloudConfigArgsForCall)] + fake.diffCloudConfigArgsForCall = append(fake.diffCloudConfigArgsForCall, struct { + arg1 string + arg2 []byte + }{arg1, arg2Copy}) + stub := fake.DiffCloudConfigStub + fakeReturns := fake.diffCloudConfigReturns + fake.recordInvocation("DiffCloudConfig", []interface{}{arg1, arg2Copy}) + fake.diffCloudConfigMutex.Unlock() + if stub != nil { + return stub(arg1, arg2) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) DiffCloudConfigCallCount() int { + fake.diffCloudConfigMutex.RLock() + defer fake.diffCloudConfigMutex.RUnlock() + return len(fake.diffCloudConfigArgsForCall) +} + +func (fake *BOSHDirector) DiffCloudConfigCalls(stub func(string, []byte) (director.ConfigDiff, error)) { + fake.diffCloudConfigMutex.Lock() + defer fake.diffCloudConfigMutex.Unlock() + fake.DiffCloudConfigStub = stub +} + +func (fake *BOSHDirector) DiffCloudConfigArgsForCall(i int) (string, []byte) { + fake.diffCloudConfigMutex.RLock() + defer fake.diffCloudConfigMutex.RUnlock() + argsForCall := fake.diffCloudConfigArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2 +} + +func (fake *BOSHDirector) DiffCloudConfigReturns(result1 director.ConfigDiff, result2 error) { + fake.diffCloudConfigMutex.Lock() + defer fake.diffCloudConfigMutex.Unlock() + fake.DiffCloudConfigStub = nil + fake.diffCloudConfigReturns = struct { + result1 director.ConfigDiff + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) DiffCloudConfigReturnsOnCall(i int, result1 director.ConfigDiff, result2 error) { + fake.diffCloudConfigMutex.Lock() + defer fake.diffCloudConfigMutex.Unlock() + fake.DiffCloudConfigStub = nil + if fake.diffCloudConfigReturnsOnCall == nil { + fake.diffCloudConfigReturnsOnCall = make(map[int]struct { + result1 director.ConfigDiff + result2 error + }) + } + fake.diffCloudConfigReturnsOnCall[i] = struct { + result1 director.ConfigDiff + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) DiffConfig(arg1 string, arg2 string, arg3 []byte) (director.ConfigDiff, error) { + var arg3Copy []byte + if arg3 != nil { + arg3Copy = make([]byte, len(arg3)) + copy(arg3Copy, arg3) + } + fake.diffConfigMutex.Lock() + ret, specificReturn := fake.diffConfigReturnsOnCall[len(fake.diffConfigArgsForCall)] + fake.diffConfigArgsForCall = append(fake.diffConfigArgsForCall, struct { + arg1 string + arg2 string + arg3 []byte + }{arg1, arg2, arg3Copy}) + stub := fake.DiffConfigStub + fakeReturns := fake.diffConfigReturns + fake.recordInvocation("DiffConfig", []interface{}{arg1, arg2, arg3Copy}) + fake.diffConfigMutex.Unlock() + if stub != nil { + return stub(arg1, arg2, arg3) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) DiffConfigCallCount() int { + fake.diffConfigMutex.RLock() + defer fake.diffConfigMutex.RUnlock() + return len(fake.diffConfigArgsForCall) +} + +func (fake *BOSHDirector) DiffConfigCalls(stub func(string, string, []byte) (director.ConfigDiff, error)) { + fake.diffConfigMutex.Lock() + defer fake.diffConfigMutex.Unlock() + fake.DiffConfigStub = stub +} + +func (fake *BOSHDirector) DiffConfigArgsForCall(i int) (string, string, []byte) { + fake.diffConfigMutex.RLock() + defer fake.diffConfigMutex.RUnlock() + argsForCall := fake.diffConfigArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3 +} + +func (fake *BOSHDirector) DiffConfigReturns(result1 director.ConfigDiff, result2 error) { + fake.diffConfigMutex.Lock() + defer fake.diffConfigMutex.Unlock() + fake.DiffConfigStub = nil + fake.diffConfigReturns = struct { + result1 director.ConfigDiff + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) DiffConfigReturnsOnCall(i int, result1 director.ConfigDiff, result2 error) { + fake.diffConfigMutex.Lock() + defer fake.diffConfigMutex.Unlock() + fake.DiffConfigStub = nil + if fake.diffConfigReturnsOnCall == nil { + fake.diffConfigReturnsOnCall = make(map[int]struct { + result1 director.ConfigDiff + result2 error + }) + } + fake.diffConfigReturnsOnCall[i] = struct { + result1 director.ConfigDiff + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) DiffConfigByIDOrContent(arg1 string, arg2 []byte, arg3 string, arg4 []byte) (director.ConfigDiff, error) { + var arg2Copy []byte + if arg2 != nil { + arg2Copy = make([]byte, len(arg2)) + copy(arg2Copy, arg2) + } + var arg4Copy []byte + if arg4 != nil { + arg4Copy = make([]byte, len(arg4)) + copy(arg4Copy, arg4) + } + fake.diffConfigByIDOrContentMutex.Lock() + ret, specificReturn := fake.diffConfigByIDOrContentReturnsOnCall[len(fake.diffConfigByIDOrContentArgsForCall)] + fake.diffConfigByIDOrContentArgsForCall = append(fake.diffConfigByIDOrContentArgsForCall, struct { + arg1 string + arg2 []byte + arg3 string + arg4 []byte + }{arg1, arg2Copy, arg3, arg4Copy}) + stub := fake.DiffConfigByIDOrContentStub + fakeReturns := fake.diffConfigByIDOrContentReturns + fake.recordInvocation("DiffConfigByIDOrContent", []interface{}{arg1, arg2Copy, arg3, arg4Copy}) + fake.diffConfigByIDOrContentMutex.Unlock() + if stub != nil { + return stub(arg1, arg2, arg3, arg4) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) DiffConfigByIDOrContentCallCount() int { + fake.diffConfigByIDOrContentMutex.RLock() + defer fake.diffConfigByIDOrContentMutex.RUnlock() + return len(fake.diffConfigByIDOrContentArgsForCall) +} + +func (fake *BOSHDirector) DiffConfigByIDOrContentCalls(stub func(string, []byte, string, []byte) (director.ConfigDiff, error)) { + fake.diffConfigByIDOrContentMutex.Lock() + defer fake.diffConfigByIDOrContentMutex.Unlock() + fake.DiffConfigByIDOrContentStub = stub +} + +func (fake *BOSHDirector) DiffConfigByIDOrContentArgsForCall(i int) (string, []byte, string, []byte) { + fake.diffConfigByIDOrContentMutex.RLock() + defer fake.diffConfigByIDOrContentMutex.RUnlock() + argsForCall := fake.diffConfigByIDOrContentArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3, argsForCall.arg4 +} + +func (fake *BOSHDirector) DiffConfigByIDOrContentReturns(result1 director.ConfigDiff, result2 error) { + fake.diffConfigByIDOrContentMutex.Lock() + defer fake.diffConfigByIDOrContentMutex.Unlock() + fake.DiffConfigByIDOrContentStub = nil + fake.diffConfigByIDOrContentReturns = struct { + result1 director.ConfigDiff + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) DiffConfigByIDOrContentReturnsOnCall(i int, result1 director.ConfigDiff, result2 error) { + fake.diffConfigByIDOrContentMutex.Lock() + defer fake.diffConfigByIDOrContentMutex.Unlock() + fake.DiffConfigByIDOrContentStub = nil + if fake.diffConfigByIDOrContentReturnsOnCall == nil { + fake.diffConfigByIDOrContentReturnsOnCall = make(map[int]struct { + result1 director.ConfigDiff + result2 error + }) + } + fake.diffConfigByIDOrContentReturnsOnCall[i] = struct { + result1 director.ConfigDiff + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) DiffRuntimeConfig(arg1 string, arg2 []byte, arg3 bool) (director.ConfigDiff, error) { + var arg2Copy []byte + if arg2 != nil { + arg2Copy = make([]byte, len(arg2)) + copy(arg2Copy, arg2) + } + fake.diffRuntimeConfigMutex.Lock() + ret, specificReturn := fake.diffRuntimeConfigReturnsOnCall[len(fake.diffRuntimeConfigArgsForCall)] + fake.diffRuntimeConfigArgsForCall = append(fake.diffRuntimeConfigArgsForCall, struct { + arg1 string + arg2 []byte + arg3 bool + }{arg1, arg2Copy, arg3}) + stub := fake.DiffRuntimeConfigStub + fakeReturns := fake.diffRuntimeConfigReturns + fake.recordInvocation("DiffRuntimeConfig", []interface{}{arg1, arg2Copy, arg3}) + fake.diffRuntimeConfigMutex.Unlock() + if stub != nil { + return stub(arg1, arg2, arg3) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) DiffRuntimeConfigCallCount() int { + fake.diffRuntimeConfigMutex.RLock() + defer fake.diffRuntimeConfigMutex.RUnlock() + return len(fake.diffRuntimeConfigArgsForCall) +} + +func (fake *BOSHDirector) DiffRuntimeConfigCalls(stub func(string, []byte, bool) (director.ConfigDiff, error)) { + fake.diffRuntimeConfigMutex.Lock() + defer fake.diffRuntimeConfigMutex.Unlock() + fake.DiffRuntimeConfigStub = stub +} + +func (fake *BOSHDirector) DiffRuntimeConfigArgsForCall(i int) (string, []byte, bool) { + fake.diffRuntimeConfigMutex.RLock() + defer fake.diffRuntimeConfigMutex.RUnlock() + argsForCall := fake.diffRuntimeConfigArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3 +} + +func (fake *BOSHDirector) DiffRuntimeConfigReturns(result1 director.ConfigDiff, result2 error) { + fake.diffRuntimeConfigMutex.Lock() + defer fake.diffRuntimeConfigMutex.Unlock() + fake.DiffRuntimeConfigStub = nil + fake.diffRuntimeConfigReturns = struct { + result1 director.ConfigDiff + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) DiffRuntimeConfigReturnsOnCall(i int, result1 director.ConfigDiff, result2 error) { + fake.diffRuntimeConfigMutex.Lock() + defer fake.diffRuntimeConfigMutex.Unlock() + fake.DiffRuntimeConfigStub = nil + if fake.diffRuntimeConfigReturnsOnCall == nil { + fake.diffRuntimeConfigReturnsOnCall = make(map[int]struct { + result1 director.ConfigDiff + result2 error + }) + } + fake.diffRuntimeConfigReturnsOnCall[i] = struct { + result1 director.ConfigDiff + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) DownloadResourceUnchecked(arg1 string, arg2 io.Writer) error { + fake.downloadResourceUncheckedMutex.Lock() + ret, specificReturn := fake.downloadResourceUncheckedReturnsOnCall[len(fake.downloadResourceUncheckedArgsForCall)] + fake.downloadResourceUncheckedArgsForCall = append(fake.downloadResourceUncheckedArgsForCall, struct { + arg1 string + arg2 io.Writer + }{arg1, arg2}) + stub := fake.DownloadResourceUncheckedStub + fakeReturns := fake.downloadResourceUncheckedReturns + fake.recordInvocation("DownloadResourceUnchecked", []interface{}{arg1, arg2}) + fake.downloadResourceUncheckedMutex.Unlock() + if stub != nil { + return stub(arg1, arg2) + } + if specificReturn { + return ret.result1 + } + return fakeReturns.result1 +} + +func (fake *BOSHDirector) DownloadResourceUncheckedCallCount() int { + fake.downloadResourceUncheckedMutex.RLock() + defer fake.downloadResourceUncheckedMutex.RUnlock() + return len(fake.downloadResourceUncheckedArgsForCall) +} + +func (fake *BOSHDirector) DownloadResourceUncheckedCalls(stub func(string, io.Writer) error) { + fake.downloadResourceUncheckedMutex.Lock() + defer fake.downloadResourceUncheckedMutex.Unlock() + fake.DownloadResourceUncheckedStub = stub +} + +func (fake *BOSHDirector) DownloadResourceUncheckedArgsForCall(i int) (string, io.Writer) { + fake.downloadResourceUncheckedMutex.RLock() + defer fake.downloadResourceUncheckedMutex.RUnlock() + argsForCall := fake.downloadResourceUncheckedArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2 +} + +func (fake *BOSHDirector) DownloadResourceUncheckedReturns(result1 error) { + fake.downloadResourceUncheckedMutex.Lock() + defer fake.downloadResourceUncheckedMutex.Unlock() + fake.DownloadResourceUncheckedStub = nil + fake.downloadResourceUncheckedReturns = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) DownloadResourceUncheckedReturnsOnCall(i int, result1 error) { + fake.downloadResourceUncheckedMutex.Lock() + defer fake.downloadResourceUncheckedMutex.Unlock() + fake.DownloadResourceUncheckedStub = nil + if fake.downloadResourceUncheckedReturnsOnCall == nil { + fake.downloadResourceUncheckedReturnsOnCall = make(map[int]struct { + result1 error + }) + } + fake.downloadResourceUncheckedReturnsOnCall[i] = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) EnableResurrection(arg1 bool) error { + fake.enableResurrectionMutex.Lock() + ret, specificReturn := fake.enableResurrectionReturnsOnCall[len(fake.enableResurrectionArgsForCall)] + fake.enableResurrectionArgsForCall = append(fake.enableResurrectionArgsForCall, struct { + arg1 bool + }{arg1}) + stub := fake.EnableResurrectionStub + fakeReturns := fake.enableResurrectionReturns + fake.recordInvocation("EnableResurrection", []interface{}{arg1}) + fake.enableResurrectionMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1 + } + return fakeReturns.result1 +} + +func (fake *BOSHDirector) EnableResurrectionCallCount() int { + fake.enableResurrectionMutex.RLock() + defer fake.enableResurrectionMutex.RUnlock() + return len(fake.enableResurrectionArgsForCall) +} + +func (fake *BOSHDirector) EnableResurrectionCalls(stub func(bool) error) { + fake.enableResurrectionMutex.Lock() + defer fake.enableResurrectionMutex.Unlock() + fake.EnableResurrectionStub = stub +} + +func (fake *BOSHDirector) EnableResurrectionArgsForCall(i int) bool { + fake.enableResurrectionMutex.RLock() + defer fake.enableResurrectionMutex.RUnlock() + argsForCall := fake.enableResurrectionArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) EnableResurrectionReturns(result1 error) { + fake.enableResurrectionMutex.Lock() + defer fake.enableResurrectionMutex.Unlock() + fake.EnableResurrectionStub = nil + fake.enableResurrectionReturns = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) EnableResurrectionReturnsOnCall(i int, result1 error) { + fake.enableResurrectionMutex.Lock() + defer fake.enableResurrectionMutex.Unlock() + fake.EnableResurrectionStub = nil + if fake.enableResurrectionReturnsOnCall == nil { + fake.enableResurrectionReturnsOnCall = make(map[int]struct { + result1 error + }) + } + fake.enableResurrectionReturnsOnCall[i] = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) Event(arg1 string) (director.Event, error) { + fake.eventMutex.Lock() + ret, specificReturn := fake.eventReturnsOnCall[len(fake.eventArgsForCall)] + fake.eventArgsForCall = append(fake.eventArgsForCall, struct { + arg1 string + }{arg1}) + stub := fake.EventStub + fakeReturns := fake.eventReturns + fake.recordInvocation("Event", []interface{}{arg1}) + fake.eventMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) EventCallCount() int { + fake.eventMutex.RLock() + defer fake.eventMutex.RUnlock() + return len(fake.eventArgsForCall) +} + +func (fake *BOSHDirector) EventCalls(stub func(string) (director.Event, error)) { + fake.eventMutex.Lock() + defer fake.eventMutex.Unlock() + fake.EventStub = stub +} + +func (fake *BOSHDirector) EventArgsForCall(i int) string { + fake.eventMutex.RLock() + defer fake.eventMutex.RUnlock() + argsForCall := fake.eventArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) EventReturns(result1 director.Event, result2 error) { + fake.eventMutex.Lock() + defer fake.eventMutex.Unlock() + fake.EventStub = nil + fake.eventReturns = struct { + result1 director.Event + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) EventReturnsOnCall(i int, result1 director.Event, result2 error) { + fake.eventMutex.Lock() + defer fake.eventMutex.Unlock() + fake.EventStub = nil + if fake.eventReturnsOnCall == nil { + fake.eventReturnsOnCall = make(map[int]struct { + result1 director.Event + result2 error + }) + } + fake.eventReturnsOnCall[i] = struct { + result1 director.Event + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) Events(arg1 director.EventsFilter) ([]director.Event, error) { + fake.eventsMutex.Lock() + ret, specificReturn := fake.eventsReturnsOnCall[len(fake.eventsArgsForCall)] + fake.eventsArgsForCall = append(fake.eventsArgsForCall, struct { + arg1 director.EventsFilter + }{arg1}) + stub := fake.EventsStub + fakeReturns := fake.eventsReturns + fake.recordInvocation("Events", []interface{}{arg1}) + fake.eventsMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) EventsCallCount() int { + fake.eventsMutex.RLock() + defer fake.eventsMutex.RUnlock() + return len(fake.eventsArgsForCall) +} + +func (fake *BOSHDirector) EventsCalls(stub func(director.EventsFilter) ([]director.Event, error)) { + fake.eventsMutex.Lock() + defer fake.eventsMutex.Unlock() + fake.EventsStub = stub +} + +func (fake *BOSHDirector) EventsArgsForCall(i int) director.EventsFilter { + fake.eventsMutex.RLock() + defer fake.eventsMutex.RUnlock() + argsForCall := fake.eventsArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) EventsReturns(result1 []director.Event, result2 error) { + fake.eventsMutex.Lock() + defer fake.eventsMutex.Unlock() + fake.EventsStub = nil + fake.eventsReturns = struct { + result1 []director.Event + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) EventsReturnsOnCall(i int, result1 []director.Event, result2 error) { + fake.eventsMutex.Lock() + defer fake.eventsMutex.Unlock() + fake.EventsStub = nil + if fake.eventsReturnsOnCall == nil { + fake.eventsReturnsOnCall = make(map[int]struct { + result1 []director.Event + result2 error + }) + } + fake.eventsReturnsOnCall[i] = struct { + result1 []director.Event + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) FindDeployment(arg1 string) (director.Deployment, error) { + fake.findDeploymentMutex.Lock() + ret, specificReturn := fake.findDeploymentReturnsOnCall[len(fake.findDeploymentArgsForCall)] + fake.findDeploymentArgsForCall = append(fake.findDeploymentArgsForCall, struct { + arg1 string + }{arg1}) + stub := fake.FindDeploymentStub + fakeReturns := fake.findDeploymentReturns + fake.recordInvocation("FindDeployment", []interface{}{arg1}) + fake.findDeploymentMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) FindDeploymentCallCount() int { + fake.findDeploymentMutex.RLock() + defer fake.findDeploymentMutex.RUnlock() + return len(fake.findDeploymentArgsForCall) +} + +func (fake *BOSHDirector) FindDeploymentCalls(stub func(string) (director.Deployment, error)) { + fake.findDeploymentMutex.Lock() + defer fake.findDeploymentMutex.Unlock() + fake.FindDeploymentStub = stub +} + +func (fake *BOSHDirector) FindDeploymentArgsForCall(i int) string { + fake.findDeploymentMutex.RLock() + defer fake.findDeploymentMutex.RUnlock() + argsForCall := fake.findDeploymentArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) FindDeploymentReturns(result1 director.Deployment, result2 error) { + fake.findDeploymentMutex.Lock() + defer fake.findDeploymentMutex.Unlock() + fake.FindDeploymentStub = nil + fake.findDeploymentReturns = struct { + result1 director.Deployment + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) FindDeploymentReturnsOnCall(i int, result1 director.Deployment, result2 error) { + fake.findDeploymentMutex.Lock() + defer fake.findDeploymentMutex.Unlock() + fake.FindDeploymentStub = nil + if fake.findDeploymentReturnsOnCall == nil { + fake.findDeploymentReturnsOnCall = make(map[int]struct { + result1 director.Deployment + result2 error + }) + } + fake.findDeploymentReturnsOnCall[i] = struct { + result1 director.Deployment + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) FindOrphanDisk(arg1 string) (director.OrphanDisk, error) { + fake.findOrphanDiskMutex.Lock() + ret, specificReturn := fake.findOrphanDiskReturnsOnCall[len(fake.findOrphanDiskArgsForCall)] + fake.findOrphanDiskArgsForCall = append(fake.findOrphanDiskArgsForCall, struct { + arg1 string + }{arg1}) + stub := fake.FindOrphanDiskStub + fakeReturns := fake.findOrphanDiskReturns + fake.recordInvocation("FindOrphanDisk", []interface{}{arg1}) + fake.findOrphanDiskMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) FindOrphanDiskCallCount() int { + fake.findOrphanDiskMutex.RLock() + defer fake.findOrphanDiskMutex.RUnlock() + return len(fake.findOrphanDiskArgsForCall) +} + +func (fake *BOSHDirector) FindOrphanDiskCalls(stub func(string) (director.OrphanDisk, error)) { + fake.findOrphanDiskMutex.Lock() + defer fake.findOrphanDiskMutex.Unlock() + fake.FindOrphanDiskStub = stub +} + +func (fake *BOSHDirector) FindOrphanDiskArgsForCall(i int) string { + fake.findOrphanDiskMutex.RLock() + defer fake.findOrphanDiskMutex.RUnlock() + argsForCall := fake.findOrphanDiskArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) FindOrphanDiskReturns(result1 director.OrphanDisk, result2 error) { + fake.findOrphanDiskMutex.Lock() + defer fake.findOrphanDiskMutex.Unlock() + fake.FindOrphanDiskStub = nil + fake.findOrphanDiskReturns = struct { + result1 director.OrphanDisk + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) FindOrphanDiskReturnsOnCall(i int, result1 director.OrphanDisk, result2 error) { + fake.findOrphanDiskMutex.Lock() + defer fake.findOrphanDiskMutex.Unlock() + fake.FindOrphanDiskStub = nil + if fake.findOrphanDiskReturnsOnCall == nil { + fake.findOrphanDiskReturnsOnCall = make(map[int]struct { + result1 director.OrphanDisk + result2 error + }) + } + fake.findOrphanDiskReturnsOnCall[i] = struct { + result1 director.OrphanDisk + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) FindOrphanNetwork(arg1 string) (director.OrphanNetwork, error) { + fake.findOrphanNetworkMutex.Lock() + ret, specificReturn := fake.findOrphanNetworkReturnsOnCall[len(fake.findOrphanNetworkArgsForCall)] + fake.findOrphanNetworkArgsForCall = append(fake.findOrphanNetworkArgsForCall, struct { + arg1 string + }{arg1}) + stub := fake.FindOrphanNetworkStub + fakeReturns := fake.findOrphanNetworkReturns + fake.recordInvocation("FindOrphanNetwork", []interface{}{arg1}) + fake.findOrphanNetworkMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) FindOrphanNetworkCallCount() int { + fake.findOrphanNetworkMutex.RLock() + defer fake.findOrphanNetworkMutex.RUnlock() + return len(fake.findOrphanNetworkArgsForCall) +} + +func (fake *BOSHDirector) FindOrphanNetworkCalls(stub func(string) (director.OrphanNetwork, error)) { + fake.findOrphanNetworkMutex.Lock() + defer fake.findOrphanNetworkMutex.Unlock() + fake.FindOrphanNetworkStub = stub +} + +func (fake *BOSHDirector) FindOrphanNetworkArgsForCall(i int) string { + fake.findOrphanNetworkMutex.RLock() + defer fake.findOrphanNetworkMutex.RUnlock() + argsForCall := fake.findOrphanNetworkArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) FindOrphanNetworkReturns(result1 director.OrphanNetwork, result2 error) { + fake.findOrphanNetworkMutex.Lock() + defer fake.findOrphanNetworkMutex.Unlock() + fake.FindOrphanNetworkStub = nil + fake.findOrphanNetworkReturns = struct { + result1 director.OrphanNetwork + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) FindOrphanNetworkReturnsOnCall(i int, result1 director.OrphanNetwork, result2 error) { + fake.findOrphanNetworkMutex.Lock() + defer fake.findOrphanNetworkMutex.Unlock() + fake.FindOrphanNetworkStub = nil + if fake.findOrphanNetworkReturnsOnCall == nil { + fake.findOrphanNetworkReturnsOnCall = make(map[int]struct { + result1 director.OrphanNetwork + result2 error + }) + } + fake.findOrphanNetworkReturnsOnCall[i] = struct { + result1 director.OrphanNetwork + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) FindRelease(arg1 director.ReleaseSlug) (director.Release, error) { + fake.findReleaseMutex.Lock() + ret, specificReturn := fake.findReleaseReturnsOnCall[len(fake.findReleaseArgsForCall)] + fake.findReleaseArgsForCall = append(fake.findReleaseArgsForCall, struct { + arg1 director.ReleaseSlug + }{arg1}) + stub := fake.FindReleaseStub + fakeReturns := fake.findReleaseReturns + fake.recordInvocation("FindRelease", []interface{}{arg1}) + fake.findReleaseMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) FindReleaseCallCount() int { + fake.findReleaseMutex.RLock() + defer fake.findReleaseMutex.RUnlock() + return len(fake.findReleaseArgsForCall) +} + +func (fake *BOSHDirector) FindReleaseCalls(stub func(director.ReleaseSlug) (director.Release, error)) { + fake.findReleaseMutex.Lock() + defer fake.findReleaseMutex.Unlock() + fake.FindReleaseStub = stub +} + +func (fake *BOSHDirector) FindReleaseArgsForCall(i int) director.ReleaseSlug { + fake.findReleaseMutex.RLock() + defer fake.findReleaseMutex.RUnlock() + argsForCall := fake.findReleaseArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) FindReleaseReturns(result1 director.Release, result2 error) { + fake.findReleaseMutex.Lock() + defer fake.findReleaseMutex.Unlock() + fake.FindReleaseStub = nil + fake.findReleaseReturns = struct { + result1 director.Release + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) FindReleaseReturnsOnCall(i int, result1 director.Release, result2 error) { + fake.findReleaseMutex.Lock() + defer fake.findReleaseMutex.Unlock() + fake.FindReleaseStub = nil + if fake.findReleaseReturnsOnCall == nil { + fake.findReleaseReturnsOnCall = make(map[int]struct { + result1 director.Release + result2 error + }) + } + fake.findReleaseReturnsOnCall[i] = struct { + result1 director.Release + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) FindReleaseSeries(arg1 director.ReleaseSeriesSlug) (director.ReleaseSeries, error) { + fake.findReleaseSeriesMutex.Lock() + ret, specificReturn := fake.findReleaseSeriesReturnsOnCall[len(fake.findReleaseSeriesArgsForCall)] + fake.findReleaseSeriesArgsForCall = append(fake.findReleaseSeriesArgsForCall, struct { + arg1 director.ReleaseSeriesSlug + }{arg1}) + stub := fake.FindReleaseSeriesStub + fakeReturns := fake.findReleaseSeriesReturns + fake.recordInvocation("FindReleaseSeries", []interface{}{arg1}) + fake.findReleaseSeriesMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) FindReleaseSeriesCallCount() int { + fake.findReleaseSeriesMutex.RLock() + defer fake.findReleaseSeriesMutex.RUnlock() + return len(fake.findReleaseSeriesArgsForCall) +} + +func (fake *BOSHDirector) FindReleaseSeriesCalls(stub func(director.ReleaseSeriesSlug) (director.ReleaseSeries, error)) { + fake.findReleaseSeriesMutex.Lock() + defer fake.findReleaseSeriesMutex.Unlock() + fake.FindReleaseSeriesStub = stub +} + +func (fake *BOSHDirector) FindReleaseSeriesArgsForCall(i int) director.ReleaseSeriesSlug { + fake.findReleaseSeriesMutex.RLock() + defer fake.findReleaseSeriesMutex.RUnlock() + argsForCall := fake.findReleaseSeriesArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) FindReleaseSeriesReturns(result1 director.ReleaseSeries, result2 error) { + fake.findReleaseSeriesMutex.Lock() + defer fake.findReleaseSeriesMutex.Unlock() + fake.FindReleaseSeriesStub = nil + fake.findReleaseSeriesReturns = struct { + result1 director.ReleaseSeries + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) FindReleaseSeriesReturnsOnCall(i int, result1 director.ReleaseSeries, result2 error) { + fake.findReleaseSeriesMutex.Lock() + defer fake.findReleaseSeriesMutex.Unlock() + fake.FindReleaseSeriesStub = nil + if fake.findReleaseSeriesReturnsOnCall == nil { + fake.findReleaseSeriesReturnsOnCall = make(map[int]struct { + result1 director.ReleaseSeries + result2 error + }) + } + fake.findReleaseSeriesReturnsOnCall[i] = struct { + result1 director.ReleaseSeries + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) FindStemcell(arg1 director.StemcellSlug) (director.Stemcell, error) { + fake.findStemcellMutex.Lock() + ret, specificReturn := fake.findStemcellReturnsOnCall[len(fake.findStemcellArgsForCall)] + fake.findStemcellArgsForCall = append(fake.findStemcellArgsForCall, struct { + arg1 director.StemcellSlug + }{arg1}) + stub := fake.FindStemcellStub + fakeReturns := fake.findStemcellReturns + fake.recordInvocation("FindStemcell", []interface{}{arg1}) + fake.findStemcellMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) FindStemcellCallCount() int { + fake.findStemcellMutex.RLock() + defer fake.findStemcellMutex.RUnlock() + return len(fake.findStemcellArgsForCall) +} + +func (fake *BOSHDirector) FindStemcellCalls(stub func(director.StemcellSlug) (director.Stemcell, error)) { + fake.findStemcellMutex.Lock() + defer fake.findStemcellMutex.Unlock() + fake.FindStemcellStub = stub +} + +func (fake *BOSHDirector) FindStemcellArgsForCall(i int) director.StemcellSlug { + fake.findStemcellMutex.RLock() + defer fake.findStemcellMutex.RUnlock() + argsForCall := fake.findStemcellArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) FindStemcellReturns(result1 director.Stemcell, result2 error) { + fake.findStemcellMutex.Lock() + defer fake.findStemcellMutex.Unlock() + fake.FindStemcellStub = nil + fake.findStemcellReturns = struct { + result1 director.Stemcell + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) FindStemcellReturnsOnCall(i int, result1 director.Stemcell, result2 error) { + fake.findStemcellMutex.Lock() + defer fake.findStemcellMutex.Unlock() + fake.FindStemcellStub = nil + if fake.findStemcellReturnsOnCall == nil { + fake.findStemcellReturnsOnCall = make(map[int]struct { + result1 director.Stemcell + result2 error + }) + } + fake.findStemcellReturnsOnCall[i] = struct { + result1 director.Stemcell + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) FindTask(arg1 int) (director.Task, error) { + fake.findTaskMutex.Lock() + ret, specificReturn := fake.findTaskReturnsOnCall[len(fake.findTaskArgsForCall)] + fake.findTaskArgsForCall = append(fake.findTaskArgsForCall, struct { + arg1 int + }{arg1}) + stub := fake.FindTaskStub + fakeReturns := fake.findTaskReturns + fake.recordInvocation("FindTask", []interface{}{arg1}) + fake.findTaskMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) FindTaskCallCount() int { + fake.findTaskMutex.RLock() + defer fake.findTaskMutex.RUnlock() + return len(fake.findTaskArgsForCall) +} + +func (fake *BOSHDirector) FindTaskCalls(stub func(int) (director.Task, error)) { + fake.findTaskMutex.Lock() + defer fake.findTaskMutex.Unlock() + fake.FindTaskStub = stub +} + +func (fake *BOSHDirector) FindTaskArgsForCall(i int) int { + fake.findTaskMutex.RLock() + defer fake.findTaskMutex.RUnlock() + argsForCall := fake.findTaskArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) FindTaskReturns(result1 director.Task, result2 error) { + fake.findTaskMutex.Lock() + defer fake.findTaskMutex.Unlock() + fake.FindTaskStub = nil + fake.findTaskReturns = struct { + result1 director.Task + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) FindTaskReturnsOnCall(i int, result1 director.Task, result2 error) { + fake.findTaskMutex.Lock() + defer fake.findTaskMutex.Unlock() + fake.FindTaskStub = nil + if fake.findTaskReturnsOnCall == nil { + fake.findTaskReturnsOnCall = make(map[int]struct { + result1 director.Task + result2 error + }) + } + fake.findTaskReturnsOnCall[i] = struct { + result1 director.Task + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) FindTasksByContextId(arg1 string) ([]director.Task, error) { + fake.findTasksByContextIdMutex.Lock() + ret, specificReturn := fake.findTasksByContextIdReturnsOnCall[len(fake.findTasksByContextIdArgsForCall)] + fake.findTasksByContextIdArgsForCall = append(fake.findTasksByContextIdArgsForCall, struct { + arg1 string + }{arg1}) + stub := fake.FindTasksByContextIdStub + fakeReturns := fake.findTasksByContextIdReturns + fake.recordInvocation("FindTasksByContextId", []interface{}{arg1}) + fake.findTasksByContextIdMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) FindTasksByContextIdCallCount() int { + fake.findTasksByContextIdMutex.RLock() + defer fake.findTasksByContextIdMutex.RUnlock() + return len(fake.findTasksByContextIdArgsForCall) +} + +func (fake *BOSHDirector) FindTasksByContextIdCalls(stub func(string) ([]director.Task, error)) { + fake.findTasksByContextIdMutex.Lock() + defer fake.findTasksByContextIdMutex.Unlock() + fake.FindTasksByContextIdStub = stub +} + +func (fake *BOSHDirector) FindTasksByContextIdArgsForCall(i int) string { + fake.findTasksByContextIdMutex.RLock() + defer fake.findTasksByContextIdMutex.RUnlock() + argsForCall := fake.findTasksByContextIdArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) FindTasksByContextIdReturns(result1 []director.Task, result2 error) { + fake.findTasksByContextIdMutex.Lock() + defer fake.findTasksByContextIdMutex.Unlock() + fake.FindTasksByContextIdStub = nil + fake.findTasksByContextIdReturns = struct { + result1 []director.Task + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) FindTasksByContextIdReturnsOnCall(i int, result1 []director.Task, result2 error) { + fake.findTasksByContextIdMutex.Lock() + defer fake.findTasksByContextIdMutex.Unlock() + fake.FindTasksByContextIdStub = nil + if fake.findTasksByContextIdReturnsOnCall == nil { + fake.findTasksByContextIdReturnsOnCall = make(map[int]struct { + result1 []director.Task + result2 error + }) + } + fake.findTasksByContextIdReturnsOnCall[i] = struct { + result1 []director.Task + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) HasRelease(arg1 string, arg2 string, arg3 director.OSVersionSlug) (bool, error) { + fake.hasReleaseMutex.Lock() + ret, specificReturn := fake.hasReleaseReturnsOnCall[len(fake.hasReleaseArgsForCall)] + fake.hasReleaseArgsForCall = append(fake.hasReleaseArgsForCall, struct { + arg1 string + arg2 string + arg3 director.OSVersionSlug + }{arg1, arg2, arg3}) + stub := fake.HasReleaseStub + fakeReturns := fake.hasReleaseReturns + fake.recordInvocation("HasRelease", []interface{}{arg1, arg2, arg3}) + fake.hasReleaseMutex.Unlock() + if stub != nil { + return stub(arg1, arg2, arg3) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) HasReleaseCallCount() int { + fake.hasReleaseMutex.RLock() + defer fake.hasReleaseMutex.RUnlock() + return len(fake.hasReleaseArgsForCall) +} + +func (fake *BOSHDirector) HasReleaseCalls(stub func(string, string, director.OSVersionSlug) (bool, error)) { + fake.hasReleaseMutex.Lock() + defer fake.hasReleaseMutex.Unlock() + fake.HasReleaseStub = stub +} + +func (fake *BOSHDirector) HasReleaseArgsForCall(i int) (string, string, director.OSVersionSlug) { + fake.hasReleaseMutex.RLock() + defer fake.hasReleaseMutex.RUnlock() + argsForCall := fake.hasReleaseArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3 +} + +func (fake *BOSHDirector) HasReleaseReturns(result1 bool, result2 error) { + fake.hasReleaseMutex.Lock() + defer fake.hasReleaseMutex.Unlock() + fake.HasReleaseStub = nil + fake.hasReleaseReturns = struct { + result1 bool + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) HasReleaseReturnsOnCall(i int, result1 bool, result2 error) { + fake.hasReleaseMutex.Lock() + defer fake.hasReleaseMutex.Unlock() + fake.HasReleaseStub = nil + if fake.hasReleaseReturnsOnCall == nil { + fake.hasReleaseReturnsOnCall = make(map[int]struct { + result1 bool + result2 error + }) + } + fake.hasReleaseReturnsOnCall[i] = struct { + result1 bool + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) Info() (director.Info, error) { + fake.infoMutex.Lock() + ret, specificReturn := fake.infoReturnsOnCall[len(fake.infoArgsForCall)] + fake.infoArgsForCall = append(fake.infoArgsForCall, struct { + }{}) + stub := fake.InfoStub + fakeReturns := fake.infoReturns + fake.recordInvocation("Info", []interface{}{}) + fake.infoMutex.Unlock() + if stub != nil { + return stub() + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) InfoCallCount() int { + fake.infoMutex.RLock() + defer fake.infoMutex.RUnlock() + return len(fake.infoArgsForCall) +} + +func (fake *BOSHDirector) InfoCalls(stub func() (director.Info, error)) { + fake.infoMutex.Lock() + defer fake.infoMutex.Unlock() + fake.InfoStub = stub +} + +func (fake *BOSHDirector) InfoReturns(result1 director.Info, result2 error) { + fake.infoMutex.Lock() + defer fake.infoMutex.Unlock() + fake.InfoStub = nil + fake.infoReturns = struct { + result1 director.Info + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) InfoReturnsOnCall(i int, result1 director.Info, result2 error) { + fake.infoMutex.Lock() + defer fake.infoMutex.Unlock() + fake.InfoStub = nil + if fake.infoReturnsOnCall == nil { + fake.infoReturnsOnCall = make(map[int]struct { + result1 director.Info + result2 error + }) + } + fake.infoReturnsOnCall[i] = struct { + result1 director.Info + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) IsAuthenticated() (bool, error) { + fake.isAuthenticatedMutex.Lock() + ret, specificReturn := fake.isAuthenticatedReturnsOnCall[len(fake.isAuthenticatedArgsForCall)] + fake.isAuthenticatedArgsForCall = append(fake.isAuthenticatedArgsForCall, struct { + }{}) + stub := fake.IsAuthenticatedStub + fakeReturns := fake.isAuthenticatedReturns + fake.recordInvocation("IsAuthenticated", []interface{}{}) + fake.isAuthenticatedMutex.Unlock() + if stub != nil { + return stub() + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) IsAuthenticatedCallCount() int { + fake.isAuthenticatedMutex.RLock() + defer fake.isAuthenticatedMutex.RUnlock() + return len(fake.isAuthenticatedArgsForCall) +} + +func (fake *BOSHDirector) IsAuthenticatedCalls(stub func() (bool, error)) { + fake.isAuthenticatedMutex.Lock() + defer fake.isAuthenticatedMutex.Unlock() + fake.IsAuthenticatedStub = stub +} + +func (fake *BOSHDirector) IsAuthenticatedReturns(result1 bool, result2 error) { + fake.isAuthenticatedMutex.Lock() + defer fake.isAuthenticatedMutex.Unlock() + fake.IsAuthenticatedStub = nil + fake.isAuthenticatedReturns = struct { + result1 bool + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) IsAuthenticatedReturnsOnCall(i int, result1 bool, result2 error) { + fake.isAuthenticatedMutex.Lock() + defer fake.isAuthenticatedMutex.Unlock() + fake.IsAuthenticatedStub = nil + if fake.isAuthenticatedReturnsOnCall == nil { + fake.isAuthenticatedReturnsOnCall = make(map[int]struct { + result1 bool + result2 error + }) + } + fake.isAuthenticatedReturnsOnCall[i] = struct { + result1 bool + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) LatestCPIConfig() (director.CPIConfig, error) { + fake.latestCPIConfigMutex.Lock() + ret, specificReturn := fake.latestCPIConfigReturnsOnCall[len(fake.latestCPIConfigArgsForCall)] + fake.latestCPIConfigArgsForCall = append(fake.latestCPIConfigArgsForCall, struct { + }{}) + stub := fake.LatestCPIConfigStub + fakeReturns := fake.latestCPIConfigReturns + fake.recordInvocation("LatestCPIConfig", []interface{}{}) + fake.latestCPIConfigMutex.Unlock() + if stub != nil { + return stub() + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) LatestCPIConfigCallCount() int { + fake.latestCPIConfigMutex.RLock() + defer fake.latestCPIConfigMutex.RUnlock() + return len(fake.latestCPIConfigArgsForCall) +} + +func (fake *BOSHDirector) LatestCPIConfigCalls(stub func() (director.CPIConfig, error)) { + fake.latestCPIConfigMutex.Lock() + defer fake.latestCPIConfigMutex.Unlock() + fake.LatestCPIConfigStub = stub +} + +func (fake *BOSHDirector) LatestCPIConfigReturns(result1 director.CPIConfig, result2 error) { + fake.latestCPIConfigMutex.Lock() + defer fake.latestCPIConfigMutex.Unlock() + fake.LatestCPIConfigStub = nil + fake.latestCPIConfigReturns = struct { + result1 director.CPIConfig + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) LatestCPIConfigReturnsOnCall(i int, result1 director.CPIConfig, result2 error) { + fake.latestCPIConfigMutex.Lock() + defer fake.latestCPIConfigMutex.Unlock() + fake.LatestCPIConfigStub = nil + if fake.latestCPIConfigReturnsOnCall == nil { + fake.latestCPIConfigReturnsOnCall = make(map[int]struct { + result1 director.CPIConfig + result2 error + }) + } + fake.latestCPIConfigReturnsOnCall[i] = struct { + result1 director.CPIConfig + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) LatestCloudConfig(arg1 string) (director.CloudConfig, error) { + fake.latestCloudConfigMutex.Lock() + ret, specificReturn := fake.latestCloudConfigReturnsOnCall[len(fake.latestCloudConfigArgsForCall)] + fake.latestCloudConfigArgsForCall = append(fake.latestCloudConfigArgsForCall, struct { + arg1 string + }{arg1}) + stub := fake.LatestCloudConfigStub + fakeReturns := fake.latestCloudConfigReturns + fake.recordInvocation("LatestCloudConfig", []interface{}{arg1}) + fake.latestCloudConfigMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) LatestCloudConfigCallCount() int { + fake.latestCloudConfigMutex.RLock() + defer fake.latestCloudConfigMutex.RUnlock() + return len(fake.latestCloudConfigArgsForCall) +} + +func (fake *BOSHDirector) LatestCloudConfigCalls(stub func(string) (director.CloudConfig, error)) { + fake.latestCloudConfigMutex.Lock() + defer fake.latestCloudConfigMutex.Unlock() + fake.LatestCloudConfigStub = stub +} + +func (fake *BOSHDirector) LatestCloudConfigArgsForCall(i int) string { + fake.latestCloudConfigMutex.RLock() + defer fake.latestCloudConfigMutex.RUnlock() + argsForCall := fake.latestCloudConfigArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) LatestCloudConfigReturns(result1 director.CloudConfig, result2 error) { + fake.latestCloudConfigMutex.Lock() + defer fake.latestCloudConfigMutex.Unlock() + fake.LatestCloudConfigStub = nil + fake.latestCloudConfigReturns = struct { + result1 director.CloudConfig + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) LatestCloudConfigReturnsOnCall(i int, result1 director.CloudConfig, result2 error) { + fake.latestCloudConfigMutex.Lock() + defer fake.latestCloudConfigMutex.Unlock() + fake.LatestCloudConfigStub = nil + if fake.latestCloudConfigReturnsOnCall == nil { + fake.latestCloudConfigReturnsOnCall = make(map[int]struct { + result1 director.CloudConfig + result2 error + }) + } + fake.latestCloudConfigReturnsOnCall[i] = struct { + result1 director.CloudConfig + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) LatestConfig(arg1 string, arg2 string) (director.Config, error) { + fake.latestConfigMutex.Lock() + ret, specificReturn := fake.latestConfigReturnsOnCall[len(fake.latestConfigArgsForCall)] + fake.latestConfigArgsForCall = append(fake.latestConfigArgsForCall, struct { + arg1 string + arg2 string + }{arg1, arg2}) + stub := fake.LatestConfigStub + fakeReturns := fake.latestConfigReturns + fake.recordInvocation("LatestConfig", []interface{}{arg1, arg2}) + fake.latestConfigMutex.Unlock() + if stub != nil { + return stub(arg1, arg2) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) LatestConfigCallCount() int { + fake.latestConfigMutex.RLock() + defer fake.latestConfigMutex.RUnlock() + return len(fake.latestConfigArgsForCall) +} + +func (fake *BOSHDirector) LatestConfigCalls(stub func(string, string) (director.Config, error)) { + fake.latestConfigMutex.Lock() + defer fake.latestConfigMutex.Unlock() + fake.LatestConfigStub = stub +} + +func (fake *BOSHDirector) LatestConfigArgsForCall(i int) (string, string) { + fake.latestConfigMutex.RLock() + defer fake.latestConfigMutex.RUnlock() + argsForCall := fake.latestConfigArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2 +} + +func (fake *BOSHDirector) LatestConfigReturns(result1 director.Config, result2 error) { + fake.latestConfigMutex.Lock() + defer fake.latestConfigMutex.Unlock() + fake.LatestConfigStub = nil + fake.latestConfigReturns = struct { + result1 director.Config + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) LatestConfigReturnsOnCall(i int, result1 director.Config, result2 error) { + fake.latestConfigMutex.Lock() + defer fake.latestConfigMutex.Unlock() + fake.LatestConfigStub = nil + if fake.latestConfigReturnsOnCall == nil { + fake.latestConfigReturnsOnCall = make(map[int]struct { + result1 director.Config + result2 error + }) + } + fake.latestConfigReturnsOnCall[i] = struct { + result1 director.Config + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) LatestConfigByID(arg1 string) (director.Config, error) { + fake.latestConfigByIDMutex.Lock() + ret, specificReturn := fake.latestConfigByIDReturnsOnCall[len(fake.latestConfigByIDArgsForCall)] + fake.latestConfigByIDArgsForCall = append(fake.latestConfigByIDArgsForCall, struct { + arg1 string + }{arg1}) + stub := fake.LatestConfigByIDStub + fakeReturns := fake.latestConfigByIDReturns + fake.recordInvocation("LatestConfigByID", []interface{}{arg1}) + fake.latestConfigByIDMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) LatestConfigByIDCallCount() int { + fake.latestConfigByIDMutex.RLock() + defer fake.latestConfigByIDMutex.RUnlock() + return len(fake.latestConfigByIDArgsForCall) +} + +func (fake *BOSHDirector) LatestConfigByIDCalls(stub func(string) (director.Config, error)) { + fake.latestConfigByIDMutex.Lock() + defer fake.latestConfigByIDMutex.Unlock() + fake.LatestConfigByIDStub = stub +} + +func (fake *BOSHDirector) LatestConfigByIDArgsForCall(i int) string { + fake.latestConfigByIDMutex.RLock() + defer fake.latestConfigByIDMutex.RUnlock() + argsForCall := fake.latestConfigByIDArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) LatestConfigByIDReturns(result1 director.Config, result2 error) { + fake.latestConfigByIDMutex.Lock() + defer fake.latestConfigByIDMutex.Unlock() + fake.LatestConfigByIDStub = nil + fake.latestConfigByIDReturns = struct { + result1 director.Config + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) LatestConfigByIDReturnsOnCall(i int, result1 director.Config, result2 error) { + fake.latestConfigByIDMutex.Lock() + defer fake.latestConfigByIDMutex.Unlock() + fake.LatestConfigByIDStub = nil + if fake.latestConfigByIDReturnsOnCall == nil { + fake.latestConfigByIDReturnsOnCall = make(map[int]struct { + result1 director.Config + result2 error + }) + } + fake.latestConfigByIDReturnsOnCall[i] = struct { + result1 director.Config + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) LatestRuntimeConfig(arg1 string) (director.RuntimeConfig, error) { + fake.latestRuntimeConfigMutex.Lock() + ret, specificReturn := fake.latestRuntimeConfigReturnsOnCall[len(fake.latestRuntimeConfigArgsForCall)] + fake.latestRuntimeConfigArgsForCall = append(fake.latestRuntimeConfigArgsForCall, struct { + arg1 string + }{arg1}) + stub := fake.LatestRuntimeConfigStub + fakeReturns := fake.latestRuntimeConfigReturns + fake.recordInvocation("LatestRuntimeConfig", []interface{}{arg1}) + fake.latestRuntimeConfigMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) LatestRuntimeConfigCallCount() int { + fake.latestRuntimeConfigMutex.RLock() + defer fake.latestRuntimeConfigMutex.RUnlock() + return len(fake.latestRuntimeConfigArgsForCall) +} + +func (fake *BOSHDirector) LatestRuntimeConfigCalls(stub func(string) (director.RuntimeConfig, error)) { + fake.latestRuntimeConfigMutex.Lock() + defer fake.latestRuntimeConfigMutex.Unlock() + fake.LatestRuntimeConfigStub = stub +} + +func (fake *BOSHDirector) LatestRuntimeConfigArgsForCall(i int) string { + fake.latestRuntimeConfigMutex.RLock() + defer fake.latestRuntimeConfigMutex.RUnlock() + argsForCall := fake.latestRuntimeConfigArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) LatestRuntimeConfigReturns(result1 director.RuntimeConfig, result2 error) { + fake.latestRuntimeConfigMutex.Lock() + defer fake.latestRuntimeConfigMutex.Unlock() + fake.LatestRuntimeConfigStub = nil + fake.latestRuntimeConfigReturns = struct { + result1 director.RuntimeConfig + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) LatestRuntimeConfigReturnsOnCall(i int, result1 director.RuntimeConfig, result2 error) { + fake.latestRuntimeConfigMutex.Lock() + defer fake.latestRuntimeConfigMutex.Unlock() + fake.LatestRuntimeConfigStub = nil + if fake.latestRuntimeConfigReturnsOnCall == nil { + fake.latestRuntimeConfigReturnsOnCall = make(map[int]struct { + result1 director.RuntimeConfig + result2 error + }) + } + fake.latestRuntimeConfigReturnsOnCall[i] = struct { + result1 director.RuntimeConfig + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) ListConfigs(arg1 int, arg2 director.ConfigsFilter) ([]director.Config, error) { + fake.listConfigsMutex.Lock() + ret, specificReturn := fake.listConfigsReturnsOnCall[len(fake.listConfigsArgsForCall)] + fake.listConfigsArgsForCall = append(fake.listConfigsArgsForCall, struct { + arg1 int + arg2 director.ConfigsFilter + }{arg1, arg2}) + stub := fake.ListConfigsStub + fakeReturns := fake.listConfigsReturns + fake.recordInvocation("ListConfigs", []interface{}{arg1, arg2}) + fake.listConfigsMutex.Unlock() + if stub != nil { + return stub(arg1, arg2) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) ListConfigsCallCount() int { + fake.listConfigsMutex.RLock() + defer fake.listConfigsMutex.RUnlock() + return len(fake.listConfigsArgsForCall) +} + +func (fake *BOSHDirector) ListConfigsCalls(stub func(int, director.ConfigsFilter) ([]director.Config, error)) { + fake.listConfigsMutex.Lock() + defer fake.listConfigsMutex.Unlock() + fake.ListConfigsStub = stub +} + +func (fake *BOSHDirector) ListConfigsArgsForCall(i int) (int, director.ConfigsFilter) { + fake.listConfigsMutex.RLock() + defer fake.listConfigsMutex.RUnlock() + argsForCall := fake.listConfigsArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2 +} + +func (fake *BOSHDirector) ListConfigsReturns(result1 []director.Config, result2 error) { + fake.listConfigsMutex.Lock() + defer fake.listConfigsMutex.Unlock() + fake.ListConfigsStub = nil + fake.listConfigsReturns = struct { + result1 []director.Config + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) ListConfigsReturnsOnCall(i int, result1 []director.Config, result2 error) { + fake.listConfigsMutex.Lock() + defer fake.listConfigsMutex.Unlock() + fake.ListConfigsStub = nil + if fake.listConfigsReturnsOnCall == nil { + fake.listConfigsReturnsOnCall = make(map[int]struct { + result1 []director.Config + result2 error + }) + } + fake.listConfigsReturnsOnCall[i] = struct { + result1 []director.Config + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) ListDeploymentConfigs(arg1 string) (director.DeploymentConfigs, error) { + fake.listDeploymentConfigsMutex.Lock() + ret, specificReturn := fake.listDeploymentConfigsReturnsOnCall[len(fake.listDeploymentConfigsArgsForCall)] + fake.listDeploymentConfigsArgsForCall = append(fake.listDeploymentConfigsArgsForCall, struct { + arg1 string + }{arg1}) + stub := fake.ListDeploymentConfigsStub + fakeReturns := fake.listDeploymentConfigsReturns + fake.recordInvocation("ListDeploymentConfigs", []interface{}{arg1}) + fake.listDeploymentConfigsMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) ListDeploymentConfigsCallCount() int { + fake.listDeploymentConfigsMutex.RLock() + defer fake.listDeploymentConfigsMutex.RUnlock() + return len(fake.listDeploymentConfigsArgsForCall) +} + +func (fake *BOSHDirector) ListDeploymentConfigsCalls(stub func(string) (director.DeploymentConfigs, error)) { + fake.listDeploymentConfigsMutex.Lock() + defer fake.listDeploymentConfigsMutex.Unlock() + fake.ListDeploymentConfigsStub = stub +} + +func (fake *BOSHDirector) ListDeploymentConfigsArgsForCall(i int) string { + fake.listDeploymentConfigsMutex.RLock() + defer fake.listDeploymentConfigsMutex.RUnlock() + argsForCall := fake.listDeploymentConfigsArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) ListDeploymentConfigsReturns(result1 director.DeploymentConfigs, result2 error) { + fake.listDeploymentConfigsMutex.Lock() + defer fake.listDeploymentConfigsMutex.Unlock() + fake.ListDeploymentConfigsStub = nil + fake.listDeploymentConfigsReturns = struct { + result1 director.DeploymentConfigs + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) ListDeploymentConfigsReturnsOnCall(i int, result1 director.DeploymentConfigs, result2 error) { + fake.listDeploymentConfigsMutex.Lock() + defer fake.listDeploymentConfigsMutex.Unlock() + fake.ListDeploymentConfigsStub = nil + if fake.listDeploymentConfigsReturnsOnCall == nil { + fake.listDeploymentConfigsReturnsOnCall = make(map[int]struct { + result1 director.DeploymentConfigs + result2 error + }) + } + fake.listDeploymentConfigsReturnsOnCall[i] = struct { + result1 director.DeploymentConfigs + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) ListDeployments() ([]director.DeploymentResp, error) { + fake.listDeploymentsMutex.Lock() + ret, specificReturn := fake.listDeploymentsReturnsOnCall[len(fake.listDeploymentsArgsForCall)] + fake.listDeploymentsArgsForCall = append(fake.listDeploymentsArgsForCall, struct { + }{}) + stub := fake.ListDeploymentsStub + fakeReturns := fake.listDeploymentsReturns + fake.recordInvocation("ListDeployments", []interface{}{}) + fake.listDeploymentsMutex.Unlock() + if stub != nil { + return stub() + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) ListDeploymentsCallCount() int { + fake.listDeploymentsMutex.RLock() + defer fake.listDeploymentsMutex.RUnlock() + return len(fake.listDeploymentsArgsForCall) +} + +func (fake *BOSHDirector) ListDeploymentsCalls(stub func() ([]director.DeploymentResp, error)) { + fake.listDeploymentsMutex.Lock() + defer fake.listDeploymentsMutex.Unlock() + fake.ListDeploymentsStub = stub +} + +func (fake *BOSHDirector) ListDeploymentsReturns(result1 []director.DeploymentResp, result2 error) { + fake.listDeploymentsMutex.Lock() + defer fake.listDeploymentsMutex.Unlock() + fake.ListDeploymentsStub = nil + fake.listDeploymentsReturns = struct { + result1 []director.DeploymentResp + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) ListDeploymentsReturnsOnCall(i int, result1 []director.DeploymentResp, result2 error) { + fake.listDeploymentsMutex.Lock() + defer fake.listDeploymentsMutex.Unlock() + fake.ListDeploymentsStub = nil + if fake.listDeploymentsReturnsOnCall == nil { + fake.listDeploymentsReturnsOnCall = make(map[int]struct { + result1 []director.DeploymentResp + result2 error + }) + } + fake.listDeploymentsReturnsOnCall[i] = struct { + result1 []director.DeploymentResp + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) Locks() ([]director.Lock, error) { + fake.locksMutex.Lock() + ret, specificReturn := fake.locksReturnsOnCall[len(fake.locksArgsForCall)] + fake.locksArgsForCall = append(fake.locksArgsForCall, struct { + }{}) + stub := fake.LocksStub + fakeReturns := fake.locksReturns + fake.recordInvocation("Locks", []interface{}{}) + fake.locksMutex.Unlock() + if stub != nil { + return stub() + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) LocksCallCount() int { + fake.locksMutex.RLock() + defer fake.locksMutex.RUnlock() + return len(fake.locksArgsForCall) +} + +func (fake *BOSHDirector) LocksCalls(stub func() ([]director.Lock, error)) { + fake.locksMutex.Lock() + defer fake.locksMutex.Unlock() + fake.LocksStub = stub +} + +func (fake *BOSHDirector) LocksReturns(result1 []director.Lock, result2 error) { + fake.locksMutex.Lock() + defer fake.locksMutex.Unlock() + fake.LocksStub = nil + fake.locksReturns = struct { + result1 []director.Lock + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) LocksReturnsOnCall(i int, result1 []director.Lock, result2 error) { + fake.locksMutex.Lock() + defer fake.locksMutex.Unlock() + fake.LocksStub = nil + if fake.locksReturnsOnCall == nil { + fake.locksReturnsOnCall = make(map[int]struct { + result1 []director.Lock + result2 error + }) + } + fake.locksReturnsOnCall[i] = struct { + result1 []director.Lock + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) MatchPackages(arg1 interface{}, arg2 bool) ([]string, error) { + fake.matchPackagesMutex.Lock() + ret, specificReturn := fake.matchPackagesReturnsOnCall[len(fake.matchPackagesArgsForCall)] + fake.matchPackagesArgsForCall = append(fake.matchPackagesArgsForCall, struct { + arg1 interface{} + arg2 bool + }{arg1, arg2}) + stub := fake.MatchPackagesStub + fakeReturns := fake.matchPackagesReturns + fake.recordInvocation("MatchPackages", []interface{}{arg1, arg2}) + fake.matchPackagesMutex.Unlock() + if stub != nil { + return stub(arg1, arg2) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) MatchPackagesCallCount() int { + fake.matchPackagesMutex.RLock() + defer fake.matchPackagesMutex.RUnlock() + return len(fake.matchPackagesArgsForCall) +} + +func (fake *BOSHDirector) MatchPackagesCalls(stub func(interface{}, bool) ([]string, error)) { + fake.matchPackagesMutex.Lock() + defer fake.matchPackagesMutex.Unlock() + fake.MatchPackagesStub = stub +} + +func (fake *BOSHDirector) MatchPackagesArgsForCall(i int) (interface{}, bool) { + fake.matchPackagesMutex.RLock() + defer fake.matchPackagesMutex.RUnlock() + argsForCall := fake.matchPackagesArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2 +} + +func (fake *BOSHDirector) MatchPackagesReturns(result1 []string, result2 error) { + fake.matchPackagesMutex.Lock() + defer fake.matchPackagesMutex.Unlock() + fake.MatchPackagesStub = nil + fake.matchPackagesReturns = struct { + result1 []string + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) MatchPackagesReturnsOnCall(i int, result1 []string, result2 error) { + fake.matchPackagesMutex.Lock() + defer fake.matchPackagesMutex.Unlock() + fake.MatchPackagesStub = nil + if fake.matchPackagesReturnsOnCall == nil { + fake.matchPackagesReturnsOnCall = make(map[int]struct { + result1 []string + result2 error + }) + } + fake.matchPackagesReturnsOnCall[i] = struct { + result1 []string + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) OrphanDisk(arg1 string) error { + fake.orphanDiskMutex.Lock() + ret, specificReturn := fake.orphanDiskReturnsOnCall[len(fake.orphanDiskArgsForCall)] + fake.orphanDiskArgsForCall = append(fake.orphanDiskArgsForCall, struct { + arg1 string + }{arg1}) + stub := fake.OrphanDiskStub + fakeReturns := fake.orphanDiskReturns + fake.recordInvocation("OrphanDisk", []interface{}{arg1}) + fake.orphanDiskMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1 + } + return fakeReturns.result1 +} + +func (fake *BOSHDirector) OrphanDiskCallCount() int { + fake.orphanDiskMutex.RLock() + defer fake.orphanDiskMutex.RUnlock() + return len(fake.orphanDiskArgsForCall) +} + +func (fake *BOSHDirector) OrphanDiskCalls(stub func(string) error) { + fake.orphanDiskMutex.Lock() + defer fake.orphanDiskMutex.Unlock() + fake.OrphanDiskStub = stub +} + +func (fake *BOSHDirector) OrphanDiskArgsForCall(i int) string { + fake.orphanDiskMutex.RLock() + defer fake.orphanDiskMutex.RUnlock() + argsForCall := fake.orphanDiskArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) OrphanDiskReturns(result1 error) { + fake.orphanDiskMutex.Lock() + defer fake.orphanDiskMutex.Unlock() + fake.OrphanDiskStub = nil + fake.orphanDiskReturns = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) OrphanDiskReturnsOnCall(i int, result1 error) { + fake.orphanDiskMutex.Lock() + defer fake.orphanDiskMutex.Unlock() + fake.OrphanDiskStub = nil + if fake.orphanDiskReturnsOnCall == nil { + fake.orphanDiskReturnsOnCall = make(map[int]struct { + result1 error + }) + } + fake.orphanDiskReturnsOnCall[i] = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) OrphanDisks() ([]director.OrphanDisk, error) { + fake.orphanDisksMutex.Lock() + ret, specificReturn := fake.orphanDisksReturnsOnCall[len(fake.orphanDisksArgsForCall)] + fake.orphanDisksArgsForCall = append(fake.orphanDisksArgsForCall, struct { + }{}) + stub := fake.OrphanDisksStub + fakeReturns := fake.orphanDisksReturns + fake.recordInvocation("OrphanDisks", []interface{}{}) + fake.orphanDisksMutex.Unlock() + if stub != nil { + return stub() + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) OrphanDisksCallCount() int { + fake.orphanDisksMutex.RLock() + defer fake.orphanDisksMutex.RUnlock() + return len(fake.orphanDisksArgsForCall) +} + +func (fake *BOSHDirector) OrphanDisksCalls(stub func() ([]director.OrphanDisk, error)) { + fake.orphanDisksMutex.Lock() + defer fake.orphanDisksMutex.Unlock() + fake.OrphanDisksStub = stub +} + +func (fake *BOSHDirector) OrphanDisksReturns(result1 []director.OrphanDisk, result2 error) { + fake.orphanDisksMutex.Lock() + defer fake.orphanDisksMutex.Unlock() + fake.OrphanDisksStub = nil + fake.orphanDisksReturns = struct { + result1 []director.OrphanDisk + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) OrphanDisksReturnsOnCall(i int, result1 []director.OrphanDisk, result2 error) { + fake.orphanDisksMutex.Lock() + defer fake.orphanDisksMutex.Unlock() + fake.OrphanDisksStub = nil + if fake.orphanDisksReturnsOnCall == nil { + fake.orphanDisksReturnsOnCall = make(map[int]struct { + result1 []director.OrphanDisk + result2 error + }) + } + fake.orphanDisksReturnsOnCall[i] = struct { + result1 []director.OrphanDisk + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) OrphanNetworks() ([]director.OrphanNetwork, error) { + fake.orphanNetworksMutex.Lock() + ret, specificReturn := fake.orphanNetworksReturnsOnCall[len(fake.orphanNetworksArgsForCall)] + fake.orphanNetworksArgsForCall = append(fake.orphanNetworksArgsForCall, struct { + }{}) + stub := fake.OrphanNetworksStub + fakeReturns := fake.orphanNetworksReturns + fake.recordInvocation("OrphanNetworks", []interface{}{}) + fake.orphanNetworksMutex.Unlock() + if stub != nil { + return stub() + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) OrphanNetworksCallCount() int { + fake.orphanNetworksMutex.RLock() + defer fake.orphanNetworksMutex.RUnlock() + return len(fake.orphanNetworksArgsForCall) +} + +func (fake *BOSHDirector) OrphanNetworksCalls(stub func() ([]director.OrphanNetwork, error)) { + fake.orphanNetworksMutex.Lock() + defer fake.orphanNetworksMutex.Unlock() + fake.OrphanNetworksStub = stub +} + +func (fake *BOSHDirector) OrphanNetworksReturns(result1 []director.OrphanNetwork, result2 error) { + fake.orphanNetworksMutex.Lock() + defer fake.orphanNetworksMutex.Unlock() + fake.OrphanNetworksStub = nil + fake.orphanNetworksReturns = struct { + result1 []director.OrphanNetwork + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) OrphanNetworksReturnsOnCall(i int, result1 []director.OrphanNetwork, result2 error) { + fake.orphanNetworksMutex.Lock() + defer fake.orphanNetworksMutex.Unlock() + fake.OrphanNetworksStub = nil + if fake.orphanNetworksReturnsOnCall == nil { + fake.orphanNetworksReturnsOnCall = make(map[int]struct { + result1 []director.OrphanNetwork + result2 error + }) + } + fake.orphanNetworksReturnsOnCall[i] = struct { + result1 []director.OrphanNetwork + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) OrphanedVMs() ([]director.OrphanedVM, error) { + fake.orphanedVMsMutex.Lock() + ret, specificReturn := fake.orphanedVMsReturnsOnCall[len(fake.orphanedVMsArgsForCall)] + fake.orphanedVMsArgsForCall = append(fake.orphanedVMsArgsForCall, struct { + }{}) + stub := fake.OrphanedVMsStub + fakeReturns := fake.orphanedVMsReturns + fake.recordInvocation("OrphanedVMs", []interface{}{}) + fake.orphanedVMsMutex.Unlock() + if stub != nil { + return stub() + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) OrphanedVMsCallCount() int { + fake.orphanedVMsMutex.RLock() + defer fake.orphanedVMsMutex.RUnlock() + return len(fake.orphanedVMsArgsForCall) +} + +func (fake *BOSHDirector) OrphanedVMsCalls(stub func() ([]director.OrphanedVM, error)) { + fake.orphanedVMsMutex.Lock() + defer fake.orphanedVMsMutex.Unlock() + fake.OrphanedVMsStub = stub +} + +func (fake *BOSHDirector) OrphanedVMsReturns(result1 []director.OrphanedVM, result2 error) { + fake.orphanedVMsMutex.Lock() + defer fake.orphanedVMsMutex.Unlock() + fake.OrphanedVMsStub = nil + fake.orphanedVMsReturns = struct { + result1 []director.OrphanedVM + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) OrphanedVMsReturnsOnCall(i int, result1 []director.OrphanedVM, result2 error) { + fake.orphanedVMsMutex.Lock() + defer fake.orphanedVMsMutex.Unlock() + fake.OrphanedVMsStub = nil + if fake.orphanedVMsReturnsOnCall == nil { + fake.orphanedVMsReturnsOnCall = make(map[int]struct { + result1 []director.OrphanedVM + result2 error + }) + } + fake.orphanedVMsReturnsOnCall[i] = struct { + result1 []director.OrphanedVM + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) RecentTasks(arg1 int, arg2 director.TasksFilter) ([]director.Task, error) { + fake.recentTasksMutex.Lock() + ret, specificReturn := fake.recentTasksReturnsOnCall[len(fake.recentTasksArgsForCall)] + fake.recentTasksArgsForCall = append(fake.recentTasksArgsForCall, struct { + arg1 int + arg2 director.TasksFilter + }{arg1, arg2}) + stub := fake.RecentTasksStub + fakeReturns := fake.recentTasksReturns + fake.recordInvocation("RecentTasks", []interface{}{arg1, arg2}) + fake.recentTasksMutex.Unlock() + if stub != nil { + return stub(arg1, arg2) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) RecentTasksCallCount() int { + fake.recentTasksMutex.RLock() + defer fake.recentTasksMutex.RUnlock() + return len(fake.recentTasksArgsForCall) +} + +func (fake *BOSHDirector) RecentTasksCalls(stub func(int, director.TasksFilter) ([]director.Task, error)) { + fake.recentTasksMutex.Lock() + defer fake.recentTasksMutex.Unlock() + fake.RecentTasksStub = stub +} + +func (fake *BOSHDirector) RecentTasksArgsForCall(i int) (int, director.TasksFilter) { + fake.recentTasksMutex.RLock() + defer fake.recentTasksMutex.RUnlock() + argsForCall := fake.recentTasksArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2 +} + +func (fake *BOSHDirector) RecentTasksReturns(result1 []director.Task, result2 error) { + fake.recentTasksMutex.Lock() + defer fake.recentTasksMutex.Unlock() + fake.RecentTasksStub = nil + fake.recentTasksReturns = struct { + result1 []director.Task + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) RecentTasksReturnsOnCall(i int, result1 []director.Task, result2 error) { + fake.recentTasksMutex.Lock() + defer fake.recentTasksMutex.Unlock() + fake.RecentTasksStub = nil + if fake.recentTasksReturnsOnCall == nil { + fake.recentTasksReturnsOnCall = make(map[int]struct { + result1 []director.Task + result2 error + }) + } + fake.recentTasksReturnsOnCall[i] = struct { + result1 []director.Task + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) ReleaseHasCompiledPackage(arg1 director.ReleaseSlug, arg2 director.OSVersionSlug) (bool, error) { + fake.releaseHasCompiledPackageMutex.Lock() + ret, specificReturn := fake.releaseHasCompiledPackageReturnsOnCall[len(fake.releaseHasCompiledPackageArgsForCall)] + fake.releaseHasCompiledPackageArgsForCall = append(fake.releaseHasCompiledPackageArgsForCall, struct { + arg1 director.ReleaseSlug + arg2 director.OSVersionSlug + }{arg1, arg2}) + stub := fake.ReleaseHasCompiledPackageStub + fakeReturns := fake.releaseHasCompiledPackageReturns + fake.recordInvocation("ReleaseHasCompiledPackage", []interface{}{arg1, arg2}) + fake.releaseHasCompiledPackageMutex.Unlock() + if stub != nil { + return stub(arg1, arg2) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) ReleaseHasCompiledPackageCallCount() int { + fake.releaseHasCompiledPackageMutex.RLock() + defer fake.releaseHasCompiledPackageMutex.RUnlock() + return len(fake.releaseHasCompiledPackageArgsForCall) +} + +func (fake *BOSHDirector) ReleaseHasCompiledPackageCalls(stub func(director.ReleaseSlug, director.OSVersionSlug) (bool, error)) { + fake.releaseHasCompiledPackageMutex.Lock() + defer fake.releaseHasCompiledPackageMutex.Unlock() + fake.ReleaseHasCompiledPackageStub = stub +} + +func (fake *BOSHDirector) ReleaseHasCompiledPackageArgsForCall(i int) (director.ReleaseSlug, director.OSVersionSlug) { + fake.releaseHasCompiledPackageMutex.RLock() + defer fake.releaseHasCompiledPackageMutex.RUnlock() + argsForCall := fake.releaseHasCompiledPackageArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2 +} + +func (fake *BOSHDirector) ReleaseHasCompiledPackageReturns(result1 bool, result2 error) { + fake.releaseHasCompiledPackageMutex.Lock() + defer fake.releaseHasCompiledPackageMutex.Unlock() + fake.ReleaseHasCompiledPackageStub = nil + fake.releaseHasCompiledPackageReturns = struct { + result1 bool + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) ReleaseHasCompiledPackageReturnsOnCall(i int, result1 bool, result2 error) { + fake.releaseHasCompiledPackageMutex.Lock() + defer fake.releaseHasCompiledPackageMutex.Unlock() + fake.ReleaseHasCompiledPackageStub = nil + if fake.releaseHasCompiledPackageReturnsOnCall == nil { + fake.releaseHasCompiledPackageReturnsOnCall = make(map[int]struct { + result1 bool + result2 error + }) + } + fake.releaseHasCompiledPackageReturnsOnCall[i] = struct { + result1 bool + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) Releases() ([]director.Release, error) { + fake.releasesMutex.Lock() + ret, specificReturn := fake.releasesReturnsOnCall[len(fake.releasesArgsForCall)] + fake.releasesArgsForCall = append(fake.releasesArgsForCall, struct { + }{}) + stub := fake.ReleasesStub + fakeReturns := fake.releasesReturns + fake.recordInvocation("Releases", []interface{}{}) + fake.releasesMutex.Unlock() + if stub != nil { + return stub() + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) ReleasesCallCount() int { + fake.releasesMutex.RLock() + defer fake.releasesMutex.RUnlock() + return len(fake.releasesArgsForCall) +} + +func (fake *BOSHDirector) ReleasesCalls(stub func() ([]director.Release, error)) { + fake.releasesMutex.Lock() + defer fake.releasesMutex.Unlock() + fake.ReleasesStub = stub +} + +func (fake *BOSHDirector) ReleasesReturns(result1 []director.Release, result2 error) { + fake.releasesMutex.Lock() + defer fake.releasesMutex.Unlock() + fake.ReleasesStub = nil + fake.releasesReturns = struct { + result1 []director.Release + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) ReleasesReturnsOnCall(i int, result1 []director.Release, result2 error) { + fake.releasesMutex.Lock() + defer fake.releasesMutex.Unlock() + fake.ReleasesStub = nil + if fake.releasesReturnsOnCall == nil { + fake.releasesReturnsOnCall = make(map[int]struct { + result1 []director.Release + result2 error + }) + } + fake.releasesReturnsOnCall[i] = struct { + result1 []director.Release + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) StemcellNeedsUpload(arg1 director.StemcellInfo) (bool, error) { + fake.stemcellNeedsUploadMutex.Lock() + ret, specificReturn := fake.stemcellNeedsUploadReturnsOnCall[len(fake.stemcellNeedsUploadArgsForCall)] + fake.stemcellNeedsUploadArgsForCall = append(fake.stemcellNeedsUploadArgsForCall, struct { + arg1 director.StemcellInfo + }{arg1}) + stub := fake.StemcellNeedsUploadStub + fakeReturns := fake.stemcellNeedsUploadReturns + fake.recordInvocation("StemcellNeedsUpload", []interface{}{arg1}) + fake.stemcellNeedsUploadMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) StemcellNeedsUploadCallCount() int { + fake.stemcellNeedsUploadMutex.RLock() + defer fake.stemcellNeedsUploadMutex.RUnlock() + return len(fake.stemcellNeedsUploadArgsForCall) +} + +func (fake *BOSHDirector) StemcellNeedsUploadCalls(stub func(director.StemcellInfo) (bool, error)) { + fake.stemcellNeedsUploadMutex.Lock() + defer fake.stemcellNeedsUploadMutex.Unlock() + fake.StemcellNeedsUploadStub = stub +} + +func (fake *BOSHDirector) StemcellNeedsUploadArgsForCall(i int) director.StemcellInfo { + fake.stemcellNeedsUploadMutex.RLock() + defer fake.stemcellNeedsUploadMutex.RUnlock() + argsForCall := fake.stemcellNeedsUploadArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) StemcellNeedsUploadReturns(result1 bool, result2 error) { + fake.stemcellNeedsUploadMutex.Lock() + defer fake.stemcellNeedsUploadMutex.Unlock() + fake.StemcellNeedsUploadStub = nil + fake.stemcellNeedsUploadReturns = struct { + result1 bool + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) StemcellNeedsUploadReturnsOnCall(i int, result1 bool, result2 error) { + fake.stemcellNeedsUploadMutex.Lock() + defer fake.stemcellNeedsUploadMutex.Unlock() + fake.StemcellNeedsUploadStub = nil + if fake.stemcellNeedsUploadReturnsOnCall == nil { + fake.stemcellNeedsUploadReturnsOnCall = make(map[int]struct { + result1 bool + result2 error + }) + } + fake.stemcellNeedsUploadReturnsOnCall[i] = struct { + result1 bool + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) Stemcells() ([]director.Stemcell, error) { + fake.stemcellsMutex.Lock() + ret, specificReturn := fake.stemcellsReturnsOnCall[len(fake.stemcellsArgsForCall)] + fake.stemcellsArgsForCall = append(fake.stemcellsArgsForCall, struct { + }{}) + stub := fake.StemcellsStub + fakeReturns := fake.stemcellsReturns + fake.recordInvocation("Stemcells", []interface{}{}) + fake.stemcellsMutex.Unlock() + if stub != nil { + return stub() + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) StemcellsCallCount() int { + fake.stemcellsMutex.RLock() + defer fake.stemcellsMutex.RUnlock() + return len(fake.stemcellsArgsForCall) +} + +func (fake *BOSHDirector) StemcellsCalls(stub func() ([]director.Stemcell, error)) { + fake.stemcellsMutex.Lock() + defer fake.stemcellsMutex.Unlock() + fake.StemcellsStub = stub +} + +func (fake *BOSHDirector) StemcellsReturns(result1 []director.Stemcell, result2 error) { + fake.stemcellsMutex.Lock() + defer fake.stemcellsMutex.Unlock() + fake.StemcellsStub = nil + fake.stemcellsReturns = struct { + result1 []director.Stemcell + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) StemcellsReturnsOnCall(i int, result1 []director.Stemcell, result2 error) { + fake.stemcellsMutex.Lock() + defer fake.stemcellsMutex.Unlock() + fake.StemcellsStub = nil + if fake.stemcellsReturnsOnCall == nil { + fake.stemcellsReturnsOnCall = make(map[int]struct { + result1 []director.Stemcell + result2 error + }) + } + fake.stemcellsReturnsOnCall[i] = struct { + result1 []director.Stemcell + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) UpdateCPIConfig(arg1 []byte) error { + var arg1Copy []byte + if arg1 != nil { + arg1Copy = make([]byte, len(arg1)) + copy(arg1Copy, arg1) + } + fake.updateCPIConfigMutex.Lock() + ret, specificReturn := fake.updateCPIConfigReturnsOnCall[len(fake.updateCPIConfigArgsForCall)] + fake.updateCPIConfigArgsForCall = append(fake.updateCPIConfigArgsForCall, struct { + arg1 []byte + }{arg1Copy}) + stub := fake.UpdateCPIConfigStub + fakeReturns := fake.updateCPIConfigReturns + fake.recordInvocation("UpdateCPIConfig", []interface{}{arg1Copy}) + fake.updateCPIConfigMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1 + } + return fakeReturns.result1 +} + +func (fake *BOSHDirector) UpdateCPIConfigCallCount() int { + fake.updateCPIConfigMutex.RLock() + defer fake.updateCPIConfigMutex.RUnlock() + return len(fake.updateCPIConfigArgsForCall) +} + +func (fake *BOSHDirector) UpdateCPIConfigCalls(stub func([]byte) error) { + fake.updateCPIConfigMutex.Lock() + defer fake.updateCPIConfigMutex.Unlock() + fake.UpdateCPIConfigStub = stub +} + +func (fake *BOSHDirector) UpdateCPIConfigArgsForCall(i int) []byte { + fake.updateCPIConfigMutex.RLock() + defer fake.updateCPIConfigMutex.RUnlock() + argsForCall := fake.updateCPIConfigArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) UpdateCPIConfigReturns(result1 error) { + fake.updateCPIConfigMutex.Lock() + defer fake.updateCPIConfigMutex.Unlock() + fake.UpdateCPIConfigStub = nil + fake.updateCPIConfigReturns = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) UpdateCPIConfigReturnsOnCall(i int, result1 error) { + fake.updateCPIConfigMutex.Lock() + defer fake.updateCPIConfigMutex.Unlock() + fake.UpdateCPIConfigStub = nil + if fake.updateCPIConfigReturnsOnCall == nil { + fake.updateCPIConfigReturnsOnCall = make(map[int]struct { + result1 error + }) + } + fake.updateCPIConfigReturnsOnCall[i] = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) UpdateCloudConfig(arg1 string, arg2 []byte) error { + var arg2Copy []byte + if arg2 != nil { + arg2Copy = make([]byte, len(arg2)) + copy(arg2Copy, arg2) + } + fake.updateCloudConfigMutex.Lock() + ret, specificReturn := fake.updateCloudConfigReturnsOnCall[len(fake.updateCloudConfigArgsForCall)] + fake.updateCloudConfigArgsForCall = append(fake.updateCloudConfigArgsForCall, struct { + arg1 string + arg2 []byte + }{arg1, arg2Copy}) + stub := fake.UpdateCloudConfigStub + fakeReturns := fake.updateCloudConfigReturns + fake.recordInvocation("UpdateCloudConfig", []interface{}{arg1, arg2Copy}) + fake.updateCloudConfigMutex.Unlock() + if stub != nil { + return stub(arg1, arg2) + } + if specificReturn { + return ret.result1 + } + return fakeReturns.result1 +} + +func (fake *BOSHDirector) UpdateCloudConfigCallCount() int { + fake.updateCloudConfigMutex.RLock() + defer fake.updateCloudConfigMutex.RUnlock() + return len(fake.updateCloudConfigArgsForCall) +} + +func (fake *BOSHDirector) UpdateCloudConfigCalls(stub func(string, []byte) error) { + fake.updateCloudConfigMutex.Lock() + defer fake.updateCloudConfigMutex.Unlock() + fake.UpdateCloudConfigStub = stub +} + +func (fake *BOSHDirector) UpdateCloudConfigArgsForCall(i int) (string, []byte) { + fake.updateCloudConfigMutex.RLock() + defer fake.updateCloudConfigMutex.RUnlock() + argsForCall := fake.updateCloudConfigArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2 +} + +func (fake *BOSHDirector) UpdateCloudConfigReturns(result1 error) { + fake.updateCloudConfigMutex.Lock() + defer fake.updateCloudConfigMutex.Unlock() + fake.UpdateCloudConfigStub = nil + fake.updateCloudConfigReturns = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) UpdateCloudConfigReturnsOnCall(i int, result1 error) { + fake.updateCloudConfigMutex.Lock() + defer fake.updateCloudConfigMutex.Unlock() + fake.UpdateCloudConfigStub = nil + if fake.updateCloudConfigReturnsOnCall == nil { + fake.updateCloudConfigReturnsOnCall = make(map[int]struct { + result1 error + }) + } + fake.updateCloudConfigReturnsOnCall[i] = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) UpdateConfig(arg1 string, arg2 string, arg3 string, arg4 []byte) (director.Config, error) { + var arg4Copy []byte + if arg4 != nil { + arg4Copy = make([]byte, len(arg4)) + copy(arg4Copy, arg4) + } + fake.updateConfigMutex.Lock() + ret, specificReturn := fake.updateConfigReturnsOnCall[len(fake.updateConfigArgsForCall)] + fake.updateConfigArgsForCall = append(fake.updateConfigArgsForCall, struct { + arg1 string + arg2 string + arg3 string + arg4 []byte + }{arg1, arg2, arg3, arg4Copy}) + stub := fake.UpdateConfigStub + fakeReturns := fake.updateConfigReturns + fake.recordInvocation("UpdateConfig", []interface{}{arg1, arg2, arg3, arg4Copy}) + fake.updateConfigMutex.Unlock() + if stub != nil { + return stub(arg1, arg2, arg3, arg4) + } + if specificReturn { + return ret.result1, ret.result2 + } + return fakeReturns.result1, fakeReturns.result2 +} + +func (fake *BOSHDirector) UpdateConfigCallCount() int { + fake.updateConfigMutex.RLock() + defer fake.updateConfigMutex.RUnlock() + return len(fake.updateConfigArgsForCall) +} + +func (fake *BOSHDirector) UpdateConfigCalls(stub func(string, string, string, []byte) (director.Config, error)) { + fake.updateConfigMutex.Lock() + defer fake.updateConfigMutex.Unlock() + fake.UpdateConfigStub = stub +} + +func (fake *BOSHDirector) UpdateConfigArgsForCall(i int) (string, string, string, []byte) { + fake.updateConfigMutex.RLock() + defer fake.updateConfigMutex.RUnlock() + argsForCall := fake.updateConfigArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3, argsForCall.arg4 +} + +func (fake *BOSHDirector) UpdateConfigReturns(result1 director.Config, result2 error) { + fake.updateConfigMutex.Lock() + defer fake.updateConfigMutex.Unlock() + fake.UpdateConfigStub = nil + fake.updateConfigReturns = struct { + result1 director.Config + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) UpdateConfigReturnsOnCall(i int, result1 director.Config, result2 error) { + fake.updateConfigMutex.Lock() + defer fake.updateConfigMutex.Unlock() + fake.UpdateConfigStub = nil + if fake.updateConfigReturnsOnCall == nil { + fake.updateConfigReturnsOnCall = make(map[int]struct { + result1 director.Config + result2 error + }) + } + fake.updateConfigReturnsOnCall[i] = struct { + result1 director.Config + result2 error + }{result1, result2} +} + +func (fake *BOSHDirector) UpdateRuntimeConfig(arg1 string, arg2 []byte) error { + var arg2Copy []byte + if arg2 != nil { + arg2Copy = make([]byte, len(arg2)) + copy(arg2Copy, arg2) + } + fake.updateRuntimeConfigMutex.Lock() + ret, specificReturn := fake.updateRuntimeConfigReturnsOnCall[len(fake.updateRuntimeConfigArgsForCall)] + fake.updateRuntimeConfigArgsForCall = append(fake.updateRuntimeConfigArgsForCall, struct { + arg1 string + arg2 []byte + }{arg1, arg2Copy}) + stub := fake.UpdateRuntimeConfigStub + fakeReturns := fake.updateRuntimeConfigReturns + fake.recordInvocation("UpdateRuntimeConfig", []interface{}{arg1, arg2Copy}) + fake.updateRuntimeConfigMutex.Unlock() + if stub != nil { + return stub(arg1, arg2) + } + if specificReturn { + return ret.result1 + } + return fakeReturns.result1 +} + +func (fake *BOSHDirector) UpdateRuntimeConfigCallCount() int { + fake.updateRuntimeConfigMutex.RLock() + defer fake.updateRuntimeConfigMutex.RUnlock() + return len(fake.updateRuntimeConfigArgsForCall) +} + +func (fake *BOSHDirector) UpdateRuntimeConfigCalls(stub func(string, []byte) error) { + fake.updateRuntimeConfigMutex.Lock() + defer fake.updateRuntimeConfigMutex.Unlock() + fake.UpdateRuntimeConfigStub = stub +} + +func (fake *BOSHDirector) UpdateRuntimeConfigArgsForCall(i int) (string, []byte) { + fake.updateRuntimeConfigMutex.RLock() + defer fake.updateRuntimeConfigMutex.RUnlock() + argsForCall := fake.updateRuntimeConfigArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2 +} + +func (fake *BOSHDirector) UpdateRuntimeConfigReturns(result1 error) { + fake.updateRuntimeConfigMutex.Lock() + defer fake.updateRuntimeConfigMutex.Unlock() + fake.UpdateRuntimeConfigStub = nil + fake.updateRuntimeConfigReturns = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) UpdateRuntimeConfigReturnsOnCall(i int, result1 error) { + fake.updateRuntimeConfigMutex.Lock() + defer fake.updateRuntimeConfigMutex.Unlock() + fake.UpdateRuntimeConfigStub = nil + if fake.updateRuntimeConfigReturnsOnCall == nil { + fake.updateRuntimeConfigReturnsOnCall = make(map[int]struct { + result1 error + }) + } + fake.updateRuntimeConfigReturnsOnCall[i] = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) UploadReleaseFile(arg1 director.UploadFile, arg2 bool, arg3 bool) error { + fake.uploadReleaseFileMutex.Lock() + ret, specificReturn := fake.uploadReleaseFileReturnsOnCall[len(fake.uploadReleaseFileArgsForCall)] + fake.uploadReleaseFileArgsForCall = append(fake.uploadReleaseFileArgsForCall, struct { + arg1 director.UploadFile + arg2 bool + arg3 bool + }{arg1, arg2, arg3}) + stub := fake.UploadReleaseFileStub + fakeReturns := fake.uploadReleaseFileReturns + fake.recordInvocation("UploadReleaseFile", []interface{}{arg1, arg2, arg3}) + fake.uploadReleaseFileMutex.Unlock() + if stub != nil { + return stub(arg1, arg2, arg3) + } + if specificReturn { + return ret.result1 + } + return fakeReturns.result1 +} + +func (fake *BOSHDirector) UploadReleaseFileCallCount() int { + fake.uploadReleaseFileMutex.RLock() + defer fake.uploadReleaseFileMutex.RUnlock() + return len(fake.uploadReleaseFileArgsForCall) +} + +func (fake *BOSHDirector) UploadReleaseFileCalls(stub func(director.UploadFile, bool, bool) error) { + fake.uploadReleaseFileMutex.Lock() + defer fake.uploadReleaseFileMutex.Unlock() + fake.UploadReleaseFileStub = stub +} + +func (fake *BOSHDirector) UploadReleaseFileArgsForCall(i int) (director.UploadFile, bool, bool) { + fake.uploadReleaseFileMutex.RLock() + defer fake.uploadReleaseFileMutex.RUnlock() + argsForCall := fake.uploadReleaseFileArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3 +} + +func (fake *BOSHDirector) UploadReleaseFileReturns(result1 error) { + fake.uploadReleaseFileMutex.Lock() + defer fake.uploadReleaseFileMutex.Unlock() + fake.UploadReleaseFileStub = nil + fake.uploadReleaseFileReturns = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) UploadReleaseFileReturnsOnCall(i int, result1 error) { + fake.uploadReleaseFileMutex.Lock() + defer fake.uploadReleaseFileMutex.Unlock() + fake.UploadReleaseFileStub = nil + if fake.uploadReleaseFileReturnsOnCall == nil { + fake.uploadReleaseFileReturnsOnCall = make(map[int]struct { + result1 error + }) + } + fake.uploadReleaseFileReturnsOnCall[i] = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) UploadReleaseURL(arg1 string, arg2 string, arg3 bool, arg4 bool) error { + fake.uploadReleaseURLMutex.Lock() + ret, specificReturn := fake.uploadReleaseURLReturnsOnCall[len(fake.uploadReleaseURLArgsForCall)] + fake.uploadReleaseURLArgsForCall = append(fake.uploadReleaseURLArgsForCall, struct { + arg1 string + arg2 string + arg3 bool + arg4 bool + }{arg1, arg2, arg3, arg4}) + stub := fake.UploadReleaseURLStub + fakeReturns := fake.uploadReleaseURLReturns + fake.recordInvocation("UploadReleaseURL", []interface{}{arg1, arg2, arg3, arg4}) + fake.uploadReleaseURLMutex.Unlock() + if stub != nil { + return stub(arg1, arg2, arg3, arg4) + } + if specificReturn { + return ret.result1 + } + return fakeReturns.result1 +} + +func (fake *BOSHDirector) UploadReleaseURLCallCount() int { + fake.uploadReleaseURLMutex.RLock() + defer fake.uploadReleaseURLMutex.RUnlock() + return len(fake.uploadReleaseURLArgsForCall) +} + +func (fake *BOSHDirector) UploadReleaseURLCalls(stub func(string, string, bool, bool) error) { + fake.uploadReleaseURLMutex.Lock() + defer fake.uploadReleaseURLMutex.Unlock() + fake.UploadReleaseURLStub = stub +} + +func (fake *BOSHDirector) UploadReleaseURLArgsForCall(i int) (string, string, bool, bool) { + fake.uploadReleaseURLMutex.RLock() + defer fake.uploadReleaseURLMutex.RUnlock() + argsForCall := fake.uploadReleaseURLArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3, argsForCall.arg4 +} + +func (fake *BOSHDirector) UploadReleaseURLReturns(result1 error) { + fake.uploadReleaseURLMutex.Lock() + defer fake.uploadReleaseURLMutex.Unlock() + fake.UploadReleaseURLStub = nil + fake.uploadReleaseURLReturns = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) UploadReleaseURLReturnsOnCall(i int, result1 error) { + fake.uploadReleaseURLMutex.Lock() + defer fake.uploadReleaseURLMutex.Unlock() + fake.UploadReleaseURLStub = nil + if fake.uploadReleaseURLReturnsOnCall == nil { + fake.uploadReleaseURLReturnsOnCall = make(map[int]struct { + result1 error + }) + } + fake.uploadReleaseURLReturnsOnCall[i] = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) UploadStemcellFile(arg1 director.UploadFile, arg2 bool) error { + fake.uploadStemcellFileMutex.Lock() + ret, specificReturn := fake.uploadStemcellFileReturnsOnCall[len(fake.uploadStemcellFileArgsForCall)] + fake.uploadStemcellFileArgsForCall = append(fake.uploadStemcellFileArgsForCall, struct { + arg1 director.UploadFile + arg2 bool + }{arg1, arg2}) + stub := fake.UploadStemcellFileStub + fakeReturns := fake.uploadStemcellFileReturns + fake.recordInvocation("UploadStemcellFile", []interface{}{arg1, arg2}) + fake.uploadStemcellFileMutex.Unlock() + if stub != nil { + return stub(arg1, arg2) + } + if specificReturn { + return ret.result1 + } + return fakeReturns.result1 +} + +func (fake *BOSHDirector) UploadStemcellFileCallCount() int { + fake.uploadStemcellFileMutex.RLock() + defer fake.uploadStemcellFileMutex.RUnlock() + return len(fake.uploadStemcellFileArgsForCall) +} + +func (fake *BOSHDirector) UploadStemcellFileCalls(stub func(director.UploadFile, bool) error) { + fake.uploadStemcellFileMutex.Lock() + defer fake.uploadStemcellFileMutex.Unlock() + fake.UploadStemcellFileStub = stub +} + +func (fake *BOSHDirector) UploadStemcellFileArgsForCall(i int) (director.UploadFile, bool) { + fake.uploadStemcellFileMutex.RLock() + defer fake.uploadStemcellFileMutex.RUnlock() + argsForCall := fake.uploadStemcellFileArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2 +} + +func (fake *BOSHDirector) UploadStemcellFileReturns(result1 error) { + fake.uploadStemcellFileMutex.Lock() + defer fake.uploadStemcellFileMutex.Unlock() + fake.UploadStemcellFileStub = nil + fake.uploadStemcellFileReturns = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) UploadStemcellFileReturnsOnCall(i int, result1 error) { + fake.uploadStemcellFileMutex.Lock() + defer fake.uploadStemcellFileMutex.Unlock() + fake.UploadStemcellFileStub = nil + if fake.uploadStemcellFileReturnsOnCall == nil { + fake.uploadStemcellFileReturnsOnCall = make(map[int]struct { + result1 error + }) + } + fake.uploadStemcellFileReturnsOnCall[i] = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) UploadStemcellURL(arg1 string, arg2 string, arg3 bool) error { + fake.uploadStemcellURLMutex.Lock() + ret, specificReturn := fake.uploadStemcellURLReturnsOnCall[len(fake.uploadStemcellURLArgsForCall)] + fake.uploadStemcellURLArgsForCall = append(fake.uploadStemcellURLArgsForCall, struct { + arg1 string + arg2 string + arg3 bool + }{arg1, arg2, arg3}) + stub := fake.UploadStemcellURLStub + fakeReturns := fake.uploadStemcellURLReturns + fake.recordInvocation("UploadStemcellURL", []interface{}{arg1, arg2, arg3}) + fake.uploadStemcellURLMutex.Unlock() + if stub != nil { + return stub(arg1, arg2, arg3) + } + if specificReturn { + return ret.result1 + } + return fakeReturns.result1 +} + +func (fake *BOSHDirector) UploadStemcellURLCallCount() int { + fake.uploadStemcellURLMutex.RLock() + defer fake.uploadStemcellURLMutex.RUnlock() + return len(fake.uploadStemcellURLArgsForCall) +} + +func (fake *BOSHDirector) UploadStemcellURLCalls(stub func(string, string, bool) error) { + fake.uploadStemcellURLMutex.Lock() + defer fake.uploadStemcellURLMutex.Unlock() + fake.UploadStemcellURLStub = stub +} + +func (fake *BOSHDirector) UploadStemcellURLArgsForCall(i int) (string, string, bool) { + fake.uploadStemcellURLMutex.RLock() + defer fake.uploadStemcellURLMutex.RUnlock() + argsForCall := fake.uploadStemcellURLArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3 +} + +func (fake *BOSHDirector) UploadStemcellURLReturns(result1 error) { + fake.uploadStemcellURLMutex.Lock() + defer fake.uploadStemcellURLMutex.Unlock() + fake.UploadStemcellURLStub = nil + fake.uploadStemcellURLReturns = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) UploadStemcellURLReturnsOnCall(i int, result1 error) { + fake.uploadStemcellURLMutex.Lock() + defer fake.uploadStemcellURLMutex.Unlock() + fake.UploadStemcellURLStub = nil + if fake.uploadStemcellURLReturnsOnCall == nil { + fake.uploadStemcellURLReturnsOnCall = make(map[int]struct { + result1 error + }) + } + fake.uploadStemcellURLReturnsOnCall[i] = struct { + result1 error + }{result1} +} + +func (fake *BOSHDirector) WithContext(arg1 string) director.Director { + fake.withContextMutex.Lock() + ret, specificReturn := fake.withContextReturnsOnCall[len(fake.withContextArgsForCall)] + fake.withContextArgsForCall = append(fake.withContextArgsForCall, struct { + arg1 string + }{arg1}) + stub := fake.WithContextStub + fakeReturns := fake.withContextReturns + fake.recordInvocation("WithContext", []interface{}{arg1}) + fake.withContextMutex.Unlock() + if stub != nil { + return stub(arg1) + } + if specificReturn { + return ret.result1 + } + return fakeReturns.result1 +} + +func (fake *BOSHDirector) WithContextCallCount() int { + fake.withContextMutex.RLock() + defer fake.withContextMutex.RUnlock() + return len(fake.withContextArgsForCall) +} + +func (fake *BOSHDirector) WithContextCalls(stub func(string) director.Director) { + fake.withContextMutex.Lock() + defer fake.withContextMutex.Unlock() + fake.WithContextStub = stub +} + +func (fake *BOSHDirector) WithContextArgsForCall(i int) string { + fake.withContextMutex.RLock() + defer fake.withContextMutex.RUnlock() + argsForCall := fake.withContextArgsForCall[i] + return argsForCall.arg1 +} + +func (fake *BOSHDirector) WithContextReturns(result1 director.Director) { + fake.withContextMutex.Lock() + defer fake.withContextMutex.Unlock() + fake.WithContextStub = nil + fake.withContextReturns = struct { + result1 director.Director + }{result1} +} + +func (fake *BOSHDirector) WithContextReturnsOnCall(i int, result1 director.Director) { + fake.withContextMutex.Lock() + defer fake.withContextMutex.Unlock() + fake.WithContextStub = nil + if fake.withContextReturnsOnCall == nil { + fake.withContextReturnsOnCall = make(map[int]struct { + result1 director.Director + }) + } + fake.withContextReturnsOnCall[i] = struct { + result1 director.Director + }{result1} +} + +func (fake *BOSHDirector) Invocations() map[string][][]interface{} { + fake.invocationsMutex.RLock() + defer fake.invocationsMutex.RUnlock() + fake.cancelTasksMutex.RLock() + defer fake.cancelTasksMutex.RUnlock() + fake.certificateExpiryMutex.RLock() + defer fake.certificateExpiryMutex.RUnlock() + fake.cleanUpMutex.RLock() + defer fake.cleanUpMutex.RUnlock() + fake.currentTasksMutex.RLock() + defer fake.currentTasksMutex.RUnlock() + fake.deleteConfigMutex.RLock() + defer fake.deleteConfigMutex.RUnlock() + fake.deleteConfigByIDMutex.RLock() + defer fake.deleteConfigByIDMutex.RUnlock() + fake.deploymentsMutex.RLock() + defer fake.deploymentsMutex.RUnlock() + fake.diffCPIConfigMutex.RLock() + defer fake.diffCPIConfigMutex.RUnlock() + fake.diffCloudConfigMutex.RLock() + defer fake.diffCloudConfigMutex.RUnlock() + fake.diffConfigMutex.RLock() + defer fake.diffConfigMutex.RUnlock() + fake.diffConfigByIDOrContentMutex.RLock() + defer fake.diffConfigByIDOrContentMutex.RUnlock() + fake.diffRuntimeConfigMutex.RLock() + defer fake.diffRuntimeConfigMutex.RUnlock() + fake.downloadResourceUncheckedMutex.RLock() + defer fake.downloadResourceUncheckedMutex.RUnlock() + fake.enableResurrectionMutex.RLock() + defer fake.enableResurrectionMutex.RUnlock() + fake.eventMutex.RLock() + defer fake.eventMutex.RUnlock() + fake.eventsMutex.RLock() + defer fake.eventsMutex.RUnlock() + fake.findDeploymentMutex.RLock() + defer fake.findDeploymentMutex.RUnlock() + fake.findOrphanDiskMutex.RLock() + defer fake.findOrphanDiskMutex.RUnlock() + fake.findOrphanNetworkMutex.RLock() + defer fake.findOrphanNetworkMutex.RUnlock() + fake.findReleaseMutex.RLock() + defer fake.findReleaseMutex.RUnlock() + fake.findReleaseSeriesMutex.RLock() + defer fake.findReleaseSeriesMutex.RUnlock() + fake.findStemcellMutex.RLock() + defer fake.findStemcellMutex.RUnlock() + fake.findTaskMutex.RLock() + defer fake.findTaskMutex.RUnlock() + fake.findTasksByContextIdMutex.RLock() + defer fake.findTasksByContextIdMutex.RUnlock() + fake.hasReleaseMutex.RLock() + defer fake.hasReleaseMutex.RUnlock() + fake.infoMutex.RLock() + defer fake.infoMutex.RUnlock() + fake.isAuthenticatedMutex.RLock() + defer fake.isAuthenticatedMutex.RUnlock() + fake.latestCPIConfigMutex.RLock() + defer fake.latestCPIConfigMutex.RUnlock() + fake.latestCloudConfigMutex.RLock() + defer fake.latestCloudConfigMutex.RUnlock() + fake.latestConfigMutex.RLock() + defer fake.latestConfigMutex.RUnlock() + fake.latestConfigByIDMutex.RLock() + defer fake.latestConfigByIDMutex.RUnlock() + fake.latestRuntimeConfigMutex.RLock() + defer fake.latestRuntimeConfigMutex.RUnlock() + fake.listConfigsMutex.RLock() + defer fake.listConfigsMutex.RUnlock() + fake.listDeploymentConfigsMutex.RLock() + defer fake.listDeploymentConfigsMutex.RUnlock() + fake.listDeploymentsMutex.RLock() + defer fake.listDeploymentsMutex.RUnlock() + fake.locksMutex.RLock() + defer fake.locksMutex.RUnlock() + fake.matchPackagesMutex.RLock() + defer fake.matchPackagesMutex.RUnlock() + fake.orphanDiskMutex.RLock() + defer fake.orphanDiskMutex.RUnlock() + fake.orphanDisksMutex.RLock() + defer fake.orphanDisksMutex.RUnlock() + fake.orphanNetworksMutex.RLock() + defer fake.orphanNetworksMutex.RUnlock() + fake.orphanedVMsMutex.RLock() + defer fake.orphanedVMsMutex.RUnlock() + fake.recentTasksMutex.RLock() + defer fake.recentTasksMutex.RUnlock() + fake.releaseHasCompiledPackageMutex.RLock() + defer fake.releaseHasCompiledPackageMutex.RUnlock() + fake.releasesMutex.RLock() + defer fake.releasesMutex.RUnlock() + fake.stemcellNeedsUploadMutex.RLock() + defer fake.stemcellNeedsUploadMutex.RUnlock() + fake.stemcellsMutex.RLock() + defer fake.stemcellsMutex.RUnlock() + fake.updateCPIConfigMutex.RLock() + defer fake.updateCPIConfigMutex.RUnlock() + fake.updateCloudConfigMutex.RLock() + defer fake.updateCloudConfigMutex.RUnlock() + fake.updateConfigMutex.RLock() + defer fake.updateConfigMutex.RUnlock() + fake.updateRuntimeConfigMutex.RLock() + defer fake.updateRuntimeConfigMutex.RUnlock() + fake.uploadReleaseFileMutex.RLock() + defer fake.uploadReleaseFileMutex.RUnlock() + fake.uploadReleaseURLMutex.RLock() + defer fake.uploadReleaseURLMutex.RUnlock() + fake.uploadStemcellFileMutex.RLock() + defer fake.uploadStemcellFileMutex.RUnlock() + fake.uploadStemcellURLMutex.RLock() + defer fake.uploadStemcellURLMutex.RUnlock() + fake.withContextMutex.RLock() + defer fake.withContextMutex.RUnlock() + copiedInvocations := map[string][][]interface{}{} + for key, value := range fake.invocations { + copiedInvocations[key] = value + } + return copiedInvocations +} + +func (fake *BOSHDirector) recordInvocation(key string, args []interface{}) { + fake.invocationsMutex.Lock() + defer fake.invocationsMutex.Unlock() + if fake.invocations == nil { + fake.invocations = map[string][][]interface{}{} + } + if fake.invocations[key] == nil { + fake.invocations[key] = [][]interface{}{} + } + fake.invocations[key] = append(fake.invocations[key], args) +} + +var _ director.Director = new(BOSHDirector) diff --git a/internal/commands/fakes/compile_bosh_release_tarballs.go b/internal/commands/fakes/compile_bosh_release_tarballs.go new file mode 100644 index 000000000..7cbca96e8 --- /dev/null +++ b/internal/commands/fakes/compile_bosh_release_tarballs.go @@ -0,0 +1,129 @@ +// Code generated by counterfeiter. DO NOT EDIT. +package fakes + +import ( + "context" + "log" + "sync" + + "github.com/cloudfoundry/bosh-cli/v7/director" + "github.com/pivotal-cf/kiln/internal/commands" + "github.com/pivotal-cf/kiln/pkg/cargo" +) + +type CompileBOSHReleaseTarballsFunc struct { + Stub func(context.Context, *log.Logger, director.Director, cargo.Stemcell, int, ...cargo.BOSHReleaseTarball) ([]cargo.BOSHReleaseTarball, error) + mutex sync.RWMutex + argsForCall []struct { + arg1 context.Context + arg2 *log.Logger + arg3 director.Director + arg4 cargo.Stemcell + arg5 int + arg6 []cargo.BOSHReleaseTarball + } + returns struct { + result1 []cargo.BOSHReleaseTarball + result2 error + } + returnsOnCall map[int]struct { + result1 []cargo.BOSHReleaseTarball + result2 error + } + invocations map[string][][]interface{} + invocationsMutex sync.RWMutex +} + +func (fake *CompileBOSHReleaseTarballsFunc) Spy(arg1 context.Context, arg2 *log.Logger, arg3 director.Director, arg4 cargo.Stemcell, arg5 int, arg6 ...cargo.BOSHReleaseTarball) ([]cargo.BOSHReleaseTarball, error) { + fake.mutex.Lock() + ret, specificReturn := fake.returnsOnCall[len(fake.argsForCall)] + fake.argsForCall = append(fake.argsForCall, struct { + arg1 context.Context + arg2 *log.Logger + arg3 director.Director + arg4 cargo.Stemcell + arg5 int + arg6 []cargo.BOSHReleaseTarball + }{arg1, arg2, arg3, arg4, arg5, arg6}) + stub := fake.Stub + returns := fake.returns + fake.recordInvocation("CompileBOSHReleaseTarballsFunc", []interface{}{arg1, arg2, arg3, arg4, arg5, arg6}) + fake.mutex.Unlock() + if stub != nil { + return stub(arg1, arg2, arg3, arg4, arg5, arg6...) + } + if specificReturn { + return ret.result1, ret.result2 + } + return returns.result1, returns.result2 +} + +func (fake *CompileBOSHReleaseTarballsFunc) CallCount() int { + fake.mutex.RLock() + defer fake.mutex.RUnlock() + return len(fake.argsForCall) +} + +func (fake *CompileBOSHReleaseTarballsFunc) Calls(stub func(context.Context, *log.Logger, director.Director, cargo.Stemcell, int, ...cargo.BOSHReleaseTarball) ([]cargo.BOSHReleaseTarball, error)) { + fake.mutex.Lock() + defer fake.mutex.Unlock() + fake.Stub = stub +} + +func (fake *CompileBOSHReleaseTarballsFunc) ArgsForCall(i int) (context.Context, *log.Logger, director.Director, cargo.Stemcell, int, []cargo.BOSHReleaseTarball) { + fake.mutex.RLock() + defer fake.mutex.RUnlock() + return fake.argsForCall[i].arg1, fake.argsForCall[i].arg2, fake.argsForCall[i].arg3, fake.argsForCall[i].arg4, fake.argsForCall[i].arg5, fake.argsForCall[i].arg6 +} + +func (fake *CompileBOSHReleaseTarballsFunc) Returns(result1 []cargo.BOSHReleaseTarball, result2 error) { + fake.mutex.Lock() + defer fake.mutex.Unlock() + fake.Stub = nil + fake.returns = struct { + result1 []cargo.BOSHReleaseTarball + result2 error + }{result1, result2} +} + +func (fake *CompileBOSHReleaseTarballsFunc) ReturnsOnCall(i int, result1 []cargo.BOSHReleaseTarball, result2 error) { + fake.mutex.Lock() + defer fake.mutex.Unlock() + fake.Stub = nil + if fake.returnsOnCall == nil { + fake.returnsOnCall = make(map[int]struct { + result1 []cargo.BOSHReleaseTarball + result2 error + }) + } + fake.returnsOnCall[i] = struct { + result1 []cargo.BOSHReleaseTarball + result2 error + }{result1, result2} +} + +func (fake *CompileBOSHReleaseTarballsFunc) Invocations() map[string][][]interface{} { + fake.invocationsMutex.RLock() + defer fake.invocationsMutex.RUnlock() + fake.mutex.RLock() + defer fake.mutex.RUnlock() + copiedInvocations := map[string][][]interface{}{} + for key, value := range fake.invocations { + copiedInvocations[key] = value + } + return copiedInvocations +} + +func (fake *CompileBOSHReleaseTarballsFunc) recordInvocation(key string, args []interface{}) { + fake.invocationsMutex.Lock() + defer fake.invocationsMutex.Unlock() + if fake.invocations == nil { + fake.invocations = map[string][][]interface{}{} + } + if fake.invocations[key] == nil { + fake.invocations[key] = [][]interface{}{} + } + fake.invocations[key] = append(fake.invocations[key], args) +} + +var _ commands.CompileBOSHReleaseTarballsFunc = new(CompileBOSHReleaseTarballsFunc).Spy diff --git a/internal/commands/testdata/compile_bosh_release_tarballs/bpm-1.1.21-ubuntu-xenial-621.463.tgz b/internal/commands/testdata/compile_bosh_release_tarballs/bpm-1.1.21-ubuntu-xenial-621.463.tgz new file mode 100644 index 000000000..e93c250b6 Binary files /dev/null and b/internal/commands/testdata/compile_bosh_release_tarballs/bpm-1.1.21-ubuntu-xenial-621.463.tgz differ diff --git a/internal/commands/testdata/compile_bosh_release_tarballs/bpm-1.1.21.tgz b/internal/commands/testdata/compile_bosh_release_tarballs/bpm-1.1.21.tgz new file mode 100644 index 000000000..40095d7ee Binary files /dev/null and b/internal/commands/testdata/compile_bosh_release_tarballs/bpm-1.1.21.tgz differ diff --git a/internal/test/container.go b/internal/test/container.go index 2d4be70f5..82708d1fe 100644 --- a/internal/test/container.go +++ b/internal/test/container.go @@ -9,6 +9,15 @@ import ( "encoding/json" "errors" "fmt" + "io" + "log" + "net" + "os" + "os/signal" + "path" + "path/filepath" + "strings" + "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/mount" @@ -20,14 +29,6 @@ import ( "github.com/moby/buildkit/session/sshforward/sshprovider" specV1 "github.com/opencontainers/image-spec/specs-go/v1" "golang.org/x/sync/errgroup" - "io" - "log" - "net" - "os" - "os/signal" - "path" - "path/filepath" - "strings" "golang.org/x/crypto/ssh" "golang.org/x/crypto/ssh/agent" diff --git a/main.go b/main.go index b724dd78a..7554560b6 100644 --- a/main.go +++ b/main.go @@ -77,6 +77,8 @@ func main() { commandSet["fetch"] = fetch commandSet["bake"] = commands.NewBake(fs, releasesService, outLogger, errLogger, fetch) + commandSet["compile-bosh-release-tarballs"] = commands.NewCompileBOSHReleaseTarballs() + commandSet["test"] = commands.NewTileTest() commandSet["help"] = commands.NewHelp(os.Stdout, globalFlagsUsage, commandSet) commandSet["version"] = commands.NewVersion(outLogger, version) diff --git a/pkg/cargo/bosh_release.go b/pkg/cargo/bosh_release.go index f42eedfb1..014a2d5a8 100644 --- a/pkg/cargo/bosh_release.go +++ b/pkg/cargo/bosh_release.go @@ -4,22 +4,29 @@ import ( "archive/tar" "archive/zip" "compress/gzip" + "context" "crypto/sha1" + "crypto/sha256" + "crypto/sha512" "encoding/hex" "fmt" "hash" "io" "io/fs" + "log" "os" "path" + "path/filepath" "strings" - - "github.com/pivotal-cf/kiln/pkg/tile" + "time" "golang.org/x/exp/slices" "gopkg.in/yaml.v2" + "github.com/cloudfoundry/bosh-cli/v7/director" + "github.com/pivotal-cf/kiln/pkg/proofing" + "github.com/pivotal-cf/kiln/pkg/tile" ) func ReadBOSHReleaseFromFile(tilePath, releaseName, releaseVersion string, releaseTarball io.Writer) (proofing.Release, error) { @@ -121,6 +128,31 @@ type BOSHReleaseTarball struct { FilePath string } +func ReadBOSHReleaseTarball(tarballPath string) (BOSHReleaseTarball, error) { + file, err := os.Open(tarballPath) + if err != nil { + return BOSHReleaseTarball{}, err + } + defer closeAndIgnoreError(file) + m, err := ReadProductTemplatePartFromBOSHReleaseTarball(file) + if err != nil { + return BOSHReleaseTarball{}, err + } + _, err = file.Seek(0, 0) + if err != nil { + return BOSHReleaseTarball{}, err + } + s, err := calculateChecksum(sha1.New())(file) + if err != nil { + return BOSHReleaseTarball{}, err + } + return BOSHReleaseTarball{ + Manifest: m, + SHA1: s, + FilePath: tarballPath, + }, nil +} + func ReadBOSHReleaseManifestsFromTarballs(dir fs.FS, tarballPaths ...string) ([]BOSHReleaseTarball, error) { results := make([]BOSHReleaseTarball, 0, len(tarballPaths)) for _, tarballPath := range tarballPaths { @@ -195,3 +227,204 @@ func calculateChecksum(h hash.Hash) func(r io.Reader) (string, error) { return hex.EncodeToString(h.Sum(nil)), nil } } + +func CompileBOSHReleaseTarballs(_ context.Context, logger *log.Logger, boshDirector director.Director, sc Stemcell, uploadTries int, tarballs ...BOSHReleaseTarball) ([]BOSHReleaseTarball, error) { + if uploadTries == 0 { + uploadTries = 5 + } + err := ensureBOSHDirectorHasStemcell(sc, boshDirector) + if err != nil { + return nil, err + } + + var releasesToCompile []BOSHReleaseTarball + for _, tarball := range tarballs { + if len(tarball.Manifest.CompiledPackages) > 0 { + return nil, fmt.Errorf("%s/%s (%s) has compiled packages", tarball.Manifest.Name, tarball.Manifest.Version, tarball.FilePath) + } + for try := 1; try <= uploadTries; try++ { + logger.Printf("Uploading BOSH Release %s/%s [try %d]", tarball.Manifest.Name, tarball.Manifest.Version, try) + err = uploadBOSHReleaseTarballToDirector(boshDirector, sc, tarball) + if err != nil { + continue + } + break + } + if err != nil { + return nil, err + } + releasesToCompile = append(releasesToCompile, tarball) + } + + manifest, deploymentName, err := deploymentManifest(releasesToCompile, sc) + if err != nil { + return nil, err + } + + logger.Printf("Deployment Manifest\n%s\n\n", string(manifest)) + + deployment, err := boshDirector.FindDeployment(deploymentName) + if err != nil { + return nil, err + } + + err = deployment.Update(manifest, director.UpdateOpts{}) + if err != nil { + return nil, err + } + + result := make([]BOSHReleaseTarball, 0, len(releasesToCompile)) + for _, tarball := range releasesToCompile { + logger.Printf("Exporting and Downloading BOSH Release %s/%s", tarball.Manifest.Name, tarball.Manifest.Version) + boshReleaseTarball, err := exportAndDownloadBOSHRelease("releases", boshDirector, deployment, tarball, sc) + if err != nil { + return nil, err + } + logger.Printf("finished compiling and exporting %s/%s with stemcell %s/%s", tarball.Manifest.Name, tarball.Manifest.Version, sc.OS, sc.Version) + result = append(result, boshReleaseTarball) + } + return result, nil +} + +func exportAndDownloadBOSHRelease(releasesDirectory string, boshDirector director.Director, deployment director.Deployment, source BOSHReleaseTarball, sc Stemcell) (BOSHReleaseTarball, error) { + releaseMF := source.Manifest + exportFileName := fmt.Sprintf("%s-%s-%s-%s.tgz", releaseMF.Name, releaseMF.Name, sc.OS, sc.Version) + exportFilePath := filepath.Join(filepath.Dir(source.FilePath), exportFileName) + + releaseSlug := director.NewReleaseSlug(releaseMF.Name, releaseMF.Version) + stemcellSlug := director.NewOSVersionSlug(sc.OS, sc.Version) + exportResult, err := deployment.ExportRelease(releaseSlug, stemcellSlug, nil) + if err != nil { + return BOSHReleaseTarball{}, err + } + f, err := os.Create(exportFilePath) + if err != nil { + return BOSHReleaseTarball{}, err + } + defer closeAndIgnoreError(f) + + var ( + downloadCheck = sha1.New() + expectedChecksum = exportResult.SHA1 + ) + if strings.HasPrefix(exportResult.SHA1, "sha256:") { + downloadCheck = sha256.New() + expectedChecksum = strings.TrimPrefix(exportResult.SHA1, "sha256:") + } + if strings.HasPrefix(exportResult.SHA1, "sha512:") { + downloadCheck = sha512.New() + expectedChecksum = strings.TrimPrefix(exportResult.SHA1, "sha512:") + } + mr := io.MultiWriter(f, downloadCheck) + err = boshDirector.DownloadResourceUnchecked(exportResult.BlobstoreID, mr) + if err != nil { + return BOSHReleaseTarball{}, err + } + tarballCheckSum := hex.EncodeToString(downloadCheck.Sum(nil)) + if tarballCheckSum != expectedChecksum { + return BOSHReleaseTarball{}, fmt.Errorf("download checksum does not match expected checksum: %s != %s", tarballCheckSum, exportResult.SHA1) + } + return BOSHReleaseTarball{ + Manifest: releaseMF, + SHA1: tarballCheckSum, + FilePath: exportFilePath, + }, nil +} + +func uploadBOSHReleaseTarballToDirector(boshDirector director.Director, sc Stemcell, tarball BOSHReleaseTarball) error { + release, findReleaseErr := boshDirector.FindRelease(director.NewReleaseSlug(tarball.Manifest.Name, tarball.Manifest.Version)) + if findReleaseErr == nil { + exists, err := release.Exists() + if err != nil { + return err + } + if exists { + directorPackages, err := release.Packages() + if err != nil { + return err + } + for _, pkg := range tarball.Manifest.Packages { + if slices.IndexFunc(directorPackages, func(p director.Package) bool { + return p.Name == pkg.Name && pkg.SHA1 == p.SHA1 && p.Fingerprint == pkg.Fingerprint && slices.IndexFunc(p.CompiledPackages, func(compiledPackage director.CompiledPackage) bool { + return compiledPackage.Stemcell.OS() == sc.OS && compiledPackage.Stemcell.OS() == sc.Version + }) >= 0 + }) < 0 { + break + } + } + } + return findReleaseErr + } + f, err := os.Open(tarball.FilePath) + if err != nil { + return err + } + defer closeAndIgnoreError(f) + return boshDirector.UploadReleaseFile(f, false, false) +} + +func ensureBOSHDirectorHasStemcell(sc Stemcell, boshDirector director.Director) error { + _, err := boshDirector.FindStemcell(director.NewStemcellSlug(sc.OS, sc.Version)) + return err +} + +func deploymentManifest(releases []BOSHReleaseTarball, stemcell Stemcell) ([]byte, string, error) { + type deploymentManifestRelease = struct { + Name string `yaml:"name"` + Version string `yaml:"version"` + SHA1 string `yaml:"sha1"` + } + type deploymentManifestStemcell = struct { + Alias string `yaml:"alias"` + OS string `yaml:"os"` + Version string `yaml:"version"` + } + type deploymentManifestUpdate = struct { + Canaries int `yaml:"canaries"` + MaxInFlight int `yaml:"max_in_flight"` + CanaryWatchTime string `yaml:"canary_watch_time"` + UpdateWatchTime string `yaml:"update_watch_time"` + } + var manifest struct { + Name string `yaml:"name"` + Releases []deploymentManifestRelease `yaml:"releases"` + Stemcells []deploymentManifestStemcell `yaml:"stemcells"` + Update deploymentManifestUpdate `yaml:"update"` + InstanceGroups []interface{} `yaml:"instance_groups"` + } + + manifest.Update = deploymentManifestUpdate{ + Canaries: 1, + MaxInFlight: 1, + CanaryWatchTime: "1000-1001", + UpdateWatchTime: "1000-1001", + } + + if stemcell.Alias == "" { + stemcell.Alias = "default" + } + manifest.Stemcells = []deploymentManifestStemcell{ + { + Alias: stemcell.Alias, + OS: stemcell.OS, + Version: stemcell.Version, + }, + } + + shaSuffix := sha1.New() + + manifest.Releases = make([]deploymentManifestRelease, 0, len(releases)) + for _, r := range releases { + _, _ = io.WriteString(shaSuffix, r.Manifest.Name) + _, _ = io.WriteString(shaSuffix, r.Manifest.CommitHash) + manifest.Releases = append(manifest.Releases, deploymentManifestRelease{ + Name: r.Manifest.Name, + Version: r.Manifest.Version, + SHA1: r.SHA1, + }) + } + checkSum := shaSuffix.Sum(nil) + manifest.Name = fmt.Sprintf("kiln-%s-%d", hex.EncodeToString(checkSum), time.Now().Unix()) + m, err := yaml.Marshal(manifest) + return m, manifest.Name, err +} diff --git a/pkg/cargo/bosh_release_test.go b/pkg/cargo/bosh_release_test.go index a88b44051..0c4582dfc 100644 --- a/pkg/cargo/bosh_release_test.go +++ b/pkg/cargo/bosh_release_test.go @@ -7,14 +7,12 @@ import ( "path/filepath" "testing" - "github.com/pivotal-cf/kiln/pkg/cargo" + . "github.com/onsi/gomega" + "github.com/pivotal-cf/kiln/pkg/cargo" + "github.com/pivotal-cf/kiln/pkg/proofing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - - "github.com/pivotal-cf/kiln/pkg/proofing" - - . "github.com/onsi/gomega" ) func TestReadReleaseFromFile(t *testing.T) { diff --git a/pkg/directorclient/new.go b/pkg/directorclient/new.go new file mode 100644 index 000000000..759bc3d1c --- /dev/null +++ b/pkg/directorclient/new.go @@ -0,0 +1,249 @@ +package directorclient + +import ( + "context" + "crypto/tls" + "errors" + "fmt" + "io" + "log" + "net" + "net/http" + "net/url" + "os" + "reflect" + "strconv" + "strings" + "time" + + "golang.org/x/crypto/ssh" + "golang.org/x/exp/slices" + + "github.com/cloudfoundry/bosh-cli/v7/director" + boshUAA "github.com/cloudfoundry/bosh-cli/v7/uaa" + boshHTTPClient "github.com/cloudfoundry/bosh-utils/httpclient" + boshLog "github.com/cloudfoundry/bosh-utils/logger" +) + +type Configuration struct { + Environment string `env:"BOSH_ENVIRONMENT" yaml:"BOSH_ENVIRONMENT"` + EnvironmentName string `env:"BOSH_ENV_NAME" yaml:"BOSH_ENV_NAME"` + AllProxy string `env:"BOSH_ALL_PROXY" yaml:"BOSH_ALL_PROXY"` + Client string `env:"BOSH_CLIENT" yaml:"BOSH_CLIENT"` + ClientSecret string `env:"BOSH_CLIENT_SECRET" yaml:"BOSH_CLIENT_SECRET"` + CACertificate string `env:"BOSH_CA_CERT" yaml:"BOSH_CA_CERT"` +} + +func New(configuration Configuration) (director.Director, error) { + boshLogger := boshLog.NewLogger(boshLog.LevelError) + + directorConfig, err := director.NewConfigFromURL(configuration.Environment) + if err != nil { + return nil, fmt.Errorf("failed to get director config from BOSH_ENVIRONMENT: %w", err) + } + boshDirectorURL := "https://" + net.JoinHostPort(directorConfig.Host, strconv.Itoa(directorConfig.Port)) + + httpClient, err := configuration.httpClient() + if err != nil { + return nil, fmt.Errorf("failed to configure HTTP client: %w", err) + } + + boshCACert, err := os.ReadFile(configuration.CACertificate) + if err != nil { + log.Fatal(err) + } + + uaa, err := configuration.uaaClient(httpClient, boshLogger, boshDirectorURL, boshCACert) + if err != nil { + log.Fatal(err) + } + + directorConfig.TokenFunc = boshUAA.NewClientTokenSession(uaa).TokenFunc + directorConfig.CACert = string(boshCACert) + + boshFactory := director.NewFactory(boshLogger) + client, err := boshFactory.New(directorConfig, director.NewNoopTaskReporter(), director.NewNoopFileReporter()) + if err != nil { + log.Fatal(err) + } + return client, nil +} + +func (configuration *Configuration) SetFieldsFromEnvironment() error { + v := reflect.ValueOf(configuration).Elem() + + for i := 0; i < v.NumField(); i++ { + if !v.Type().Field(i).IsExported() { + continue + } + v.Field(i).SetString(os.Getenv(v.Type().Field(i).Tag.Get("env"))) + } + + return nil +} + +func (configuration *Configuration) uaaClient(httpClient *http.Client, boshLogger boshLog.Logger, boshDirectorURL string, boshCACert []byte) (boshUAA.UAA, error) { + uaaURL, err := configuration.uaaURL(httpClient, boshLogger, boshDirectorURL) + if err != nil { + return nil, err + } + + uaaClientFactory := boshUAA.NewFactory(boshLogger) + + uaaConfig, err := boshUAA.NewConfigFromURL(uaaURL) + if err != nil { + return nil, err + } + + uaaConfig.CACert = string(boshCACert) + uaaConfig.Client = configuration.Client + uaaConfig.ClientSecret = configuration.ClientSecret + + return uaaClientFactory.New(uaaConfig) +} + +func (configuration *Configuration) uaaURL(httpClient *http.Client, boshLogger boshLog.Logger, boshDirectorURL string) (string, error) { + unAuthedClient := boshHTTPClient.NewHTTPClient(httpClient, boshLogger) + unAuthedDirector := director.NewClient(boshDirectorURL, unAuthedClient, director.NewNoopTaskReporter(), director.NewNoopFileReporter(), boshLogger) + info, err := unAuthedDirector.Info() + if err != nil { + log.Fatalf("could not get basic director info: %s", err) + } + return getAuthURLFromInfo(info) +} + +func (configuration *Configuration) httpClient() (*http.Client, error) { + if configuration.AllProxy == "" { + return boshHTTPClient.DefaultClient, nil + } + + boshAllProxyURL, err := url.Parse(configuration.AllProxy) + if err != nil { + log.Fatalf("failed to parse BOSH_ALL_PROXY: %s", err) + } + if boshAllProxyURL.User == nil { + log.Fatal("username not in BOSH_ALL_PROXY") + } + privateKeyPath := boshAllProxyURL.Query().Get("private-key") + if privateKeyPath == "" { + log.Fatal("required private-key query parameter not in BOSH_ALL_PROXY") + } + privateKey, err := os.ReadFile(privateKeyPath) + if err != nil { + log.Fatalf("failed read BOSH_ALL_PROXY private_key: %s", err) + } + omPrivateKey, err := ssh.ParsePrivateKey(privateKey) + if err != nil { + log.Fatalf("failed to parse private key from OM_PRIVATE_KEY: %s", err) + } + hostKey, err := insecureGetHostKey(omPrivateKey, boshAllProxyURL.User.Username(), boshAllProxyURL.Host) + if err != nil { + log.Fatalf("failed to get host key for proxy host OM_PRIVATE_KEY: %s", err) + } + + socksClient, err := ssh.Dial("tcp", boshAllProxyURL.Host, &ssh.ClientConfig{ + Timeout: 30 * time.Second, + User: boshAllProxyURL.User.Username(), + HostKeyCallback: ssh.FixedHostKey(hostKey), + Auth: []ssh.AuthMethod{ssh.PublicKeys(omPrivateKey)}, + }) + if err != nil { + log.Fatalf("failed to connect to jumpbox: %s", err) + } + + return &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{ + InsecureSkipVerify: true, + }, + DialContext: func(_ context.Context, network, addr string) (net.Conn, error) { + return socksClient.Dial(network, addr) + }, + TLSHandshakeTimeout: 30 * time.Second, + DisableKeepAlives: false, + }, + }, nil +} + +// insecureGetHostKey just returns the key returned by the host and does not +// attempt to ensure the key is from whom it says it is from. +// This is what the BOSH CLI does, so it might be okay. +// Please review this and how the resulting public key is used. +func insecureGetHostKey(signer ssh.Signer, userName, serverURL string) (ssh.PublicKey, error) { + publicKeyChannel := make(chan ssh.PublicKey, 1) + defer close(publicKeyChannel) + + dialErrorChannel := make(chan error) + defer close(dialErrorChannel) + + clientConfig := &ssh.ClientConfig{ + Timeout: time.Minute, + User: userName, + HostKeyCallback: func(_ string, _ net.Addr, key ssh.PublicKey) error { + publicKeyChannel <- key + return nil + }, + Auth: []ssh.AuthMethod{ssh.PublicKeys(signer)}, + } + + go func() { + conn, err := ssh.Dial("tcp", serverURL, clientConfig) + if err != nil { + publicKeyChannel <- nil + dialErrorChannel <- err + return + } + defer closeAndIgnoreError(conn) + dialErrorChannel <- nil + }() + + return <-publicKeyChannel, <-dialErrorChannel +} + +func getAuthURLFromInfo(info director.InfoResp) (string, error) { + v, ok := info.Auth.Options["url"] + if !ok { + return "", errors.New("missing uaa auth url") + } + s, ok := v.(string) + if !ok { + return "", errors.New("uaa auth url has the wrong type") + } + return s, nil +} + +func closeAndIgnoreError(c io.Closer) { + _ = c.Close() +} + +func overrideEnvironmentWithConfigurationStructure(configStructure any, environ []string) []string { + v := reflect.ValueOf(configStructure) + if v.Type().Kind() != reflect.Struct { + panic("expected configStructure to have reflect.Kind reflect.Struct") + } + for fieldIndex := 0; fieldIndex < v.NumField(); fieldIndex++ { + fieldType := v.Type().Field(fieldIndex) + if !fieldType.IsExported() { + continue + } + fieldValue := v.Field(fieldIndex) + envVarNam := fieldType.Tag.Get("env") + if envVarNam == "" { + continue + } + if fieldValue.Kind() != reflect.String { + continue + } + fieldString := fieldValue.String() + updatedElement := strings.Join([]string{envVarNam, fieldString}, "=") + if environIndex := slices.IndexFunc(environ, func(element string) bool { + return strings.HasPrefix(element, envVarNam+"=") + }); environIndex >= 0 { + environ[environIndex] = updatedElement + continue + } else if fieldString != "" { + environ = append(environ, updatedElement) + } + } + return environ +} diff --git a/pkg/directorclient/new_test.go b/pkg/directorclient/new_test.go new file mode 100644 index 000000000..9f46f16d2 --- /dev/null +++ b/pkg/directorclient/new_test.go @@ -0,0 +1,87 @@ +package directorclient + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func Test_overrideEnvironmentWithConfigStructure(t *testing.T) { + t.Run("when the configStructure is not a struct", func(t *testing.T) { + type T map[string]any + + assert.Panics(t, func() { + overrideEnvironmentWithConfigurationStructure(T{}, []string{ + "MELON=watermelon", + }) + }) + }) + + for _, tt := range []struct { + Name string + config any + environ []string + expectedEnviron []string + }{ + { + Name: "when the name-value pairs do not exist in the input slice", + config: struct { + Apple string `env:"APPLE"` + Mango string `env:"MANGO"` + }{ + Apple: "McIntosh", + Mango: "Alphonso", + }, + environ: []string{"MELON=watermelon"}, + expectedEnviron: []string{"MELON=watermelon", "APPLE=McIntosh", "MANGO=Alphonso"}, + }, + { + Name: "when the struct field is not a string", + config: struct { + Orange int `env:"ORANGE"` + }{ + Orange: 5, // the value does not matter + }, + environ: []string{"MELON=watermelon"}, + expectedEnviron: []string{"MELON=watermelon"}, + }, + { + Name: "when the struct field is private", + config: struct { + orange string `env:"ORANGE"` + }{ + orange: "Valencia", + }, + environ: []string{"MELON=watermelon"}, + expectedEnviron: []string{"MELON=watermelon"}, + }, + { + Name: "when the env tag is not set", + config: struct { + Orange string + }{ + Orange: "Naval", + }, + environ: []string{"MELON=watermelon"}, + expectedEnviron: []string{"MELON=watermelon"}, + }, + { + Name: "when environ contains a variable with the same name", + config: struct { + Orange string `env:"ORANGE"` + }{ + Orange: "Naval", + }, + environ: []string{"ORANGE=Valencia"}, + expectedEnviron: []string{"ORANGE=Naval"}, + }, + } { + t.Run(tt.Name, func(t *testing.T) { + require.NotPanics(t, func() { + result := overrideEnvironmentWithConfigurationStructure(tt.config, tt.environ) + assert.Equal(t, tt.expectedEnviron, result) + }) + }) + } +}